structures de données ift-2000 abder alikacem les graphes semaine 5 département dinformatique et...
TRANSCRIPT
![Page 1: Structures de données IFT-2000 Abder Alikacem Les graphes Semaine 5 Département dinformatique et de génie logiciel Édition Septembre 2009](https://reader036.vdocuments.pub/reader036/viewer/2022062511/551d9da7497959293b8d8ede/html5/thumbnails/1.jpg)
Structures de donnéesIFT-2000
Abder AlikacemAbder Alikacem
Les graphes
Semaine 5
Département d’informatique et de génie logiciel
Édition Septembre 2009
![Page 2: Structures de données IFT-2000 Abder Alikacem Les graphes Semaine 5 Département dinformatique et de génie logiciel Édition Septembre 2009](https://reader036.vdocuments.pub/reader036/viewer/2022062511/551d9da7497959293b8d8ede/html5/thumbnails/2.jpg)
Première partie
• Introduction• Nomenclature des graphes• Matrice de connectivité• Clôture transitive: algorithme de Warshall• Plus court chemin: algorithme de Floyd
4
25
3
1
![Page 3: Structures de données IFT-2000 Abder Alikacem Les graphes Semaine 5 Département dinformatique et de génie logiciel Édition Septembre 2009](https://reader036.vdocuments.pub/reader036/viewer/2022062511/551d9da7497959293b8d8ede/html5/thumbnails/3.jpg)
Les graphes
Modélisent quoi au juste ?• cartes géographiques : réseaux routiers, de téléphonie, etc.• trajets d’autobus, de trains, d’avions, de commis voyageurs• circuits électriques, réseaux électriques• Gestion d’une ville (transport, feux tricolore, voies à sens unique
etc..)• Etc..
4
25
3
1
![Page 4: Structures de données IFT-2000 Abder Alikacem Les graphes Semaine 5 Département dinformatique et de génie logiciel Édition Septembre 2009](https://reader036.vdocuments.pub/reader036/viewer/2022062511/551d9da7497959293b8d8ede/html5/thumbnails/4.jpg)
Graphe (orienté) G = (S, A)S ensemble fini des sommetsA S x S ensemble des arcs,
i.e., relation sur S
Graphe non orienté G = (S, A)A ensemble des arêtes, relation symétrique
S = { 1, 2, 3, 4, 5 }A = { (1, 2), (1, 3), (2, 3), (3, 2), (4, 4), (4, 5) }
1
2
3
4
5
1 4
2
3
S = { 1, 2, 3, 4 }A = { {1, 2}, {1, 3}, {1, 4}, {2, 4} }
Les graphes: définitions
![Page 5: Structures de données IFT-2000 Abder Alikacem Les graphes Semaine 5 Département dinformatique et de génie logiciel Édition Septembre 2009](https://reader036.vdocuments.pub/reader036/viewer/2022062511/551d9da7497959293b8d8ede/html5/thumbnails/5.jpg)
Les graphes : définitions
• Graphe G (S,A), un graphe orienté (digraphe)• S = {1,2,3,4,5}, A = {1-5,2-1,2-4,4-1,4-3,5-4}
• adjacence d’un nœud V si 1 arc V-W y est relié• chemin suite d’arcs où le dernier d’une paire est le
premier de la paire suivante (chemins simples)• <2-4> et <2-1,1-5,5-4> = 2 chemins de 2 à 4
• ordre d’un chemin nombre d’arcs le composant
4
25
3
1
![Page 6: Structures de données IFT-2000 Abder Alikacem Les graphes Semaine 5 Département dinformatique et de génie logiciel Édition Septembre 2009](https://reader036.vdocuments.pub/reader036/viewer/2022062511/551d9da7497959293b8d8ede/html5/thumbnails/6.jpg)
Les graphes : définitions
• ordre de sortie d’un nœud (arité de sortie)• ordre d’entrée d’un nœud (arité d’entrée) = degré d’un
sommet• circuit chemin où l’origine est égale au dernier nœud
• ex. : <4-1,1-5,5-4>• boucle circuit d’ordre 1• graphe acyclique graphe ne contenant aucun circuit• puits nœud dont l’arité de sortie est 0• source nœud dont l’arité d’entrée est 0• nœud indépendant arité d’entrée = arité de sortie = 0
4
25
3
1
![Page 7: Structures de données IFT-2000 Abder Alikacem Les graphes Semaine 5 Département dinformatique et de génie logiciel Édition Septembre 2009](https://reader036.vdocuments.pub/reader036/viewer/2022062511/551d9da7497959293b8d8ede/html5/thumbnails/7.jpg)
Les graphes : définitions
Graphe connexe :• en oubliant le sens des flèches, un graphe est
connexe s’il existe un chemin entre toutes paires de nœuds
• sinon : graphe à composantes connexes
4
25
3
1
4
25
3
1
![Page 8: Structures de données IFT-2000 Abder Alikacem Les graphes Semaine 5 Département dinformatique et de génie logiciel Édition Septembre 2009](https://reader036.vdocuments.pub/reader036/viewer/2022062511/551d9da7497959293b8d8ede/html5/thumbnails/8.jpg)
Graphe fortement connexe : en tenant compte du sens des flèches, un graphe est
fortement connexe s’il existe un chemin entre toutes paires de nœuds
Ce graphe comporte 5 composantes fortement connexes
Les graphes : définitions
![Page 9: Structures de données IFT-2000 Abder Alikacem Les graphes Semaine 5 Département dinformatique et de génie logiciel Édition Septembre 2009](https://reader036.vdocuments.pub/reader036/viewer/2022062511/551d9da7497959293b8d8ede/html5/thumbnails/9.jpg)
Points d’articulation
Ce graphe non orienté est connexe, c'est-à-dire formé d'une seule composante.
Ce graphe contient quatre points d'articulation, c'est-à-dire un sommet qui, s'il est éliminé, “ casse ” le graphe en deux ou plusieurs morceaux.
Ces points d’articulation sont :
A qui déconnecte B H qui déconnecte I J qui déconnecte K G qui produit 3 composantes.
Un graphe qui ne possède pas de points d’articulation est appelé bi-connexe (ou 2-connexe)
Les graphes : définitions
![Page 10: Structures de données IFT-2000 Abder Alikacem Les graphes Semaine 5 Département dinformatique et de génie logiciel Édition Septembre 2009](https://reader036.vdocuments.pub/reader036/viewer/2022062511/551d9da7497959293b8d8ede/html5/thumbnails/10.jpg)
Les graphes : définitions
à chaque arc valeur (numérique)
4
25
3
10.5
0.2
0.8
0.75 1
14
25
3
1type-de
mange
sur
saveurà-côté
près
à chaque arc valeur (nominale)
Graphe pondéré (valué)
Les graphes orientés et pondérés sont appelés des réseaux
![Page 11: Structures de données IFT-2000 Abder Alikacem Les graphes Semaine 5 Département dinformatique et de génie logiciel Édition Septembre 2009](https://reader036.vdocuments.pub/reader036/viewer/2022062511/551d9da7497959293b8d8ede/html5/thumbnails/11.jpg)
Les graphes : définitions
• Graphe pondéré : à chaque arc valeur (nominale)• Graphe décoré (étiqueté) : à chaque nœud valeur
lasagne
chattapis
pepperoni
paillassontype-de
mange
sur
saveurà-côté
près
![Page 12: Structures de données IFT-2000 Abder Alikacem Les graphes Semaine 5 Département dinformatique et de génie logiciel Édition Septembre 2009](https://reader036.vdocuments.pub/reader036/viewer/2022062511/551d9da7497959293b8d8ede/html5/thumbnails/12.jpg)
Opérations importantes
Connectivité • Existe-t-il un chemin entre V et W ?
• Quel est le chemin le plus court entre V et W ?
• avec chaque arc valeur de 1 ?• avec un graphe pondéré ?
4
25
3
1
4
25
3
1
4
25
3
1
•Est-ce qu’un graphe g’ est inclus dans un autre graphe g ?
![Page 13: Structures de données IFT-2000 Abder Alikacem Les graphes Semaine 5 Département dinformatique et de génie logiciel Édition Septembre 2009](https://reader036.vdocuments.pub/reader036/viewer/2022062511/551d9da7497959293b8d8ede/html5/thumbnails/13.jpg)
Explorations Parcours en profondeur, en largeur Tri topologique Composantes fortement connexes, ...
Recherche de chemins Clôture transitive (algorithme de Warshall) Chemin de coût minimal (algorithme de Floyd, Dijkstra,
Bellman-Ford) ...
Arbres recouvrants : Algorithmes de Kruskal et Prim
Réseaux de transport Flot maximal (algorithme de Ford-Fulkerson)
Divers Coloration d'un graphe ...
Algorithmique des graphes
![Page 14: Structures de données IFT-2000 Abder Alikacem Les graphes Semaine 5 Département dinformatique et de génie logiciel Édition Septembre 2009](https://reader036.vdocuments.pub/reader036/viewer/2022062511/551d9da7497959293b8d8ede/html5/thumbnails/14.jpg)
En général, il existe 2 manières pour mettre un graphe en mémoire:
Par chaînage Listes des successeurs
Dans une matrice Matrice de nœuds adjacents
Implantation
![Page 15: Structures de données IFT-2000 Abder Alikacem Les graphes Semaine 5 Département dinformatique et de génie logiciel Édition Septembre 2009](https://reader036.vdocuments.pub/reader036/viewer/2022062511/551d9da7497959293b8d8ede/html5/thumbnails/15.jpg)
1
1
2
2 3123
1
1
22
2
3
28 35123
1
2 3
2
5
2
83
1
2 3
S = { 1, 2, 3 }A = { (1,1), (1, 2), (1, 3), (2, 1), (3, 2)}
Listes des successeurs
Exemple
![Page 16: Structures de données IFT-2000 Abder Alikacem Les graphes Semaine 5 Département dinformatique et de génie logiciel Édition Septembre 2009](https://reader036.vdocuments.pub/reader036/viewer/2022062511/551d9da7497959293b8d8ede/html5/thumbnails/16.jpg)
S = { 1, 2, 3 }A = { (1,1), (1, 2), (1, 3), (2, 1), (3, 2)}
0 1 1M = 1 0 0 0 1 0
V = 0 8 53 0 2 0
M [ i, j ] = 1 ssi j adjacent à i
1
2 3
5
2
83
1
2 3
Matrices d’adjacences
Exemple
![Page 17: Structures de données IFT-2000 Abder Alikacem Les graphes Semaine 5 Département dinformatique et de génie logiciel Édition Septembre 2009](https://reader036.vdocuments.pub/reader036/viewer/2022062511/551d9da7497959293b8d8ede/html5/thumbnails/17.jpg)
Opérations importantes
• graphe orienté
4
25
3
1
1
1 1
1 1
1
1 2 3 4 51
2
3
4
5
Matrice d’adjacence
• graphe non orienté
4
25
3
1
1
1 1
1 1
1
1 2 3 4 51
2
3
4
5 1
1 1
1
1
1
![Page 18: Structures de données IFT-2000 Abder Alikacem Les graphes Semaine 5 Département dinformatique et de génie logiciel Édition Septembre 2009](https://reader036.vdocuments.pub/reader036/viewer/2022062511/551d9da7497959293b8d8ede/html5/thumbnails/18.jpg)
Opérations importantes
• arité de sortie
4
25
3
1
1
1 1
1 1
1
1 2 3 4 51
2
3
4
5
1
2
0
2
1
Matrice d’adjacence
• arité d’entrée
1
1 1
1 1
1
1 2 3 4 51
2
3
4
52 0 1 2 1
![Page 19: Structures de données IFT-2000 Abder Alikacem Les graphes Semaine 5 Département dinformatique et de génie logiciel Édition Septembre 2009](https://reader036.vdocuments.pub/reader036/viewer/2022062511/551d9da7497959293b8d8ede/html5/thumbnails/19.jpg)
Opérations importantes
• puits
1
1 1
1 1
1
1 2 3 4 51
2
3
4
5
1
2
0
2
1
4
25
3
1
Matrice d’adjacence
• source
1
1 1
1 1
1
1 2 3 4 51
2
3
4
52 0 1 2 1
![Page 20: Structures de données IFT-2000 Abder Alikacem Les graphes Semaine 5 Département dinformatique et de génie logiciel Édition Septembre 2009](https://reader036.vdocuments.pub/reader036/viewer/2022062511/551d9da7497959293b8d8ede/html5/thumbnails/20.jpg)
Opérations importantes
• boucle
4
25
3
1
1
1 1
1 1
1
1 2 3 4 51
2
3
4
5
Matrice d’adjacence
![Page 21: Structures de données IFT-2000 Abder Alikacem Les graphes Semaine 5 Département dinformatique et de génie logiciel Édition Septembre 2009](https://reader036.vdocuments.pub/reader036/viewer/2022062511/551d9da7497959293b8d8ede/html5/thumbnails/21.jpg)
Opérations importantes
• chemins de longueur 1 = A
4
25
3
1
1
1 1
1 1
1
1 2 3 4 51
2
3
4
5
Matrice d’adjacence
![Page 22: Structures de données IFT-2000 Abder Alikacem Les graphes Semaine 5 Département dinformatique et de génie logiciel Édition Septembre 2009](https://reader036.vdocuments.pub/reader036/viewer/2022062511/551d9da7497959293b8d8ede/html5/thumbnails/22.jpg)
Opérations importantes
• chemins de longueur 2 ?
4
25
3
1
1
1 1
1 1
1
1 2 3 4 51
2
3
4
5
1
1 1
1 1
1
1 2 3 4 51
2
3
4
5
Matrice d’adjacence
![Page 23: Structures de données IFT-2000 Abder Alikacem Les graphes Semaine 5 Département dinformatique et de génie logiciel Édition Septembre 2009](https://reader036.vdocuments.pub/reader036/viewer/2022062511/551d9da7497959293b8d8ede/html5/thumbnails/23.jpg)
Opérations importantes
• chemins de longueur 2 ?
4
25
3
1
1
1 1
1 1
1
1 2 3 4 51
2
3
4
5
1
1 1
1 1
1
1 2 3 4 51
2
3
4
5
Matrice d’adjacence
![Page 24: Structures de données IFT-2000 Abder Alikacem Les graphes Semaine 5 Département dinformatique et de génie logiciel Édition Septembre 2009](https://reader036.vdocuments.pub/reader036/viewer/2022062511/551d9da7497959293b8d8ede/html5/thumbnails/24.jpg)
1
1 1
1 1
1
1 2 3 4 51
2
3
4
5
1
1 1
1 1
1
1 2 3 4 51
2
3
4
5
1 2 3 4 51
2
3
4
5
4
25
3
1
Chemins de longueur 2
![Page 25: Structures de données IFT-2000 Abder Alikacem Les graphes Semaine 5 Département dinformatique et de génie logiciel Édition Septembre 2009](https://reader036.vdocuments.pub/reader036/viewer/2022062511/551d9da7497959293b8d8ede/html5/thumbnails/25.jpg)
1
1 1
1 1
1
1 2 3 4 51
2
3
4
5
1
1 1
1 1
1
1 2 3 4 51
2
3
4
5
1 2 3 4 51
2
3
4
5
4
25
3
1 1
1 1 1
1
1 1
Chemins de longueur 2 = A2
![Page 26: Structures de données IFT-2000 Abder Alikacem Les graphes Semaine 5 Département dinformatique et de génie logiciel Édition Septembre 2009](https://reader036.vdocuments.pub/reader036/viewer/2022062511/551d9da7497959293b8d8ede/html5/thumbnails/26.jpg)
1
1 1
1 1
1
1 2 3 4 51
2
3
4
5
1
1 1
1 1
1
1 2 3 4 51
2
3
4
5
1 2 3 4 51
2
3
4
5
4
25
3
1 1
1 1 1
1
1 1
xChemins de longueur 3
![Page 27: Structures de données IFT-2000 Abder Alikacem Les graphes Semaine 5 Département dinformatique et de génie logiciel Édition Septembre 2009](https://reader036.vdocuments.pub/reader036/viewer/2022062511/551d9da7497959293b8d8ede/html5/thumbnails/27.jpg)
1
1 1
1 1
1
1 2 3 4 51
2
3
4
5
1 2 3 4 51
2
3
4
5
4
25
3
1
1 2 3 4 51
2
3
4
5
1
1 1 1
1
1 1
1 1
1 1
1
1
Chemins de longueur 3 = A3
![Page 28: Structures de données IFT-2000 Abder Alikacem Les graphes Semaine 5 Département dinformatique et de génie logiciel Édition Septembre 2009](https://reader036.vdocuments.pub/reader036/viewer/2022062511/551d9da7497959293b8d8ede/html5/thumbnails/28.jpg)
Fermeture transitive des graphes
Définition
Soit G un graphe orienté de n noeuds.
Soit A la matrice de nœuds adjacents correspondant.
Soit Bn-1 = A + A2 + A3 … + An-1
la matrice P est appelée fermeture ou clôture transitive du graphe G (dans notre cas, on a une clôture par produits de matrices).
Complexité ?
Bn-1 P : matrice de booléens qui indique s’il existe un chemin entre toutes paires de nœuds
![Page 29: Structures de données IFT-2000 Abder Alikacem Les graphes Semaine 5 Département dinformatique et de génie logiciel Édition Septembre 2009](https://reader036.vdocuments.pub/reader036/viewer/2022062511/551d9da7497959293b8d8ede/html5/thumbnails/29.jpg)
Exemple
graphe G graphe H
1 2
3
4
1 2
3
4
Fermeture transitive des graphes
H : la fermeture transitive de A.
![Page 30: Structures de données IFT-2000 Abder Alikacem Les graphes Semaine 5 Département dinformatique et de génie logiciel Édition Septembre 2009](https://reader036.vdocuments.pub/reader036/viewer/2022062511/551d9da7497959293b8d8ede/html5/thumbnails/30.jpg)
Algorithme de Warshall{Soit A, un graphe orienté}
1. [Initialisation]P A
2. [Boucle sur tous les sommets intermédiaires]Pour k = 1, 2, ..., n répéter jusqu'à l'étape 4.
3. [Boucle sur les sommets de départ]Pour i = 1, 2, ..., n répéter l'étape 4.
4. [Boucle sur les sommets adjacents]Pour j = 1, 2, ..., n répéterPij Pij ou (Pik et Pkj)
5. [Fin de l'algorithme]Stop
Algorithme de Warshall
Complexité ?
![Page 31: Structures de données IFT-2000 Abder Alikacem Les graphes Semaine 5 Département dinformatique et de génie logiciel Édition Septembre 2009](https://reader036.vdocuments.pub/reader036/viewer/2022062511/551d9da7497959293b8d8ede/html5/thumbnails/31.jpg)
P0 = 0 1 0 1 0 0 1 0 0 1 0 1 1 1 0 0
P1 =
P2 =
P3 =
P4 =
34
1 2
0 1 0 1 0 0 1 0 0 1 0 1 1 1 0 1
0 1 1 1 0 0 1 0 0 1 1 1 1 1 1 1
0 1 1 1 0 1 1 1 0 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
Algorithme deWarshall
34
1 2
34
1 2
34
1 2
34
1 2
![Page 32: Structures de données IFT-2000 Abder Alikacem Les graphes Semaine 5 Département dinformatique et de génie logiciel Édition Septembre 2009](https://reader036.vdocuments.pub/reader036/viewer/2022062511/551d9da7497959293b8d8ede/html5/thumbnails/32.jpg)
pour k = 1 à n faire
pour i = 1 à n faire
pour j = 1 à n faire
C [i, j] MIN { C [i, j] , C [i, k] + C [k, j] } ;
k c
i b a
k j
MIN { a, b + c }Ck =
i ja
kb c
Algorithme de Floyd
![Page 33: Structures de données IFT-2000 Abder Alikacem Les graphes Semaine 5 Département dinformatique et de génie logiciel Édition Septembre 2009](https://reader036.vdocuments.pub/reader036/viewer/2022062511/551d9da7497959293b8d8ede/html5/thumbnails/33.jpg)
P0 = 0 1 0 1 0 0 1 0 0 1 0 1 1 1 0 0
P1 =
P2 =
P3 =
P4 =
34
1 2 0 1 0 1 0 0 1 0 0 1 0 1 1 1 0 1
0 1 1 1 0 0 1 0 0 1 1 1 1 1 1 1
0 1 1 1 0 1 1 1 0 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
Warshall
P0 = 1 1 1 1 1 1 1
P1 =
P2 =
P3 =
P4 =
1 1 1 1 1 1 1 2 1 2 1 1 1 2 1 1 1 2 2
1 2 1 2 1 2 1 2 1 1 1 2 2
2 1 2 1 3 2 1 2 2 1 2 1 1 1 2 2
Floyd
P 1 =
P 2 =
P 3 =
P 4 =
0 1 0 1 0 0 1 0 0 1 0 1 1 1 0 0
1 1 1 0 0 1 0 1 1 1 1 0 0 1 1 1
0 2 1 2 1 1 1 0 0 2 1 2 1 2 1 1
2 3 2 1 0 2 1 2 2 3 2 1 1 3 2 2
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
2 1 2 1 3 2 1 2 2 1 2 1 1 1 2 2
C
A
L
C
U
L
M
A
T
R
I
C
I
E
L
![Page 34: Structures de données IFT-2000 Abder Alikacem Les graphes Semaine 5 Département dinformatique et de génie logiciel Édition Septembre 2009](https://reader036.vdocuments.pub/reader036/viewer/2022062511/551d9da7497959293b8d8ede/html5/thumbnails/34.jpg)
Algorithme de Floyd{Soit A, un graphe orienté.}
1. [Initialisation]C A
2. [Boucle sur les sommets intermédiaires]Pour k = 1, 2, ..., n répéter jusqu'à l'étape 4.
3. [Boucle sur les sommets de départ]Pour i = 1, 2, ..., n répéter l'étape 4.
4. [Boucle sur les sommets adjacents]Pour j = 1, 2, ..., n répéterCij MIN (Cij , Cik + Ckj)
5. [Fin de l'algorithme]Stop
Algorithme de Floyd
Complexité ?
![Page 35: Structures de données IFT-2000 Abder Alikacem Les graphes Semaine 5 Département dinformatique et de génie logiciel Édition Septembre 2009](https://reader036.vdocuments.pub/reader036/viewer/2022062511/551d9da7497959293b8d8ede/html5/thumbnails/35.jpg)
C0 = W =
9
240 78
1
0 1 8 0 4 7 0 9 0 2 0
C1 = 0 1 8 0 4 7 0 9 0 1 0
C2 = 0 1 5 8 0 4 7 0 9 0 1 5 0
C3 = 0 1 5 8 0 4 13 7 0 9 0 1 5 0
C4 = 0 1 5 8 13 0 4 13 9 7 0 9 0 1 5 0
34
1 2
Matrice des poids :
W [i,j] = 0 si i = jv((i,j)) si (i, j) A sinon
Algorithme de Floyd et les distances
![Page 36: Structures de données IFT-2000 Abder Alikacem Les graphes Semaine 5 Département dinformatique et de génie logiciel Édition Septembre 2009](https://reader036.vdocuments.pub/reader036/viewer/2022062511/551d9da7497959293b8d8ede/html5/thumbnails/36.jpg)
C0 = W =
0 1 8 0 4 7 0 9 0 2 0
C1 = 0 1 8 0 4 7 0 9 0 1 0
C2 = 0 1 5 8 0 4 7 0 9 0 1 5 0
C3 = 0 1 5 8 0 4 13 7 0 9 0 1 5 0
C4 = 0 1 5 8 13 0 4 13 9 7 0 9 0 1 5 0
- 1 - 1 - - 2 - - 3 - 3 4 4 - -
P1 =
P2 =
P3 =
P4 =
P0 =
- 1 - 1 - - 2 - - 3 - 3 4 1 - -
- 1 2 1 - - 2 - - 3 - 3 4 1 2 -
- 1 2 1 - - 2 3 - 3 - 3 4 1 2 -
- 1 2 1 4 - 2 3 4 3 - 3 4 1 2 -
9
240 78
1
34
1 2
Matrice des prédécesseurs Pk [i, j] = prédécesseur de j sur un plus court chemin de i à j dont les sommets intermédiaires sont tous k
Algorithme de Floyd et les chemins
![Page 37: Structures de données IFT-2000 Abder Alikacem Les graphes Semaine 5 Département dinformatique et de génie logiciel Édition Septembre 2009](https://reader036.vdocuments.pub/reader036/viewer/2022062511/551d9da7497959293b8d8ede/html5/thumbnails/37.jpg)
C4 = 0 1 5 8 13 0 4 13 9 7 0 9 0 1 5 0
P4 =
- 1 2 1 4 - 2 3 4 3 - 3 0 1 2 -
Exemple de chemin
distance de 2 à 1 = C4[2,1] = 13
P4[2,1] = 4 ; P4[2,4] = 3 ; P4[2,3] = 2 ;
2 34
49
10
9
240 7
8
1
34
1 2
Algorithme de Floyd
![Page 38: Structures de données IFT-2000 Abder Alikacem Les graphes Semaine 5 Département dinformatique et de génie logiciel Édition Septembre 2009](https://reader036.vdocuments.pub/reader036/viewer/2022062511/551d9da7497959293b8d8ede/html5/thumbnails/38.jpg)
Deuxième partie
• Parcours d’un graphe par contagion (ou largeur)• Parcours d’un graphe par sondage (ou profondeur)• Description d’un graphe en terme de type abstrait• Implantation
4
2
5
3
1
![Page 39: Structures de données IFT-2000 Abder Alikacem Les graphes Semaine 5 Département dinformatique et de génie logiciel Édition Septembre 2009](https://reader036.vdocuments.pub/reader036/viewer/2022062511/551d9da7497959293b8d8ede/html5/thumbnails/39.jpg)
De nombreux algorithmes relatifs aux graphes nécessitent une procédure qui permet l'examen systématique des noeuds et des arêtes (arcs) d'un graphe G donné, une et une seule fois.
La procédure consiste à classer les sommets en 3 catégories:
• La catégorie A des sommets déjà visités.• La catégorie B des sommets adjacents à ceux de la catégorie
A mais pas encore visités (sommets qui peuvent être atteints).• La catégorie C des sommets invisibles qui n'ont pas encore
été rencontrés du tout (qui ne peuvent pas être atteints depuis un sommet déjà visité).
Défilement d’un graphe
![Page 40: Structures de données IFT-2000 Abder Alikacem Les graphes Semaine 5 Département dinformatique et de génie logiciel Édition Septembre 2009](https://reader036.vdocuments.pub/reader036/viewer/2022062511/551d9da7497959293b8d8ede/html5/thumbnails/40.jpg)
Les différentes variantes de parcours dépendront de la manière dont on fait passer les sommets de la catégorie C à la catégorie B et de la B dans la A.
On construit l'état initial en plaçant le sommet de départ dans la catégorie B et tous les autres dans la catégorie C.
On répète alors :
faire passer un sommet x de la catégorie B à la catégorie A; mettre dans la catégorie B tous les sommets de catégorie C
adjacents à x.
Marquer les nœuds (Petit-Poucet)
Il existe deux manières standard d'exécuter ces opérations: Parcours par contagion ou par largeur Breadth-First Search
ou BFS Parcours par sondage ou en profondeur(Depth-First Search
ou DFS)
![Page 41: Structures de données IFT-2000 Abder Alikacem Les graphes Semaine 5 Département dinformatique et de génie logiciel Édition Septembre 2009](https://reader036.vdocuments.pub/reader036/viewer/2022062511/551d9da7497959293b8d8ede/html5/thumbnails/41.jpg)
Au cours de l'exécution de nos algorithmes, chaque noeud N de G sera dans l'un des trois états suivants :
STATUS = 1 : (Prêt) État initial du noeud N
STATUS = 2 : (Attente) Le noeud N est soit empilé, soit dans la file d'attente, en attente d'être traité.
STATUS = 3 : (Traité) Le noeud N a été traité.
Marquer les nœuds (Petit-Poucet)
Noter qu’au lieu de marquer les nœuds par 1, 2 ou 3, peut simplement le faireen utilisant un booléen:
•vrai : le nœud est soit traité soit en attente d’être traité (status =1 ou 2)•Faux: le nœud n’a pas été parcouru (status = 1)
![Page 42: Structures de données IFT-2000 Abder Alikacem Les graphes Semaine 5 Département dinformatique et de génie logiciel Édition Septembre 2009](https://reader036.vdocuments.pub/reader036/viewer/2022062511/551d9da7497959293b8d8ede/html5/thumbnails/42.jpg)
A
BCF
D
J K
GE
Exemple
Défilement d’un graphe
![Page 43: Structures de données IFT-2000 Abder Alikacem Les graphes Semaine 5 Département dinformatique et de génie logiciel Édition Septembre 2009](https://reader036.vdocuments.pub/reader036/viewer/2022062511/551d9da7497959293b8d8ede/html5/thumbnails/43.jpg)
Parcours par contagion
Questions • Est-ce que tout graphe peut être parcouru par
cet algorithme ?
4
2
5
3
1
4
2
5
3
1
• Comment modifier l’algorithme pour que tout graphe soit parcouru ?
• Comment est-ce que l’algorithme s’arrêtera ?
• Pourquoi est-ce que ça marche bien pour trouver le chemin le plus court ?
• Quelle est la complexité de l’algorithme de parcours par largeur?L’algorithme prend un temps O(n+m)
![Page 44: Structures de données IFT-2000 Abder Alikacem Les graphes Semaine 5 Département dinformatique et de génie logiciel Édition Septembre 2009](https://reader036.vdocuments.pub/reader036/viewer/2022062511/551d9da7497959293b8d8ede/html5/thumbnails/44.jpg)
Parcours par sondage
Questions
• Peut-on parcourir tout un graphe avec ce type de parcours ?
• Est-ce que ce parcours peut être utilisé pour trouver le chemin le plus court ?
• Quelle est la complexité de l’algorithme de parcours en profondeur?
L’algorithme prend un temps O(n+m)
![Page 45: Structures de données IFT-2000 Abder Alikacem Les graphes Semaine 5 Département dinformatique et de génie logiciel Édition Septembre 2009](https://reader036.vdocuments.pub/reader036/viewer/2022062511/551d9da7497959293b8d8ede/html5/thumbnails/45.jpg)
Spécifications de l’interface du type Graphe
Description en termes de types abstraits
1. ajouter un sommet à un graphe 2. ajouter un arc/arête à un graphe3. ôter un sommet du graphe et tous les arcs/arêtes associés4. ôter un arc/arête 5. consulter un sommet 6. voir si un chemin existe entre 2 sommets7. trouver le chemin le plus court (# arêtes/arcs, distance)8. trouver tous les chemins entre 2 sommets• Etc..
![Page 46: Structures de données IFT-2000 Abder Alikacem Les graphes Semaine 5 Département dinformatique et de génie logiciel Édition Septembre 2009](https://reader036.vdocuments.pub/reader036/viewer/2022062511/551d9da7497959293b8d8ede/html5/thumbnails/46.jpg)
Implantation
Il existe deux principales méthodes de modélisation des graphes en tant que type abstrait:
les matrices et les listes dites de connectivité ou d'adjacence.
Le choix entre elles se fera en fonction de la densité du graphe. Par densité, on entend la proportion d'arcs effectifs par rapport au nombre maximum d'arcs ou d’arêtes possibles:
NbArcs / NbSommets2 dans le cas de graphe orienté.NbAretes / (NbSommets(NbSommets-1)/2) dans le cas d’un graphe non orienté
![Page 47: Structures de données IFT-2000 Abder Alikacem Les graphes Semaine 5 Département dinformatique et de génie logiciel Édition Septembre 2009](https://reader036.vdocuments.pub/reader036/viewer/2022062511/551d9da7497959293b8d8ede/html5/thumbnails/47.jpg)
Interface
template <typename T>class Graphe {public:/** Constructeur (graphe vide)*/ Graphe(); /** Constructeur à partir des sommets et arcs/arêtes*/ Graphe(vector<T> sommets, vector<Arete> aretes); Graphe (const Graphe&); Graphe(const Graphe&g, const std::vector<T>&sommets); ~Graphe (); Graphe& operator = (const Graphe&); void ajouterSommet(const T& s); void ajouterArc (const T& s1, const T& S2); void enleverArc (const T& s1, const T& s2); void enleverSommet ( const T& s); bool sommetExiste(const T& s) const; int nbSommets() const; // etc... private: //…
class Arete{public: int u; int v; Arete(int u, int v) {this->u = u; this->v = v; }}
class Sommet{public: …getData(); void setData(..); //etc..
private: … data; int no; int tag; bool pres;}
![Page 48: Structures de données IFT-2000 Abder Alikacem Les graphes Semaine 5 Département dinformatique et de génie logiciel Édition Septembre 2009](https://reader036.vdocuments.pub/reader036/viewer/2022062511/551d9da7497959293b8d8ede/html5/thumbnails/48.jpg)
Classe Graphe
template <typename T>class Graphe {public: //..private:
int nbSommets;T* sommets;
int **mat; //implémentation dans une matrice} // de sommets adjacents
4
25
3
1
Cas d’un graphe orienté
Implantation dans une matrice d’adjacence
![Page 49: Structures de données IFT-2000 Abder Alikacem Les graphes Semaine 5 Département dinformatique et de génie logiciel Édition Septembre 2009](https://reader036.vdocuments.pub/reader036/viewer/2022062511/551d9da7497959293b8d8ede/html5/thumbnails/49.jpg)
Classe Graphe
template <typename T>class Graphe {public: //..private:
int nbSommets;T* sommets;
int **mat; // trop de perte mémoire!!
}
Cas d’un graphe non orienté
4
25
3
1
Implantation dans une matrice d’adjacence
Linéariser la matrice
![Page 50: Structures de données IFT-2000 Abder Alikacem Les graphes Semaine 5 Département dinformatique et de génie logiciel Édition Septembre 2009](https://reader036.vdocuments.pub/reader036/viewer/2022062511/551d9da7497959293b8d8ede/html5/thumbnails/50.jpg)
Classe Graphe
template <typename T>class Graphe {public: //..private:
int nbSommets;T* sommets;
int *mat; // tableau à une dimension
}
Cas d’un graphe non orienté
4
25
3
1
Implantation dans une matrice d’adjacence
1
1 1
1 1
1
0
1
2
3
4 1
1 1
1
1
1
11 11 11
( i + 1 ) * i / 2 + j
![Page 51: Structures de données IFT-2000 Abder Alikacem Les graphes Semaine 5 Département dinformatique et de génie logiciel Édition Septembre 2009](https://reader036.vdocuments.pub/reader036/viewer/2022062511/551d9da7497959293b8d8ede/html5/thumbnails/51.jpg)
STL : Standard Template Library
Conteneurs: En C++, une classe contenant un ensemble d’éléments d'un certain type est appelée conteneur. Ce sont donc eux qui contiendront les informations que l’on veut stocker.
Itérateurs: utilisés pour parcourir les items qui se retrouvent dans les conteneurs, ils jouent un peu le rôle de pointeurs sur des éléments d’un conteneur.
Algorithmes: utilisés pour faire des traitements sur les éléments qui se retrouvent dans les conteneurs.
http://www.sgi.com/tech/stl/
![Page 52: Structures de données IFT-2000 Abder Alikacem Les graphes Semaine 5 Département dinformatique et de génie logiciel Édition Septembre 2009](https://reader036.vdocuments.pub/reader036/viewer/2022062511/551d9da7497959293b8d8ede/html5/thumbnails/52.jpg)
Conteneurs Séquentiels
vector: tableau dynamique - extensible
- accès direct en O(1)- insertions et retraits à la fin en O(1)- insertions et retraits lents au milieu
list: liste doublement chaînée- insertions et retraits n’importe où en O(1)
- accès au début et à la fin en O(1)- accès lent aux autres éléments
STL : Standard Template Library
http://www.sgi.com/tech/stl/
![Page 53: Structures de données IFT-2000 Abder Alikacem Les graphes Semaine 5 Département dinformatique et de génie logiciel Édition Septembre 2009](https://reader036.vdocuments.pub/reader036/viewer/2022062511/551d9da7497959293b8d8ede/html5/thumbnails/53.jpg)
Liste (list) et vecteur (vector)
Méthodes communes à vector et listpush_back():Ajoute x à la fin du conteneur. pop_back(): Enlève le dernier objet du conteneurback(): Retourne l'objet situé à la fin du conteneurfront(): Retourne l'objet situé au début du conteneur
Pour les conteneurs de type list seulementpush_front(): Ajoute x au début du conteneurpop_front(): Enlève le premier objet du conteneur
Pour les conteneurs de type vector seulement
operator[] : Retourne l'objet situé à la position i du conteneurat (): Comme le précédent mais déclenche une exception out of range lorsqu'un indice est incorrect.resize(): Redéfini la taille du conteneurcapacity(): Retourne la capacité du conteneurreserve(): Redéfini la capacité du conteneu
![Page 54: Structures de données IFT-2000 Abder Alikacem Les graphes Semaine 5 Département dinformatique et de génie logiciel Édition Septembre 2009](https://reader036.vdocuments.pub/reader036/viewer/2022062511/551d9da7497959293b8d8ede/html5/thumbnails/54.jpg)
Les itérateurs
Un itérateur peut être vu comme un pointeur sur un élément d’un conteneur.
Chaque conteneur fourni un type d’itérateur.
Exemple le type list<int> donne un itérateur de type :
list<int> :: iterator.
Tous les conteneurs offrent les mêmes fonctions de base permettant aux itérateurs d’accéder aux éléments:
begin() retourne un itérateur pointant au premier élément du conteneur
end() retourne un itérateur pointant après le dernier élément du conteneur
![Page 55: Structures de données IFT-2000 Abder Alikacem Les graphes Semaine 5 Département dinformatique et de génie logiciel Édition Septembre 2009](https://reader036.vdocuments.pub/reader036/viewer/2022062511/551d9da7497959293b8d8ede/html5/thumbnails/55.jpg)
Les itérateurs
#include <list>#include <iostream> using namespace std;
int main( ) { list <int> list1;
for (int i = 1; i<=40; i++) list1.push_back(i+i);
list <int> :: iterator i; //reverse_iterator //const_iterator
for (i = list1.begin( ); i!=list1.end( ); i++) cout <<*i << “ “ ; return 0 ;}
Les principaux opérateurs sont * donnant accès à la valeur, ++ et -- pour incrémenter et décrémenter une valeur.
-Opérateur * : Retourne l’élément de la position courante
-Opérateur ++ : Fait pointer l’itérateur à l’élément suivant
-Opérateur == : Indique si 2 itérateurs pointent sur le même élément
-Opérateur = : Assigne un itérateur
![Page 56: Structures de données IFT-2000 Abder Alikacem Les graphes Semaine 5 Département dinformatique et de génie logiciel Édition Septembre 2009](https://reader036.vdocuments.pub/reader036/viewer/2022062511/551d9da7497959293b8d8ede/html5/thumbnails/56.jpg)
Retour à la classe Graphe
template <typename T>class Graphe {public: //..private:
vector<T> sommets; // Les sommets vector< vector<int> > voisins; // Les sommets adjacents
}
Implantation dans une matrice d’adjacence
Utilisation de vector de la STL
![Page 57: Structures de données IFT-2000 Abder Alikacem Les graphes Semaine 5 Département dinformatique et de génie logiciel Édition Septembre 2009](https://reader036.vdocuments.pub/reader036/viewer/2022062511/551d9da7497959293b8d8ede/html5/thumbnails/57.jpg)
Classe Graphe
template <typename T>class Graphe { public: //.. private:
private:class Noeud{ public:
T data; /* au lieu de T data, on peut avoir T* ou int */Noeud * suivant; /* chaînage des sommets adjacents */
};/* le noeud typique du graphe */int nbSommet; /* nombre de sommets dans le graphe */int nbSommetMax; /* nombre total possible de sommets */T * sommet; /* tableau représentant les sommets*/Noeud** listeSommet; /* les listes de sommets adjacents*/
}
Implantation dans une liste de sommets adjacents
2 3123
1
1
2
1
2 3
![Page 58: Structures de données IFT-2000 Abder Alikacem Les graphes Semaine 5 Département dinformatique et de génie logiciel Édition Septembre 2009](https://reader036.vdocuments.pub/reader036/viewer/2022062511/551d9da7497959293b8d8ede/html5/thumbnails/58.jpg)
Classe Graphe
template <typename T>class Graphe { public: //.. private:
class Noeud { public: T data; //données
// dans un sommet list<int> voisins; };
vector<Noeud> listeSommets;}
Implantation dans une liste de sommets adjacents
Utilisation de vector et list de la STL
![Page 59: Structures de données IFT-2000 Abder Alikacem Les graphes Semaine 5 Département dinformatique et de génie logiciel Édition Septembre 2009](https://reader036.vdocuments.pub/reader036/viewer/2022062511/551d9da7497959293b8d8ede/html5/thumbnails/59.jpg)
Classe Graphe
Implantation dans une liste de sommets adjacents
Cas d’un graphe non orienté
La liste des sommets adjacents
soufre de la même redondance que
nous avons rencontrer avec les matrices de sommets adjacents.
![Page 60: Structures de données IFT-2000 Abder Alikacem Les graphes Semaine 5 Département dinformatique et de génie logiciel Édition Septembre 2009](https://reader036.vdocuments.pub/reader036/viewer/2022062511/551d9da7497959293b8d8ede/html5/thumbnails/60.jpg)
Classe Graphe
template <typename T>class Graphe { public: //.. private:
class AreteNode { public:
int sommet[2]; AreteNode * lien[2];
}; typedef AreteNode * AretePtr;
class Noeud { public: T data; AretePtr first; };vector<Noeud> listeSommets;
}
Cas d’un graphe non orienté
Solution: liste des arêtes
BB
4
![Page 61: Structures de données IFT-2000 Abder Alikacem Les graphes Semaine 5 Département dinformatique et de génie logiciel Édition Septembre 2009](https://reader036.vdocuments.pub/reader036/viewer/2022062511/551d9da7497959293b8d8ede/html5/thumbnails/61.jpg)
2 3123
1
2 3
Laboratoire #5
template <typename T>class Graphe {public:
//Les méthodes publiques
private:
class Noeud { public:
T sommet; /*!< l'étiquette d'un sommet */Noeud * suivant; /*!< pour le chaînage dans les listes de noeuds adjacents */
};
int nbNoeud; /*!< nombre de sommets dans le graphe */ int nbNoeudMax; /*!< nombre total possible de sommets */ T * tableauSommet; /*!< tableau représentant les sommets (i.e. les étiquettes)*/ Noeud** listeNoeud; /*!< structure pour les listes de noeuds adjacents*/
};
1
1
2
![Page 62: Structures de données IFT-2000 Abder Alikacem Les graphes Semaine 5 Département dinformatique et de génie logiciel Édition Septembre 2009](https://reader036.vdocuments.pub/reader036/viewer/2022062511/551d9da7497959293b8d8ede/html5/thumbnails/62.jpg)
Exercice
Gestion d’une seule file• insertion se fait selon la priorité• éléments toujours triés selon leur priorité
in
file
41 84 1in
file
11 44 8
Files prioritaires
![Page 63: Structures de données IFT-2000 Abder Alikacem Les graphes Semaine 5 Département dinformatique et de génie logiciel Édition Septembre 2009](https://reader036.vdocuments.pub/reader036/viewer/2022062511/551d9da7497959293b8d8ede/html5/thumbnails/63.jpg)
Exercice
p1
pile
debutcpt
cpt
tab
suiv
nœud... en-tête(header)
114 4 3
Pile, modèle hybride