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

Python Discussion :

explication code optimisation combinatoir


Sujet :

Python

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Inscrit en
    Mai 2013
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2013
    Messages : 3
    Points : 1
    Points
    1
    Par défaut explication code optimisation combinatoir
    Bonjour, j'ai trouvé une fonction pour le problème de la "somme de sous-ensembles" ou "subset sum" qui fonctionne bien.
    Je ne comprend pas très bien ce qu'est le with_v dans le code. J'aimerais le convertir pour du VBA sur excel.
    Si vous avez une idée? Merci d'avance!

    Voici le code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    def subsetsum(array,num):
     
        if num == 0 or num < 1:
            return None
        elif len(array) == 0:
            return None
        else:
            if array[0] == num:
                return [array[0]]
            else:
                with_v = subsetsum(array[1:],(num - array[0])) 
                if with_v:
                    return [array[0]] + with_v
                else:
                    return subsetsum(array[1:],num)
     
     
     
    print(subsetsum([5,1,3,25,33,55,88,77,33,4,22],10))
    le résultat ici donne : [5,1,4]

  2. #2
    Membre expérimenté Avatar de plxpy
    Homme Profil pro
    Ingénieur géographe
    Inscrit en
    Janvier 2009
    Messages
    792
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur géographe
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2009
    Messages : 792
    Points : 1 481
    Points
    1 481
    Par défaut
    Bonjour,

    with_v est le résultat de la recherche d'un sous-ensemble A PARTIR de l'élément d'indice 1 du tableau courant dont la somme fait num-(valeur de l'élément d'indice 0). Si il y a une solution (différent de None) à cette "sous"-recherche, on met à jour la liste des éléments (solution) avec le premier élément

    Pour rechercher dans [5,1,3,25,33,55,88,77,33,4,22] un sous-ensemble de somme 10, on recherche dans [1,3,25,33,55,88,77,33,4,22] un sous-ensemble de somme 10-5, et pour ... etc ...

    Après, toute la batterie de tests, c'est pour gérer tes appels récursifs à subsetsum et s'arrêter quand/où il faut.
    "La simplicité ne précède pas la complexité, elle la suit." - Alan J. Perlis
    DVP ? Pensez aux cours et tutos, ainsi qu'à la FAQ !

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    Inscrit en
    Mai 2013
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2013
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    Bonjour,

    Merci pour la réponse et pour la rapidité.

    Pouvez-vous me dire ce que signifie: " if with_v:" à la ligne 12. C'est une condition mais il n'y à aucune comparaison, rien.
    Avez-vous une idée de ce que le code pourrais donner en VBA?.

    Merci.

  4. #4
    Membre expérimenté Avatar de plxpy
    Homme Profil pro
    Ingénieur géographe
    Inscrit en
    Janvier 2009
    Messages
    792
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur géographe
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2009
    Messages : 792
    Points : 1 481
    Points
    1 481
    Par défaut
    Citation Envoyé par kenzo1245 Voir le message
    Pouvez-vous me dire ce que signifie: " if with_v:" à la ligne 12. C'est une condition mais il n'y à aucune comparaison, rien.
    Quel que soit le langage, c'est souvent synonyme de "... ne vaut pas l'élément nul", dans le sens le plus large : 0, 0.0, liste vide, chaine vide, ... ou aussi, en Python, None.

    Ici, c'est strictement identique à "if with_v is not None:", vu ce que retourne la fonction.

    Sinon, je ne pense pas que ce soit une bonne idée de traduire "mot à mot" un truc, de Python en VBA. Il faut un minimum comprendre l'algo. Sinon, gare au "sky, my husband !", incompréhensible pour les anglo-saxons !
    "La simplicité ne précède pas la complexité, elle la suit." - Alan J. Perlis
    DVP ? Pensez aux cours et tutos, ainsi qu'à la FAQ !

  5. #5
    Nouveau Candidat au Club
    Homme Profil pro
    Inscrit en
    Mai 2013
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2013
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    OK, merci beaucoup pour toutes ces précisions.J'ai testé le code pas a pas et je pense l'avoir plus ou moins compris.
    Mais pour faire pareil en VBA ça va pas être du gâteau.

    merci et à la prochaine!

Discussions similaires

  1. explication code vba
    Par akmer dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 09/04/2008, 11h12
  2. Complexitée Algorithmique Et Optimisation Combinatoire
    Par zalada dans le forum Algorithmes et structures de données
    Réponses: 2
    Dernier message: 27/12/2007, 11h01
  3. Problème d'optimisation combinatoire. Enfin je crois
    Par Arpivu dans le forum Algorithmes et structures de données
    Réponses: 5
    Dernier message: 30/07/2007, 11h01
  4. explication code
    Par lolothom dans le forum Access
    Réponses: 3
    Dernier message: 03/02/2006, 21h22
  5. explication code
    Par mdevlieg dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 25/01/2005, 09h32

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