• Aucun résultat trouvé

Algorithmique avanc´ee

N/A
N/A
Protected

Academic year: 2022

Partager "Algorithmique avanc´ee"

Copied!
114
0
0

Texte intégral

(1)

Algorithmique avanc´ ee

L3 Informatique Etienne Birmel´e

(2)

I. Introduction : Notion de graphe

(3)

Notion de graphe

Graphe

UngrapheGest un couple(V,E)o`uV 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).

v1

v2

v3

v4

v5

v6

v7

v8

(4)

Notion 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.

Exemples :

I 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.

I GPS : recherche de chemins les plus courts dans un graphe avec des poids sur les arˆetes.

(5)

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´eouorient´e.

I avec ou sansboucle

I simpleou avec desarˆetes multiples

I color´es(sommets ou arˆetes)

I valu´es(sommets ou arˆetes)

v1

v2

v3

v4 v1

v2

v3

v4

(6)

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´eouorient´e.

I avec ou sansboucle

I simpleou avec desarˆetes multiples

I color´es(sommets ou arˆetes)

I valu´es(sommets ou arˆetes)

v1

v2

v3

v4 v1

v2

v3

v4

(7)

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´eouorient´e.

I avec ou sansboucle

I simpleou avec desarˆetes multiples

I color´es(sommets ou arˆetes)

I valu´es(sommets ou arˆetes)

v1

v2

v3

v4 v1

v2

v3

v4

(8)

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´eouorient´e.

I avec ou sansboucle

I simpleou avec desarˆetes multiples

I color´es(sommets ou arˆetes)

I valu´es(sommets ou arˆetes)

v1

v2

v3

v4 v1

v2

v3

v4

(9)

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´eouorient´e.

I avec ou sansboucle

I simpleou avec desarˆetes multiples

I color´es(sommets ou arˆetes)

I valu´es(sommets ou arˆetes)

6 2

3

14 v1

v2

v3

v4

2

3 4 2

1

(10)

Degr´ es

Definition

Ledegr´ed’un sommetv, not´ed(v), d´esigne son nombre de voisins.

Dans le cas des graphes dirig´es, on distingue ledegr´e sortantd+(v)et ledegr´e entrantd(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 sommetv.

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.

(11)

Codage d’un graphe

Il y a principalement trois types de codages pour un graphe :

Matrice d’adjacence matrice carr´eeM de taillen×ntel queMuvrepr´esente l’interaction entreu etv :0s’il n’y a pas d’arˆete,1si il y a une arˆete deu versv.

Dans le cas non-dirig´e, cette matrice est sym´etrique.

Dans le cas arˆete-valu´e, on remplace le coefficient1par le poids de l’arˆete concern´ee.

Liste d’arˆetes matrice de taillem×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).

(12)

Codage d’un graphe

Stockage u etv sont-ils voisins ? degr´e d’un sommetv

Matrice d’adjacence O(n2) 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<<n2).

(13)

Isomorphisme de graphes

La repr´esentation graphique d’un graphe n’est pas unique.

Isomorphisme de graphes

Deux graphesG= (V(G),E(G))etH = (V(H),E(H))sontisomorphess’il existe une bijectionφ:E(G)→E(H)telle que(u,v)∈E(G)si et seulement si(φ(u), φ(v))∈E(H).

v1

v2

v3

v4 w1

w2

w3

w4

I Dans le cas des graphes valu´es, il faut que la bijection pr´eserve aussi les poids.

(14)

Chemins et marches

Chemin et marche

Uncheminde longueurk entre deux sommetsu etv est une suite dek arˆetes (ui,ui+1)tels queu0=u,uk=v et tous lesui sont disjoints.

Dans le cas de graphes orient´es, unchemin orient´en´ecessite l’orientation des arˆetes dans le sens−−−−→uiui+1.

Si les arˆetes et les sommets ne sont pas tous disjoints, on parle demarcheentre u etv.

v1

v2

v3

v4

v5

v6

v7

v8

I v6,v3,v2,v4est un chemin de longueur3.

I v7,v4,v8,v7,v5 est une marche.

(15)

Chemins et marches

Chemin et marche

Uncheminde longueurk entre deux sommetsu etv est une suite dek arˆetes (ui,ui+1)tels queu0=u,uk=v et tous lesui sont disjoints.

Dans le cas de graphes orient´es, unchemin orient´en´ecessite l’orientation des arˆetes dans le sens−−−−→uiui+1.

Si les arˆetes et les sommets ne sont pas tous disjoints, on parle demarcheentre u etv.

v1

v2

v3

v4

v5

v6

v7

v8

I v6,v3,v2,v4est un chemin orient´e.

I v4,v8,v7,v5n’en est pas un.

(16)

Cycles

Definition

Uncyclede longueurk est une suite dek arˆetes(ui,ui+1)tels queu0=uk et tous lesui sont disjoints.

Dans le cas de graphes orient´es, uncycle orient´en´ecessite l’orientation des arˆetes dans le sens−−−−→uiui+1.

v1

v2

v3

v4

v5

v6

v7

v8

I v6,v3,v2,v5,v7,v8 est un cycle de longueur6.

(17)

Graphe connexe

Connexit´e

Un graphe non orient´e estconnexesi 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

(18)

Graphe orient´ e fortement connexe

Definition

Un graphe orient´e estfortement connexesi pour toute paire(u,v)de sommets, il existe un chemin orient´e deu versv et un chemin orient´e dev versu.

Il est ditsimplement connexesi 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

(19)

Distance et diam` etre

Definition

Ladistanceentre deux sommetsu etv appartenant `a la mˆeme composante connexe d’un graphe arˆete-valu´e est le poids minimum d’un chemin entreu 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.

(20)

Distance et diam` etre

Definition

Lediam`etred’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 dev3 `av5 est de2.

I Quel est le diam`etre deG?

(21)

II. Parcours de graphes : arbres couvrants

(22)

II.1 Arbres

(23)

D´ efinition

Arbre

Un graphe non-orient´e connexe et acyclique est appel´e unarbre.

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.

(24)

Arbre enracin´ e

D´efinition

Consid´erons un entiernet un grapheGdont les sommets ont une ´etiquette appel´eeniveau construit par le processus suivant :

I on initialiseV(G)`a un sommetr de niveau0,E(G)`a l’ensemble vide.

I pouri entre1etn,

pour tout sommetv de niveaui,

on ajoute `aV(G)un nombre fini de sommetsw1, . . . ,wkv dont le niveau esti+ 1, et on ajoute `aE(G)les arˆetes{(v,wi),1≤i ≤wi}.

Le grapheGest unarbre enracin´e.r est appel´eracinedeG.

Les sommets(w1, . . . ,wkv de niveaui+ 1li´es `a un sommetv de degr´ei sont appel´es lesfilsdev.v est lep`erede ses sommets. On en d´eduit la notion de descendantset d’ancˆetresd’un sommet.

Un sommet sans fils est appel´e unefeuille.

(25)

Arbre enracin´ e

r

v1 v2

v3 v4 v5

v6 v7 v8

Proposition

Tout arbre enracin´e est un arbre. De plus, pour tout arbreT et tout sommet de r∈V(T),T peut ˆetre construit comme un arbre enracin´e de raciner.

Cons´equence :Tout arbre an−1arˆetes.

(26)

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.

(27)

Arbre couvrant

Definition

SoitGun graphe. Un arbre couvrant deG est un sous-grapheT deGtel que T est un arbre etV(T) =V(G).

v1

v2

v3

v4

v5

v6

v7

v8

(28)

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 an−1arˆetes.

2. D´ecider si un graphe est connexe est ´equivalent `a d´ecider qu’il admet un arbre couvrant.

(29)

II.2 Parcours en largeur

(30)

Probl` eme

SoitGun 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.

(31)

Arbre de parcours en largeur

I Appel´eBFSpourBreadth-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 unefile, 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.

(32)

BFS : illustration

v1

v2

v3

v4

v5

v6

v7

v8

v3

F={v3}

(33)

BFS : illustration

v1

v2

v3

v4

v5

v6

v7

v8

v3

v1

F ={v3,v1}

(34)

BFS : illustration

v1

v2

v3

v4

v5

v6

v7

v8

v3

v1 v2

F ={v3,v1,v2}

(35)

BFS : illustration

v1

v2

v3

v4

v5

v6

v7

v8

v3

v1 v2 v6

F={v3,v1,v2,v6} puisF={v1,v2,v6}

(36)

BFS : illustration

v1

v2

v3

v4

v5

v6

v7

v8

v3

v1 v2 v6

F ={v1,v2,v6} puisF ={v2,v6}.

Aucun sommet n’est ajout´e `a la file.

(37)

BFS : illustration

v1

v2

v3

v4

v5

v6

v7

v8

v3

v1 v2 v6

v4 v5

F ={v2,v6,v4} puisF ={v2,v6,v4,v5}

puisF={v6,v4,v5}

(38)

BFS : illustration

v1

v2

v3

v4

v5

v6

v7

v8

v3

v1 v2 v6

v4 v5 v8

F={v6,v4,v5,v8} puisF={v4,v5,v8}

(39)

BFS : illustration

v1

v2

v3

v4

v5

v6

v7

v8

v3

v1 v2 v6

v4 v5 v8

v7

F={v4,v5,v8,v7} puisF se vide et l’algorithme

s’arrˆete.

(40)

BFS : pseudo-code

Data:Un grapheGet un sommetv Result:Un arbreT enracin´e env F={v};T =v

for u sommet deG do u.visit´e=FALSE end

while F 6=∅do

u = premier ´el´ement deF forw voisin deu do

if w.visit´e =FALSE then w.visit´e=TRUE Ajouterw `aF

Ajouterw et(u,w)`aT end

end

Supprimeru deF end

Algorithm 1:Algorithme BFS

(41)

BFS

Proposition

BFS construit un arbre enracin´e env contenant tous les sommets de la composante connexe dev.

Proposition

BFS est de complexit´eO(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 uneforˆetcontenant autant d’arbres que le graphe a de composantes connexes.

(42)

BFS et distance

On consid`ere un grapheGnon valu´e.

SoitT un arbre BFSenracin´e enr. Pour tout sommetu, on noteniv(u)le niveau deu dansT.

Proposition

Pour tout(u,v)∈E(G),|niv(u)−niv(v)| ≤1.

Proposition

Pour toutu∈V(G),niv(u) =d(u,r).

(43)

BFS orient´ e

On consid`ere un grapheGorient´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 sommetu 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.

(44)

II.3 Parcours en profondeur

(45)

Probl` eme

SoitGun 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.

(46)

Arbre de parcours en profondeur

I Appel´eDFSpourDepth-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 unepile, 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.

(47)

DFS : illustration

v1

v2

v3

v4

v5

v6

v7

v8

v3

P={v3}

(48)

DFS : illustration

v1

v2

v3

v4

v5

v6

v7

v8

v3

v2

P ={v3,v2}

(49)

DFS : illustration

v1

v2

v3

v4

v5

v6

v7

v8

v3

v2

v4

P ={v3,v2,v4}

(50)

DFS : illustration

v1

v2

v3

v4

v5

v6

v7

v8

v3

v2

v4

v8

P={v3,v2,v4,v8}

(51)

DFS : illustration

v1

v2

v3

v4

v5

v6

v7

v8

v3

v2

v4

v8

v6

P ={v3,v2,v4,v8,v6} puisP ={v3,v2,v4,v8}

(52)

DFS : illustration

v1

v2

v3

v4

v5

v6

v7

v8

v3

v2

v4

v8

v6 v7

P ={v3,v2,v4,v8,v7}

(53)

DFS : illustration

v1

v2

v3

v4

v5

v6

v7

v8

v3

v2

v4

v8

v6 v7

v5

P ={v3,v2,v4,v8,v7,v5} puis se d´epile jusqu’`a

P ={v3,v2}

(54)

DFS : illustration

v1

v2

v3

v4

v5

v6

v7

v8

v3

v2

v4

v8

v6 v7

v5

v1

P ={v3,v2,v1} puis se d´epile jusqu’`a ˆetre vide.

(55)

DFS : pseudo-code

Data:Un grapheGet un sommetv Result:Un arbreT enracin´e env P={v};T=v;

for u sommet deG do u.visit´e=FALSE end

v.visit´e=TRUE while P 6=∅do

u = dernier ´el´ement deP

if il existew voisin deu avecw.visit´e=FALSE then w.visit´e=TRUE

Ajouterw `aP

Ajouterw et(u,w)`aT end

else

Supprimeru deP; end

end

Algorithm 2:Algorithme DFS

(56)

DFS : pseudo-code r´ ecursif

Data:Un grapheGet un sommetv Result:Un arbreT enracin´e env P=∅;T =v

for u sommet deG do u.visit´e=FALSE end

FunctionDFS(G,T,u) u.visit´e = TRUE forw voisin deu do

if w.visit´e=FALSE then Ajouterw et(u,w)`aT DFS(G,T,w)

end end DFS(G,T,v)

Algorithm 3:Algorithme DFS r´ecursif

(57)

DFS

Proposition

DFS construit un arbre enracin´e env contenant tous les sommets de la composante connexe dev.

Proposition

DFS est de complexit´eO(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 uneforˆetcontenant autant d’arbres que le graphe a de composantes connexes.

I Toutes ces propri´et´es sont identiques avec BFS.

(58)

Topologie des DFS

SoitT un DFS sur un grapheG.

I Aucun rapport entre la distance `a la racine et la distance dansG(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 deG,u´etant le premier sommet d´ecouvert par le DFS.

Alorsu est un ancˆetre dev.

(59)

DFS orient´ e

On consid`ere un grapheGorient´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 deT de la gauche vers la droite, il n’y a aucune arˆete dansGqui ajouterait `aT une arˆete transversale de la gauche vers la droite.

(60)

II.4 Arbre couvrant de poids minimal

(61)

Probl` eme

SoitGun 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).

(62)

Algorithme de Kruskal

Data:Un graphe connexe valu´eG

Result:Un arbre couvrantT de poids minimal

Ranger les arˆetes deGpar poids croissant dans une listeL; F une forˆet couvrante sans arˆetes

while F n’est pas un arbre do e = premi`ere arˆete deL

if les extremit´es dee ne sont pas dans le mˆeme arbre deF then F =F+e

end

Supprimere deL end

Algorithm 4:Algorithme de Kruskal

(63)

Algorithme de Kruskal : exemple

v1

v2

v3

v4

v5

v6

v7

v8

3

1 4

3 5

2

4

6 1 2

3

(64)

Algorithme de Kruskal : exemple

v1

v2

v3

v4

v5

v6

v7

v8

3

1 4

3 5

2

4

6 1 2

3

(65)

Algorithme de Kruskal : exemple

v1

v2

v3

v4

v5

v6

v7

v8

3

1 4

3 5

2

4

6 1 2

3

(66)

Algorithme de Kruskal : exemple

v1

v2

v3

v4

v5

v6

v7

v8

3

1 4

3 5

2

4

6 1 2

3

(67)

Algorithme de Kruskal : exemple

v1

v2

v3

v4

v5

v6

v7

v8

3

1 4

3 5

2

4

6 1 2

3

(68)

Algorithme de Kruskal : exemple

v1

v2

v3

v4

v5

v6

v7

v8

3

1 4

3 5

2

4

6 1 2

3

(69)

Algorithme de Kruskal : exemple

v1

v2

v3

v4

v5

v6

v7

v8

3

1 4

3 5

2

4

6 1 2

3

(70)

Algorithme de Kruskal : exemple

v1

v2

v3

v4

v5

v6

v7

v8

3

1 4

3 5

2

4

6 1 2

3

(71)

Algorithme de Kruskal : exemple

v1

v2

v3

v4

v5

v6

v7

v8

3

1 4

3 5

2

4

6 1 2

3

(72)

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 deO(mlogm).

I SiGn’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 deG.

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.

(73)

Complexit´ e de Kruskal : Union-Find

I Trierm arˆetes se fait enO(mlogm)

I Pour chaque arˆete(x,y), il faut

I trouver la composante connexe dex ety : fonctionFIND

I comparerFIND(x)etFIND(y)

I si ils sont diff´erents, fusionner les deux composantes connexes : op´eration UNION

Soitα(n,m)la somme des complexit´es deFIND etUNION. La complexit´e de l’algorithme de Kruskal est alorsO(mlogm+mα(n,m).

(74)

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

FINDest en temps constant,UNION enO(n):α=O(n).

(75)

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

(76)

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´eO(h), o`uh 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

(77)

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

(78)

Complexit´ e de Kruskal : Union-Find

Proposition

La hauteur d’un arbre avecssommets, construit par une suite d’applications de UNION, est major´e par1 + log2s.

On en d´eduit queα=O(logm)et donc que l’algorithme de Kruskal est de complexit´eO(mlogm).

Complexit´e amortie

I Quand on remonte dans l’arbre vers la raciner, on fait de chaque sommet parcouru un fils der.

I Op´ererr FIND ets UNION se fait en0(r+sf(r,s))o`uf est une fonction qui croˆıt tr`es lentement (f(n,m)≤4pourn,m≤22048).

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.

(79)

Complexit´ e de Kruskal : Union-Find

Proposition

La hauteur d’un arbre avecssommets, construit par une suite d’applications de UNION, est major´e par1 + log2s.

On en d´eduit queα=O(logm)et donc que l’algorithme de Kruskal est de complexit´eO(mlogm).

Complexit´e amortie

I Quand on remonte dans l’arbre vers la raciner, on fait de chaque sommet parcouru un fils der.

I Op´ererr FIND ets UNION se fait en0(r+sf(r,s))o`uf est une fonction qui croˆıt tr`es lentement (f(n,m)≤4pourn,m≤22048).

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.

(80)

Algorithme de Prim

Data:Un graphe connexe valu´eGet un sommetv Result:Un arbre couvrantT de poids minimal T={v}

while il existe des arˆetes deT versG\T do

Trouver l’arˆetee de poids minimal deT versG\T T=T+e

end

Algorithm 5:Algorithme de Prim

(81)

Algorithme de Prim : exemple

v1

v2

v3

v4

v5

v6

v7

v8

3

1 4

3 5

2

4

6 1 2

3

V(T) ={v3}

(82)

Algorithme de Prim : exemple

v1

v2

v3

v4

v5

v6

v7

v8

3

1 4

3 5

2

4

6 1 2

3

V(T) ={v3,v1}

(83)

Algorithme de Prim : exemple

v1

v2

v3

v4

v5

v6

v7

v8

3

1 4

3 5

2

4

6 1 2

3

V(T) ={v3,v1,v6}

(84)

Algorithme de Prim : exemple

v1

v2

v3

v4

v5

v6

v7

v8

3

1 4

3 5

2

4

6 1 2

3

V(T) ={v3,v1,v6,v2}

(85)

Algorithme de Prim : exemple

v1

v2

v3

v4

v5

v6

v7

v8

3

1 4

3 5

2

4

6 1 2

3

V(T) ={v3,v1,v6,v2,v4}

(86)

Algorithme de Prim : exemple

v1

v2

v3

v4

v5

v6

v7

v8

3

1 4

3 5

2

4

6 1 2

3

V(T) ={v3,v1,v6,v2,v4,v7}

(87)

Algorithme de Prim : exemple

v1

v2

v3

v4

v5

v6

v7

v8

3

1 4

3 5

2

4

6 1 2

3

V(T) ={v3,v1,v6,v2,v4,v7,v8}

(88)

Algorithme de Prim : exemple

v1

v2

v3

v4

v5

v6

v7

v8

3

1 4

3 5

2

4

6 1 2

3

V(T) ={v3,v1,v6,v2,v4,v7,v8,v5}

(89)

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 deO(mn)pour un code na¨ıf.

Elle peut ˆetre abaiss´ee enO(mlogn)en codant `a l’aide de tas binaires et en O(m+nlogn)`a l’aide de tas de Fibonacci.

I SiGn’est pas connexe, le r´esultat est un arbre couvrant de poids minimal de la composante connexe deG. 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.

(90)

II.5 Algorithme de Dijkstra

(91)

Probl` eme

On consid`ere un grapheGvalu´e et deux sommetsu etv deG. Trouver le plus court chemin (au sens de la somme des poids) entreu etv.

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´eG et un sommetu deG. Construire un arbre couvrantTu tel que, pour tout sommetv, la distance deu `av est la mˆeme dansG et dansTu.

(92)

Probl` eme

On consid`ere un grapheGvalu´e et deux sommetsu etv deG. Trouver le plus court chemin (au sens de la somme des poids) entreu etv.

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´eG et un sommetu deG. Construire un arbre couvrantTu tel que, pour tout sommetv, la distance deu `av est la mˆeme dansG et dansTu.

(93)

Illustration

v1

v2

v3

v4

v5

v6

v7

v8

3

1 1

3 5

2

4

6 1 2

3

Sommet v1 v2 v3 v4 v5 v6 v7 v8

Distance (rouge si finale) 0 3 1 ∞ ∞ ∞ ∞ ∞

(94)

Illustration

v1

v2

v3

v4

v5

v6

v7

v8

3

1 1

3 5

2

4

6 1 2

3

Sommet v1 v2 v3 v4 v5 v6 v7 v8

Distance (rouge si finale) 0 2 1 ∞ ∞ 3 ∞ ∞

(95)

Illustration

v1

v2

v3

v4

v5

v6

v7

v8

3

1 1

3 5

2

4

6 1 2

3

Sommet v1 v2 v3 v4 v5 v6 v7 v8

Distance (rouge si finale) 0 2 1 5 7 3 ∞ ∞

(96)

Illustration

v1

v2

v3

v4

v5

v6

v7

v8

3

1 1

3 5

2

4

6 1 2

3

Sommet v1 v2 v3 v4 v5 v6 v7 v8

Distance (rouge si finale) 0 2 1 5 7 3 ∞ 9

(97)

Illustration

v1

v2

v3

v4

v5

v6

v7

v8

3

1 1

3 5

2

4

6 1 2

3

Sommet v1 v2 v3 v4 v5 v6 v7 v8

Distance (rouge si finale) 0 2 1 5 7 3 7 8

(98)

Illustration

v1

v2

v3

v4

v5

v6

v7

v8

3

1 1

3 5

2

4

6 1 2

3

Sommet v1 v2 v3 v4 v5 v6 v7 v8

Distance (rouge si finale) 0 2 1 5 7 3 7 8

(99)

Data:Un graphe connexe valu´eGde fonction de poidsωet un sommetu Result:Un arbre couvrantT et la distanceD(v) =dG(u,v)pour toutv 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

forv voisin dedernier 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

Selectionnerv ∈/V(T)tel quedist prov est minimum Ajouter(pere(v),v)aT

dist finale(v) :=dist prov(v) dernier ajout:=v

end

Algorithm 6:Algorithme de Dijkstra

(100)

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(n2)pour un code na¨ıf, et peut ˆetre r´eduite `aO(m+nlogn)`a l’aide de tas binaire et mˆemeO(m+nlogn)`a l’aide de tas de Fibonacci.

(101)

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 entretoutes 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.

(102)

Algorithme de Floyd-Warshall : principe

On num´erote les sommets de1`an.

On calcule pour toutk la matriceWk telle queWuvk contient le poids du chemin de poids minimal entreu etv dont tous les sommets internes appartiennent `a{1, . . . ,k}.

I Wijk = min(Wijk−1,Wikk−1+Wkjk)

I Wijn,1≤k ≤n est le poids du plus court chemin.

I La complexit´e est deO(n3).

(103)

IV. Flots dans les graphes

(104)

Probl` eme

On consid`ere un graphe dirig´eGtel que :

1. il existe deux ensembles disjointsS etP de sommets, respectivement appel´es sources et puits ;

2. chaque arˆetee est valu´e par une capacit´ec(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.

(105)

Flot

Notations

I Pour tout ensembleAde sommets, on noteA=V(G)\Aet(A,A) l’ensemble des arˆetes deAversA.

I Pour toute fonctionf :E(G)→R, on notef+(A) =P

c∈(A,A)f(c)et f(S) =P

c∈(A),Af(c).

Definition

Unflotest une fonctionf :E(G)→Rtelle que : 1. pour toute,0≤f(e)≤c(e);

2. pour tout sommetv ∈/S∪P,f+(v) =f(v).

(106)

Flot

Exemple

(107)

Valeur d’un flot

Proposition

Pour tout flotf dansG,f+(S)−f(S) =f(P)−f+(P). Cette valeur est not´eeval(f).

Definition

Un flotf est maximal s’il n’existe pas de flotf0avecval(f0)>val(f).

(108)

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 deS versP.

Probl`eme 2 :Soit(H,c)un graphe dirig´e valu´e,s∈V(H),p∈V(H).

D´eterminer un flot maximal desversp.

Les probl`emes 1 et 2 sont ´equivalents.

I On se limite dor´enavant au cas o`u il y a une source et un puits

(109)

Coupe

Definition

Unecoupeest un coupleK = (A,A)tel ques∈Aetp∈A. Lacapacit´e d’une coupecap(K)est la somme des capacit´es des ses arˆetes.

Proposition

Pour toute coupeK = (A,A)et tout flotf,val(f) =f+(A)−f(A).

Par cons´equent, pour toute coupeK et tout flotf,val(f)≤cap(K).

En particulier,maxfval(f)≤minKcap(K).

(110)

Th´ eor` eme max-flot min-cut

Th´eor`eme

Dans tout r´eseau, le flot maximal a pour valeur la capacit´e de la coupe minimale.

I La preuve de ce th´eor`eme est constructive, `a savoir qu’on va montrer l’existence de ce flot en pr´esentant une mani`ere de le construire (et donc de r´esoudre le Probl`eme 2).

(111)

Saturation d’un chemin

Definition

Soitf un flot etP un chemin entres etp, les arˆetes pouvant ˆetre parcourues dans les deux sens. Soite(P)les arˆetes parcourues `a contre-sens parP et e(P)+ celle parcourues dans le bon sens. La saturation du cheminP est alors d´efinie par

sat(P) = min min

e∈e(P)+(c(e)−f(e)), min

e∈e(P)f(e) Sisat(P) = 0, le chemin est ditsatur´e.

(112)

Saturation d’un chemin

I L’existence d’un chemin non satur´e permet d’augmenter la valeur def. En effet, en ajoutantsat(P)sur les arˆetes dee(P)+ et en enlevantsat(P) sur les arˆetes dee(P), on obtient un nouveau flot dont la valeur a augment´e desat(P).

I En fait, il s’agit d’une condition n´ecessaire et suffisante pour pouvoir augmenter un flot :

Proposition

Un flotf est maximal si et seulement si il n’y a pas de chemin non-satur´e entre setp.

(113)

Construction d’un flot maximal

Recherche d’un chemin satur´e

On utilise une variante de l’arbre de parcours en profondeur enracin´e ens :

I on parcourt une arˆete dans le bon sens uniquement si elle n’est pas satur´ee ;

I on parcourt une arˆete `a contresens uniquement si son flot est non-nul.

Sip est atteint lors de ce parcours, le cheminP allant des `apdans l’arbre de parcours est un chemin non-satur´e. Sa sturation vaut

α= min mine∈e(P)+(c(e)−f(e)),mine∈e(P)f(e) .

Construction d’un flot maximal

I on part d’un flot connu, par exemple le flot nul.

I tant que l’on trouve un chemin non-satur´e entres etp (parfois appel´e chemin augmentant), on remet le flot `a jour. Quand cela n’est plus possible, l’algorithme stoppe.

(114)

Une cons´ equence : le(s) th´ eor` eme(s) de Menger

Th´eor`eme

Menger SoitS etP deux ensembles de sommets d’un grapheG. Pour tout entierk, soit il existek+ 1chemins arˆetes-disjoints reliantS `aP, soit il existe au plusk arˆetes dont la suppression d´econnecteS deP.

Definition

Un graphe estk-connexe si, pour toute paire de sommetsu etv, il existek chemins disjoints, c’est-`a-dire n’ayant aucun sommet interne en commun.

Definition

Un s´eparateur d’un graphe est un ensemble de sommetsX tel queG\X a un nombre de composantes connexes sup´erieur `a celui deG.

SoitS etP deux ensembles de sommets. Un(S,P)-s´eparateurX est un s´eparateur tel qu’aucun chemin reliant un sommet deS `a un sommet deP n’existe dansG\X.

Th´eor`eme

Menger Un graphe contientk chemins disjoints entre deux ensembles de sommetsS etP si et seulement siGne contient pas de(S,P)-s´eparateur de taille au plusk−1.

Un graphe estk-connexe si et suelement siGne contient pas de s´eparateur de taille au plusk−1.

Références

Documents relatifs

tomate, olives, origan, emmental, roquefort, mozzarella, chèvre servie uniquement 1 pizza par personne..

Coordonnateur 2004 2008 L’Initiative Pays Pauvres Très Endettés, en abrégé PPTE, est un dispositif mis en place par la Banque Mondiale et le Fonds

Tous les graphes consid´ er´ es dans cette section sont non orient´ es et simples, c’est-` a-dire sans multi-arˆ etes et sans boucle..

Alors, on peut d´ eplacer le disque de diam` etre 1 vers n’importe lequel des autres piquets (deux coups possibles) et le disque de diam` etre x au-dessus du disque diam` etre y

Montrer que dans une coloration optimale d’un graphe G (c’est-` a-dire une coloration avec χ(G) couleurs), il existe un sommet de chaque couleur qui “voit” toutes les

3 Les montants concernant le fo n d s de p éréq u atio n directe (alimentation et redistribution) et la cohésion sociale ont été budgétés sur la base des indications

Face à cette situation, les personnes noires sont obligées tout à la fois d’adopter un pro- fil bas pour éviter les ennuis et de préserver leur dignité notamment par un mode de

[r]