ISN
Algorithmique
Arbre & Graphe en Python
Resp. UE : P-F. Bonnefoi, http://ishtar.msi.unilim.fr/, « Arbre & Graphe en Python » version du 1er septembre 2011, rédigé avec ConT
EXt – Don’t Panic !1/2
Arbre
Soit l’arbre suivant :
A
B
E F
C D
G
On va le représenter en Python sous forme de listes imbriquées :
1arbre = [’A’,[
2[’B’,[
3[’E’,[]],
4[’F’,[]]
5]
6], # fin de B
7[’C’, []], # fin de C
8[’D’,[
9[’G’,[]]
10 ]
11 ] # fin de D
12 ]
13 ]
C-à-d que :
?chaque sous-arbre sera sous forme d’une liste :
[sommet , [ liste sous arbre ] ]
?une feuille est notée sous la forme :
[feuille , []]
Une fois cette notation adoptée, les algorithmes de parcours s’écrivent très simplement :
Parcours récursif en profondeur d’abord
1def ParcoursArbreRecursif(racine):
2sommet = racine[0]
3enfants = racine[1]
4print sommet
5for noeud in enfants:
6ParcoursArbreRecursif(noeud)
8ParcoursArbreRecursif(arbre)
Parcours itératif en largeur
1def ParcoursArbreIteratif(racine):
2while file_sommets:
3arbre_courant = file_sommets.pop(0)
4sommet_courant = arbre_courant[0]
5enfants_courant = arbre_courant[1]
6print sommet_courant
7for enfant in enfants_courant:
8if enfant:
9file_sommets.append(enfant)
11 file_sommets = [arbre]
12 ParcoursArbreIteratif(arbre)
Resp. UE : P-F. Bonnefoi, http://ishtar.msi.unilim.fr/, « Arbre & Graphe en Python » version du 1er septembre 2011, rédigé avec ConT
EXt – Don’t Panic !2/2
Graphes
Soit le graphe suivant :
A
BC
D
On va le représenter en Python sous forme d’un dictionnaire Py-
thon :
1dico_graph = { ’A’ : [’B’], ’B’ : [’A’,’C’,’D’],
’C’:[’B’,’D’], ’D’:[’B’,’C’]}
C-à-d que :
?chaque association du dictionnaire est une paire (sommet, liste
d’adjacence) ;
?les clés sont les noms des sommets ce qui permet un accès
direct au travers du dictionnaire.
Une fois cette notation adoptée, les algorithmes de parcours s’écrivent très simplement :
Parcours récursif en profondeur d’abord
1def TraverserDepuisRecursive(graphe,sommet):
2sommets_visites.append(sommet)
3print sommet
4for voisin in graphe[sommet]:
5if (not voisin in sommets_visites):
6TraverserDepuisRecursive(graphe, voisin)
8sommets_visites = []
9TraverserDepuisRecursive(dico_graph, ’A’)
Parcours itératif en largeur
1def TraverserDepuisIterative(graphe,sommet):
2sommets_a_visiter = [sommet]
3while sommets_a_visiter:
4sommet_courant = sommets_a_visiter.pop(0)
5if (not sommet_courant in sommets_visites):
6sommets_visites.append(sommet_courant)
7print sommet_courant
8sommets_a_visiter.extend(graphe[sommet_courant])
10 sommets_visites = []
11 TraverserDepuisIterative(dico_graph, ’A’)
1 / 2 100%
La catégorie de ce document est-elle correcte?
Merci pour votre participation!

Faire une suggestion

Avez-vous trouvé des erreurs dans linterface ou les textes ? Ou savez-vous comment améliorer linterface utilisateur de StudyLib ? Nhésitez pas à envoyer vos suggestions. Cest très important pour nous !