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 :

Ajouter des valeurs à une clé existante d'un dictionnaire : Algorithme de Prim


Sujet :

Python

  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2020
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2020
    Messages : 15
    Par défaut Ajouter des valeurs à une clé existante d'un dictionnaire : Algorithme de Prim
    Bonjour, je dois donner l'arbre recouvrant minimum de G et donc j'ai utilisé l'algo de prim. Mais j'arrive pas à ajouter les valeurs correspondant aux sommets voisins de G
    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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
     
    G= {
    'a':{ 'b':1.54 , 'c':2.97} ,
    'b':{ 'a':1.54 , 'f':5 , 'c':10.5} ,
    'c':{ 'a':2.97 , 'b':10.5 , 'f':2.33 , 'e':4.25} ,
    'd':{ 'f':8.01,'e':3.73 } ,
    'e':{ 'c':4.25 , 'd':3.73} ,
    'f':{ 'b':5 , 'c':2.33 , 'd':8.01}
    }
     
    def graphprim(G):
    F=priority_dict()
    for u in G:F[u]=float('inf')
    s=premiersommet(G)
    F[s]=0
    pere[s]=None
    V=dict()
    vu=set()
    while F:
    u=F.pop_smallest()
    vu.add(u)
    for vin G[u]:
    if v not in vu:
    if v in F and G[u][v]<F[v]:
    F[v]=G[u][v] #poids de chaque sommet voisin
    for n in F:
    V[u]=dict({v:F[v]}) #dictionnaire à returner
    for key,value in V.items():
    if pere[value]==key and F[value] != float('inf'):
    V[key][value]=F[value] #ajout de chaque sommet voisin de key existant 
    F.pop_smallest()
     
    return V

  2. #2
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 814
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 814
    Billets dans le blog
    1
    Par défaut
    Bonjour

    Ton code ressemble à du Python mais ce n'en est pas. En tout cas pas du Python exécutable. En tout état de cause, il plante à la ligne 12. Probablement parce qu'il manque des éléments essentiels à sa syntaxe. Et ce n'est pas à cause du priority_dict. Tu aurais écrit F="toto" ça aurait été pareil.
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2020
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2020
    Messages : 15
    Par défaut
    priority_dict est un module qui n'existe pas dans python. Donc voici le code du module:

    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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
     
    # http://code.activestate.com/recipes/522995/
    # https://gist.github.com/matteodellamico/4451520
    # http://code.activestate.com/recipes/522995-priority-dict-a-priority-queue-with-updatable-prio/
     
    # This is free and unencumbered software released into the public domain.
    #
    # Anyone is free to copy, modify, publish, use, compile, sell, or
    # distribute this software, either in source code form or as a compiled
    # binary, for any purpose, commercial or non-commercial, and by any
    # means.
    #
    # In jurisdictions that recognize copyright laws, the author or authors
    # of this software dedicate any and all copyright interest in the
    # software to the public domain. We make this dedication for the benefit
    # of the public at large and to the detriment of our heirs and
    # successors. We intend this dedication to be an overt act of
    # relinquishment in perpetuity of all present and future rights to this
    # software under copyright law.
    #
    # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
    # EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
    # MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
    # IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR
    # OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
    # ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
    # OTHER DEALINGS IN THE SOFTWARE.
    #
    # For more information, please refer to <http://unlicense.org/>
     
    # By Matteo Dell'Amico
     
    from heapq import heapify, heappush, heappop
     
    class priority_dict(dict):
        """Dictionary that can be used as a priority queue.
     
        Keys of the dictionary are items to be put into the queue, and values
        are their respective priorities. All dictionary methods work as expected.
        The advantage over a standard heapq-based priority queue is
        that priorities of items can be efficiently updated (amortized O(1))
        using code as 'thedict[item] = new_priority.'
     
        The 'smallest' method can be used to return the object with lowest
        priority, and 'pop_smallest' also removes it.
     
        The 'sorted_iter' method provides a destructive sorted iterator.
        """
     
        def __init__(self, *args, **kwargs):
            super(priority_dict, self).__init__(*args, **kwargs)
            self._rebuild_heap()
     
        def _rebuild_heap(self):
            self._heap = [(v, k) for k, v in self.items()]
            heapify(self._heap)
     
        def smallest(self):
            """Return the item with the lowest priority.
     
            Raises IndexError if the object is empty.
            """
     
            heap = self._heap
            v, k = heap[0]
            while k not in self or self[k] != v:
                heappop(heap)
                v, k = heap[0]
            return k
     
        def pop_smallest(self):
            """Return the item with the lowest priority and remove it.
     
            Raises IndexError if the object is empty.
            """
     
            heap = self._heap
            v, k = heappop(heap)
            while k not in self or self[k] != v:
                v, k = heappop(heap)
            del self[k]
            return k
     
        def __setitem__(self, key, val):
            # We are not going to remove the previous value from the heap,
            # since this would have a cost O(n).
     
            super(priority_dict, self).__setitem__(key, val)
     
            if len(self._heap) < 2 * len(self):
                heappush(self._heap, (val, key))
            else:
                # When the heap grows larger than 2 * len(self), we rebuild it
                # from scratch to avoid wasting too much memory.
                self._rebuild_heap()
     
        def setdefault(self, key, val):
            if key not in self:
                self[key] = val
                return val
            return self[key]
     
        def update(self, *args, **kwargs):
            # Reimplementing dict.update is tricky -- see e.g.
            # http://mail.python.org/pipermail/python-ideas/2007-May/000744.html
            # We just rebuild the heap from scratch after passing to super.
     
            super(priority_dict, self).update(*args, **kwargs)
            self._rebuild_heap()
     
        def sorted_iter(self):
            """Sorted iterator of the priority dictionary items.
     
            Beware: this will destroy elements as they are returned.
            """
     
            while self:
                yield self.pop_smallest()

  4. #4
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 814
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 814
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par momo199 Voir le message
    Citation Envoyé par Sve@r Voir le message
    Et ce n'est pas à cause du priority_dict. Tu aurais écrit F="toto" ça aurait été pareil.
    priority_dict est un module qui n'existe pas dans python. Donc voici le code du module:
    Quel mot tu ne comprends pas dans "ce n'est pas à cause du priority_dict" ???
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  5. #5
    Invité de passage
    Femme Profil pro
    Étudiant
    Inscrit en
    Décembre 2021
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 25
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2021
    Messages : 1
    Par défaut salut, dis-moi stp, t'as pu ecrire l'algorithme? si oui j'ai besoin de ton aide
    Citation Envoyé par momo199 Voir le message
    Bonjour, je dois donner l'arbre recouvrant minimum de G et donc j'ai utilisé l'algo de prim. Mais j'arrive pas à ajouter les valeurs correspondant aux sommets voisins de G
    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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
     
    G= {
    'a':{ 'b':1.54 , 'c':2.97} ,
    'b':{ 'a':1.54 , 'f':5 , 'c':10.5} ,
    'c':{ 'a':2.97 , 'b':10.5 , 'f':2.33 , 'e':4.25} ,
    'd':{ 'f':8.01,'e':3.73 } ,
    'e':{ 'c':4.25 , 'd':3.73} ,
    'f':{ 'b':5 , 'c':2.33 , 'd':8.01}
    }
     
    def graphprim(G):
    F=priority_dict()
    for u in G:F[u]=float('inf')
    s=premiersommet(G)
    F[s]=0
    pere[s]=None
    V=dict()
    vu=set()
    while F:
    u=F.pop_smallest()
    vu.add(u)
    for vin G[u]:
    if v not in vu:
    if v in F and G[u][v]<F[v]:
    F[v]=G[u][v] #poids de chaque sommet voisin
    for n in F:
    V[u]=dict({v:F[v]}) #dictionnaire à returner
    for key,value in V.items():
    if pere[value]==key and F[value] != float('inf'):
    V[key][value]=F[value] #ajout de chaque sommet voisin de key existant 
    F.pop_smallest()
     
    return V

Discussions similaires

  1. [Débutant] Ajouter des valeurs à une liste situé dans une classe
    Par MPothin dans le forum Windows Forms
    Réponses: 1
    Dernier message: 27/08/2014, 15h05
  2. [Débutant] Ajouter des valeurs à une matrice (en conservant la matrice de base)
    Par nilsmatlab dans le forum MATLAB
    Réponses: 38
    Dernier message: 17/06/2011, 18h27
  3. Ajouter des valeurs à une option de compilation
    Par kkt8 dans le forum Eclipse Platform
    Réponses: 1
    Dernier message: 06/04/2011, 08h00
  4. Ajouter des valeurs à une listbox multicolonnes
    Par bobosh dans le forum VBA Access
    Réponses: 1
    Dernier message: 08/10/2008, 09h23
  5. ajouter des valeurs à une liste déroulante
    Par Simon2 dans le forum IHM
    Réponses: 3
    Dernier message: 30/07/2007, 23h59

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