• Aucun résultat trouvé

Algorithmique avanc´ee

N/A
N/A
Protected

Academic year: 2022

Partager "Algorithmique avanc´ee"

Copied!
193
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

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

1

v

2

v

3

v

4

v

5

v

6

v

7

v

8

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

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.

(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´ 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

1

v

2

v

3

v

4

v

1

v

2

v

3

v

4

(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´ 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

1

v

2

v

3

v

4

v

1

v

2

v

3

v

4

(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´ 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

1

v

2

v

3

v

4

v

1

v

2

v

3

v

4

(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´ 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

1

v

2

v

3

v

4

v

1

v

2

v

3

v

4

(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´ 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

1

v

2

v

3

v

4

2

3 4 2

1

(10)

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

2

arˆ 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.

(11)

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.

(12)

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

uv

repr´ 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).

(13)

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

).

(14)

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

1

v

2

v

3

v

4

w

1

w

2

w

3

w

4

I

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

poids.

(15)

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

i

sont disjoints.

Dans le cas de graphes orient´ es, un chemin orient´ e n´ ecessite l’orientation des arˆ etes dans le sens −−−−→ u

i

u

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

4

est un chemin de longueur 3.

I

v

7

, v

4

, v

8

, v

7

, v

5

est une marche.

(16)

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

i

sont disjoints.

Dans le cas de graphes orient´ es, un chemin orient´ e n´ ecessite l’orientation des arˆ etes dans le sens −−−−→ u

i

u

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

4

est un chemin orient´ e.

I

v

4

, v

8

, v

7

, v

5

n’en est pas un.

(17)

Cycles

Definition

Un cycle de longueur k est une suite de k arˆ etes (u

i

, u

i+1

) tels que u

0

= u

k

et tous les u

i

sont disjoints.

Dans le cas de graphes orient´ es, un cycle orient´ e n´ ecessite l’orientation des arˆ etes dans le sens −−−−→ u

i

u

i+1

.

v1

v2

v3

v4

v5

v6

v7

v8

I

v

6

, v

3

, v

2

, v

5

, v

7

, v

8

est un cycle

de longueur 6.

(18)

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

(19)

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

(20)

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.

(21)

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

5

est de 2.

I

Quel est le diam` etre de G ?

(22)

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 !

(23)

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 !

(24)

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 !

(25)

II. Parcours de graphes : arbres couvrants

(26)

II.1 Arbres

(27)

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.

(28)

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

kv

dont 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

kv

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

(29)

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.

(30)

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.

(31)

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

(32)

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.

(33)

II.2 Parcours en largeur

(34)

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.

(35)

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.

(36)

BFS : illustration

v1

v2

v3

v4

v5

v6

v7

v8

v3

F = {v

3

}

(37)

BFS : illustration

v1

v2

v3

v4

v5

v6

v7

v8

v3

v1

F = {v

3

, v

1

}

(38)

BFS : illustration

v1

v2

v3

v4

v5

v6

v7

v8

v3

v1 v2

F = {v

3

, v

1

, v

2

}

(39)

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

}

(40)

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.

(41)

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

}

(42)

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

}

(43)

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.

(44)

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

(45)

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.

(46)

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

(47)

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.

(48)

II.3 Parcours en profondeur

(49)

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.

(50)

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.

(51)

DFS : illustration

v1

v2

v3

v4

v5

v6

v7

v8

v3

P = {v

3

}

(52)

DFS : illustration

v1

v2

v3

v4

v5

v6

v7

v8

v3

v2

P = {v

3

, v

2

}

(53)

DFS : illustration

v1

v2

v3

v4

v5

v6

v7

v8

v3

v2

v4

P = {v

3

, v

2

, v

4

}

(54)

DFS : illustration

v1

v2

v3

v4

v5

v6

v7

v8

v3

v2

v4

v8

P = {v

3

, v

2

, v

4

, v

8

}

(55)

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

}

(56)

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

}

(57)

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

}

(58)

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.

(59)

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

(60)

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

(61)

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.

(62)

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 .

(63)

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.

(64)

II.4 Arbre couvrant de poids minimal

(65)

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

(66)

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

(67)

Algorithme de Kruskal : exemple

v

1

v

2

v

3

v

4

v

5

v

6

v

7

v

8

3 1

4 3 5

2

4

6

1

2

3

(68)

Algorithme de Kruskal : exemple

v

1

v

2

v

3

v

4

v

5

v

6

v

7

v

8

3 1

4 3 5

2

4

6

1

2

3

(69)

Algorithme de Kruskal : exemple

v

1

v

2

v

3

v

4

v

5

v

6

v

7

v

8

3 1

4 3 5

2

4

6

1

2

3

(70)

Algorithme de Kruskal : exemple

v

1

v

2

v

3

v

4

v

5

v

6

v

7

v

8

3 1

4 3 5

2

4

6 1 2

3

(71)

Algorithme de Kruskal : exemple

v

1

v

2

v

3

v

4

v

5

v

6

v

7

v

8

3

1 4

3 5

2

4

6 1 2

3

(72)

Algorithme de Kruskal : exemple

v

1

v

2

v

3

v

4

v

5

v

6

v

7

v

8

3

1 4

3 5

2

4

6 1 2

3

(73)

Algorithme de Kruskal : exemple

v

1

v

2

v

3

v

4

v

5

v

6

v

7

v

8

3

1 4

3 5

2

4

6 1 2

3

(74)

Algorithme de Kruskal : exemple

v

1

v

2

v

3

v

4

v

5

v

6

v

7

v

8

3

1 4

3 5

2

4

6 1 2

3

(75)

Algorithme de Kruskal : exemple

v

1

v

2

v

3

v

4

v

5

v

6

v

7

v

8

3

1 4

3 5

2

4

6 1 2

3

(76)

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.

(77)

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

(78)

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

(79)

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

(80)

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

(81)

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

(82)

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

2

s.

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.

(83)

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

2

s.

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.

(84)

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

(85)

Algorithme de Prim : exemple

v

1

v

2

v

3

v

4

v

5

v

6

v

7

v

8

3 1

4 3 5

2

4

6 1 2 3

V (T) = {v

3

}

(86)

Algorithme de Prim : exemple

v

1

v

2

v

3

v

4

v

5

v

6

v

7

v

8

3

1 4

3 5

2

4

6 1 2 3

V (T) = {v

3

, v

1

}

(87)

Algorithme de Prim : exemple

v

1

v

2

v

3

v

4

v

5

v

6

v

7

v

8

3

1 4

3 5

2

4

6 1 2 3

V (T) = {v

3

, v

1

, v

6

}

(88)

Algorithme de Prim : exemple

v

1

v

2

v

3

v

4

v

5

v

6

v

7

v

8

3

1 4

3 5

2

4

6 1 2 3

V (T) = {v

3

, v

1

, v

6

, v

2

}

(89)

Algorithme de Prim : exemple

v

1

v

2

v

3

v

4

v

5

v

6

v

7

v

8

3

1 4

3 5

2

4

6 1 2

3

V (T) = {v

3

, v

1

, v

6

, v

2

, v

4

}

(90)

Algorithme de Prim : exemple

v

1

v

2

v

3

v

4

v

5

v

6

v

7

v

8

3

1 4

3 5

2

4

6 1 2

3

V (T) = {v

3

, v

1

, v

6

, v

2

, v

4

, v

7

}

(91)

Algorithme de Prim : exemple

v

1

v

2

v

3

v

4

v

5

v

6

v

7

v

8

3

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

}

(92)

Algorithme de Prim : exemple

v

1

v

2

v

3

v

4

v

5

v

6

v

7

v

8

3

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

}

(93)

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.

(94)

II.5 Algorithme de Dijkstra

(95)

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

u

tel que, pour tout sommet v , la distance de u ` a v est la mˆ eme

dans G et dans T

u

.

(96)

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

u

tel que, pour tout sommet v , la distance de u ` a v est la mˆ eme

dans G et dans T

u

.

(97)

Illustration

v

1

v

2

v

3

v

4

v

5

v

6

v

7

v

8

3 1

1 3 5

2

4

6 1 2 3

Sommet v

1

v

2

v

3

v

4

v

5

v

6

v

7

v

8

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

(98)

Illustration

v

1

v

2

v

3

v

4

v

5

v

6

v

7

v

8

3 1

1 3 5

2

4

6 1 2 3

Sommet v

1

v

2

v

3

v

4

v

5

v

6

v

7

v

8

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

(99)

Illustration

v

1

v

2

v

3

v

4

v

5

v

6

v

7

v

8

3 1

1 3 5

2

4

6 1 2 3

Sommet v

1

v

2

v

3

v

4

v

5

v

6

v

7

v

8

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

(100)

Illustration

v

1

v

2

v

3

v

4

v

5

v

6

v

7

v

8

3 1

1 3 5

2

4

6 1 2 3

Sommet v

1

v

2

v

3

v

4

v

5

v

6

v

7

v

8

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

(101)

Illustration

v

1

v

2

v

3

v

4

v

5

v

6

v

7

v

8

3 1

1 3 5

2

4

6 1 2 3

Sommet v

1

v

2

v

3

v

4

v

5

v

6

v

7

v

8

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

(102)

Illustration

v

1

v

2

v

3

v

4

v

5

v

6

v

7

v

8

3 1

1 3 5

2

4

6 1 2

3

Sommet v

1

v

2

v

3

v

4

v

5

v

6

v

7

v

8

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

(103)

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

(104)

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.

(105)

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.

(106)

Algorithme de Floyd-Warshall : principe

On num´ erote les sommets de 1 ` a n.

On calcule pour tout k la matrice W

k

telle que W

uvk

contient 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

).

(107)

III. Cycles couvrants - Introduction ` a la complexit´ e

(108)

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

(109)

III.1 Graphes Eul´ eriens

(110)

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

}

(111)

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.

(112)

Proposition

Un graphe connexe est eul´ erien si et seulement si tous ses sommets sont de

degr´ e pair.

(113)

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.

(114)

Algorithme de Fleury

1. Choisir un sommet v

0

et poser W

0

= ∅.

2. Supposons que le parcours (liste d’arˆ ete) W

i

= e

1

. . . e

m

a ´ et´ e contruit.

Soit v

m

le dernier sommet de ce parcours.

3. Si il existe des arˆ etes adjacentes ` a v

m

non-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+1

comme ´ 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

m

(115)

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

(116)

III.2 Chinese Postman Problem

(117)

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.

(118)

III.3 Graphes hamiltoniens

(119)

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.

(120)

III.4 Un peu de complexit´ e

(121)

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.

(122)

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.

(123)

Probl` emes NP-complets

I

On d´ emontre qu’un probl` eme P

1

est 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

2

d´ ej` a connu comme ´ etant NP-complet.

On parle de r´ eduction du probl` eme P

2

au 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

m

de 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

m

est

satisfaite.

(124)

Probl` emes NP-complets

I

On d´ emontre qu’un probl` eme P

1

est 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

2

d´ ej` a connu comme ´ etant NP-complet.

On parle de r´ eduction du probl` eme P

2

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

(125)

III.5 Retour au voyageur de commerce

(126)

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.

(127)
(128)
(129)

IV. Flots dans les graphes

(130)

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.

(131)

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

(132)

Flot

Exemple

(133)

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

0

avec val(f

0

) > val(f ).

(134)

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

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

Références

Documents relatifs

On souhaite ranger ces objets dans des boˆıtes en utilisant le minimum de boˆıtes possibles, sachant que chaque boˆıte est de taille unitaire : chaque boˆıte peut contenir

Montrer que la somme de deux matrices nilpotentes est ´egalement une matrice

Contrairement ` a la recherche dans un arbre quelconque o` u il faut parcourir quasiment tous les nœuds de l’arbre pour d´ eterminer si l’´ el´ ement existe, la recherche dans

A chaque ´ etape, on tire une boule dans chacune des urnes et on la met dans l’autre urne.. Tracer le graphe de la chaˆıne et ´ ecrire sa matrice

On pourra montrer que toutes ses racines rationnelles sont enti` eres, qu’elles divisent 91. Indiquer bri` evement pourquoi φ est un

Comme le premier vecteur est orient´ e suivant l’axe Ox, il y a toujours au moins une extr´ emit´ e ` a l’int´ erieur du carr´ e.. L’image de droite illustre l’un des 2

• Ecrire un programme qui r´ ´ esout ces ´ equations et d´ etermine la trajectoire de cette plan` ete (Des exemples de conditions initiales sont donn´ ees plus bas pour les

Master Math´ ematiques appliqu´ ees et statistiques 6 f´ evrier 2017.. DS: Chaˆınes de Markov dur´