IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Algorithmes et structures de données Discussion :

Recherche somme minimum


Sujet :

Algorithmes et structures de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    développeur
    Inscrit en
    Octobre 2004
    Messages
    481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : développeur
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Octobre 2004
    Messages : 481
    Par défaut Recherche somme minimum
    Je génère de nombreuses matrices contenant des nombres.
    Je cherche la matrice dont la somme des éléments soit le minimum possible.
    Avec une difficulté supplémentaire : selon la valeur de la somme sur une ligne donnée, le résultat à prendre en compte peut être minoré.

    J'ai fait un algorithme qui, pour chaque matrice, parcourt systématiquement chaque ligne pour vérifier la condition, calcule la somme et si cette somme est inférieure à celle stockée temporairement, on conserve la matrice et ainsi de suite.

    Pour quelques dizaines de matrice, c'est supportable.
    Mais comme il arrive que j'ai plusieurs centaines de milliers de matrices, le temps de calcul explose

    Je précise que je code en python.

    Existe-t-il une fonction python qui permet de calculer la somme des éléments d'une matrice ?
    J'ai pensé modifier l'algorithme en arrêtant le calcul en cours pour une matrice dès que la somme cumulée des lignes dépasse le minimum stockée en mémoire, mais cela ajoute autant de comparaison que de lignes à la place d'une seule comparaison à la fin du calcul pour la matrice : pas sûr que ce soit efficace.

    Pour que ce soit plus clair, voici un exemple avec 2 matrices.

    [1,2,3]
    [0,0,0]

    [1,2,0]
    [0,0,5]

    Premier calcul :
    1 + 2 + 3 = 6
    0 + 0 + 0 = 0
    6 + 0 = 6
    On stocke cette valeur et la matrice en temporaire.

    Second calcul :
    1 + 2 + 0 = 3
    0 + 0 + 5 = 5
    3 + 5 = 8
    On compare à la valeur stockée en temporaire : supérieure, on ne retient pas.

    Second calcul avec condition :
    1 + 2 + 0 = 3
    0 + 0 + 5 = 5 --- Condition : Somme > 4 : on retire 3 --> 5 - 3 = 2
    3 + 2 = 5
    On compare à la valeur stockée en mémoire : inférieure, on retient et on stocke dans le temporaire.

    Connaissez-vous un algorithme plus rapide et/ou plus simple ?

  2. #2
    Membre Expert Avatar de Nemerle
    Inscrit en
    Octobre 2003
    Messages
    1 106
    Détails du profil
    Informations personnelles :
    Âge : 55

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 106
    Par défaut
    déjà, pourquoi ne travailles-tu pas avec des vecteurs de sommes de ligne?

    Les éléments de tes matrices ont quelle grandeur?

  3. #3
    Membre éclairé
    Homme Profil pro
    développeur
    Inscrit en
    Octobre 2004
    Messages
    481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : développeur
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Octobre 2004
    Messages : 481
    Par défaut
    Citation Envoyé par Nemerle Voir le message
    déjà, pourquoi ne travailles-tu pas avec des vecteurs de sommes de ligne?
    J'ai une vague idée de ce que ça pourrait être, mais peux-tu préciser ?

    Citation Envoyé par Nemerle Voir le message
    Les éléments de tes matrices ont quelle grandeur?
    Ben là, ça dépend des données entrées par l'utilisateur. Minimum 2x2, maximum pas défini pour l'instant.

  4. #4
    Rédacteur
    Avatar de Zavonen
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 772
    Détails du profil
    Informations personnelles :
    Âge : 77
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 772
    Par défaut
    télécharge les librairies numpy et scipy.
    Ce qu'on trouve est plus important que ce qu'on cherche.
    Maths de base pour les nuls (et les autres...)

  5. #5
    Membre Expert Avatar de Nemerle
    Inscrit en
    Octobre 2003
    Messages
    1 106
    Détails du profil
    Informations personnelles :
    Âge : 55

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 106
    Par défaut
    Citation Envoyé par senacle Voir le message
    Ben là, ça dépend des données entrées par l'utilisateur. Minimum 2x2, maximum pas défini pour l'instant.
    na, je demandais juste la taille de tes entiers: de 1 à 10, 1 à 100,1 à 10^10...?

    >>Zavonen: pour ma culture, numpy a une fct directe??

  6. #6
    Rédacteur
    Avatar de Zavonen
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 772
    Détails du profil
    Informations personnelles :
    Âge : 77
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 772
    Par défaut
    >>Zavonen: pour ma culture, numpy a une fct directe??
    J'utilise surtout les deux bibliothèques comme support de matplotlib pour faire toutes mes figures. En réponse à ta question je dirais au 'feeling' plutôt oui.
    numpy+scipy+matplotlib offre des possibilités voisines à celles de matlab
    Si le sujet t'intéresse réellemnt je ne peux que t'orienter vers la doc officielle.
    http://www.scipy.org/Documentation
    Ce qu'on trouve est plus important que ce qu'on cherche.
    Maths de base pour les nuls (et les autres...)

  7. #7
    Membre éclairé
    Homme Profil pro
    développeur
    Inscrit en
    Octobre 2004
    Messages
    481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : développeur
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Octobre 2004
    Messages : 481
    Par défaut
    Citation Envoyé par Nemerle Voir le message
    na, je demandais juste la taille de tes entiers: de 1 à 10, 1 à 100,1 à 10^10...?
    S'il s'agit du contenu des matrices, j'ai pris des entiers pour l'exemple, mais en fait, c'est plutôt des réels maximum 9 999,99.

  8. #8
    Membre éclairé
    Homme Profil pro
    développeur
    Inscrit en
    Octobre 2004
    Messages
    481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : développeur
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Octobre 2004
    Messages : 481
    Par défaut
    Pour numpy et scipy, j'ai commencé à regardé et j'ai trouvé une fonction qui permet d'avoir la somme des éléments d'une ligne.

    Mais là, c'est plutôt l'outil.

    Par rapport à la question initiale, existe-t-il un algorithme plus simple que le mien ?

Discussions similaires

  1. pbk de requete sur 2 tables : recherche de minimum
    Par juzii dans le forum Langage SQL
    Réponses: 30
    Dernier message: 27/08/2008, 14h54
  2. Recherche de minimum global
    Par nini94 dans le forum MATLAB
    Réponses: 2
    Dernier message: 19/08/2008, 12h10
  3. Recherche du minimum d'une fonction sur un intervalle
    Par jschutz dans le forum Mathématiques
    Réponses: 6
    Dernier message: 18/03/2008, 14h25
  4. [Débutant] Recherche de minimum non nul dans une matrice
    Par sebastien69 dans le forum MATLAB
    Réponses: 2
    Dernier message: 05/06/2007, 16h00
  5. recherche du minimum dans un vector
    Par javamax dans le forum Collection et Stream
    Réponses: 2
    Dernier message: 22/10/2006, 09h43

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo