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 :

aide pour utilisation des classes et des attributs


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2016
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Juin 2016
    Messages : 8
    Par défaut aide pour utilisation des classes et des attributs
    Bonjour,
    Voici le code de l'algorithme de dijsktra et je souhaiterais intégrer des classes, des attributs dedans mais je ne sais pas quelle classe faire, quels objets et attributs créer pour que cela soit utile.
    Je sais bien que c'est dans l'autre sens que l'on réfléchit mais on m'a imposé de travailler avec des classes après que le code soit déjà rédigé.
    Merci de votre aide,

    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
    # -*- coding: utf-8 -*-
    # Dijkstra
     
    graphe = [[],[2,1,4,7],[1,1,5,1],[4,1,7,3,5,1],[1,7,3,1],[6,2,2,1,3,1],[5,2,7,3,8,1,9,4],[3,3,8,1,6,3],[6,1,7,1,9,2],[6,4,8,2],[2,1,3,1,11,3],[5,1,10,3]]
     
     
    def recupere(Liste, sommet):
        """récupère l'indice dans la liste d'un sommet, s'il est présent"""
        if len(Liste)>0:
            for k in range(len(Liste)):
                if Liste[k][0]== sommet:
                    return True, k
        return False, -1
     
    def mini(Liste):
        """ renvoie l'indice du minimum dans la liste"""
        minim = Liste[0][1]
        indice = 0
        for k in range(len(Liste)):
            if minim> Liste[k][1]:
                minim = Liste[k][1]
                indice = k
        return minim, indice
     
    def Dijkstra(G, depart, arrivee):
        solution =[]
        optimal = [[depart, 0, []]]
        atteint = []
        nbtotal = len(G)
        fini = False
        while not fini:
            sommet , distance, precedent = optimal[-1] #on prend le dernier sommet étudié dans la liste optimal
            nb = len(graphe[sommet])//2 # C'est le nombre de sommets qu'on peut atteindre à partir de ce sommet
            if nb>0:
                for k in range(0, 2*nb, 2):
                    s = graphe[sommet][k] # on étudie le sommet s
                    test, indice = recupere(optimal, s) 
                    if not test : # si le sommet n'est pas déjà dans optimal
                        test, indice = recupere(atteint, s)
                        if test : # on regarde s'il a été atteint déjà
                            if atteint[indice][1] >  distance + graphe[sommet][k+1]:
                                atteint[indice][1] = distance + graphe[sommet][k+1] # on améliore le chemin
                                atteint[indice][2] = sommet # on réinitialise la façon de l'atteindre
                        else :
                            atteint.append([s, distance + graphe[sommet][k+1], sommet]) # on le rajoute dans les sommets atteints
     
                #on s'intéresse au nouveau sommet de chemin minimal qu'on vient de trouver
                minim, indice = mini(atteint)
                info = atteint.pop(indice)#on le supprime des sommets atteints en récupérant les informatiosn le concernant
                optimal.append(info) # on le rajoute aux sommets de chemin optimal
                if info[0]==arrivee:
                    L = reconstruit_chemin(optimal,depart,arrivee)
                    fini = True
                if len(atteint)==0:
                    fini = True
        return L
     
     
    def reconstruit_chemin(optimal, depart, arrivee):
        sommet = arrivee
        L=[arrivee]
        while sommet!=depart:
            test, indice = recupere(optimal, sommet)
            L.append(optimal[indice][2])
            sommet=optimal[indice][2]
        L.reverse()
        return L

  2. #2
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 736
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 736
    Par défaut
    Salut,

    Citation Envoyé par paxapaxa Voir le message
    Voici le code de l'algorithme de dijsktra et je souhaiterais intégrer des classes, des attributs dedans mais je ne sais pas quelle classe faire, quels objets et attributs créer pour que cela soit utile.
    Je sais bien que c'est dans l'autre sens que l'on réfléchit mais on m'a imposé de travailler avec des classes après que le code soit déjà rédigé.
    Ben, vous pouvez exprimer en classes qu'un Graph est composé de Node et de Edge... et définir les attributs intéressants pour faire fonctionner l'algo. avec cette distribution des rôles.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

Discussions similaires

  1. aide pour utilisation des sr sous pl7pro
    Par jherve dans le forum Automation
    Réponses: 5
    Dernier message: 19/04/2012, 17h35
  2. Réponses: 5
    Dernier message: 06/05/2009, 16h08
  3. Utiliser des packages ou des classes présents sur le net
    Par lionrouge dans le forum Général Java
    Réponses: 2
    Dernier message: 27/09/2006, 06h09
  4. Utilisation de setTimeout avec des classes : BUG!
    Par seb-oulba dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 01/09/2006, 09h43
  5. Besoin d'aide pour utilisation des trie
    Par bluecurve dans le forum Langage
    Réponses: 4
    Dernier message: 29/11/2005, 08h04

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