Download - Graphes - univ-brest.fr
L.L. - Graphes 1
Graphes
Laurent [email protected]
http://www.lisyc.univ-brest.fr/pages_perso/lemarch/Cours
L.L. - Graphes 2
Relations
● Relation entre 2 entités
– Plus petit que– Fait avant– Exécuté par– ....
● Graphiquement :
PaulEst père de
relationssymétriques
ou non
Kevin Graphe !
L.L. - Graphes 3
Relations symétriques
● Relation entre 2 entités
– Se connaissent
● Généralisation : réseau social
Paulconnait
Kevin
Degré moyen=
nombre de Dunbar=
125
L.L. - Graphes 4
Historiquement (1)Ponts de Konigsberg (Euler, 1736)
● Ville sur 2 iles, reliées par un pont, et reliées aux rives.
● Passer sur tous les ponts 1 et 1 seule fois et revenir à son point de départ
http://www.wikipedia.org
L.L. - Graphes 5
Historiquement (2)Ponts de Konigsberg (Euler, 1736)
● Revient à trouver un cycle eulérien : chaine passant une et une seule fois par toutes les arêtes
● Impossible si sommets de degré impair
http://www.wikipedia.org
L.L. - Graphes 6
Parcours eulériens et hamiltoniens● Recherche de cycles
– Eulériens : passant une et une seule fois sur chaque arête
– Hamiltoniens : passant une et une seule fois par chaque sommet
● Problèmes associés
– Recherche de cycle eulérien de longueur minimale – Postier Chinois : cycle de longueur minimale
passant au moins une fois sur chaque arête– Voyageur de Commerce : cycle hamiltonien de
longueur minimale
L.L. - Graphes 7
Parcours eulérien● Théorème d'Euler
Un multigraphe admet un parcours eulérien ssi il est connexe et possède 0 ou 2 sommets de degré impair
● Exemple
– Dessiner l'enveloppe sans lever le crayon ni repasser plusieurs fois sur un trait
– Postier chnois : on peut repasser sur un trait
L.L. - Graphes 8
Parcours hamiltonien● Recherche de cycle hamiltionien de longueur
minimale : le Problème du Voyageur de Commerce
htt
p:/
/ww
w.c
s.b
erk
ele
y.e
du/~
bon
ach
ea
L.L. - Graphes 9
Quelques applicationsCartographie
● Trajets
– Par où ?– Quel coût ?
● Routages
– Géographie– Internet
● Cycles hamiltoniens : Voyageur de commerce
● Cycles eulériens :Postier chinois
L.L. - Graphes 10
Quelques applicationsCircuits électriques
● Noeuds d'un réseau électrique
● Lois de kirchoff
– Conservation de l'énergie
– Conservation de la charge
L.L. - Graphes 11
Quelques applicationsRéseau sémantique
●La notion de soleil est elle reliée à celle de tomate ?● Applications en recherche web
L.L. - Graphes 12
Quelques applicationsGestion de projets
● Réaliser des tâches
– Dépendances – Durées
● Temps global ?
L.L. - Graphes 13
Quelques applicationsGénéalogie
● Graphes particuliers : arbres
● Affectations génétiques
L.L. - Graphes 14
L.L. - Graphes 15
Quelques applicationsGraphes probalistes
● Chaines de Markov
– des poids des arcs= 1
– Transitions probabilistes– Proba d'un état ?
● Ex : pageRank – Surf lien local ou autre ?– Ex : 16% choix local– Classement des pages
http://www.apmep.asso.fr
Après calculs ...P(A) = 34%P(B) = 18%P(C) = 26%P(D) = 22%
A > C > D > B
lien
Proba de transition
L.L. - Graphes 16
En résumé● Réalisation de graphes
– Modélisation de problèmes– Représentation graphique (aide à la solution)
● Exploitation du modèle
– Vérification de propriétés
– Optimisation de solutions
L.L. - Graphes 17
Exemples de modélisations● Contrôle aérien
– Minimiser les changements d'écran et répartir le travail entre contrôleurs
● Optimisation de circuits VLSI
– Découper les circuits trop gros et recalculer leur implantation
● Modèle ?
● Propriétés du modèle à prendre en compte/améliorer ?
● Algorithme d'optimisation des solutions ?
L.L. - Graphes 18
Contrôle aérien : problème
● A un niveau de vol donné
Altitude standard à laquelle vole un avion.
FL260 correspond à Flight
Level (niveau de vol) 260
(26 000 pieds, 7 900m environ).
http://www.emse.fr/spip/IMG/pdf/Bichot-11-05-07.pdf
L.L. - Graphes 19
Contrôle aérien : problème
● Secteur
Zone géographique sous
La responsabilité d'un controleur aérien
L.L. - Graphes 20
Contrôle aérien : problème
● Zone de qualification
Ensemble de secteurs sur lesquels un contrôleur aérien est qualifié
L.L. - Graphes 21
Contrôle aérien : objectifs
Augmenter la sûreté, la fluidité et la capacité de l’espace aérien européen.
● Diminuer la charge de travail des contrôleurs aériens :– surveillance du trafic– résolution de conflits ou conflits potentiels
– Coordination entre secteurs.
L.L. - Graphes 22
Partition de l'espace
● Trouver une partition Pk = {S
1, . . . , S
k} des sommets
d’un graphe G(S, A) :– une partie = une zone de qualification
– un sommet = un secteur
● Les secteurs possèdent des flux d’avions entre eux : G est connexe et pondéré
● k, le nombre de parties = le nombre de zones de qualification
● Espace aérien européen :k = 32 parties, 762 sommets, 10 328 arcs.
L.L. - Graphes 23
Plan● Relations
● Notions de base sur les graphes
– Définitions– Implantation– Parcours
● Algorithmes d'optimisation
– Calculs de chemins, arbres, flots● Ordonnancement
– Définitions– PERT et MPM
L.L. - Graphes 24
Bibliographie
● Optimisation combinatoire, T2: programmation discrèteM. Sakarovitch, Hermann, 1984
● Méthodes d'optimisation combinatoireI. Charon, Masson, 1996
● Introduction à l'algorithmiqueT. Cornen, Dunod, 1994
● Wikipédiahttp://fr.wikipedia.org/wiki/Théorie_des_graphes
● Algorithmic graph theoryJ. A. McHugh, Prentice Hall, 1990
L.L. - Graphes 25
GraphesTerminologie
● Graphe orienté G : 2 ensembles
– X : ensemble des sommets de G– U : ensemble des arcs de G
● Un arc u U est un couple ordonné (Si, Sj)
– Si X est le sommet initial de u
– Sj X est le sommet final/terminal de u
Si
Sj
u
U dénote unerelation entre
Si et Sj
L.L. - Graphes 26
GraphesTerminologie
● ordre de G = (X, U) : nombre de sommets |X|
● p-graphe : Si, Sj X,l'ensemble des arcs
(Si Sj) a un cardinal ≤ p
● Si Si Sj U, Sj est un successeur de Si et Si est un prédécesseur de Sj
2
3
4
5
1
5
ae
d
f
hg
cb
L.L. - Graphes 27
GraphesTerminologie
● Graphe non orienté G = (X, U)
– U : ensemble des arêtes de G
● Une arête a U est un couple non ordonné (Si, Sj)
– Si, Sj X sont adjacents
Si
Sj
a
a dénote unerelation symétrique
entre Si et Sj
L.L. - Graphes 28
GraphesTerminologie
● multigraphe, si plusieurs arêtes sur au moins un couple Si, Sj
● graphe simple si au plus une arête pour tout couple Si, Sj et aucune boucle
2
3
4
5
1a
ed
f
hg
cb
L.L. - Graphes 29
GraphesTerminologie
● degré, demi-degrés, d+(Si) + d-(Si) = d(Si)nombre d'arcs sortants (resp. entrants)demi-degré extérieur (resp. intérieur) de Si
● d+(S1) = 2; d-(S5) = 1
2
3
4
5
1
5
ae
d
f
hg
cb
L.L. - Graphes 30
GraphesTerminologie
● Cocycles positif, négatif de A X
– +(A) = { u U | initial(u)A final(u)A }
– -(A) = { u U | initial(u)A final(u)A }
● +(A) = {d, g}; -(A) = {c}
2
3
4
5
1
5
ae
d
f
hg
cb
(A) = +(A) -(A)
L.L. - Graphes 31
GraphesTerminologie
● Graphe complet, clique
– G = (X, U) est complet ssi
Si,Sj X2, i≠j,
arc u=(SiSj)U
● Clique pour les graphes non orientés
3
4
2
1
1
2 3
54
L.L. - Graphes 32
GraphesTerminologie
● Sous-graphe G' = (X', U') est un sous-graphede G= (X,U) ssiX' X U' U
● Sous-graphe G'=(X', U') engendré par X'X :
U'= {u U | Si, Sj X', u=(SiSj) ou u=(SjSi)}
X' = {S2, S3, S4}
3
4
2
1
34
2
3
4
2
L.L. - Graphes 33
GraphesTerminologie
● Chemin dans G = (X, U)C = u1, u2, ..., um avec
u1, u2, ..., um Uest un chemin ssi
a ]1..m], initial(ua) = final(ua-1)
● Chaine dans G = (X, U)C = u1, u2, ..., um, avec
u1, u2, ..., um Uest une chaine ssi
a ]1..m], ua et ua-1 sont adjacents
3
4
2
1
L.L. - Graphes 34
GraphesImplantation
● G = (X, U) représentation en mémoire
● Matrices
– Incidence sommets arcs– Incidence sommets arêtes– Adjacence
● Listes
– Adjacence– Incidence– Cocycles
3
4
2
1
1 2 3 4
A[] 1 3 5 7
B[] 1 3 1 3 2 1 -1 2 3 4 5 6 7
1 0 0 10 1 1 00 0 1 11 1 0 0
S1
S2
S3
S4
S1
S2
S3
S4
L.L. - Graphes 35
ImplantationMatrice d'incidence sommets-arcs
● G = (X, U)
u = (SiSj) U Aiu = 1 Aju = -1
x ≠ i et j, Axu = 0
● Boucles ?
● Taille mémoire|X| x |U|
● Sommets-arêtes pour graphes non orientés Aiu = Aju = 1
3
4
2
1
1 -1 -1 1 0 0 0 -1 1-1 0 0 0 -1 -1 1 1 -1
0 0 1 0 1 0 0 0 00 1 0 -1 0 1 -1 0 0
U1
U2
U3
U4
U5
U6
U7
U8
U9
S1
S2
S3
S4
u1
u3
u5
u7u6
u8
u2
u4
u9
L.L. - Graphes 36
ImplantationMatrice d'adjacence sommets-sommets
● G = (X, U) u = (SiSj)
u U Aij = 1
u U Aij = 0
● Taille mémoire|X|2
● Multi-graphes ?
3
4
2
1
0 1 0 11 0 0 11 1 0 01 1 0 1
S1
S2
S3
S4
S1
S2
S3
S4
u1
u3
u5
u7u6
u8
u2
u4
u9
L.L. - Graphes 37
ImplantationListe d'adjacence
● G = (X, U) (1-graphe)
– 2 tableaux A et B● B[] contient, à partir de
l'index A[i], la liste des sommets adjacents à Si
● On a :
d+(Si) = A[i+1]-A[i]
A[i] = ∑j=1d+(Sj) + 1
● Taille mémoire|X|+|U|
3
4
2
1
u1
u3
u5
u7u6
u8
u2
u4
u9
5
A[] 1 3 5 7 10
B[] -1 2 3 4 5 6 7 8 9 10
S1
S2
S3
S4
S2
S4
S1
S4
S1
S2
S1
S2
S4
i-1
L.L. - Graphes 38
ImplantationListe des arcs
● G = (X, U)
– 2 tableaux EI[] et EF[]● EI[u] contient le sommet
initial de l'arc u, EF[u] le sommet final de u
● Tout type de graphe
● Taille mémoire2*|U|
3
4
2
1
u1
u3
u5
u7u6
u8
u2
u4
u9
EI[] 1 4 3 1 3 4 2 2 4 2
EF[] 2 1 1 4 2 2 4 1 4 1
u1
u2
u3
u4
u5
u6
u7
u8
u9
u10
u10
L.L. - Graphes 39
ImplantationListe des cocycles
● G = (X, U)
– 2 tableaux LP[] et LA[]● LA[] contient, à partir de
l'index LP[i], la liste des arcs émanant de Si
(cocycle positif +(i))
● LS[] contient la liste des sommets terminaux associés aux arcs
● Taille mémoire|X|+2*|U|
3
4
2
1
u1
u3
u5
u7u6
u8
u2
u4
u9
5
LP[] 1 3 5 7 10
LA[] -
LS[] -1 2 3 4 5 6 7 8 9 10
S1
S2
S3
S4
u1
u4
u7
u8
u3
u5
u2
u6
u9
S2
S4
S4
S1
S1
S2
S1
S2
S4
L.L. - Graphes 40
GraphesChoix de l'implantation● G = (X, U)
– Suivant type de graphe– Suivant type d'application
● Matrices
– Gourmandes en mémoire– Calculs directs
● Listes
– Calculs plus complexes– Beaucoup moins d'espace
3
4
2
1
1 2 3 4
A[] 1 3 5 7
B[] 1 3 1 3 2 1 -1 2 3 4 5 6 7
1 0 0 10 1 1 00 0 1 11 1 0 0
S1
S2
S3
S4
S1
S2
S3
S4
L.L. - Graphes 41
Recherche dans un graphe● Données : un graphe G = (X, U) quelconque
● Objectif : Comment visiter tous les sommets du graphe une seule fois ?
● Applications : trouver une donnée, afficher les sommets ...
● Exemple : y a t il un sommetnommé c ?
a
b
d
c
e
L.L. - Graphes 42
Algorithme de recherche en profondeur
Profondeur(Graphe G; Sommet V)( )
Sommet S
Liste li_adj
Si Ouvert( V, G ) = vrai
Visiter( V, G )
li_adj ListSadj( V, G )
Pour chaque S dans li_adj
Si Ouvert( S, G ) = vrai
Profondeur( G, S )
L.L. - Graphes 43
Algorithme de recherche en profondeur
● avec les fonctions :
– Visiter( Sommet S; Graphe G) effectue une opération sur un sommet et le ferme.
– Ouvert( Sommet S; Graphe G) (booléen) retourne vrai si S est ouvert et faux si S est fermé.
L.L. - Graphes 44
Exemple de parcours en profondeur
A
B
DC
E
#Ancetres & sommet courant
Sommets adjacents
L.L. - Graphes 45
Exemple de parcours en profondeur
A
B
DC
E
#1A2A B C3A B C D4A B C D A5A B C D6A B C7A8AE D9A BE
10- -
Ancetres & sommet courant
Sommets adjacentsB E
B E
Arbre de recouvrement
L.L. - Graphes 46http://www.csn.ul.ie/~mel/projects/codeviz/alloc_pages.png
L.L. - Graphes 47
Quels sont les répertoires àsauvegarder
incrémentalement ?
Applications
L.L. - Graphes 48
Remarques
A
B
DC
E
● Le choix parmi les sommets ouverts est arbitraire ordres de visite variable
● Si aucun chemin S0S, alors S non visité composante connexe
● Arbre de recouvrement
● Explorer les adjacents avant les successeurs largeur d'abord
L.L. - Graphes 49
Recherche en largeur● Même principe de marquage que pour une
recherche en profondeur
● On visite S0 puis tous ses sommets adjacents
ouverts. Pour ceux-ci, on examine ensuite leurs sommets adjacents ouverts, etc.
● Applications : trouver une donnée, afficher les sommets ...
● Pile pour stocker les adjacents non encore explorés
L.L. - Graphes 50
Algorithme de recherche en largeurLargeur(Graphe G; Sommet S
0)( )
Sommet S
Pile pile
Liste li_adj
mettre(S0, pile)
visiter(S0, G)
tant que vide( pile ) = faux
retirer( S, pile )
li_adj ListSadj( S, G )
Pour chaque S dans li_adj
Si Ouvert( S, G ) = vrai
visiter( S, G )mettre(S, pile)
L.L. - Graphes 51
Largeur d'abord vs. Profondeur d'abord
2
3
45
1
6
7
2
4
67
1
3
5
Profondeur Largeur
L.L. - Graphes 52
Composantes connexes
● Existe il un chemin entre 2 sommets i et j i et j sont ils dans la même composante connexe
● Tous les sommets sont ils interconnectés composante fortement connexe
www.atelier-duotang.com
L.L. - Graphes 53
Composantes connexesPrincipe
1 Appliquer la recherche en profondeur à partir de S0
2 Si tous les sommets ne sont pas atteints, recommencer à partir d'un sommet non atteint
2
3
45
1 Composante(1)Étape 1
Étape 2
Étape 3Étape 4
Composante(2)
L.L. - Graphes 54
Composantes connexes - AlgorithmeConnexité(Graphe G)(Liste de Sommets )
Sommet S
Liste L sommets(G)
NC 0Pour chaque S dans L
Si ouvert(S, G) = vrai
NC NC+1
Profondeur2(G, S, NC)
retourner L
Profondeur2(Graphe G; Sommet S
0 , entier NC)
...
Visiter(V, G, NC)
...
Profondeur2(G, S, NC)
L.L. - Graphes 55
Exercice
● Un robot de référencement trouvera il tous les sites ?
http://blog.ragondux.com/graphes
L.L. - Graphes 56
Exercice● Le graphe n'est pas connexe !
http://blog.ragondux.com/graphes
L.L. - Graphes 57
Composantes fortement connexes● Composante C fortement connexe
i, j C, ∃ chemin (ij) (donc orienté)
● ≠ composante connexe i, j C, ∃ chaine (ij) (donc non-orienté)
● Composante fortement connexe de S0 donné :
ensemble X t.q
– (1) S X, chemin(S0S)
– (2) S X, chemin(SS0)
L.L. - Graphes 58
Forte connexité - Algorithme● Utilisation d'algorithmes de parcours orientés :
– (1) algorithme basé sur les successeurs
– (2) algorithme basé sur les prédecesseurs
(1)/(2)
● Algorithme :
ProfondeurSuccs(Graphe G; Sommet S0)
... adjacents Sucesseurs(V, G) ...
FConnexité(Graphe G, Sommet S0)(Liste)
X1 ProfondeursSuccs(G, S
0)
X2 ProfondeursPreds(G, S
0)
retourner X1 X
2
L.L. - Graphes 59
Forte connexité - Exemple
1 ProfondeurSuccs(G, S1)
X1= {S
1,S
2,S
3,S
4,S
5}
2 ProfondeurPreds(G, S1)
X2= {S
1,S
3,S
4,S
5}
Composante fortement
connexe associée à S1
X1 X
2 = {S
1,S
3,S
4,S
5}
2
3
4
5
1
L.L. - Graphes 60
Fermeture transitive
● Pour un graphe G=(X,U), graphe Gf = (X,U') t.q U' = {u'=(SiSj) in U' | ∃ chemin Si Sj dans G}
● Si le graphe est fortement connexe, sa fermeture transitive est un graphe complet
23
4
5
1
23
4
5
1GfG
66
L.L. - Graphes 61
Fermeture transitiveAlgorithme de Roy-Warshall
● A partir de G = {X, U}, ajouter itérativement des arcs SiSj, si SiSk et SkSj existent
● A partir de la matrice d'adjacence du graphe
RoyWarshall(Graphe G=(X,U))(graphe Gf)
1-Initialisation
M[i, j] vrai ssi e SiSj G
2-Itération courante
Si X, S
j X, S
k X
M[i, j] M[i, j] (M[i, k] M[k, j])
L.L. - Graphes 62
Exercice ● Peut on aller dans toutes les stations malgré les travaux ?