Algorithmique avanc´ ee
L3 Informatique
Etienne Birmel´ e
I. Introduction : Notion de graphe
Notion de graphe
Graphe
Un graphe G est un couple (V , E ) o` u V est l’ensemble des sommets et E ⊂ V × V est l’ensemble des arˆ etes.
Il est repr´ esent´ e graphiquement par un ensemble de points (les sommets) reli´ es par des segments (les arˆ etes).
v
1v
2v
3v
4v
5v
6v
7v
8Notion de graphe
I
Le graphe est l’objet math´ ematique permettant de d´ ecrire des interactions entre sujets.
I
Applications aussi diverses que l’informatique, les t´ el´ ecommunications, la sociologie ou la biologie.
I
Principe : traduire le probl` eme pos´ e en un probl` eme d’algorithmique ` a r´ esoudre sur des graphes.
Exemple : Attribution de fr´ equences ` a des ´ emetteurs.
Deux ´ emetteurs trop proches et non s´ epar´ es par un obstacle naturel ne peuvent
recevoir le mˆ eme fr´ equence. Le probl` eme devient un probl` eme de coloration de
graphes.
Types de graphes
Suivant le type de probl` eme que l’on cherche ` a r´ esoudre, on peut consid´ erer des graphes
I
non-orient´ e ou orient´ e.
I
avec ou sans boucle
I
simple ou avec des arˆ etes multiples
I
color´ es (sommets ou arˆ etes)
I
valu´ es (sommets ou arˆ etes)
v
1v
2v
3v
4v
1v
2v
3v
4Types de graphes
Suivant le type de probl` eme que l’on cherche ` a r´ esoudre, on peut consid´ erer des graphes
I
non-orient´ e ou orient´ e.
I
avec ou sans boucle
I
simple ou avec des arˆ etes multiples
I
color´ es (sommets ou arˆ etes)
I
valu´ es (sommets ou arˆ etes)
v
1v
2v
3v
4v
1v
2v
3v
4Types de graphes
Suivant le type de probl` eme que l’on cherche ` a r´ esoudre, on peut consid´ erer des graphes
I
non-orient´ e ou orient´ e.
I
avec ou sans boucle
I
simple ou avec des arˆ etes multiples
I
color´ es (sommets ou arˆ etes)
I
valu´ es (sommets ou arˆ etes)
v
1v
2v
3v
4v
1v
2v
3v
4Types de graphes
Suivant le type de probl` eme que l’on cherche ` a r´ esoudre, on peut consid´ erer des graphes
I
non-orient´ e ou orient´ e.
I
avec ou sans boucle
I
simple ou avec des arˆ etes multiples
I
color´ es (sommets ou arˆ etes)
I
valu´ es (sommets ou arˆ etes)
v
1v
2v
3v
4v
1v
2v
3v
4Types de graphes
Suivant le type de probl` eme que l’on cherche ` a r´ esoudre, on peut consid´ erer des graphes
I
non-orient´ e ou orient´ e.
I
avec ou sans boucle
I
simple ou avec des arˆ etes multiples
I
color´ es (sommets ou arˆ etes)
I
valu´ es (sommets ou arˆ etes)
6 2
3
14 v
1v
2v
3v
42
3 4 2
1
Degr´ es, densit´ e
Notation
On note n(G) = |V | et m(G) = |E |, ou n et m quand il n’y a pas d’ambiguit´ e.
Densit´ e d’un graphe
La densit´ e d’un graphe simple G est le nombre d’arˆ etes pr´ esentes divis´ e par le nombre d’arˆ etes possibles :
dens(G) = 2m n(n − 1)
I
La densit´ e est toujours comprise entre 0 et 1. Une densit´ e de 0 correspond
`
a un graphe sans arˆ ete, une densit´ e de 1 correspond ` a un graphe complet,
´
egalement appel´ e clique.
I
Cette notion peut ˆ etre ´ elargie ` a d’autres familles de graphes, il suffit de savoir calculer le nombre d’arˆ etes possibles. Si on consid` ere les graphes orient´ es autorisant deux arˆ etes en sens contraire et des boucles, on obtient n
2arˆ etes au maximum donc d (G) =
nm2.
La densit´ e est une caract´ eristique globale du graphe mais ne refl` ete pas sa
structure locale.
Degr´ es, densit´ e
Definition
Le degr´ e d’un sommet v , not´ e d(v ), d´ esigne son nombre de voisins.
Dans le cas des graphes dirig´ es, on distingue le degr´ e sortant d
+(v) et le degr´ e entrant d
−(v ).
Dans le cas de graphe valu´ e, le degr´ e consid´ er´ e est parfois la somme des poids des arˆ etes incidentes au sommet v .
Proposition
Un graphe non orient´ e v´ erifie X
v∈V(G)
d (v ) = 2m .
Un graphe orient´ e v´ erifie X
v∈V(G)
d
+(v ) = X
v∈V(G)
d
−(v) = m.
Codage d’un graphe
Il y a principalement trois types de codages pour un graphe :
Matrice d’adjacence matrice carr´ ee M de taille n × n tel que M
uvrepr´ esente l’interaction entre u et v : 0 s’il n’y a pas d’arˆ ete, 1 si il y a une arˆ ete de u vers v .
Dans le cas non-dirig´ e, cette matrice est sym´ etrique.
Dans le cas arˆ ete-valu´ e, on remplace le coefficient 1 par le poids de l’arˆ ete concern´ ee.
Liste d’arˆ etes matrice de taille m × 2, chaque ligne repr´ esentant les deux sommets reli´ es par une arˆ ete.
Dans le cas orient´ e, l’ordre d’apparition des sommets sur la ligne indique le sens de l’arˆ ete.
Dans le cas arˆ ete-valu´ e, on ajoute une troisi` eme colonne contenant les poids.
Liste de voisinages Liste ayant un ´ el´ ement par sommet. Cet ´ el´ ement contient
l’identit´ e d’un sommet puis la liste de ses voisins (seulement les
voisins externes dans les cas d’un graphe orient´ e).
Codage d’un graphe
Stockage u et v sont-ils voisins ? degr´ e d’un sommet v
Matrice d’adjacence O(n
2) O(1) O(n)
Liste d’arˆ ete O(m ) O(m) O(m)
Liste d’adjacence O(m ) O(n) O(n)
I
Les deux derni` eres facons de stocker un graphe sont beaucoup plus
efficaces, surtout dans le cas de graphes creuses (m << n
2).
Isomorphisme de graphes
La repr´ esentation graphique d’un graphe n’est pas unique.
Isomorphisme de graphes
Deux graphes G = (V (G), E (G)) et H = (V (H ), E (H )) sont isomorphes s’il existe une bijection φ : E (G) → E (H ) telle que (u, v ) ∈ E(G) si et seulement si (φ(u), φ(v )) ∈ E (H ).
v
1v
2v
3v
4w
1w
2w
3w
4I
Dans le cas des graphes valu´ es, il faut que la bijection pr´ eserve aussi les
poids.
Chemins et marches
Chemin et marche
Un chemin de longueur k entre deux sommets u et v est une suite de k arˆ etes (u
i, u
i+1) tels que u
0= u, u
k= v et tous les u
isont disjoints.
Dans le cas de graphes orient´ es, un chemin orient´ e n´ ecessite l’orientation des arˆ etes dans le sens −−−−→ u
iu
i+1.
Si les arˆ etes et les sommets ne sont pas tous disjoints, on parle de marche entre u et v .
v1
v2
v3
v4
v5
v6
v7
v8
I
v
6, v
3, v
2, v
4est un chemin de longueur 3.
I
v
7, v
4, v
8, v
7, v
5est une marche.
Chemins et marches
Chemin et marche
Un chemin de longueur k entre deux sommets u et v est une suite de k arˆ etes (u
i, u
i+1) tels que u
0= u, u
k= v et tous les u
isont disjoints.
Dans le cas de graphes orient´ es, un chemin orient´ e n´ ecessite l’orientation des arˆ etes dans le sens −−−−→ u
iu
i+1.
Si les arˆ etes et les sommets ne sont pas tous disjoints, on parle de marche entre u et v .
v1
v2
v3
v4
v5
v6
v7
v8
I
v
6, v
3, v
2, v
4est un chemin orient´ e.
I
v
4, v
8, v
7, v
5n’en est pas un.
Cycles
Definition
Un cycle de longueur k est une suite de k arˆ etes (u
i, u
i+1) tels que u
0= u
ket tous les u
isont disjoints.
Dans le cas de graphes orient´ es, un cycle orient´ e n´ ecessite l’orientation des arˆ etes dans le sens −−−−→ u
iu
i+1.
v1
v2
v3
v4
v5
v6
v7
v8
I
v
6, v
3, v
2, v
5, v
7, v
8est un cycle
de longueur 6.
Graphe connexe
Connexit´ e
Un graphe non orient´ e est connexe si toute paire de sommets est reli´ ee par un chemin.
Si le graphe n’est pas connexe, il peut ˆ etre d´ ecompos´ e de fa¸ con unique en composantes connexes, qui sont les ensembles maximaux de sommets induisant des sous-graphes connexes.
v1
v2
v3
v4
v5
v6
v7
v8
Graphe orient´ e fortement connexe
Definition
Un graphe orient´ e est fortement connexe si pour toute paire (u , v ) de sommets, il existe un chemin orient´ e de u vers v et un chemin orient´ e de v vers u.
Il est dit simplement connexe si le graphe non-orient´ e sous-jacent est connexe.
v1
v2
v3
v4
v5
v6
v7
v8
v1
v2
v3
v4
v5
v6
v7
v8
Distance et diam` etre
Definition
La distance entre deux sommets u et v appartenant ` a la mˆ eme composante connexe d’un graphe arˆ ete-valu´ e est le poids minimum d’un chemin entre u et v.
I
Dans le cas de graphe non-valu´ e, cela revient ` a consid´ erer la longueur du plus court chemin.
I
Dans le cas des graphes dirig´ es, il faut pr´ eciser si on se restreint aux chemins dirig´ es (auquel cas la distance n’est plus sym´ etrique et donc plus une distance au sens math´ ematique !) ou si on travaille avec le graphe non-dirig´ e sous-jacent.
I
Dans le cas de graphes non connexes, les sommets appartenant ` a des
composantes diff´ erentes sont consid´ er´ es comme ayant une distance infinie.
Distance et diam` etre
Definition
Le diam` etre d’un graphe est la plus grande distance existant entre deux sommets d’un graphe.
diam(G) = max(d(u, v )|u , v ∈ V ) = min(d |∀u , v ∈ V , d (u , v ) ≤ d )
v1
v2
v3
v4
v5
v6
v7
v8
I
La distance de v
3` a v
5est de 2.
I
Quel est le diam` etre de G ?
Pourquoi ce module
Probl` eme
Un GPS doit trouver le chemin le plus court entre deux sommets dans un graphe valu´ e ` a quelques millions de sommets (distance kilom´ etrique, prix, ...).
I
Essayer tous les chemins est beaucoup trop long !
I
Utiliser un algorithme glouton est faux (choisir ` a chaque carrefour la route la plus courte ne vous am` enera pas au bon endroit de fa¸ con optimale). Objectifs
I
Trouver un algorithme intelligent.
I
D´ eterminer sa complexit´ e pour estimer ` a quel taille de graphe is sera applicable.
I
Prouver qu’il est juste.
La preuve th´ eorique est une partie essentielle. Elle ne saurait se r´ esumer ` a un
dessin ou un exemple !
Pourquoi ce module
Probl` eme
Un GPS doit trouver le chemin le plus court entre deux sommets dans un graphe valu´ e ` a quelques millions de sommets (distance kilom´ etrique, prix, ...).
I
Essayer tous les chemins est beaucoup trop long !
I
Utiliser un algorithme glouton est faux (choisir ` a chaque carrefour la route la plus courte ne vous am` enera pas au bon endroit de fa¸ con optimale).
Objectifs
I
Trouver un algorithme intelligent.
I
D´ eterminer sa complexit´ e pour estimer ` a quel taille de graphe is sera applicable.
I
Prouver qu’il est juste.
La preuve th´ eorique est une partie essentielle. Elle ne saurait se r´ esumer ` a un
dessin ou un exemple !
Pourquoi ce module
Probl` eme
Un GPS doit trouver le chemin le plus court entre deux sommets dans un graphe valu´ e ` a quelques millions de sommets (distance kilom´ etrique, prix, ...).
I
Essayer tous les chemins est beaucoup trop long !
I
Utiliser un algorithme glouton est faux (choisir ` a chaque carrefour la route la plus courte ne vous am` enera pas au bon endroit de fa¸ con optimale).
Objectifs
I
Trouver un algorithme intelligent.
I
D´ eterminer sa complexit´ e pour estimer ` a quel taille de graphe is sera applicable.
I
Prouver qu’il est juste.
La preuve th´ eorique est une partie essentielle. Elle ne saurait se r´ esumer ` a un
dessin ou un exemple !
II. Parcours de graphes : arbres couvrants
II.1 Arbres
D´ efinition
Arbre
Un graphe non-orient´ e connexe et acyclique est appel´ e un arbre.
Proposition
Un graphe connexe est un arbre si et seulement si toute suppression d’arˆ ete le rend non-connexe.
En d’autres termes, un arbre est un graphe connexe minimal.
Arbre enracin´ e
D´ efinition
Consid´ erons un entier n et un graphe G dont les sommets ont une ´ etiquette appel´ ee niveau construit par le processus suivant :
I
on initialise V (G) ` a un sommet r de niveau 0, E (G) ` a l’ensemble vide.
I
pour i entre 1 et n,
pour tout sommet v de niveau i,
on ajoute ` a V (G) un nombre fini de sommets w
1, . . . , w
kvdont le niveau est i + 1, et on ajoute ` a E (G) les arˆ etes {(v, w
i), 1 ≤ i ≤ w
i}.
Le graphe G est un arbre enracin´ e. r est appel´ e racine de G.
Les sommets (w
1, . . . , w
kvde niveau i + 1 li´ es ` a un sommet v de degr´ e i sont appel´ es les fils de v . v est le p` ere de ses sommets. On en d´ eduit la notion de descendants et d’ancˆ etres d’un sommet.
Un sommet sans fils est appel´ e une feuille.
Arbre enracin´ e
r
v1 v2
v3 v4 v5
v6 v7 v8
Proposition
Tout arbre enracin´ e est un arbre. De plus, pour tout arbre T et tout sommet de r ∈ V (T), T peut ˆ etre construit comme un arbre enracin´ e de racine r.
Cons´ equence : Tout arbre a n − 1 arˆ etes.
Int´ erˆ et des arbres
1. Structure ad´ equate pour certaines mod´ elisations (´ evolution, pedigrees...).
De nombreux probl` emes ne pouvant pas ˆ etre r´ esolus en temps polynomial sur les graphes en g´ en´ eral peuvent l’ˆ etre en temps polynomial sur les arbres.
2. Structure naturelle pour r´ esoudre des probl` emes d’´ enum´ eration.
I
Enum´ erer l’ensemble des mots de quatre lettres qu’on peut ´ ecrire avec ABC
I
Enum´ erer l’ensemble des mots de quatre lettres qu’on peut ´ ecrire avec ABC et contenant au moins 2 lettres A
3. Structure la moins lourde en termes d’arˆ etes pour encoder la connexit´ e : n
sommets reli´ es par un arbre forment un ensemble connexe, et on ne peut
pas utiliser moins d’arˆ etes pour y arriver.
Arbre couvrant
Definition
Soit G un graphe. Un arbre couvrant de G est un sous-graphe T de G tel que T est un arbre et V (T) = V (G).
v1
v2
v3
v4
v5
v6
v7
v8
Arbre couvrant
Th´ eor` eme
Un graphe est connexe si et seulement si il admet un arbre couvrant.
Cons´ equences :
1. Un graphe connexe est un arbre si et seulement si il a n − 1 arˆ etes.
2. D´ ecider si un graphe est connexe est ´ equivalent ` a d´ ecider qu’il admet un
arbre couvrant.
II.2 Parcours en largeur
Probl` eme
Soit G un graphe.
I
Est-t il connexe ?
I
Combien a-t-il de composantes connexes ?
I
Lister tous les sommets dans la mˆ eme composante connexe qu’un sommet d’int´ erˆ et.
Approche : Rechercher un (ou des) arbres couvrants, possiblement enracin´ es
sur le sommet d’int´ erˆ et.
Arbre de parcours en largeur
I
Appel´ e BFS pour Breadth-First Search
I
L’id´ ee est de prendre un ` a un les sommets d´ ej` a visit´ es et de nettoyer leur voisinage, en ajoutant tous leur voisins non-visit´ es.
I
D’un point de vue pratique, cela revient ` a utiliser une file, ou FIFO (First In, First Out), pour stocker les sommets visit´ es.
I
Le premier sommet de la file est le sommet courant, ses voisins sont
ajout´ es un ` a un en bout de file. Quand tous ses voisins sont visit´ es, le
sommet est supprim´ e de la file et ne la r´ eint´ egrera plus.
BFS : illustration
v1
v2
v3
v4
v5
v6
v7
v8
v3
F = {v
3}
BFS : illustration
v1
v2
v3
v4
v5
v6
v7
v8
v3
v1
F = {v
3, v
1}
BFS : illustration
v1
v2
v3
v4
v5
v6
v7
v8
v3
v1 v2
F = {v
3, v
1, v
2}
BFS : illustration
v1
v2
v3
v4
v5
v6
v7
v8
v3
v1 v2 v6
F = {v
3, v
1, v
2, v
6}
puis F = {v
1, v
2, v
6}
BFS : illustration
v1
v2
v3
v4
v5
v6
v7
v8
v3
v1 v2 v6
F = {v
1, v
2, v
6} puis F = {v
2, v
6}.
Aucun sommet n’est ajout´ e ` a la file.
BFS : illustration
v1
v2
v3
v4
v5
v6
v7
v8
v3
v1 v2 v6
v4 v5
F = {v
2, v
6, v
4} puis F = {v
2, v
6, v
4, v
5}
puis F = {v
6, v
4, v
5}
BFS : illustration
v1
v2
v3
v4
v5
v6
v7
v8
v3
v1 v2 v6
v4 v5 v8
F = {v
6, v
4, v
5, v
8}
puis F = {v
4, v
5, v
8}
BFS : illustration
v1
v2
v3
v4
v5
v6
v7
v8
v3
v1 v2 v6
v4 v5 v8
v7
F = {v
4, v
5, v
8, v
7} puis F se vide et l’algorithme
s’arrˆ ete.
BFS : pseudo-code
Data: Un graphe G et un sommet v Result: Un arbre T enracin´ e en v F = {v} ; T = v
for u sommet de G do u.visit´ e=FALSE end
while F 6= ∅ do
u = premier ´ el´ ement de F for w voisin de u do
if w.visit´ e =FALSE then w.visit´ e=TRUE Ajouter w ` a F
Ajouter w et (u , w) ` a T end
end
Supprimer u de F end
Algorithm 1: Algorithme BFS
BFS
Proposition
BFS construit un arbre enracin´ e en v contenant tous les sommets de la composante connexe de v .
Proposition
BFS est de complexit´ e O(m ).
I
Non-unicit´ e du parcours suivant l’ordre dans lequel les voisins sont parcourus.
I
En ajoutant une boucle choisissant un nouveau point de d´ epart tant qu’il
reste des sommets non-visit´ es, on obtient un algortihme qui couvre tout
graphe avec une forˆ et contenant autant d’arbres que le graphe a de
composantes connexes.
BFS et distance
On consid` ere un graphe G non valu´ e.
Soit T un arbre BFS enracin´ e en r . Pour tout sommet u , on note niv(u) le niveau de u dans T .
Proposition
Pour tout (u , v ) ∈ E (G), |niv (u) − niv(v )| ≤ 1.
Proposition
Pour tout u ∈ V (G), niv (u ) = d (u , r).
BFS orient´ e
On consid` ere un graphe G orient´ e, et on applique BFS en n’ajoutant ` a chaque
´ etape que les voisins ext´ erieurs du sommet courant.
I
Les sommets visit´ es sont ceux qui peuvent ˆ etre atteints depuis la racine par un chemin orient´ e.
I
G ne contient aucune arˆ ete orient´ ee d’un sommet u vers un sommet de niveau ≥ niv (u ) + 2.
I
Le chemin du BFS de la racine vers tout sommet visit´ e est un plus court
chemin orient´ e.
II.3 Parcours en profondeur
Probl` eme
Soit G un graphe.
I
Est-t il connexe ?
I
Combien a-t-il de composantes connexes ?
I
Lister tous les sommets dans la mˆ eme composante connexe qu’un sommet d’int´ erˆ et.
Approche : Rechercher un (ou des) arbres couvrants, possiblement enracin´ es
sur le sommet d’int´ erˆ et.
Arbre de parcours en profondeur
I
Appel´ e DFS pour Depth-First Search
I
L’id´ ee est d’aller aussi loin que possible dans le graphe, et de rebrousser chemin quand on ne peut plus avancer.
I
D’un point de vue pratique, cela revient ` a utiliser une pile, ou LIFO (Last In, First Out), pour stocker les sommets visit´ es.
I
Le sommet du haut de la pile est le sommet courant. S’il a un voisin non visit´ e, celui-ci est ajout´ e sur la pile. S’il n’en a pas, le sommet courant est supprim´ e.
Un sommet peut ˆ etre le sommet courant ` a des moments distincts de
l’algorithme mais lorsqu’il est supprim´ e de la pile, il ne la r´ eint´ egrera plus.
DFS : illustration
v1
v2
v3
v4
v5
v6
v7
v8
v3
P = {v
3}
DFS : illustration
v1
v2
v3
v4
v5
v6
v7
v8
v3
v2
P = {v
3, v
2}
DFS : illustration
v1
v2
v3
v4
v5
v6
v7
v8
v3
v2
v4
P = {v
3, v
2, v
4}
DFS : illustration
v1
v2
v3
v4
v5
v6
v7
v8
v3
v2
v4
v8
P = {v
3, v
2, v
4, v
8}
DFS : illustration
v1
v2
v3
v4
v5
v6
v7
v8
v3
v2
v4
v8
v6
P = {v
3, v
2, v
4, v
8, v
6}
puis P = {v
3, v
2, v
4, v
8}
DFS : illustration
v1
v2
v3
v4
v5
v6
v7
v8
v3
v2
v4
v8
v6 v7
P = {v
3, v
2, v
4, v
8, v
7}
DFS : illustration
v1
v2
v3
v4
v5
v6
v7
v8
v3
v2
v4
v8
v6 v7
v5
P = {v
3, v
2, v
4, v
8, v
7, v
5} puis se d´ epile jusqu’` a
P = {v
3, v
2}
DFS : illustration
v1
v2
v3
v4
v5
v6
v7
v8
v3
v2
v4
v8
v6 v7
v5
v1
P = {v
3, v
2, v
1}
puis se d´ epile jusqu’` a ˆ etre vide.
DFS : pseudo-code
Data: Un graphe G et un sommet v Result: Un arbre T enracin´ e en v P = {v} ; T = v ;
for u sommet de G do u.visit´ e=FALSE end
v.visit´ e=TRUE while P 6= ∅ do
u = dernier ´ el´ ement de P
if il existe w voisin de u avec w.visit´ e=FALSE then w .visit´ e=TRUE
Ajouter w ` a P
Ajouter w et (u, w ) ` a T end
else
Supprimer u de P ; end
end
Algorithm 2: Algorithme DFS
DFS : pseudo-code r´ ecursif
Data: Un graphe G et un sommet v Result: Un arbre T enracin´ e en v P = ∅ ; T = v
for u sommet de G do u.visit´ e=FALSE end
Function DFS(G,T ,u ) u.visit´ e = TRUE for w voisin de u do
if w.visit´ e=FALSE then Ajouter w et (u , w) ` a T DFS(G,T ,w)
end end DFS(G,T ,v)
Algorithm 3: Algorithme DFS r´ ecursif
DFS
Proposition
DFS construit un arbre enracin´ e en v contenant tous les sommets de la composante connexe de v .
Proposition
DFS est de complexit´ e O(m ).
I
Non-unicit´ e du parcours suivant l’ordre dans lequel les voisins sont parcourus.
I
En ajoutant une boucle choisissant un nouveau point de d´ epart tant qu’il reste des sommets non-visit´ es, on obtient un algorithme qui couvre tout graphe avec une forˆ et contenant autant d’arbres que le graphe a de composantes connexes.
I
Toutes ces propri´ et´ es sont identiques avec BFS.
Topologie des DFS
Soit T un DFS sur un graphe G.
I
Aucun rapport entre la distance ` a la racine et la distance dans G (ex : graphe r´ eduit ` a un cycle).
I
Par contre, aucune arˆ ete non d´ ecouverte ne correspond ` a une arˆ ete transversale entre deux branches :
Proposition
Soit (u , v ) une arˆ ete de G, u ´ etant le premier sommet d´ ecouvert par le DFS.
Alors u est un ancˆ etre de v .
DFS orient´ e
On consid` ere un graphe G orient´ e, et on applique DFS en n’ajoutant ` a chaque
´ etape que les voisins ext´ erieurs du sommet courant.
I
Les sommets visit´ es sont ceux qui peuvent ˆ etre atteints depuis la racine par un chemin orient´ e.
I
Si on trace les branches de T de la gauche vers la droite, il n’y a aucune
arˆ ete dans G qui ajouterait ` a T une arˆ ete transversale de la gauche vers la
droite.
II.4 Arbre couvrant de poids minimal
Probl` eme
Soit G un graphe valu´ e.
Trouver un arbre couvrant de poids minimal.
Applications
I
directes : construire des r´ eseaux (´ electriques, informatiques, ...) les moins chers possibles.
I
indirectes : brique de base pour de nombreux autres algorithmes (par ex.
approximation du voyageur de commerce).
Algorithme de Kruskal
Data: Un graphe connexe valu´ e G
Result: Un arbre couvrant T de poids minimal
Ranger les arˆ etes de G par poids croissant dans une liste L ; F une forˆ et couvrante sans arˆ etes
while F n’est pas un arbre do e = premi` ere arˆ ete de L
if les extremit´ es de e ne sont pas dans le mˆ eme arbre de F then F = F + e
end
Supprimer e de L end
Algorithm 4: Algorithme de Kruskal
Algorithme de Kruskal : exemple
v
1v
2v
3v
4v
5v
6v
7v
83 1
4 3 5
2
4
6
1
2
3
Algorithme de Kruskal : exemple
v
1v
2v
3v
4v
5v
6v
7v
83 1
4 3 5
2
4
6
1
2
3
Algorithme de Kruskal : exemple
v
1v
2v
3v
4v
5v
6v
7v
83 1
4 3 5
2
4
6
1
2
3
Algorithme de Kruskal : exemple
v
1v
2v
3v
4v
5v
6v
7v
83 1
4 3 5
2
4
6 1 2
3
Algorithme de Kruskal : exemple
v
1v
2v
3v
4v
5v
6v
7v
83
1 4
3 5
2
4
6 1 2
3
Algorithme de Kruskal : exemple
v
1v
2v
3v
4v
5v
6v
7v
83
1 4
3 5
2
4
6 1 2
3
Algorithme de Kruskal : exemple
v
1v
2v
3v
4v
5v
6v
7v
83
1 4
3 5
2
4
6 1 2
3
Algorithme de Kruskal : exemple
v
1v
2v
3v
4v
5v
6v
7v
83
1 4
3 5
2
4
6 1 2
3
Algorithme de Kruskal : exemple
v
1v
2v
3v
4v
5v
6v
7v
83
1 4
3 5
2
4
6 1 2
3
Algorithme de Kruskal
Proposition
L’algorithme de Kruskal renvoie bien, pour un graphe connexe, un arbre couvrant de poids minimal.
Proposition
Sa complexit´ e est de O(m log m).
I
Si G n’est pas connexe, le r´ esultat est une forˆ et dont chaque arbre est un arbre couvrant de poids minimal de l’une des composantes connexes de G.
I
En cas d’existence d’arˆ etes de poids ´ egal, la solution peut ne pas ˆ etre unique.
I
La mani` ere de coder les composantes connexes est primordiale pour obtenir une complexit´ e optimale.
I
L’op´ eration limitante du point de vue de la complexit´ e est le tri.
Complexit´ e de Kruskal : Union-Find
I
Trier m arˆ etes se fait en O(m log m)
I
Pour chaque arˆ ete (x , y), il faut
I
trouver la composante connexe de x et y : fonction FIND
I
comparer FIND(x ) et FIND (y)
I
si ils sont diff´ erents, fusionner les deux composantes connexes : op´ eration UNION
Soit α(n, m) la somme des complexit´ es de FIND et UNION . La complexit´ e de
l’algorithme de Kruskal est alors O(m log m + m α(n, m).
Complexit´ e de Kruskal : Union-Find
Une solution simple mais non-optimale
On stocke pour chaque sommet un nombre correspondant ` a sa composante connexe.
sommet 1 2 3 4 5 6 7 8 9
composante 1 2 1 3 1 3 3 1 1
FIND est en temps constant, UNION en O(n) : α = O(n).
Complexit´ e de Kruskal : Union-Find
Autre solution : chaque composante connexe est repr´ esent´ ee par un arbre enracin´ e
I
il suffit de stocker son p` ere pour chaque sommet, les racines ´ etant leur propre p` ere. Les racines servent de repr´ esentant de la classe.
3
1 5
2 4
6 7
8 9
sommet 1 2 3 4 5 6 7 8 9
p` ere 3 2 3 4 3 4 4 1 1
Complexit´ e de Kruskal : Union-Find
Autre solution : chaque composante connexe est repr´ esent´ ee par un arbre enracin´ e
I
FIND(x ) revient ` a remonter l’arbre de p` ere en p` ere jusqu’` a faire du sur-place. On est alors ` a la racine, et on renvoit la valeur de celle-ci : complexit´ e O(h), o` u h est la hauteur de l’arbre.
3
1 5
2 4
6 7
8 9
sommet 1 2 3 4 5 6 7 8 9
p` ere 3 2 3 4 3 4 4 1 1
FIND(8) = 3
Complexit´ e de Kruskal : Union-Find
Autre solution : chaque composante connexe est repr´ esent´ ee par un arbre enracin´ e
I
UNION consiste ` a rassembler les deux arbres en un seul. Pour cela, on d´ eclare comme p` ere de la racine du plus petit arbre la racine du plus grand : complexit´ e en temps constant.
3
1 5
2 4
6 7
8 9
UNION(1, 7)
sommet 1 2 3 4 5 6 7 8 9
p` ere 3 2 3 3 3 4 4 1 1
3
1 5 4
6 7
8 9
Complexit´ e de Kruskal : Union-Find
Proposition
La hauteur d’un arbre avec s sommets, construit par une suite d’applications de UNION, est major´ e par 1 + log
2s.
On en d´ eduit que α = O(log m) et donc que l’algorithme de Kruskal est de complexit´ e O(m log m).
Complexit´ e amortie
I
Quand on remonte dans l’arbre vers la racine r, on fait de chaque sommet parcouru un fils de r.
I
Op´ erer r FIND et s UNION se fait en 0(r + sf (r, s)) o` u f est une fonction qui croˆıt tr` es lentement (f (n, m ) ≤ 4 pour n, m ≤ 2
2048).
I
La s´ election d’arˆ etes peut donc ˆ etre consid´ er´ ee comme de complexit´ e
O(m), ce qui permet d’obtenir une meilleure complexit´ e si les poids des
arˆ etes sont telles que le tri peut se faire plus rapidement.
Complexit´ e de Kruskal : Union-Find
Proposition
La hauteur d’un arbre avec s sommets, construit par une suite d’applications de UNION, est major´ e par 1 + log
2s.
On en d´ eduit que α = O(log m) et donc que l’algorithme de Kruskal est de complexit´ e O(m log m).
Complexit´ e amortie
I
Quand on remonte dans l’arbre vers la racine r, on fait de chaque sommet parcouru un fils de r.
I
Op´ erer r FIND et s UNION se fait en 0(r + sf (r, s)) o` u f est une fonction qui croˆıt tr` es lentement (f (n, m ) ≤ 4 pour n, m ≤ 2
2048).
I
La s´ election d’arˆ etes peut donc ˆ etre consid´ er´ ee comme de complexit´ e
O(m), ce qui permet d’obtenir une meilleure complexit´ e si les poids des
arˆ etes sont telles que le tri peut se faire plus rapidement.
Algorithme de Prim
Data: Un graphe connexe valu´ e G et un sommet v Result: Un arbre couvrant T de poids minimal T = {v }
while il existe des arˆ etes de T vers G \ T do
Trouver l’arˆ ete e de poids minimal de T vers G \ T T = T + e
end
Algorithm 5: Algorithme de Prim
Algorithme de Prim : exemple
v
1v
2v
3v
4v
5v
6v
7v
83 1
4 3 5
2
4
6 1 2 3
V (T) = {v
3}
Algorithme de Prim : exemple
v
1v
2v
3v
4v
5v
6v
7v
83
1 4
3 5
2
4
6 1 2 3
V (T) = {v
3, v
1}
Algorithme de Prim : exemple
v
1v
2v
3v
4v
5v
6v
7v
83
1 4
3 5
2
4
6 1 2 3
V (T) = {v
3, v
1, v
6}
Algorithme de Prim : exemple
v
1v
2v
3v
4v
5v
6v
7v
83
1 4
3 5
2
4
6 1 2 3
V (T) = {v
3, v
1, v
6, v
2}
Algorithme de Prim : exemple
v
1v
2v
3v
4v
5v
6v
7v
83
1 4
3 5
2
4
6 1 2
3
V (T) = {v
3, v
1, v
6, v
2, v
4}
Algorithme de Prim : exemple
v
1v
2v
3v
4v
5v
6v
7v
83
1 4
3 5
2
4
6 1 2
3
V (T) = {v
3, v
1, v
6, v
2, v
4, v
7}
Algorithme de Prim : exemple
v
1v
2v
3v
4v
5v
6v
7v
83
1 4
3 5
2
4
6 1 2
3
V (T) = {v
3, v
1, v
6, v
2, v
4, v
7, v
8}
Algorithme de Prim : exemple
v
1v
2v
3v
4v
5v
6v
7v
83
1 4
3 5
2
4
6 1 2
3
V (T) = {v
3, v
1, v
6, v
2, v
4, v
7, v
8, v
5}
Algorithme de Prim
Proposition
L’algorithme de Prim renvoie bien, pour un graphe connexe, un arbre couvrant de poids minimal.
Proposition
Sa complexit´ e est de O(mn) pour un code na¨ıf.
Elle peut ˆ etre abaiss´ ee en O(m log n) en codant ` a l’aide de tas binaires et en O(m + n log n) ` a l’aide de tas de Fibonacci.
I
Si G n’est pas connexe, le r´ esultat est un arbre couvrant de poids minimal de la composante connexe de G. Le relancer tant qu’il existe des sommets non couverts permet de trouver une forˆ et couvrante de poids minimal.
I
En cas d’existence d’arˆ etes de poids ´ egal, la solution peut ne pas ˆ etre unique.
I
La complexit´ e th´ eorique (pire cas) est l´ eg` erement meilleure que celle de Kruskal au prix d’une impl´ ementation minutieuse.
I
Il ne n´ ecessite pas l’exploration ` a priori de tout le graphe.
II.5 Algorithme de Dijkstra
Probl` eme
On consid` ere un graphe G valu´ e et deux sommets u et v de G. Trouver le plus court chemin (au sens de la somme des poids) entre u et v.
I
l’approche gloutonne ´ echoue ici.
I
le probl` eme est trivial ` a r´ esoudre dans un arbre.
I
l’algorithme de Dijkstra r´ esout un probl` eme plus g´ en´ eral
On consid` ere un graphe valu´ e G et un sommet u de G. Construire un arbre
couvrant T
utel que, pour tout sommet v , la distance de u ` a v est la mˆ eme
dans G et dans T
u.
Probl` eme
On consid` ere un graphe G valu´ e et deux sommets u et v de G. Trouver le plus court chemin (au sens de la somme des poids) entre u et v.
I
l’approche gloutonne ´ echoue ici.
I
le probl` eme est trivial ` a r´ esoudre dans un arbre.
I
l’algorithme de Dijkstra r´ esout un probl` eme plus g´ en´ eral
On consid` ere un graphe valu´ e G et un sommet u de G. Construire un arbre
couvrant T
utel que, pour tout sommet v , la distance de u ` a v est la mˆ eme
dans G et dans T
u.
Illustration
v
1v
2v
3v
4v
5v
6v
7v
83 1
1 3 5
2
4
6 1 2 3
Sommet v
1v
2v
3v
4v
5v
6v
7v
8Distance (rouge si finale) 0 3 1 ∞ ∞ ∞ ∞ ∞
Illustration
v
1v
2v
3v
4v
5v
6v
7v
83 1
1 3 5
2
4
6 1 2 3
Sommet v
1v
2v
3v
4v
5v
6v
7v
8Distance (rouge si finale) 0 2 1 ∞ ∞ 3 ∞ ∞
Illustration
v
1v
2v
3v
4v
5v
6v
7v
83 1
1 3 5
2
4
6 1 2 3
Sommet v
1v
2v
3v
4v
5v
6v
7v
8Distance (rouge si finale) 0 2 1 5 7 3 ∞ ∞
Illustration
v
1v
2v
3v
4v
5v
6v
7v
83 1
1 3 5
2
4
6 1 2 3
Sommet v
1v
2v
3v
4v
5v
6v
7v
8Distance (rouge si finale) 0 2 1 5 7 3 ∞ 9
Illustration
v
1v
2v
3v
4v
5v
6v
7v
83 1
1 3 5
2
4
6 1 2 3
Sommet v
1v
2v
3v
4v
5v
6v
7v
8Distance (rouge si finale) 0 2 1 5 7 3 7 8
Illustration
v
1v
2v
3v
4v
5v
6v
7v
83 1
1 3 5
2
4
6 1 2
3
Sommet v
1v
2v
3v
4v
5v
6v
7v
8Distance (rouge si finale) 0 2 1 5 7 3 7 8
Data: Un graphe connexe valu´ e G de fonction de poids ω et un sommet u Result: Un arbre couvrant T et la distance D (v ) = d
G(u, v) pour tout v T = {u }
for v ∈ V (G) do
dist prov(v ) := ∞ ; pere (v ) := ∅ end
dist finale(u ) := 0 ; dernier ajout := u while V (T ) 6= V (G) do
for v voisin de dernier ajout do
if dist finale(dernier ajout) + ω(dernier ajout , v ) < dist prov(v ) then
dist prov(v ) := dist finale(dernier ajout ) + ω(dernier ajout , v ) pere(v ) := dernier ajout
end end
Selectionner v ∈ / V (T ) tel que dist prov est minimum Ajouter (pere(v ), v ) a T
dist finale(v ) := dist prov(v ) dernier ajout := v
end
Algorithm 6: Algorithme de Dijkstra
Algorithme de Dijkstra
Proposition
L’algorithme de Dijkstra renvoie bien la distance de tout sommet au sommet d’origine.
Proposition
La complexit´ e est polynomiale. Elle est en O(n
2) pour un code na¨ıf, et peut
ˆ etre r´ eduite ` a O(m + n log n) ` a l’aide de tas binaire et mˆ eme O(m + n log n) ` a
l’aide de tas de Fibonacci.
Algorithme de Floyd-Warshall
I
L’algorithme de Dijkstra ne s’applique pas si le graphe contient des arˆ etes de poids n´ egatif.
Floyd-Warshall
L’algorithme de Floyd-Warshall permet de calculer les distances entre toutes les
paires de sommets, mˆ eme si certaines arˆ etes sont de poids n´ egatif, ` a condition
qu’il n’y ait aucun cycle de poids strictement n´ egatif.
Algorithme de Floyd-Warshall : principe
On num´ erote les sommets de 1 ` a n.
On calcule pour tout k la matrice W
ktelle que W
uvkcontient le poids du chemin de poids minimal entre u et v dont tous les sommets internes appartiennent ` a {1, . . . , k}.
I
W
ijk= min(W
ijk−1, W
ikk−1+ W
kjk)
I
W
ijn, 1 ≤ k ≤ n est le poids du plus court chemin.
I
La complexit´ e est de O(n
3).
III. Cycles couvrants - Introduction ` a la complexit´ e
Probl` emes consid´ er´ es
Chinese Postman problem : Un postier cherche l’itin´ eraire le plus court pour accomplir sa tourn´ ee, sachant qu’il doit parcourir toutes les rues dont il a la charge au moins une fois, et revenir ` a son point de d´ epart.
Travelling salesman problem (probl` eme du voyageur de commerce) : Un agent commercial doit faire le tour des clients dont il a la charge et revenir ` a son point de d´ epart, tout en minimisant un certain coˆ ut (euros, temps, kiom` etres...).
I
Recherche de cycles couvrant de poids minimum dans un graphe
arˆ ete-valu´ e : le postier doit couvrir toutes les arˆ etes, alors que le voyageur doit ’seulement’ couvrir tous les sommets.
I
Cette diff´ erence rend ces deux probl` emes tr` es diff´ erents : celui du postier
peut ˆ etre r´ esolu de fa¸ con exacte, alors que celui de l’agent ne peut faire
l’objet que d’une r´ esolution approch´ ee (heuristique).
III.1 Graphes Eul´ eriens
Graphes eul´ eriens
Definition
Un circuit eul´ erien dans un graphe est une marche empruntant chaque arˆ ete exactement une fois et terminant en son point de d´ epart.
Un graphe eul´ erien est un graphe admettant un circuit eul´ erien.
v1
v2
v3
v4
v5
v6
v7
v8
Chemin eul´ erien : {v
1, v
3, v
6, v
8, v
7, v
5, v
2, v
4, v
8, v
3, v
2, v
1}
Graphes eul´ eriens
Definition
Un circuit eul´ erien dans un graphe est une marche empruntant chaque arˆ ete exactement une fois et terminant en son point de d´ epart.
Un graphe eul´ erien est un graphe admettant un circuit eul´ erien.
I
Leonhard Euler est consid´ er´ e comme le fondateur de la th´ eorie des graphes.
Il avait pos´ e en 1738 la question de savoir s’il existait un moyen de traverser les septs ponts reliant les deux ˆıles de la ville de K¨ onigsberg entre elles et au continent et de revenir au point de d´ epart sans emprunter deux fois le mˆ eme pont. Ce probl` eme revient ` a la recherche d’un circuit eul´ erien.
I
Dans le cas du postier, un circuit eul´ erien est la solution optimale. Reste ` a
savoir s’il est possible de d´ eterminer polynomialement l’existence d’un tel
circuit.
Proposition
Un graphe connexe est eul´ erien si et seulement si tous ses sommets sont de
degr´ e pair.
Proposition
Un graphe connexe est eul´ erien si et seulement si tous ses sommets sont de degr´ e pair.
Avant de d´ emontrer le th´ eor` eme, il faut d´ efinir la notion de pont.
Definition
Un pont est une arˆ ete dont la suppression augmente le nombre de composantes connexes.
v1
v2
v3
v4
v5
v6
v7
Proposition
De chaque cˆ ot´ e d’un pont se trouve au moins un sommet de degr´ e impair.
Algorithme de Fleury
1. Choisir un sommet v
0et poser W
0= ∅.
2. Supposons que le parcours (liste d’arˆ ete) W
i= e
1. . . e
ma ´ et´ e contruit.
Soit v
mle dernier sommet de ce parcours.
3. Si il existe des arˆ etes adjacentes ` a v
mnon-encore utilis´ ees, on en choisit une appel´ ee e
m+1. Sauf s’il n’y a pas le choix, on ne choisit pas e
m+1comme ´ etant un pont dans G
m= G − {e
1, . . . , e
m}. On pose W
m+1= W
m∪ e
m+1.
4. Sinon, on arrˆ ete et on retourne W
mChemin eul´ erien
Un parcours eul´ erien est une marche couvrant toutes les arˆ etes en les
empruntant de fa¸ con unique (on supprime simplement la condition de retour au point de d´ epart).
Proposition
Un graphe contient un parcours eul´ erien si et seulement si au plus deux de ses
sommets ont un degr´ e impair.
III.2 Chinese Postman Problem
R´ esolution du Chinese Postman Problem
1. Enum´ erer l’ensemble S des sommets de degr´ es impair.
2. Pour toute paire de sommets de S, chercher un chemin de longueur minimale entre ces deux sommets (Algorithme de Dijkstra)
3. Cr´ eer un graphe complet H avec V (H ) = S dans lequel les arˆ etes sont valu´ es par le poids du plus court chemin pr´ ec´ edent.
4. Chercher un couplage parfait de poids minimal dans ce graphe. Un couplage est un ensemble d’arˆ etes tel que tout sommet soit incident ` a exactement une arˆ ete. Ce probl` eme peut ˆ etre r´ esolu en temps polynomial par un algorithme de programmation lin´ eeaire. (hors cadre de ce cours) 5. Doubler les arˆ etes le long des chemins correspondant ` a ce couplage
minimal
6. Appliquer l’algorithme de Fleury sur le graphe r´ esultant.
III.3 Graphes hamiltoniens
Graphe hamiltonien
Definition
Un cycle hamiltonien est un cycle qui passe par tous les sommets d’un graphe.
Un graphe est dit hamiltonien s’il admet un circuit hamiltonien.
v1
v2
v3
v4
v5
v6
v7
v8
I
Dans le cas o` u toutes les arˆ etes sont de poids ´ egaux et o` u il existe un
circuit hamiltonien, ce dernier est la solution optimale pour le probl` eme du
voyageur de commerce.
III.4 Un peu de complexit´ e
P et NP
I
Un probl` eme de d´ ecision est un probl` eme dont la r´ eponse est oui ou non.
I
Un probl` eme est dans la classe P si il peut ˆ etre r´ esolu en en temps polynomial en la taille de l’instance (ex : existence d’un chemin eul´ erien).
I
Un probl` eme est dans la classe NP si la validit´ e d’une solution peut ˆ etre v´ erifi´ ee en un temps polynomial (ex : chemin hamiltonien).
I
Un probl` eme est NP-complet si son appartenance ` a P implique que tout
porbl` eme de NP est dans P.
P=NP ?
0n a facilement que P⊂NP. Il en r´ esulte que :
I
soit il existe un probl` eme NP-complet qui est dans P et P=NP
I
soit P et NP sont disjoints et un probl` eme NP complet ne peut pas ˆ etre r´ esolu en un temps polynomial.
Savoir laquelle de ces assertions est vraie reste une conjecture ouverte mais la
seconde est plus que vraisemblablement la bonne.
Probl` emes NP-complets
I
On d´ emontre qu’un probl` eme P
1est NP complet en montrant que si on peut le r´ esoudre en temps polynomial, alors on peut r´ esoudre en temps polynomial un autre probl` eme P
2d´ ej` a connu comme ´ etant NP-complet.
On parle de r´ eduction du probl` eme P
2au probl` eme P
1.
I
Karp (1972) a publi´ e une liste de 21 probl` emes NP-complets qui servent de r´ ef´ erence. Le principal ´ etant le probl` eme 3-SAT.
Definition
Probl` eme 3-SAT On consid` ere n variables bool´ eennes x
1, . . . , x
n, et m clauses C
1, . . . , C
mde type ou incluant chacune 3 variables ou leur n´ egation (ex : C
1= x
1∨ x
2∨ x
4).
D´ ecider s’il existe une affectation des variables telle que C = C
1∧ . . . ∧ C
mest
satisfaite.
Probl` emes NP-complets
I
On d´ emontre qu’un probl` eme P
1est NP complet en montrant que si on peut le r´ esoudre en temps polynomial, alors on peut r´ esoudre en temps polynomial un autre probl` eme P
2d´ ej` a connu comme ´ etant NP-complet.
On parle de r´ eduction du probl` eme P
2au probl` eme P
1.
I
Karp (1972) a publi´ e une liste de 21 probl` emes NP-complets qui servent de r´ ef´ erence. Le principal ´ etant le probl` eme 3-SAT.
I
Ces notions s’´ etendent aux probl` emes qui ne sont pas des probl` emes de d´ ecision mais peuvent se d´ ecomposer en un nombre polynomial de probl` emes de d´ ecision.
Ex : trouver la longueur maximale d’un chemin se d´ ecompose en le
probl` eme de d´ ecision pour l’existence d’un chemin de longueur k pour tout
k entre 1 et n.
III.5 Retour au voyageur de commerce
NP-compl´ etude
Proposition
Le probl` eme de d´ ecision du cycle hamiltonien est NP-complet.
Proposition
Le probl` eme de d´ ecision du voyageur de commerce est NP-complet.
Il faut donc se contenter d’heuristiques, c’est-` a-dire d’algorithmes donnant une
solution approch´ ee.
IV. Flots dans les graphes
Probl` eme
On consid` ere un graphe dirig´ e G tel que :
1. il existe deux ensembles disjoints S et P de sommets, respectivement appel´ es sources et puits ;
2. chaque arˆ ete e est valu´ e par une capacit´ e c(e) correspondant au flux maximum pouvant transiter par cette arˆ ete.
Probl` eme
Quel est le flux maximal pouvant aller des sources vers les puits sans perte interm´ ediaire ?
I
Dans le cas d’un graphe non-dirig´ e, on remplace chaque arˆ ete par deux
arˆ etes dirig´ ees oppos´ ees de mˆ eme capacit´ e que l’arˆ ete initiale.
Flot
Notations
I
Pour tout ensemble A de sommets, on note A = V (G) \ A et (A, A) l’ensemble des arˆ etes de A vers A.
I
Pour toute fonction f : E (G) → R , on note f
+(A) = P
c∈(A,A)
f (c) et f
−(S) = P
c∈(A),A
f (c).
Definition
Un flot est une fonction f : E(G) → R telle que : 1. pour tout e, 0 ≤ f (e ) ≤ c(e) ;
2. pour tout sommet v ∈ / S ∪ P , f
+(v) = f
−(v ).
Flot
Exemple
Valeur d’un flot
Proposition
Pour tout flot f dans G, f
+(S) − f
−(S) = f
−(P) − f
+(P ). Cette valeur est not´ ee val (f ).
Definition
Un flot f est maximal s’il n’existe pas de flot f
0avec val(f
0) > val(f ).
Combien de sources et de puits ?
Proposition
Probl` eme 1 : Soit (G, c ) un graphe dirig´ e valu´ e, S ⊂ V (G), P ⊂ V (G).
D´ eterminer un flot maximal de S vers P.
Probl` eme 2 : Soit (H , c) un graphe dirig´ e valu´ e, s ∈ V (H ), p ∈ V (H ).
D´ eterminer un flot maximal de s vers p.
Les probl` emes 1 et 2 sont ´ equivalents.
I