253
Algorithmique Avancée pour l’Intelligence Artificielle et les graphes (AAIA) Pierre-Edouard Portier et Christine Solnon INSA de Lyon - 3IF 2018/2019 1/108

Algorithmique Avancée pour l'Intelligence Artificielle et

  • Upload
    others

  • View
    9

  • Download
    2

Embed Size (px)

Citation preview

Page 1: Algorithmique Avancée pour l'Intelligence Artificielle et

Algorithmique Avancée pour l’IntelligenceArtificielle et les graphes (AAIA)

Pierre-Edouard Portier et Christine Solnon

INSA de Lyon - 3IF

2018/2019

1/108

Page 2: Algorithmique Avancée pour l'Intelligence Artificielle et

Introduction Organisation et objectifs pédagogiques

1 IntroductionOrganisation et objectifs pédagogiquesModélisation de problèmes avec des graphes

2 Définitions

3 Structures de données pour représenter un graphe

4 Parcours de graphes

5 Plus courts chemins

6 Problèmes de planification

7 Quelques problèmes NP-difficiles sur les graphes

2/108

Page 3: Algorithmique Avancée pour l'Intelligence Artificielle et

Introduction Organisation et objectifs pédagogiques

Positionnement de l’EC AAIA au sein des UE d’IF

Unités d’enseignement du département IF :

Système d’InformationArchitectures matérielles, Réseaux et SystèmesFormation généraleDéveloppement logiciel (DL)Méthodes et Outils Mathématiques (MOM)

EC de l’UE DL en 3IF :

Introduction à l’algoBases de la POOPOO avancéeGénie logiciel

EC de l’UE MOM en 3IF :

Calcul matriciel et synthèse d’imagesTraitement du signal et imageProbabilitésAlgo pour l’IA et les graphes

3/108

Page 4: Algorithmique Avancée pour l'Intelligence Artificielle et

Introduction Organisation et objectifs pédagogiques

Référentiel des compétences

Approfondissement de compétences abordées au semestre 1 :

Choisir les structures de données adaptées à la situationDéterminer la complexité d’un algorithmeProuver la correction d’un algorithme

; Implémenter de bons logiciels

Nouvelles compétences :

Modéliser et résoudre des problèmes à l’aide de graphes et/ou detechniques d’IA

Reformuler un nouveau problème à résoudre en un problèmeconnu en théorie des graphes ou en IAChoisir le bon algorithme pour résoudre le problèmeSavoir adapter un algorithme connu à un contexte particulier

Identifier la classe de complexité d’un problème

4/108

Page 5: Algorithmique Avancée pour l'Intelligence Artificielle et

Introduction Organisation et objectifs pédagogiques

Organisation

9 cours en amphi

5 cours : C. Solnon (du 5 février au 5 mars); Algorithmique avancée pour les graphes4 cours : P.-E. Portier; Algorithmique avancée pour l’IA

6 TD et 3 TP

du 11 février au 7 juin

Evaluation

1 DS + questionnaires Moodle (sur les cours et sur les TP)

5/108

Page 6: Algorithmique Avancée pour l'Intelligence Artificielle et

Introduction Organisation et objectifs pédagogiques

Pour en savoir plus...

Sur l’algorithmique en général :

AlgorithmiqueT. Cormen, C. Leiserson, R. Rivest, C. SteinEditions Dunod - 2010

Sur les graphes :

La théorie des graphesAimé SacheCollection “Le sel et le fer”, n◦22Editions Cassini - 2003

6/108

Page 7: Algorithmique Avancée pour l'Intelligence Artificielle et

Introduction Modélisation de problèmes avec des graphes

1 IntroductionOrganisation et objectifs pédagogiquesModélisation de problèmes avec des graphes

2 Définitions

3 Structures de données pour représenter un graphe

4 Parcours de graphes

5 Plus courts chemins

6 Problèmes de planification

7 Quelques problèmes NP-difficiles sur les graphes

7/108

Page 8: Algorithmique Avancée pour l'Intelligence Artificielle et

Introduction Modélisation de problèmes avec des graphes

Euler 1741 : Solutio problematis at geometriam situs pertinentisoù comment résoudre un problème grâce à la “ géométrie de situation ”

“ Outre cette partie de la géométrie qui s’occupe de la grandeur et de la mesure (...),Leibniz a fait mention, pour la première fois, d’une autre partie encore très inconnueactuellement, qu’il a appelée Geometria Situs (...). Cette branche s’occupeuniquement de l’ordre et de la situation, indépendamment des rapports de grandeur. ”

Problème :“ Peut-on arranger son parcours de telle sorte que l’onpasse sur chaque pont, et que l’on ne puisse y passerqu’une seule fois? Cela semble possible, disent lesuns ; impossible, disent les autres ; cependantpersonne n’a la certitude de son sentiment. ”

Proposition d’Euler pour résoudre ce problème :“ Former avec les lettres A, B, C, D une série de 8 lettres dans laquelle ces voisinages(A-C, A-B, A-D, D-C et B-D) apparaissent autant de fois qu’il a été indiqué (2, 2, 1, 1 et1 fois) ; mais avant de chercher à effectuer une telle disposition, il est bon de sedemander si celle-ci est réalisable. (...) Aussi ai-je trouvé une règle qui donne, pourtous les cas, la condition indispensable pour que le problème ne soit pas impossible. ”

8/108

Page 9: Algorithmique Avancée pour l'Intelligence Artificielle et

Introduction Modélisation de problèmes avec des graphes

Euler 1741 : Solutio problematis at geometriam situs pertinentisoù comment résoudre un problème grâce à la “ géométrie de situation ”

“ Outre cette partie de la géométrie qui s’occupe de la grandeur et de la mesure (...),Leibniz a fait mention, pour la première fois, d’une autre partie encore très inconnueactuellement, qu’il a appelée Geometria Situs (...). Cette branche s’occupeuniquement de l’ordre et de la situation, indépendamment des rapports de grandeur. ”

Problème :“ Peut-on arranger son parcours de telle sorte que l’onpasse sur chaque pont, et que l’on ne puisse y passerqu’une seule fois? Cela semble possible, disent lesuns ; impossible, disent les autres ; cependantpersonne n’a la certitude de son sentiment. ”

Proposition d’Euler pour résoudre ce problème :“ Former avec les lettres A, B, C, D une série de 8 lettres dans laquelle ces voisinages(A-C, A-B, A-D, D-C et B-D) apparaissent autant de fois qu’il a été indiqué (2, 2, 1, 1 et1 fois) ; mais avant de chercher à effectuer une telle disposition, il est bon de sedemander si celle-ci est réalisable. (...) Aussi ai-je trouvé une règle qui donne, pourtous les cas, la condition indispensable pour que le problème ne soit pas impossible. ”

8/108

Page 10: Algorithmique Avancée pour l'Intelligence Artificielle et

Introduction Modélisation de problèmes avec des graphes

Exemples de modélisation par des graphesRéseau de transport

13

Cuire

Hôtel de VilleLouis Pradel

5 133 1814

Fourvière

12

Hôpital Feyzin Vénissieux

Vaulx-en-VelinLa Grappinière

Rillieux Semailles

Gare de Vénissieux

14

Gare St-Paul

CharpennesCharles Hernu

2 16 17

Gare Part-Dieu Vivier Merle

9 13 256 7

Vaulx-en-VelinLa Soie

8 15

Vieux LyonCathédrale St-Jean

20E20

Saint-Just20 21

Perrache19 21 22

Eurexpo

Parc du Chêne

Grange Blanche22 26168 13

25

St-Priest Bel Air

Cité InternationaleCentre de Congrès

4 5

Bellecour12

209 10

20E

Aéroport Lyon Saint Exupéry

IUT - Feyssine

Jet d’eauMendès France

Gare d’Oullins

Gare de Vaise6 14

Gare Part-DieuVillette

4 712 14

Jean Macé

22

Debourg

107

La DouaGaston Berger

Meyzieu Les Panettes

17

13

4

9 12

9

4 1112 14

4 9 14

7 2516

12 12

7

16

3

15

9

26

3 1115 17

8

12

5

2216

2216

15 25

15

17

12

12

25

25

25

17

26 17 26

22227 10

25

15

7 25

7914

4 9 13 25

15

Musée d’Art ContemporainCentre de Congrès

Interpol

Parc Tête d’Or Pt Churchill

Muséum

Parc Tête d’OrDuquesne

Vitton - Belges

Grandclément

Poizat

Bernaix

Cyprian Léon Blum Léon Blum

Pont des Planches

Lefèvre

Cuzin - Stalingrad

Hôtel de Ville - Campus

Grand Vire

Lesire

Mas du Taureau

Vaulx les Grôlières

Alsace

Institut d’ArtContemporain

Verlaine

L. BrailleMontaland

BlanquiCentre Mémoires

et Société

Les HallesPaul Bocuse

Part-DieuJules FavreGaribaldi

LafayetteSaxe

Lafayette

St-Clair - Square Brosset

Montée des Soldats

Caluire Place Foch

Montessuy Fleming

Montessuy Calmette

Impasse Mathieu

Square Elie Vignal

Tonkin

Rossellini

Parc Tête d’Or Stalingrad

Lycée Cuzin

Caluire Chemin Petit

LeclercDrevet

RillieuxLes Alagniers

GeorgeSand

Michelet

CompanetPiscine duLoup Pendu

LesVerchères

Espace Baudelaire

TerreauxLa Feuillée

Bon Coin

Cité InternationaleTransbordeur

LeclercThimonnier

PERICAMercières

6

Henon

Ampère Victor Hugo

MonplaisirLumière

Place Guichard

Bourse du Travail

MassénaFoch

Croix - Paquet

RépubliqueVilleurbanne

FlachetAlain Gilles

Cusset

6Brotteaux

26Gratte - Ciel

Croix - Rousse

145

133

Cordeliers

Place Jean Jaurès

24E21 24Gorge de Loup

L. BonnevayAstroballe

25Parilly

Sans Souci

Laennec

GuillotièreGabriel Péri

GaribaldiSaxe Gambetta

6 14Valmy

Stade de Gerland

CentreBerthelot

GaribaldiBerthelot

Saint-André

Rue del'Université

QuaiClaude Bernard

Collège Bellecombe

Rebufer

Hôtel de Ville - Bron

8 26Ambroise Paré

Vinatier

Essarts - Iris

Boutasse - Camille Rousset

Les Alizés

Porte des Alpes

Parilly - UniversitéHippodrome

Europe - Université

Parc Technologique

Hauts de Feuilly

Salvador Allende

Alfred de Vigny

St-Priest - Hôtel de Ville

Esplanade des Arts

Jules Ferry

Cordière

Sainte-Blandine

Suchet

Part-DieuServient

Professeur BeauvisageCISL

États-UnisViviani

Joliot CurieMarcel Sembat

Lycée Jacques Brel

La Borelle

Croizat - Paul Bert

Marcel HouëlHôtel de Ville

Herriot - Cagne

Vénissy

Division Leclerc

Darnaise

Maurice Thorez

Lénine - Corsière

Routede Vienne

Lycée Lumière

États-UnisMusée Tony Garnier

Le Tonkin

UniversitéLyon 1 Croix-Luizet

DécinesGrand Large

1613

DauphinéLacassagne

SaxePréfecture

Condorcet INSA - Einstein

Palais de JusticeMairie du 3e

9

ReconnaissanceBalzac

17

Bel AirLes Brosses

26

Gare deVilleurbanne

ThiersLafayette

Liberté

De TassignyCurial

LycéeJean-Paul Sartre

Bachut - Mairie du 8e

Villon

Jean XXIII - Maryse Bastié

MinimesThéâtres Romains

Les jours de salon

En semaine

ManufactureMontluc

Lycée Colbert

HalleTony Garnier

Muséedes Confluences

ENS Lyon

Hôtel de RégionMontrochet

11

ArchivesDéparte-mentales

Décines Centre

Meyzieu Gare

Meyzieu Z.i.

15Mermoz - Pinel

Le Rhône

Le Rhône

La Saône

Le Rhône

Canal de Jonage

Plan lignes fortesMétroTramwayFuniculaireLigne majeure de Bus(en correspondance avec métro / tramway)

septembre 2017

Appli mobile TCL

sitemobile

www.tcl.fr

m.tcl.fr

(prix d’un appel local)ALLÔ TCL

04 26 10 12 12

SERVICESParc relais TCL

Pour les autres lignes de bus se référer aux plans détaillés

Jean MacéLes Sources14Bachut - Mairie du 8e

Laurent Bonnevay - Astroballe15Charpennes - Charles HernuSurville Route de Vienne16Charpennes - Charles HernuLaurent Bonnevay - Porte des Alpes17Hôtel de Ville - Louis PradelCroix-Rousse Nord18PerracheFrancheville Taffignon19

BellecourFrancheville Taffignon / Fort du Bruissin20 20E

PerracheGorge de Loup21PerracheGrange Blanche22

24 24EGare Part-Dieu - Vivier MerleSaint-Priest Plaine de Saythe / Sogaris Promotrans25Cité Internationale - TransbordeurGrange Blanche26

Gare Part-Dieu - Vivier MerleCuire1Gare Part-Dieu - Vivier MerleRillieux Semailles2Gare Saint-PaulVaulx- en-Velin La Grappinière3Jean MacéCité Internationale4CordeliersRillieux Semailles - Vancia Château Bérard5Gare Part-Dieu - Vivier MerleÉcully Le Pérollier6Gare Part-Dieu - Vivier MerleHôpital Lyon Sud7Grange BlancheVaulx- en-Velin Résistance8Bellecour - Antonin PoncetHôpitaux Est9Bellecour - CharitéSaint-Genis Barolles10Saxe - GambettaLaurent Bonnevay - Astroballe11Bellecour - Antonin PoncetHôpital Feyzin Vénissieux12Grange BlancheMontessuy Gutenberg13

LIGNES MAJEURES BUSMÉTROPerracheVaulx- en-Velin La Soie

Charpennes - Charles HernuGare d’Oullins

Hôtel de Ville - Louis PradelCuire

Gare de VaiseGare de Vénissieux

FUNICULAIREVieux Lyon - Cathédrale St-JeanSaint-JustVieux Lyon - Cathédrale St-JeanFourvière

TRAMWAYDebourgHôtel de Région - MontrochetIUT - Feyssine

PerracheSaint-Priest Bel-Air

Gare Part-Dieu - VilletteMeyzieu Z.i.Meyzieu Les Panettes (en semaine)

Hôpital Feyzin VénissieuxLa Doua - Gaston Berger

Grange BlancheParc du ChêneEurexpo (les jours de salon)

Toutes les stations de métro,tramway et trolleybus C1 C2 C3sont accessibles à l’exceptionde la station Croix-Paquet.Pour connaître la disponibilitédes ascenseurs, appelerle 04 26 10 12 12 outcl.fr rubrique accessibilité.

Gare ferroviaire

Desserte aéroport(tarification spéciale)

Aéroport

Parc relais vélo

Gorge de LoupCraponne Val d’Yzeron / Grézieu Gym. E. Catalon

0600LF0600LF

9/108

Page 11: Algorithmique Avancée pour l'Intelligence Artificielle et

Introduction Modélisation de problèmes avec des graphes

Exemples de modélisation par des graphesRéseaux de régulation génétique

Sommets = gènesArêtes = influence entre gènes

10/108

Page 12: Algorithmique Avancée pour l'Intelligence Artificielle et

Introduction Modélisation de problèmes avec des graphes

Exemples de modélisation par des graphesRéseaux sociaux

Sommets = URL de blogs [Image empruntée àArcs = Hyper-liens 7bis.wordpress.com/tag/reseaux-sociaux/]

11/108

Page 13: Algorithmique Avancée pour l'Intelligence Artificielle et

Définitions

1 Introduction

2 Définitions

3 Structures de données pour représenter un graphe

4 Parcours de graphes

5 Plus courts chemins

6 Problèmes de planification

7 Quelques problèmes NP-difficiles sur les graphes

12/108

Page 14: Algorithmique Avancée pour l'Intelligence Artificielle et

Définitions

Graphes non orientés

DéfinitionUn graphe non orienté est défini par un couple (S,A) tel que

S est un ensemble de sommetsA ⊆ S × S est un ensemble d’arêtes

La relation binaire définie par A est symétrique; ∀(si , sj) ∈ S × S, (si , sj) ∈ A⇔ (sj , si) ∈ A (noté {si , sj})

Exemple :

S = {1,2,3,4,5,6}A = {{1,2}, {1,5}, {5,2}, {3,6}} 1

2 34

5 6

Terminologie :

si est adjacent à sj si (si , sj) ∈ A : adj(si) = {sj |{si , sj} ∈ A}degré d’un sommet = nombre de sommets adjacents : d◦(si) = #adj(si)

Graphe complet si ∀{si , sj} ⊆ S, {si , sj} ∈ A13/108

Page 15: Algorithmique Avancée pour l'Intelligence Artificielle et

Définitions

Graphes orientés

DéfinitionUn graphe orienté est défini par un couple (S,A) tel que

S est un ensemble de sommetsA ⊆ S × S est un ensemble d’arcs

; Relation binaire non symétrique : (si , sj) ∈ A 6⇒ (sj , si) ∈ A

Exemple :S = {1,2,3,4,5,6}A = {(2,1), (1,5), (2,5), (5,2),

(4,5), (3,6), (6,3), (6,6)}1

2 34

5 6

Terminologie :sj est successeur de si si (si , sj) ∈ A : succ(si) = {sj |(si , sj) ∈ A}sj est prédécesseur de si si (sj , si) ∈ A : pred(si) = {sj |(sj , si) ∈ A}demi-degré extérieur = nb de successeurs : d◦+(si) = #succ(si)

demi-degré intérieur = nb de prédécesseurs : d◦−(si) = #pred(si) 14/108

Page 16: Algorithmique Avancée pour l'Intelligence Artificielle et

Définitions

Graphes partiels

DéfinitionG′ = (S,A′) est un graphe partiel de G = (S,A) si A′ ⊆ A

Exemple :

1

2 34

5 6

Graphe G = (S,A)

1

2 34

5 6

Graphe partiel de G

15/108

Page 17: Algorithmique Avancée pour l'Intelligence Artificielle et

Définitions

Sous-graphes

DéfinitionG′ = (S′,A′) est un sous-graphe de G = (S,A) si S′ ⊆ S et A′ = A ∩ S′ × S′

; G′ est le sous-graphe de G induit par S′

Exemple :

1

2 34

5 6

Graphe G = (S,A)

1

2

5

Sous-graphe de Ginduit par {1,2,5}

16/108

Page 18: Algorithmique Avancée pour l'Intelligence Artificielle et

Définitions

Cheminements et connexités

Définitions dans le cas d’un graphe non orienté G = (S,A)

Chaîne = Séquence de sommets < s0, s1, s2, ..., sk > (notée s0 ∼ sk )telle que ∀i ∈ [1, k ], {si−1, si} ∈ ALongueur d’une chaîne = Nombre d’arêtes dans la chaîneChaîne élémentaire = Chaîne dont tous les sommets sont distinctsCycle = Chaîne commençant et terminant par un même sommetBoucle = Cycle de longueur 1G = (S,A) est connexe si ∀(si , sj) ∈ S2, si ∼ sj

Composante connexe de G = sous-graphe de G connexe et maximal

1

2 34

5 6 7

8

17/108

Page 19: Algorithmique Avancée pour l'Intelligence Artificielle et

Définitions

Cheminements et connexités

Définitions dans le cas d’un graphe orienté G = (S,A)

Chemin = Séquence de sommets < s0, s1, s2, ..., sk > (notée s0 ; sk )telle que ∀i ∈ [1, k ], (si−1, si) ∈ ALongueur d’un chemin = Nombre d’arcs dans le cheminChemin élémentaire = Chemin dont tous les sommets sont distinctsCircuit = Chemin commençant et terminant par un même sommetBoucle = Circuit de longueur 1G = (S,A) est fortement connexe si ∀(si , sj) ∈ S2, si ; sj

Composante fortement connexe = sous-graphe fortement connexemaximal

1

2 34

5 6 7

8

18/108

Page 20: Algorithmique Avancée pour l'Intelligence Artificielle et

Définitions

Arbres et Arborescences

Définition d’un arbre :Graphe non orienté G = (S,A) vérifiant les 6 propriétés suivantes :

1 G est connexe et sans cycle2 G est sans cycle et possède #S − 1 arêtes3 G est connexe et admet #S − 1 arêtes4 G est sans cycle, et en ajoutant une arête, on crée un cycle élémentaire5 G est connexe, et en supprimant une arête, il n’est plus connexe6 ∀(si , sj) ∈ S × S, il existe exactement une chaine entre si et sj

Théorème : Si 1 des propriétés est vérifiée, alors les 5 autres le sont aussi

Définition d’une forêt :Graphe non orienté dont chaque composante connexe est un arbre.

Définition d’une arborescence :Graphe orienté sans circuit admettant une racine s0 ∈ S tel que ∀si ∈ S, ilexiste un chemin unique allant de s0 vers si

19/108

Page 21: Algorithmique Avancée pour l'Intelligence Artificielle et

Structures de données pour représenter un graphe

1 Introduction

2 Définitions

3 Structures de données pour représenter un grapheMatrices d’adjacenceListes d’adjacence

4 Parcours de graphes

5 Plus courts chemins

6 Problèmes de planification

7 Quelques problèmes NP-difficiles sur les graphes

20/108

Page 22: Algorithmique Avancée pour l'Intelligence Artificielle et

Structures de données pour représenter un graphe

Exemple d’algorithme :

1 Fonction entier degré(g, si )Entrée : Un graphe non orienté g et un sommet si de gSortie : Le degré de si

2 début3 d ← 04 pour tout sommet sj ∈ adj(si) faire5 d ← d + 1

6 retourne d

Complexité de cet algorithme?

Dépend des structures de données utilisées pour représenter le graphe !

21/108

Page 23: Algorithmique Avancée pour l'Intelligence Artificielle et

Structures de données pour représenter un graphe

Exemple d’algorithme :

1 Fonction entier degré(g, si )Entrée : Un graphe non orienté g et un sommet si de gSortie : Le degré de si

2 début3 d ← 04 pour tout sommet sj ∈ adj(si) faire5 d ← d + 1

6 retourne d

Complexité de cet algorithme?

Dépend des structures de données utilisées pour représenter le graphe !

21/108

Page 24: Algorithmique Avancée pour l'Intelligence Artificielle et

Structures de données pour représenter un graphe Matrices d’adjacence

1 Introduction

2 Définitions

3 Structures de données pour représenter un grapheMatrices d’adjacenceListes d’adjacence

4 Parcours de graphes

5 Plus courts chemins

6 Problèmes de planification

7 Quelques problèmes NP-difficiles sur les graphes

22/108

Page 25: Algorithmique Avancée pour l'Intelligence Artificielle et

Structures de données pour représenter un graphe Matrices d’adjacence

Matrice d’adjacence

Définition : matrice d’adjacence d’un graphe G = (S,A)

Matrice M telle que M[si ][sj ] = 1 si (si , sj) ∈ A, et M[si ][sj ] = 0 sinon

Exemples :

0 1 2

3 4 5

M 0 1 2 3 4 50 0 1 0 0 1 01 1 0 1 0 0 02 0 1 0 0 1 13 0 0 0 0 1 04 1 0 1 1 0 15 0 0 1 0 1 0

0 1 2

3 4 5

M 0 1 2 3 4 50 0 0 0 1 0 01 0 0 1 0 0 02 0 1 0 0 0 03 1 0 0 0 0 04 0 0 1 0 0 05 0 0 1 0 1 1

23/108

Page 26: Algorithmique Avancée pour l'Intelligence Artificielle et

Structures de données pour représenter un graphe Matrices d’adjacence

Complexité

Complexité en mémoire :

; O(n2) avec n = nombre de sommets de g

Complexité en temps pour déterminer si (si , sj) est un arc :

; O(1)

Complexité en temps de degré(g, si) :

; O(n) avec n = nombre de sommets de g

24/108

Page 27: Algorithmique Avancée pour l'Intelligence Artificielle et

Structures de données pour représenter un graphe Matrices d’adjacence

Puissances de la matrice d’adjacence

Définition de Mk :

M1 = M

Mk = M ∗Mk−1,∀k > 1

Théorème : Mk [si ][sj ] = nb de chemins de longueur k allant de si à sj

; Exercice : démonstration par récurrence sur k

Complexité pour un graphe ayant n sommets?

Complexité d’une multiplication de matrices n × n ?

: O(n3); Peut être optimisé dans le cas de matrices creuses

Complexité du calcul de Mk ?

O(kn3) si on fait k multiplications

O((log k)n3) en exploitant le fait que M2x = (Mx)2 etM2x+1 = M(Mx)2

25/108

Page 28: Algorithmique Avancée pour l'Intelligence Artificielle et

Structures de données pour représenter un graphe Matrices d’adjacence

Puissances de la matrice d’adjacence

Définition de Mk :

M1 = M

Mk = M ∗Mk−1,∀k > 1

Théorème : Mk [si ][sj ] = nb de chemins de longueur k allant de si à sj

; Exercice : démonstration par récurrence sur k

Complexité pour un graphe ayant n sommets?

Complexité d’une multiplication de matrices n × n : O(n3); Peut être optimisé dans le cas de matrices creuses

Complexité du calcul de Mk ?

O(kn3) si on fait k multiplications

O((log k)n3) en exploitant le fait que M2x = (Mx)2 etM2x+1 = M(Mx)2

25/108

Page 29: Algorithmique Avancée pour l'Intelligence Artificielle et

Structures de données pour représenter un graphe Matrices d’adjacence

Puissances de la matrice d’adjacence

Définition de Mk :

M1 = M

Mk = M ∗Mk−1,∀k > 1

Théorème : Mk [si ][sj ] = nb de chemins de longueur k allant de si à sj

; Exercice : démonstration par récurrence sur k

Complexité pour un graphe ayant n sommets?

Complexité d’une multiplication de matrices n × n : O(n3); Peut être optimisé dans le cas de matrices creuses

Complexité du calcul de Mk ?

O(kn3) si on fait k multiplications

O((log k)n3) en exploitant le fait que M2x = (Mx)2 etM2x+1 = M(Mx)2

25/108

Page 30: Algorithmique Avancée pour l'Intelligence Artificielle et

Structures de données pour représenter un graphe Matrices d’adjacence

Puissances de la matrice d’adjacence

Définition de Mk :

M1 = M

Mk = M ∗Mk−1,∀k > 1

Théorème : Mk [si ][sj ] = nb de chemins de longueur k allant de si à sj

; Exercice : démonstration par récurrence sur k

Complexité pour un graphe ayant n sommets?

Complexité d’une multiplication de matrices n × n : O(n3); Peut être optimisé dans le cas de matrices creuses

Complexité du calcul de Mk ?

O(kn3) si on fait k multiplicationsO((log k)n3) en exploitant le fait que M2x = (Mx)2 etM2x+1 = M(Mx)2

25/108

Page 31: Algorithmique Avancée pour l'Intelligence Artificielle et

Structures de données pour représenter un graphe Listes d’adjacence

1 Introduction

2 Définitions

3 Structures de données pour représenter un grapheMatrices d’adjacenceListes d’adjacence

4 Parcours de graphes

5 Plus courts chemins

6 Problèmes de planification

7 Quelques problèmes NP-difficiles sur les graphes

26/108

Page 32: Algorithmique Avancée pour l'Intelligence Artificielle et

Structures de données pour représenter un graphe Listes d’adjacence

Listes d’adjacence

Définition : listes d’adjacence d’un graphe G = (S,A)

Tableau succ tel que succ[si ] = liste des successeurs de si

Exemples :

4 5 3

0 1 2

3

0

1

2

3

4

5

1 4

0 4 5 3 2

13

1 5 2

5 0 1

4 1

0 1 2

3 4 5

5

0

1

2

3

4

5

1 3

4

5 4

1 0

3

27/108

Page 33: Algorithmique Avancée pour l'Intelligence Artificielle et

Structures de données pour représenter un graphe Listes d’adjacence

Complexité

Complexité en mémoire :

; O(n + p) avec n = nombre de sommets de g et p = nombre d’arcs

Complexité en temps pour déterminer si (si , sj) est un arc :

; O(d◦(si))

Complexité en temps de degré(g, si) :

; O(d◦(si))

28/108

Page 34: Algorithmique Avancée pour l'Intelligence Artificielle et

Parcours de graphes Généralités sur les parcours

1 Introduction

2 Définitions

3 Structures de données pour représenter un graphe

4 Parcours de graphesGénéralités sur les parcoursParcours en largeur (BFS)Parcours en profondeur (DFS)

5 Plus courts chemins

6 Problèmes de planification

7 Quelques problèmes NP-difficiles sur les graphes

29/108

Page 35: Algorithmique Avancée pour l'Intelligence Artificielle et

Parcours de graphes Généralités sur les parcours

Qu’est-ce qu’un parcours de graphe (orienté ou non)?

Visite de tous les sommets accessibles depuis un sommet de départ donné

Comment parcourir un graphe?

Marquage des sommets par des couleurs :Blanc = Sommet pas encore visitéGris = Sommet en cours d’exploitationNoir = Sommet que l’on a fini d’exploiter

Au début, le sommet de départ est gris et tous les autres sont blancsA chaque étape, un sommet gris est sélectionné

Si tous ses voisins sont déjà gris ou noirs, alors il est colorié en noirSinon, il colorie un (ou plusieurs) de ses voisins blancs en gris

; Jusqu’à ce que tous les sommets soient noirs ou blancs

Mise en œuvre : Stockage des sommets gris dans une structure

Si on utilise une file (FIFO), alors parcours en largeurSi on utilise une pile (LIFO), alors parcours en profondeur

30/108

Page 36: Algorithmique Avancée pour l'Intelligence Artificielle et

Parcours de graphes Généralités sur les parcours

Qu’est-ce qu’un parcours de graphe (orienté ou non)?

Visite de tous les sommets accessibles depuis un sommet de départ donné

Comment parcourir un graphe?

Marquage des sommets par des couleurs :Blanc = Sommet pas encore visitéGris = Sommet en cours d’exploitationNoir = Sommet que l’on a fini d’exploiter

Au début, le sommet de départ est gris et tous les autres sont blancsA chaque étape, un sommet gris est sélectionné

Si tous ses voisins sont déjà gris ou noirs, alors il est colorié en noirSinon, il colorie un (ou plusieurs) de ses voisins blancs en gris

; Jusqu’à ce que tous les sommets soient noirs ou blancs

Mise en œuvre : Stockage des sommets gris dans une structure

Si on utilise une file (FIFO), alors parcours en largeurSi on utilise une pile (LIFO), alors parcours en profondeur

30/108

Page 37: Algorithmique Avancée pour l'Intelligence Artificielle et

Parcours de graphes Généralités sur les parcours

Qu’est-ce qu’un parcours de graphe (orienté ou non)?

Visite de tous les sommets accessibles depuis un sommet de départ donné

Comment parcourir un graphe?

Marquage des sommets par des couleurs :Blanc = Sommet pas encore visitéGris = Sommet en cours d’exploitationNoir = Sommet que l’on a fini d’exploiter

Au début, le sommet de départ est gris et tous les autres sont blancsA chaque étape, un sommet gris est sélectionné

Si tous ses voisins sont déjà gris ou noirs, alors il est colorié en noirSinon, il colorie un (ou plusieurs) de ses voisins blancs en gris

; Jusqu’à ce que tous les sommets soient noirs ou blancs

Mise en œuvre : Stockage des sommets gris dans une structure

Si on utilise une file (FIFO), alors parcours en largeurSi on utilise une pile (LIFO), alors parcours en profondeur

30/108

Page 38: Algorithmique Avancée pour l'Intelligence Artificielle et

Parcours de graphes Généralités sur les parcours

Spécification d’un algorithme de parcours1 Fonction Parcours(g, s0)

Entrée : Un graphe g et un sommet s0 de gSortie : Arborescence π du parcours de g à partir de s0

Arborescence associée à un parcours :si est le père de sj si c’est si qui a colorié sj en grissi est racine si si = s0 ou si pas de chemin de s0 jusque si

Quelle structure de données pour représenter l’arborescence?

Tableau π tel que π[si ] = null si si est racine, et π[si ] = père de si sinon

Exemple d’arborescence associée à un parcours au départ de a :

a

b

c d

e f

g h i

j

Tableau π correspondant :

- a b c b h a g h -a b c d e f g h i j

31/108

Page 39: Algorithmique Avancée pour l'Intelligence Artificielle et

Parcours de graphes Généralités sur les parcours

Spécification d’un algorithme de parcours1 Fonction Parcours(g, s0)

Entrée : Un graphe g et un sommet s0 de gSortie : Arborescence π du parcours de g à partir de s0

Arborescence associée à un parcours :si est le père de sj si c’est si qui a colorié sj en grissi est racine si si = s0 ou si pas de chemin de s0 jusque si

Quelle structure de données pour représenter l’arborescence?

Tableau π tel que π[si ] = null si si est racine, et π[si ] = père de si sinon

Exemple d’arborescence associée à un parcours au départ de a :

a

b

c d

e f

g h i

jTableau π correspondant :

- a b c b h a g h -a b c d e f g h i j

31/108

Page 40: Algorithmique Avancée pour l'Intelligence Artificielle et

Parcours de graphes Parcours en largeur (BFS)

1 Introduction

2 Définitions

3 Structures de données pour représenter un graphe

4 Parcours de graphesGénéralités sur les parcoursParcours en largeur (BFS)Parcours en profondeur (DFS)

5 Plus courts chemins

6 Problèmes de planification

7 Quelques problèmes NP-difficiles sur les graphes

32/108

Page 41: Algorithmique Avancée pour l'Intelligence Artificielle et

Parcours de graphes Parcours en largeur (BFS)

Parcours en largeur (Breadth First Search / BFS)

1 Fonction BFS(g, s0)2 Soit f une file (FIFO) initialisée à vide3 pour chaque sommet si de g faire4 π[si ]← null5 Colorier si en blanc

6 Ajouter s0 dans f et colorier s0 en gris7 tant que f n’est pas vide faire8 Soit sk le sommet le plus ancien dans f9 pour chaque si ∈ succ(sk ) tq si est blanc faire

10 Ajouter si dans f et colorier si en gris11 π[si ]← sk

12 Enlever sk de f et colorier sk en noir

13 retourne π

ig

a

b

c d

e f

h

f =<>

Complexité de BFS pour un graphe ayant n sommets et p arcs?

; O(n + p) (sous réserve d’une implémentation par listes d’adjacence)

33/108

Page 42: Algorithmique Avancée pour l'Intelligence Artificielle et

Parcours de graphes Parcours en largeur (BFS)

Parcours en largeur (Breadth First Search / BFS)

1 Fonction BFS(g, s0)2 Soit f une file (FIFO) initialisée à vide3 pour chaque sommet si de g faire4 π[si ]← null5 Colorier si en blanc

6 Ajouter s0 dans f et colorier s0 en gris7 tant que f n’est pas vide faire8 Soit sk le sommet le plus ancien dans f9 pour chaque si ∈ succ(sk ) tq si est blanc faire

10 Ajouter si dans f et colorier si en gris11 π[si ]← sk

12 Enlever sk de f et colorier sk en noir

13 retourne π

g

a

b

c d

e f

h i

f =< a >

Complexité de BFS pour un graphe ayant n sommets et p arcs?

; O(n + p) (sous réserve d’une implémentation par listes d’adjacence)

33/108

Page 43: Algorithmique Avancée pour l'Intelligence Artificielle et

Parcours de graphes Parcours en largeur (BFS)

Parcours en largeur (Breadth First Search / BFS)

1 Fonction BFS(g, s0)2 Soit f une file (FIFO) initialisée à vide3 pour chaque sommet si de g faire4 π[si ]← null5 Colorier si en blanc

6 Ajouter s0 dans f et colorier s0 en gris7 tant que f n’est pas vide faire8 Soit sk le sommet le plus ancien dans f9 pour chaque si ∈ succ(sk ) tq si est blanc faire

10 Ajouter si dans f et colorier si en gris11 π[si ]← sk

12 Enlever sk de f et colorier sk en noir

13 retourne π

g

a

b

c d

e f

h i

f =< a >sk = a

Complexité de BFS pour un graphe ayant n sommets et p arcs?

; O(n + p) (sous réserve d’une implémentation par listes d’adjacence)

33/108

Page 44: Algorithmique Avancée pour l'Intelligence Artificielle et

Parcours de graphes Parcours en largeur (BFS)

Parcours en largeur (Breadth First Search / BFS)

1 Fonction BFS(g, s0)2 Soit f une file (FIFO) initialisée à vide3 pour chaque sommet si de g faire4 π[si ]← null5 Colorier si en blanc

6 Ajouter s0 dans f et colorier s0 en gris7 tant que f n’est pas vide faire8 Soit sk le sommet le plus ancien dans f9 pour chaque si ∈ succ(sk ) tq si blanc faire

10 Ajouter si dans f et colorier si en gris11 π[si ]← sk

12 Enlever sk de f et colorier sk en noir

13 retourne π

g

a

b

c d

e f

h i

f =< b, a >sk = a, si = b

Complexité de BFS pour un graphe ayant n sommets et p arcs?

; O(n + p) (sous réserve d’une implémentation par listes d’adjacence)

33/108

Page 45: Algorithmique Avancée pour l'Intelligence Artificielle et

Parcours de graphes Parcours en largeur (BFS)

Parcours en largeur (Breadth First Search / BFS)

1 Fonction BFS(g, s0)2 Soit f une file (FIFO) initialisée à vide3 pour chaque sommet si de g faire4 π[si ]← null5 Colorier si en blanc

6 Ajouter s0 dans f et colorier s0 en gris7 tant que f n’est pas vide faire8 Soit sk le sommet le plus ancien dans f9 pour chaque si ∈ succ(sk ) tq si blanc faire

10 Ajouter si dans f et colorier si en gris11 π[si ]← sk

12 Enlever sk de f et colorier sk en noir

13 retourne π

g

a

b

c d

e f

h i

f =< g, b, a >sk = a, si = g

Complexité de BFS pour un graphe ayant n sommets et p arcs?

; O(n + p) (sous réserve d’une implémentation par listes d’adjacence)

33/108

Page 46: Algorithmique Avancée pour l'Intelligence Artificielle et

Parcours de graphes Parcours en largeur (BFS)

Parcours en largeur (Breadth First Search / BFS)

1 Fonction BFS(g, s0)2 Soit f une file (FIFO) initialisée à vide3 pour chaque sommet si de g faire4 π[si ]← null5 Colorier si en blanc

6 Ajouter s0 dans f et colorier s0 en gris7 tant que f n’est pas vide faire8 Soit sk le sommet le plus ancien dans f9 pour chaque si ∈ succ(sk ) tq si est blanc faire

10 Ajouter si dans f et colorier si en gris11 π[si ]← sk

12 Enlever sk de f et colorier sk en noir

13 retourne π

g

a

b

c d

e f

h i

f =< g, b >sk = a

Complexité de BFS pour un graphe ayant n sommets et p arcs?

; O(n + p) (sous réserve d’une implémentation par listes d’adjacence)

33/108

Page 47: Algorithmique Avancée pour l'Intelligence Artificielle et

Parcours de graphes Parcours en largeur (BFS)

Parcours en largeur (Breadth First Search / BFS)

1 Fonction BFS(g, s0)2 Soit f une file (FIFO) initialisée à vide3 pour chaque sommet si de g faire4 π[si ]← null5 Colorier si en blanc

6 Ajouter s0 dans f et colorier s0 en gris7 tant que f n’est pas vide faire8 Soit sk le sommet le plus ancien dans f9 pour chaque si ∈ succ(sk ) tq si est blanc faire

10 Ajouter si dans f et colorier si en gris11 π[si ]← sk

12 Enlever sk de f et colorier sk en noir

13 retourne π

g

a

b

c d

e f

h i

f =< g, b >sk = b

Complexité de BFS pour un graphe ayant n sommets et p arcs?

; O(n + p) (sous réserve d’une implémentation par listes d’adjacence)

33/108

Page 48: Algorithmique Avancée pour l'Intelligence Artificielle et

Parcours de graphes Parcours en largeur (BFS)

Parcours en largeur (Breadth First Search / BFS)

1 Fonction BFS(g, s0)2 Soit f une file (FIFO) initialisée à vide3 pour chaque sommet si de g faire4 π[si ]← null5 Colorier si en blanc

6 Ajouter s0 dans f et colorier s0 en gris7 tant que f n’est pas vide faire8 Soit sk le sommet le plus ancien dans f9 pour chaque si ∈ succ(sk ) tq si blanc faire

10 Ajouter si dans f et colorier si en gris11 π[si ]← sk

12 Enlever sk de f et colorier sk en noir

13 retourne π

g

a

b

c d

e f

h i

f =< c, g, b >sk = b, si = c

Complexité de BFS pour un graphe ayant n sommets et p arcs?

; O(n + p) (sous réserve d’une implémentation par listes d’adjacence)

33/108

Page 49: Algorithmique Avancée pour l'Intelligence Artificielle et

Parcours de graphes Parcours en largeur (BFS)

Parcours en largeur (Breadth First Search / BFS)

1 Fonction BFS(g, s0)2 Soit f une file (FIFO) initialisée à vide3 pour chaque sommet si de g faire4 π[si ]← null5 Colorier si en blanc

6 Ajouter s0 dans f et colorier s0 en gris7 tant que f n’est pas vide faire8 Soit sk le sommet le plus ancien dans f9 pour chaque si ∈ succ(sk ) tq si blanc faire

10 Ajouter si dans f et colorier si en gris11 π[si ]← sk

12 Enlever sk de f et colorier sk en noir

13 retourne π

g

a

b

c d

e f

h i

f =< e, c, g, b >sk = b, si = e

Complexité de BFS pour un graphe ayant n sommets et p arcs?

; O(n + p) (sous réserve d’une implémentation par listes d’adjacence)

33/108

Page 50: Algorithmique Avancée pour l'Intelligence Artificielle et

Parcours de graphes Parcours en largeur (BFS)

Parcours en largeur (Breadth First Search / BFS)

1 Fonction BFS(g, s0)2 Soit f une file (FIFO) initialisée à vide3 pour chaque sommet si de g faire4 π[si ]← null5 Colorier si en blanc

6 Ajouter s0 dans f et colorier s0 en gris7 tant que f n’est pas vide faire8 Soit sk le sommet le plus ancien dans f9 pour chaque si ∈ succ(sk ) tq si est blanc faire

10 Ajouter si dans f et colorier si en gris11 π[si ]← sk

12 Enlever sk de f et colorier sk en noir

13 retourne π

g

a

b

c d

e f

h i

f =< e, c, g >sk = b

Complexité de BFS pour un graphe ayant n sommets et p arcs?

; O(n + p) (sous réserve d’une implémentation par listes d’adjacence)

33/108

Page 51: Algorithmique Avancée pour l'Intelligence Artificielle et

Parcours de graphes Parcours en largeur (BFS)

Parcours en largeur (Breadth First Search / BFS)

1 Fonction BFS(g, s0)2 Soit f une file (FIFO) initialisée à vide3 pour chaque sommet si de g faire4 π[si ]← null5 Colorier si en blanc

6 Ajouter s0 dans f et colorier s0 en gris7 tant que f n’est pas vide faire8 Soit sk le sommet le plus ancien dans f9 pour chaque si ∈ succ(sk ) tq si est blanc faire

10 Ajouter si dans f et colorier si en gris11 π[si ]← sk

12 Enlever sk de f et colorier sk en noir

13 retourne π

g

a

b

c d

e f

h i

f =< e, c, g >sk = g

Complexité de BFS pour un graphe ayant n sommets et p arcs?

; O(n + p) (sous réserve d’une implémentation par listes d’adjacence)

33/108

Page 52: Algorithmique Avancée pour l'Intelligence Artificielle et

Parcours de graphes Parcours en largeur (BFS)

Parcours en largeur (Breadth First Search / BFS)

1 Fonction BFS(g, s0)2 Soit f une file (FIFO) initialisée à vide3 pour chaque sommet si de g faire4 π[si ]← null5 Colorier si en blanc

6 Ajouter s0 dans f et colorier s0 en gris7 tant que f n’est pas vide faire8 Soit sk le sommet le plus ancien dans f9 pour chaque si ∈ succ(sk ) tq si blanc faire

10 Ajouter si dans f et colorier si en gris11 π[si ]← sk

12 Enlever sk de f et colorier sk en noir

13 retourne π

g

a

b

c d

e f

h i

f =< h, e, c, g >sk = g, si = h

Complexité de BFS pour un graphe ayant n sommets et p arcs?

; O(n + p) (sous réserve d’une implémentation par listes d’adjacence)

33/108

Page 53: Algorithmique Avancée pour l'Intelligence Artificielle et

Parcours de graphes Parcours en largeur (BFS)

Parcours en largeur (Breadth First Search / BFS)

1 Fonction BFS(g, s0)2 Soit f une file (FIFO) initialisée à vide3 pour chaque sommet si de g faire4 π[si ]← null5 Colorier si en blanc

6 Ajouter s0 dans f et colorier s0 en gris7 tant que f n’est pas vide faire8 Soit sk le sommet le plus ancien dans f9 pour chaque si ∈ succ(sk ) tq si est blanc faire

10 Ajouter si dans f et colorier si en gris11 π[si ]← sk

12 Enlever sk de f et colorier sk en noir

13 retourne π

g

a

b

c d

e f

h i

f =< h, e, c >sk = g

Complexité de BFS pour un graphe ayant n sommets et p arcs?

; O(n + p) (sous réserve d’une implémentation par listes d’adjacence)

33/108

Page 54: Algorithmique Avancée pour l'Intelligence Artificielle et

Parcours de graphes Parcours en largeur (BFS)

Parcours en largeur (Breadth First Search / BFS)

1 Fonction BFS(g, s0)2 Soit f une file (FIFO) initialisée à vide3 pour chaque sommet si de g faire4 π[si ]← null5 Colorier si en blanc

6 Ajouter s0 dans f et colorier s0 en gris7 tant que f n’est pas vide faire8 Soit sk le sommet le plus ancien dans f9 pour chaque si ∈ succ(sk ) tq si est blanc faire

10 Ajouter si dans f et colorier si en gris11 π[si ]← sk

12 Enlever sk de f et colorier sk en noir

13 retourne π

g

a

b

c d

e f

h i

f =< h, e, c >sk = c

Complexité de BFS pour un graphe ayant n sommets et p arcs?

; O(n + p) (sous réserve d’une implémentation par listes d’adjacence)

33/108

Page 55: Algorithmique Avancée pour l'Intelligence Artificielle et

Parcours de graphes Parcours en largeur (BFS)

Parcours en largeur (Breadth First Search / BFS)

1 Fonction BFS(g, s0)2 Soit f une file (FIFO) initialisée à vide3 pour chaque sommet si de g faire4 π[si ]← null5 Colorier si en blanc

6 Ajouter s0 dans f et colorier s0 en gris7 tant que f n’est pas vide faire8 Soit sk le sommet le plus ancien dans f9 pour chaque si ∈ succ(sk ) tq si blanc faire

10 Ajouter si dans f et colorier si en gris11 π[si ]← sk

12 Enlever sk de f et colorier sk en noir

13 retourne π

g

a

b

c d

e f

h i

f =< d , h, e, c >sk = c, si = d

Complexité de BFS pour un graphe ayant n sommets et p arcs?

; O(n + p) (sous réserve d’une implémentation par listes d’adjacence)

33/108

Page 56: Algorithmique Avancée pour l'Intelligence Artificielle et

Parcours de graphes Parcours en largeur (BFS)

Parcours en largeur (Breadth First Search / BFS)

1 Fonction BFS(g, s0)2 Soit f une file (FIFO) initialisée à vide3 pour chaque sommet si de g faire4 π[si ]← null5 Colorier si en blanc

6 Ajouter s0 dans f et colorier s0 en gris7 tant que f n’est pas vide faire8 Soit sk le sommet le plus ancien dans f9 pour chaque si ∈ succ(sk ) tq si blanc faire

10 Ajouter si dans f et colorier si en gris11 π[si ]← sk

12 Enlever sk de f et colorier sk en noir

13 retourne π

g

a

b

c d

e f

h i

f =< f , d , h, e, c >sk = c, si = f

Complexité de BFS pour un graphe ayant n sommets et p arcs?

; O(n + p) (sous réserve d’une implémentation par listes d’adjacence)

33/108

Page 57: Algorithmique Avancée pour l'Intelligence Artificielle et

Parcours de graphes Parcours en largeur (BFS)

Parcours en largeur (Breadth First Search / BFS)

1 Fonction BFS(g, s0)2 Soit f une file (FIFO) initialisée à vide3 pour chaque sommet si de g faire4 π[si ]← null5 Colorier si en blanc

6 Ajouter s0 dans f et colorier s0 en gris7 tant que f n’est pas vide faire8 Soit sk le sommet le plus ancien dans f9 pour chaque si ∈ succ(sk ) tq si est blanc faire

10 Ajouter si dans f et colorier si en gris11 π[si ]← sk

12 Enlever sk de f et colorier sk en noir

13 retourne π

g

a

b

c d

e f

h i

f =< f , d , h, e >sk = c

Complexité de BFS pour un graphe ayant n sommets et p arcs?

; O(n + p) (sous réserve d’une implémentation par listes d’adjacence)

33/108

Page 58: Algorithmique Avancée pour l'Intelligence Artificielle et

Parcours de graphes Parcours en largeur (BFS)

Parcours en largeur (Breadth First Search / BFS)

1 Fonction BFS(g, s0)2 Soit f une file (FIFO) initialisée à vide3 pour chaque sommet si de g faire4 π[si ]← null5 Colorier si en blanc

6 Ajouter s0 dans f et colorier s0 en gris7 tant que f n’est pas vide faire8 Soit sk le sommet le plus ancien dans f9 pour chaque si ∈ succ(sk ) tq si est blanc faire

10 Ajouter si dans f et colorier si en gris11 π[si ]← sk

12 Enlever sk de f et colorier sk en noir

13 retourne π

g

a

b

c d

e f

h i

f =< f , d , h, e >sk = e

Complexité de BFS pour un graphe ayant n sommets et p arcs?

; O(n + p) (sous réserve d’une implémentation par listes d’adjacence)

33/108

Page 59: Algorithmique Avancée pour l'Intelligence Artificielle et

Parcours de graphes Parcours en largeur (BFS)

Parcours en largeur (Breadth First Search / BFS)

1 Fonction BFS(g, s0)2 Soit f une file (FIFO) initialisée à vide3 pour chaque sommet si de g faire4 π[si ]← null5 Colorier si en blanc

6 Ajouter s0 dans f et colorier s0 en gris7 tant que f n’est pas vide faire8 Soit sk le sommet le plus ancien dans f9 pour chaque si ∈ succ(sk ) tq si est blanc faire

10 Ajouter si dans f et colorier si en gris11 π[si ]← sk

12 Enlever sk de f et colorier sk en noir

13 retourne π

g

a

b

c d

e f

h i

f =< f , d , h >sk = e

Complexité de BFS pour un graphe ayant n sommets et p arcs?

; O(n + p) (sous réserve d’une implémentation par listes d’adjacence)

33/108

Page 60: Algorithmique Avancée pour l'Intelligence Artificielle et

Parcours de graphes Parcours en largeur (BFS)

Parcours en largeur (Breadth First Search / BFS)

1 Fonction BFS(g, s0)2 Soit f une file (FIFO) initialisée à vide3 pour chaque sommet si de g faire4 π[si ]← null5 Colorier si en blanc

6 Ajouter s0 dans f et colorier s0 en gris7 tant que f n’est pas vide faire8 Soit sk le sommet le plus ancien dans f9 pour chaque si ∈ succ(sk ) tq si est blanc faire

10 Ajouter si dans f et colorier si en gris11 π[si ]← sk

12 Enlever sk de f et colorier sk en noir

13 retourne π

g

a

b

c d

e f

h i

f =< f , d , h >sk = h

Complexité de BFS pour un graphe ayant n sommets et p arcs?

; O(n + p) (sous réserve d’une implémentation par listes d’adjacence)

33/108

Page 61: Algorithmique Avancée pour l'Intelligence Artificielle et

Parcours de graphes Parcours en largeur (BFS)

Parcours en largeur (Breadth First Search / BFS)

1 Fonction BFS(g, s0)2 Soit f une file (FIFO) initialisée à vide3 pour chaque sommet si de g faire4 π[si ]← null5 Colorier si en blanc

6 Ajouter s0 dans f et colorier s0 en gris7 tant que f n’est pas vide faire8 Soit sk le sommet le plus ancien dans f9 pour chaque si ∈ succ(sk ) tq si blanc faire

10 Ajouter si dans f et colorier si en gris11 π[si ]← sk

12 Enlever sk de f et colorier sk en noir

13 retourne π

g

a

b

c d

e f

h i

f =< i, f , d , h >sk = h, si = i

Complexité de BFS pour un graphe ayant n sommets et p arcs?

; O(n + p) (sous réserve d’une implémentation par listes d’adjacence)

33/108

Page 62: Algorithmique Avancée pour l'Intelligence Artificielle et

Parcours de graphes Parcours en largeur (BFS)

Parcours en largeur (Breadth First Search / BFS)

1 Fonction BFS(g, s0)2 Soit f une file (FIFO) initialisée à vide3 pour chaque sommet si de g faire4 π[si ]← null5 Colorier si en blanc

6 Ajouter s0 dans f et colorier s0 en gris7 tant que f n’est pas vide faire8 Soit sk le sommet le plus ancien dans f9 pour chaque si ∈ succ(sk ) tq si est blanc faire

10 Ajouter si dans f et colorier si en gris11 π[si ]← sk

12 Enlever sk de f et colorier sk en noir

13 retourne π

g

a

b

c d

e f

h i

f =< i, f , d >sk = h

Complexité de BFS pour un graphe ayant n sommets et p arcs?

; O(n + p) (sous réserve d’une implémentation par listes d’adjacence)

33/108

Page 63: Algorithmique Avancée pour l'Intelligence Artificielle et

Parcours de graphes Parcours en largeur (BFS)

Parcours en largeur (Breadth First Search / BFS)

1 Fonction BFS(g, s0)2 Soit f une file (FIFO) initialisée à vide3 pour chaque sommet si de g faire4 π[si ]← null5 Colorier si en blanc

6 Ajouter s0 dans f et colorier s0 en gris7 tant que f n’est pas vide faire8 Soit sk le sommet le plus ancien dans f9 pour chaque si ∈ succ(sk ) tq si est blanc faire

10 Ajouter si dans f et colorier si en gris11 π[si ]← sk

12 Enlever sk de f et colorier sk en noir

13 retourne π

g

a

b

c d

e f

h i

f =< i, f , d >sk = d

Complexité de BFS pour un graphe ayant n sommets et p arcs?

; O(n + p) (sous réserve d’une implémentation par listes d’adjacence)

33/108

Page 64: Algorithmique Avancée pour l'Intelligence Artificielle et

Parcours de graphes Parcours en largeur (BFS)

Parcours en largeur (Breadth First Search / BFS)

1 Fonction BFS(g, s0)2 Soit f une file (FIFO) initialisée à vide3 pour chaque sommet si de g faire4 π[si ]← null5 Colorier si en blanc

6 Ajouter s0 dans f et colorier s0 en gris7 tant que f n’est pas vide faire8 Soit sk le sommet le plus ancien dans f9 pour chaque si ∈ succ(sk ) tq si est blanc faire

10 Ajouter si dans f et colorier si en gris11 π[si ]← sk

12 Enlever sk de f et colorier sk en noir

13 retourne π

g

a

b

c d

e f

h i

f =< i, f >sk = d

Complexité de BFS pour un graphe ayant n sommets et p arcs?

; O(n + p) (sous réserve d’une implémentation par listes d’adjacence)

33/108

Page 65: Algorithmique Avancée pour l'Intelligence Artificielle et

Parcours de graphes Parcours en largeur (BFS)

Parcours en largeur (Breadth First Search / BFS)

1 Fonction BFS(g, s0)2 Soit f une file (FIFO) initialisée à vide3 pour chaque sommet si de g faire4 π[si ]← null5 Colorier si en blanc

6 Ajouter s0 dans f et colorier s0 en gris7 tant que f n’est pas vide faire8 Soit sk le sommet le plus ancien dans f9 pour chaque si ∈ succ(sk ) tq si est blanc faire

10 Ajouter si dans f et colorier si en gris11 π[si ]← sk

12 Enlever sk de f et colorier sk en noir

13 retourne π

g

a

b

c d

e f

h i

f =< i, f >sk = f

Complexité de BFS pour un graphe ayant n sommets et p arcs?

; O(n + p) (sous réserve d’une implémentation par listes d’adjacence)

33/108

Page 66: Algorithmique Avancée pour l'Intelligence Artificielle et

Parcours de graphes Parcours en largeur (BFS)

Parcours en largeur (Breadth First Search / BFS)

1 Fonction BFS(g, s0)2 Soit f une file (FIFO) initialisée à vide3 pour chaque sommet si de g faire4 π[si ]← null5 Colorier si en blanc

6 Ajouter s0 dans f et colorier s0 en gris7 tant que f n’est pas vide faire8 Soit sk le sommet le plus ancien dans f9 pour chaque si ∈ succ(sk ) tq si est blanc faire

10 Ajouter si dans f et colorier si en gris11 π[si ]← sk

12 Enlever sk de f et colorier sk en noir

13 retourne π

g

a

b

c d

e f

h i

f =< i >sk = f

Complexité de BFS pour un graphe ayant n sommets et p arcs?

; O(n + p) (sous réserve d’une implémentation par listes d’adjacence)

33/108

Page 67: Algorithmique Avancée pour l'Intelligence Artificielle et

Parcours de graphes Parcours en largeur (BFS)

Parcours en largeur (Breadth First Search / BFS)

1 Fonction BFS(g, s0)2 Soit f une file (FIFO) initialisée à vide3 pour chaque sommet si de g faire4 π[si ]← null5 Colorier si en blanc

6 Ajouter s0 dans f et colorier s0 en gris7 tant que f n’est pas vide faire8 Soit sk le sommet le plus ancien dans f9 pour chaque si ∈ succ(sk ) tq si est blanc faire

10 Ajouter si dans f et colorier si en gris11 π[si ]← sk

12 Enlever sk de f et colorier sk en noir

13 retourne π

g

a

b

c d

e f

h i

f =< i >sk = i

Complexité de BFS pour un graphe ayant n sommets et p arcs?

; O(n + p) (sous réserve d’une implémentation par listes d’adjacence)

33/108

Page 68: Algorithmique Avancée pour l'Intelligence Artificielle et

Parcours de graphes Parcours en largeur (BFS)

Parcours en largeur (Breadth First Search / BFS)

1 Fonction BFS(g, s0)2 Soit f une file (FIFO) initialisée à vide3 pour chaque sommet si de g faire4 π[si ]← null5 Colorier si en blanc

6 Ajouter s0 dans f et colorier s0 en gris7 tant que f n’est pas vide faire8 Soit sk le sommet le plus ancien dans f9 pour chaque si ∈ succ(sk ) tq si est blanc faire

10 Ajouter si dans f et colorier si en gris11 π[si ]← sk

12 Enlever sk de f et colorier sk en noir

13 retourne π

g

a

b

c d

e f

h i

f =<>sk = i

Complexité de BFS pour un graphe ayant n sommets et p arcs?

; O(n + p) (sous réserve d’une implémentation par listes d’adjacence)

33/108

Page 69: Algorithmique Avancée pour l'Intelligence Artificielle et

Parcours de graphes Parcours en largeur (BFS)

Parcours en largeur (Breadth First Search / BFS)

1 Fonction BFS(g, s0)2 Soit f une file (FIFO) initialisée à vide3 pour chaque sommet si de g faire4 π[si ]← null5 Colorier si en blanc

6 Ajouter s0 dans f et colorier s0 en gris7 tant que f n’est pas vide faire8 Soit sk le sommet le plus ancien dans f9 pour chaque si ∈ succ(sk ) tq si est blanc faire

10 Ajouter si dans f et colorier si en gris11 π[si ]← sk

12 Enlever sk de f et colorier sk en noir

13 retourne π

g

a

b

c d

e f

h i

f =<>sk = i

Complexité de BFS pour un graphe ayant n sommets et p arcs?

; O(n + p) (sous réserve d’une implémentation par listes d’adjacence)

33/108

Page 70: Algorithmique Avancée pour l'Intelligence Artificielle et

Parcours de graphes Parcours en largeur (BFS)

Parcours en largeur (Breadth First Search / BFS)

1 Fonction BFS(g, s0)2 Soit f une file (FIFO) initialisée à vide3 pour chaque sommet si de g faire4 π[si ]← null5 Colorier si en blanc

6 Ajouter s0 dans f et colorier s0 en gris7 tant que f n’est pas vide faire8 Soit sk le sommet le plus ancien dans f9 pour chaque si ∈ succ(sk ) tq si est blanc faire

10 Ajouter si dans f et colorier si en gris11 π[si ]← sk

12 Enlever sk de f et colorier sk en noir

13 retourne π

g

a

b

c d

e f

h i

f =<>sk = i

Complexité de BFS pour un graphe ayant n sommets et p arcs?

; O(n + p) (sous réserve d’une implémentation par listes d’adjacence)

33/108

Page 71: Algorithmique Avancée pour l'Intelligence Artificielle et

Parcours de graphes Parcours en largeur (BFS)

Utilisation de BFS : Recherche de plus courts chemins

Définition : Soient s0 et si deux sommets tels que s0 ; si

Plus court chemin entre s0 et si = chemin de longueur minimale

Distance entre s0 et si = δ(s0, si) = longueur du plus court chemin

Exemple :

ig

a

b

c d

e f

h

δ(a,a) = 0

δ(a,b) = δ(a,g) = 1

δ(a, c) = δ(a,e) = δ(a,h) = 2

δ(a,d) = δ(a, f ) = δ(a, i) = 3

34/108

Page 72: Algorithmique Avancée pour l'Intelligence Artificielle et

Parcours de graphes Parcours en largeur (BFS)

1 Fonction calculeDistances(g, s0)2 pour chaque sommet si de g faire3 π[si ]← null4 Colorier si en blanc5 d [si ]←∞

6 Ajouter s0 dans f et colorier s0 en gris7 d [s0]← 08 tant que f n’est pas vide faire9 Soit sk le sommet le plus ancien dans f

10 pour chaque si ∈ succ(sk ) tq si est blanc faire11 Ajouter si dans f et colorier si en gris12 d [si ]← d [sk ] + 113 π[si ]← sk

14 Enlever sk de f et colorier sk en noir

15 retourne d

ig

a

b

c d

e f

h

f =<>

Preuve : propriétés invariantes à la ligne 91 Aucun successeur d’un sommet noir n’est blanc2 Pour tout sommet si gris ou noir, d [si ] = δ(s0, si)

3 Soit < s1, s2, . . . , sk > les sommets de f , du + récent au + vieux :d [s1] ≥ d [s2] ≥ . . . ≥ d [sk ] et d [s1] ≤ d [sk ] + 1

35/108

Page 73: Algorithmique Avancée pour l'Intelligence Artificielle et

Parcours de graphes Parcours en largeur (BFS)

1 Fonction calculeDistances(g, s0)2 pour chaque sommet si de g faire3 π[si ]← null4 Colorier si en blanc5 d [si ]←∞

6 Ajouter s0 dans f et colorier s0 en gris7 d [s0]← 08 tant que f n’est pas vide faire9 Soit sk le sommet le plus ancien dans f

10 pour chaque si ∈ succ(sk ) tq si est blanc faire11 Ajouter si dans f et colorier si en gris12 d [si ]← d [sk ] + 113 π[si ]← sk

14 Enlever sk de f et colorier sk en noir

15 retourne d

g

a

b

c d

e f

h i

f =< a >d [a] = 0

Preuve : propriétés invariantes à la ligne 91 Aucun successeur d’un sommet noir n’est blanc2 Pour tout sommet si gris ou noir, d [si ] = δ(s0, si)

3 Soit < s1, s2, . . . , sk > les sommets de f , du + récent au + vieux :d [s1] ≥ d [s2] ≥ . . . ≥ d [sk ] et d [s1] ≤ d [sk ] + 1

35/108

Page 74: Algorithmique Avancée pour l'Intelligence Artificielle et

Parcours de graphes Parcours en largeur (BFS)

1 Fonction calculeDistances(g, s0)2 pour chaque sommet si de g faire3 π[si ]← null4 Colorier si en blanc5 d [si ]←∞

6 Ajouter s0 dans f et colorier s0 en gris7 d [s0]← 08 tant que f n’est pas vide faire9 Soit sk le sommet le plus ancien dans f

10 pour chaque si ∈ succ(sk ) tq si est blanc faire11 Ajouter si dans f et colorier si en gris12 d [si ]← d [sk ] + 113 π[si ]← sk

14 Enlever sk de f et colorier sk en noir

15 retourne d

g

a

b

c d

e f

h i

f =< a >d [a] = 0

Preuve : propriétés invariantes à la ligne 91 Aucun successeur d’un sommet noir n’est blanc2 Pour tout sommet si gris ou noir, d [si ] = δ(s0, si)

3 Soit < s1, s2, . . . , sk > les sommets de f , du + récent au + vieux :d [s1] ≥ d [s2] ≥ . . . ≥ d [sk ] et d [s1] ≤ d [sk ] + 1

35/108

Page 75: Algorithmique Avancée pour l'Intelligence Artificielle et

Parcours de graphes Parcours en largeur (BFS)

1 Fonction calculeDistances(g, s0)2 pour chaque sommet si de g faire3 π[si ]← null4 Colorier si en blanc5 d [si ]←∞

6 Ajouter s0 dans f et colorier s0 en gris7 d [s0]← 08 tant que f n’est pas vide faire9 Soit sk le sommet le plus ancien dans f

10 pour chaque si ∈ succ(sk ) tq si est blanc faire11 Ajouter si dans f et colorier si en gris12 d [si ]← d [sk ] + 113 π[si ]← sk

14 Enlever sk de f et colorier sk en noir

15 retourne d

g

a

b

c d

e f

h i

f =< b, a >d [a] = 0, d [b] = 1

Preuve : propriétés invariantes à la ligne 91 Aucun successeur d’un sommet noir n’est blanc2 Pour tout sommet si gris ou noir, d [si ] = δ(s0, si)

3 Soit < s1, s2, . . . , sk > les sommets de f , du + récent au + vieux :d [s1] ≥ d [s2] ≥ . . . ≥ d [sk ] et d [s1] ≤ d [sk ] + 1

35/108

Page 76: Algorithmique Avancée pour l'Intelligence Artificielle et

Parcours de graphes Parcours en largeur (BFS)

1 Fonction calculeDistances(g, s0)2 pour chaque sommet si de g faire3 π[si ]← null4 Colorier si en blanc5 d [si ]←∞

6 Ajouter s0 dans f et colorier s0 en gris7 d [s0]← 08 tant que f n’est pas vide faire9 Soit sk le sommet le plus ancien dans f

10 pour chaque si ∈ succ(sk ) tq si est blanc faire11 Ajouter si dans f et colorier si en gris12 d [si ]← d [sk ] + 113 π[si ]← sk

14 Enlever sk de f et colorier sk en noir

15 retourne d

g

a

b

c d

e f

h i

f =< g, b, a >d [a] = 0, d [b] = 1, d [g] = 1

Preuve : propriétés invariantes à la ligne 91 Aucun successeur d’un sommet noir n’est blanc2 Pour tout sommet si gris ou noir, d [si ] = δ(s0, si)

3 Soit < s1, s2, . . . , sk > les sommets de f , du + récent au + vieux :d [s1] ≥ d [s2] ≥ . . . ≥ d [sk ] et d [s1] ≤ d [sk ] + 1

35/108

Page 77: Algorithmique Avancée pour l'Intelligence Artificielle et

Parcours de graphes Parcours en largeur (BFS)

1 Fonction calculeDistances(g, s0)2 pour chaque sommet si de g faire3 π[si ]← null4 Colorier si en blanc5 d [si ]←∞

6 Ajouter s0 dans f et colorier s0 en gris7 d [s0]← 08 tant que f n’est pas vide faire9 Soit sk le sommet le plus ancien dans f

10 pour chaque si ∈ succ(sk ) tq si est blanc faire11 Ajouter si dans f et colorier si en gris12 d [si ]← d [sk ] + 113 π[si ]← sk

14 Enlever sk de f et colorier sk en noir

15 retourne d

g

a

b

c d

e f

h i

f =< g, b >d [a] = 0, d [b] = 1, d [g] = 1

Preuve : propriétés invariantes à la ligne 91 Aucun successeur d’un sommet noir n’est blanc2 Pour tout sommet si gris ou noir, d [si ] = δ(s0, si)

3 Soit < s1, s2, . . . , sk > les sommets de f , du + récent au + vieux :d [s1] ≥ d [s2] ≥ . . . ≥ d [sk ] et d [s1] ≤ d [sk ] + 1

35/108

Page 78: Algorithmique Avancée pour l'Intelligence Artificielle et

Parcours de graphes Parcours en largeur (BFS)

1 Fonction calculeDistances(g, s0)2 pour chaque sommet si de g faire3 π[si ]← null4 Colorier si en blanc5 d [si ]←∞

6 Ajouter s0 dans f et colorier s0 en gris7 d [s0]← 08 tant que f n’est pas vide faire9 Soit sk le sommet le plus ancien dans f

10 pour chaque si ∈ succ(sk ) tq si est blanc faire11 Ajouter si dans f et colorier si en gris12 d [si ]← d [sk ] + 113 π[si ]← sk

14 Enlever sk de f et colorier sk en noir

15 retourne d

g

a

b

c d

e f

h i

f =< g, b >d [a] = 0, d [b] = 1, d [g] = 1

Preuve : propriétés invariantes à la ligne 91 Aucun successeur d’un sommet noir n’est blanc2 Pour tout sommet si gris ou noir, d [si ] = δ(s0, si)

3 Soit < s1, s2, . . . , sk > les sommets de f , du + récent au + vieux :d [s1] ≥ d [s2] ≥ . . . ≥ d [sk ] et d [s1] ≤ d [sk ] + 1

35/108

Page 79: Algorithmique Avancée pour l'Intelligence Artificielle et

Parcours de graphes Parcours en largeur (BFS)

1 Fonction calculeDistances(g, s0)2 pour chaque sommet si de g faire3 π[si ]← null4 Colorier si en blanc5 d [si ]←∞

6 Ajouter s0 dans f et colorier s0 en gris7 d [s0]← 08 tant que f n’est pas vide faire9 Soit sk le sommet le plus ancien dans f

10 pour chaque si ∈ succ(sk ) tq si est blanc faire11 Ajouter si dans f et colorier si en gris12 d [si ]← d [sk ] + 113 π[si ]← sk

14 Enlever sk de f et colorier sk en noir

15 retourne d

g

a

b

c d

e f

h i

f =< c, g, b >d [a] = 0, d [b] = 1, d [g] = 1,d [c] = 2

Preuve : propriétés invariantes à la ligne 91 Aucun successeur d’un sommet noir n’est blanc2 Pour tout sommet si gris ou noir, d [si ] = δ(s0, si)

3 Soit < s1, s2, . . . , sk > les sommets de f , du + récent au + vieux :d [s1] ≥ d [s2] ≥ . . . ≥ d [sk ] et d [s1] ≤ d [sk ] + 1

35/108

Page 80: Algorithmique Avancée pour l'Intelligence Artificielle et

Parcours de graphes Parcours en largeur (BFS)

1 Fonction calculeDistances(g, s0)2 pour chaque sommet si de g faire3 π[si ]← null4 Colorier si en blanc5 d [si ]←∞

6 Ajouter s0 dans f et colorier s0 en gris7 d [s0]← 08 tant que f n’est pas vide faire9 Soit sk le sommet le plus ancien dans f

10 pour chaque si ∈ succ(sk ) tq si est blanc faire11 Ajouter si dans f et colorier si en gris12 d [si ]← d [sk ] + 113 π[si ]← sk

14 Enlever sk de f et colorier sk en noir

15 retourne d

g

a

b

c d

e f

h i

f =< e, c, g, b >d [a] = 0, d [b] = 1, d [g] = 1,d [c] = 2, d [e] = 2

Preuve : propriétés invariantes à la ligne 91 Aucun successeur d’un sommet noir n’est blanc2 Pour tout sommet si gris ou noir, d [si ] = δ(s0, si)

3 Soit < s1, s2, . . . , sk > les sommets de f , du + récent au + vieux :d [s1] ≥ d [s2] ≥ . . . ≥ d [sk ] et d [s1] ≤ d [sk ] + 1

35/108

Page 81: Algorithmique Avancée pour l'Intelligence Artificielle et

Parcours de graphes Parcours en largeur (BFS)

1 Fonction calculeDistances(g, s0)2 pour chaque sommet si de g faire3 π[si ]← null4 Colorier si en blanc5 d [si ]←∞

6 Ajouter s0 dans f et colorier s0 en gris7 d [s0]← 08 tant que f n’est pas vide faire9 Soit sk le sommet le plus ancien dans f

10 pour chaque si ∈ succ(sk ) tq si est blanc faire11 Ajouter si dans f et colorier si en gris12 d [si ]← d [sk ] + 113 π[si ]← sk

14 Enlever sk de f et colorier sk en noir

15 retourne d

g

a

b

c d

e f

h i

f =< e, c, g >d [a] = 0, d [b] = 1, d [g] = 1,d [c] = 2, d [e] = 2

Preuve : propriétés invariantes à la ligne 91 Aucun successeur d’un sommet noir n’est blanc2 Pour tout sommet si gris ou noir, d [si ] = δ(s0, si)

3 Soit < s1, s2, . . . , sk > les sommets de f , du + récent au + vieux :d [s1] ≥ d [s2] ≥ . . . ≥ d [sk ] et d [s1] ≤ d [sk ] + 1

35/108

Page 82: Algorithmique Avancée pour l'Intelligence Artificielle et

Parcours de graphes Parcours en largeur (BFS)

1 Fonction calculeDistances(g, s0)2 pour chaque sommet si de g faire3 π[si ]← null4 Colorier si en blanc5 d [si ]←∞

6 Ajouter s0 dans f et colorier s0 en gris7 d [s0]← 08 tant que f n’est pas vide faire9 Soit sk le sommet le plus ancien dans f

10 pour chaque si ∈ succ(sk ) tq si est blanc faire11 Ajouter si dans f et colorier si en gris12 d [si ]← d [sk ] + 113 π[si ]← sk

14 Enlever sk de f et colorier sk en noir

15 retourne d

g

a

b

c d

e f

h i

f =< e, c, g >d [a] = 0, d [b] = 1, d [g] = 1,d [c] = 2, d [e] = 2

Preuve : propriétés invariantes à la ligne 91 Aucun successeur d’un sommet noir n’est blanc2 Pour tout sommet si gris ou noir, d [si ] = δ(s0, si)

3 Soit < s1, s2, . . . , sk > les sommets de f , du + récent au + vieux :d [s1] ≥ d [s2] ≥ . . . ≥ d [sk ] et d [s1] ≤ d [sk ] + 1

35/108

Page 83: Algorithmique Avancée pour l'Intelligence Artificielle et

Parcours de graphes Parcours en largeur (BFS)

1 Fonction calculeDistances(g, s0)2 pour chaque sommet si de g faire3 π[si ]← null4 Colorier si en blanc5 d [si ]←∞

6 Ajouter s0 dans f et colorier s0 en gris7 d [s0]← 08 tant que f n’est pas vide faire9 Soit sk le sommet le plus ancien dans f

10 pour chaque si ∈ succ(sk ) tq si est blanc faire11 Ajouter si dans f et colorier si en gris12 d [si ]← d [sk ] + 113 π[si ]← sk

14 Enlever sk de f et colorier sk en noir

15 retourne d

g

a

b

c d

e f

h i

f =< h, e, c, g >d [a] = 0, d [b] = 1, d [g] = 1,d [c] = 2, d [e] = 2, d [h] = 2

Preuve : propriétés invariantes à la ligne 91 Aucun successeur d’un sommet noir n’est blanc2 Pour tout sommet si gris ou noir, d [si ] = δ(s0, si)

3 Soit < s1, s2, . . . , sk > les sommets de f , du + récent au + vieux :d [s1] ≥ d [s2] ≥ . . . ≥ d [sk ] et d [s1] ≤ d [sk ] + 1

35/108

Page 84: Algorithmique Avancée pour l'Intelligence Artificielle et

Parcours de graphes Parcours en largeur (BFS)

1 Fonction calculeDistances(g, s0)2 pour chaque sommet si de g faire3 π[si ]← null4 Colorier si en blanc5 d [si ]←∞

6 Ajouter s0 dans f et colorier s0 en gris7 d [s0]← 08 tant que f n’est pas vide faire9 Soit sk le sommet le plus ancien dans f

10 pour chaque si ∈ succ(sk ) tq si est blanc faire11 Ajouter si dans f et colorier si en gris12 d [si ]← d [sk ] + 113 π[si ]← sk

14 Enlever sk de f et colorier sk en noir

15 retourne d

g

a

b

c d

e f

h i

f =< h, e, c >d [a] = 0, d [b] = 1, d [g] = 1,d [c] = 2, d [e] = 2, d [h] = 2

Preuve : propriétés invariantes à la ligne 91 Aucun successeur d’un sommet noir n’est blanc2 Pour tout sommet si gris ou noir, d [si ] = δ(s0, si)

3 Soit < s1, s2, . . . , sk > les sommets de f , du + récent au + vieux :d [s1] ≥ d [s2] ≥ . . . ≥ d [sk ] et d [s1] ≤ d [sk ] + 1

35/108

Page 85: Algorithmique Avancée pour l'Intelligence Artificielle et

Parcours de graphes Parcours en largeur (BFS)

1 Fonction calculeDistances(g, s0)2 pour chaque sommet si de g faire3 π[si ]← null4 Colorier si en blanc5 d [si ]←∞

6 Ajouter s0 dans f et colorier s0 en gris7 d [s0]← 08 tant que f n’est pas vide faire9 Soit sk le sommet le plus ancien dans f

10 pour chaque si ∈ succ(sk ) tq si est blanc faire11 Ajouter si dans f et colorier si en gris12 d [si ]← d [sk ] + 113 π[si ]← sk

14 Enlever sk de f et colorier sk en noir

15 retourne d

g

a

b

c d

e f

h i

f =< h, e, c >d [a] = 0, d [b] = 1, d [g] = 1,d [c] = 2, d [e] = 2, d [h] = 2

Preuve : propriétés invariantes à la ligne 91 Aucun successeur d’un sommet noir n’est blanc2 Pour tout sommet si gris ou noir, d [si ] = δ(s0, si)

3 Soit < s1, s2, . . . , sk > les sommets de f , du + récent au + vieux :d [s1] ≥ d [s2] ≥ . . . ≥ d [sk ] et d [s1] ≤ d [sk ] + 1

35/108

Page 86: Algorithmique Avancée pour l'Intelligence Artificielle et

Parcours de graphes Parcours en largeur (BFS)

1 Fonction calculeDistances(g, s0)2 pour chaque sommet si de g faire3 π[si ]← null4 Colorier si en blanc5 d [si ]←∞

6 Ajouter s0 dans f et colorier s0 en gris7 d [s0]← 08 tant que f n’est pas vide faire9 Soit sk le sommet le plus ancien dans f

10 pour chaque si ∈ succ(sk ) tq si est blanc faire11 Ajouter si dans f et colorier si en gris12 d [si ]← d [sk ] + 113 π[si ]← sk

14 Enlever sk de f et colorier sk en noir

15 retourne d

g

a

b

c d

e f

h i

f =< d , h, e, c >d [a] = 0, d [b] = 1, d [g] = 1,d [c] = 2, d [e] = 2, d [h] = 2,d [d ] = 3

Preuve : propriétés invariantes à la ligne 91 Aucun successeur d’un sommet noir n’est blanc2 Pour tout sommet si gris ou noir, d [si ] = δ(s0, si)

3 Soit < s1, s2, . . . , sk > les sommets de f , du + récent au + vieux :d [s1] ≥ d [s2] ≥ . . . ≥ d [sk ] et d [s1] ≤ d [sk ] + 1

35/108

Page 87: Algorithmique Avancée pour l'Intelligence Artificielle et

Parcours de graphes Parcours en largeur (BFS)

1 Fonction calculeDistances(g, s0)2 pour chaque sommet si de g faire3 π[si ]← null4 Colorier si en blanc5 d [si ]←∞

6 Ajouter s0 dans f et colorier s0 en gris7 d [s0]← 08 tant que f n’est pas vide faire9 Soit sk le sommet le plus ancien dans f

10 pour chaque si ∈ succ(sk ) tq si est blanc faire11 Ajouter si dans f et colorier si en gris12 d [si ]← d [sk ] + 113 π[si ]← sk

14 Enlever sk de f et colorier sk en noir

15 retourne d

g

a

b

c d

e f

h i

f =< f , d , h, e, c >d [a] = 0, d [b] = 1, d [g] = 1,d [c] = 2, d [e] = 2, d [h] = 2,d [d ] = 3, d [f ] = 3

Preuve : propriétés invariantes à la ligne 91 Aucun successeur d’un sommet noir n’est blanc2 Pour tout sommet si gris ou noir, d [si ] = δ(s0, si)

3 Soit < s1, s2, . . . , sk > les sommets de f , du + récent au + vieux :d [s1] ≥ d [s2] ≥ . . . ≥ d [sk ] et d [s1] ≤ d [sk ] + 1

35/108

Page 88: Algorithmique Avancée pour l'Intelligence Artificielle et

Parcours de graphes Parcours en largeur (BFS)

1 Fonction calculeDistances(g, s0)2 pour chaque sommet si de g faire3 π[si ]← null4 Colorier si en blanc5 d [si ]←∞

6 Ajouter s0 dans f et colorier s0 en gris7 d [s0]← 08 tant que f n’est pas vide faire9 Soit sk le sommet le plus ancien dans f

10 pour chaque si ∈ succ(sk ) tq si est blanc faire11 Ajouter si dans f et colorier si en gris12 d [si ]← d [sk ] + 113 π[si ]← sk

14 Enlever sk de f et colorier sk en noir

15 retourne d

g

a

b

c d

e f

h i

f =< f , d , h, e >d [a] = 0, d [b] = 1, d [g] = 1,d [c] = 2, d [e] = 2, d [h] = 2,d [d ] = 3, d [f ] = 3

Preuve : propriétés invariantes à la ligne 91 Aucun successeur d’un sommet noir n’est blanc2 Pour tout sommet si gris ou noir, d [si ] = δ(s0, si)

3 Soit < s1, s2, . . . , sk > les sommets de f , du + récent au + vieux :d [s1] ≥ d [s2] ≥ . . . ≥ d [sk ] et d [s1] ≤ d [sk ] + 1

35/108

Page 89: Algorithmique Avancée pour l'Intelligence Artificielle et

Parcours de graphes Parcours en largeur (BFS)

1 Fonction calculeDistances(g, s0)2 pour chaque sommet si de g faire3 π[si ]← null4 Colorier si en blanc5 d [si ]←∞

6 Ajouter s0 dans f et colorier s0 en gris7 d [s0]← 08 tant que f n’est pas vide faire9 Soit sk le sommet le plus ancien dans f

10 pour chaque si ∈ succ(sk ) tq si est blanc faire11 Ajouter si dans f et colorier si en gris12 d [si ]← d [sk ] + 113 π[si ]← sk

14 Enlever sk de f et colorier sk en noir

15 retourne d

g

a

b

c d

e f

h i

f =< f , d , h, e >d [a] = 0, d [b] = 1, d [g] = 1,d [c] = 2, d [e] = 2, d [h] = 2,d [d ] = 3, d [f ] = 3

Preuve : propriétés invariantes à la ligne 91 Aucun successeur d’un sommet noir n’est blanc2 Pour tout sommet si gris ou noir, d [si ] = δ(s0, si)

3 Soit < s1, s2, . . . , sk > les sommets de f , du + récent au + vieux :d [s1] ≥ d [s2] ≥ . . . ≥ d [sk ] et d [s1] ≤ d [sk ] + 1

35/108

Page 90: Algorithmique Avancée pour l'Intelligence Artificielle et

Parcours de graphes Parcours en largeur (BFS)

1 Fonction calculeDistances(g, s0)2 pour chaque sommet si de g faire3 π[si ]← null4 Colorier si en blanc5 d [si ]←∞

6 Ajouter s0 dans f et colorier s0 en gris7 d [s0]← 08 tant que f n’est pas vide faire9 Soit sk le sommet le plus ancien dans f

10 pour chaque si ∈ succ(sk ) tq si est blanc faire11 Ajouter si dans f et colorier si en gris12 d [si ]← d [sk ] + 113 π[si ]← sk

14 Enlever sk de f et colorier sk en noir

15 retourne d

g

a

b

c d

e f

h i

f =< f , d , h >d [a] = 0, d [b] = 1, d [g] = 1,d [c] = 2, d [e] = 2, d [h] = 2,d [d ] = 3, d [f ] = 3

Preuve : propriétés invariantes à la ligne 91 Aucun successeur d’un sommet noir n’est blanc2 Pour tout sommet si gris ou noir, d [si ] = δ(s0, si)

3 Soit < s1, s2, . . . , sk > les sommets de f , du + récent au + vieux :d [s1] ≥ d [s2] ≥ . . . ≥ d [sk ] et d [s1] ≤ d [sk ] + 1

35/108

Page 91: Algorithmique Avancée pour l'Intelligence Artificielle et

Parcours de graphes Parcours en largeur (BFS)

1 Fonction calculeDistances(g, s0)2 pour chaque sommet si de g faire3 π[si ]← null4 Colorier si en blanc5 d [si ]←∞

6 Ajouter s0 dans f et colorier s0 en gris7 d [s0]← 08 tant que f n’est pas vide faire9 Soit sk le sommet le plus ancien dans f

10 pour chaque si ∈ succ(sk ) tq si est blanc faire11 Ajouter si dans f et colorier si en gris12 d [si ]← d [sk ] + 113 π[si ]← sk

14 Enlever sk de f et colorier sk en noir

15 retourne d

g

a

b

c d

e f

h i

f =< f , d , h >d [a] = 0, d [b] = 1, d [g] = 1,d [c] = 2, d [e] = 2, d [h] = 2,d [d ] = 3, d [f ] = 3

Preuve : propriétés invariantes à la ligne 91 Aucun successeur d’un sommet noir n’est blanc2 Pour tout sommet si gris ou noir, d [si ] = δ(s0, si)

3 Soit < s1, s2, . . . , sk > les sommets de f , du + récent au + vieux :d [s1] ≥ d [s2] ≥ . . . ≥ d [sk ] et d [s1] ≤ d [sk ] + 1

35/108

Page 92: Algorithmique Avancée pour l'Intelligence Artificielle et

Parcours de graphes Parcours en largeur (BFS)

1 Fonction calculeDistances(g, s0)2 pour chaque sommet si de g faire3 π[si ]← null4 Colorier si en blanc5 d [si ]←∞

6 Ajouter s0 dans f et colorier s0 en gris7 d [s0]← 08 tant que f n’est pas vide faire9 Soit sk le sommet le plus ancien dans f

10 pour chaque si ∈ succ(sk ) tq si est blanc faire11 Ajouter si dans f et colorier si en gris12 d [si ]← d [sk ] + 113 π[si ]← sk

14 Enlever sk de f et colorier sk en noir

15 retourne d

g

a

b

c d

e f

h i

f =< i, f , d , h >d [a] = 0, d [b] = 1, d [g] = 1,d [c] = 2, d [e] = 2, d [h] = 2,d [d ] = 3, d [f ] = 3, d [i] = 3

Preuve : propriétés invariantes à la ligne 91 Aucun successeur d’un sommet noir n’est blanc2 Pour tout sommet si gris ou noir, d [si ] = δ(s0, si)

3 Soit < s1, s2, . . . , sk > les sommets de f , du + récent au + vieux :d [s1] ≥ d [s2] ≥ . . . ≥ d [sk ] et d [s1] ≤ d [sk ] + 1

35/108

Page 93: Algorithmique Avancée pour l'Intelligence Artificielle et

Parcours de graphes Parcours en largeur (BFS)

1 Fonction calculeDistances(g, s0)2 pour chaque sommet si de g faire3 π[si ]← null4 Colorier si en blanc5 d [si ]←∞

6 Ajouter s0 dans f et colorier s0 en gris7 d [s0]← 08 tant que f n’est pas vide faire9 Soit sk le sommet le plus ancien dans f

10 pour chaque si ∈ succ(sk ) tq si est blanc faire11 Ajouter si dans f et colorier si en gris12 d [si ]← d [sk ] + 113 π[si ]← sk

14 Enlever sk de f et colorier sk en noir

15 retourne d

g

a

b

c d

e f

h i

f =< i, f , d >d [a] = 0, d [b] = 1, d [g] = 1,d [c] = 2, d [e] = 2, d [h] = 2,d [d ] = 3, d [f ] = 3, d [i] = 3

Preuve : propriétés invariantes à la ligne 91 Aucun successeur d’un sommet noir n’est blanc2 Pour tout sommet si gris ou noir, d [si ] = δ(s0, si)

3 Soit < s1, s2, . . . , sk > les sommets de f , du + récent au + vieux :d [s1] ≥ d [s2] ≥ . . . ≥ d [sk ] et d [s1] ≤ d [sk ] + 1

35/108

Page 94: Algorithmique Avancée pour l'Intelligence Artificielle et

Parcours de graphes Parcours en largeur (BFS)

1 Fonction calculeDistances(g, s0)2 pour chaque sommet si de g faire3 π[si ]← null4 Colorier si en blanc5 d [si ]←∞

6 Ajouter s0 dans f et colorier s0 en gris7 d [s0]← 08 tant que f n’est pas vide faire9 Soit sk le sommet le plus ancien dans f

10 pour chaque si ∈ succ(sk ) tq si est blanc faire11 Ajouter si dans f et colorier si en gris12 d [si ]← d [sk ] + 113 π[si ]← sk

14 Enlever sk de f et colorier sk en noir

15 retourne d

g

a

b

c d

e f

h i

f =< i, f , d >d [a] = 0, d [b] = 1, d [g] = 1,d [c] = 2, d [e] = 2, d [h] = 2,d [d ] = 3, d [f ] = 3, d [i] = 3

Preuve : propriétés invariantes à la ligne 91 Aucun successeur d’un sommet noir n’est blanc2 Pour tout sommet si gris ou noir, d [si ] = δ(s0, si)

3 Soit < s1, s2, . . . , sk > les sommets de f , du + récent au + vieux :d [s1] ≥ d [s2] ≥ . . . ≥ d [sk ] et d [s1] ≤ d [sk ] + 1

35/108

Page 95: Algorithmique Avancée pour l'Intelligence Artificielle et

Parcours de graphes Parcours en largeur (BFS)

1 Fonction calculeDistances(g, s0)2 pour chaque sommet si de g faire3 π[si ]← null4 Colorier si en blanc5 d [si ]←∞

6 Ajouter s0 dans f et colorier s0 en gris7 d [s0]← 08 tant que f n’est pas vide faire9 Soit sk le sommet le plus ancien dans f

10 pour chaque si ∈ succ(sk ) tq si est blanc faire11 Ajouter si dans f et colorier si en gris12 d [si ]← d [sk ] + 113 π[si ]← sk

14 Enlever sk de f et colorier sk en noir

15 retourne d

g

a

b

c d

e f

h i

f =< i, f >d [a] = 0, d [b] = 1, d [g] = 1,d [c] = 2, d [e] = 2, d [h] = 2,d [d ] = 3, d [f ] = 3, d [i] = 3

Preuve : propriétés invariantes à la ligne 91 Aucun successeur d’un sommet noir n’est blanc2 Pour tout sommet si gris ou noir, d [si ] = δ(s0, si)

3 Soit < s1, s2, . . . , sk > les sommets de f , du + récent au + vieux :d [s1] ≥ d [s2] ≥ . . . ≥ d [sk ] et d [s1] ≤ d [sk ] + 1

35/108

Page 96: Algorithmique Avancée pour l'Intelligence Artificielle et

Parcours de graphes Parcours en largeur (BFS)

1 Fonction calculeDistances(g, s0)2 pour chaque sommet si de g faire3 π[si ]← null4 Colorier si en blanc5 d [si ]←∞

6 Ajouter s0 dans f et colorier s0 en gris7 d [s0]← 08 tant que f n’est pas vide faire9 Soit sk le sommet le plus ancien dans f

10 pour chaque si ∈ succ(sk ) tq si est blanc faire11 Ajouter si dans f et colorier si en gris12 d [si ]← d [sk ] + 113 π[si ]← sk

14 Enlever sk de f et colorier sk en noir

15 retourne d

g

a

b

c d

e f

h i

f =< i, f >d [a] = 0, d [b] = 1, d [g] = 1,d [c] = 2, d [e] = 2, d [h] = 2,d [d ] = 3, d [f ] = 3, d [i] = 3

Preuve : propriétés invariantes à la ligne 91 Aucun successeur d’un sommet noir n’est blanc2 Pour tout sommet si gris ou noir, d [si ] = δ(s0, si)

3 Soit < s1, s2, . . . , sk > les sommets de f , du + récent au + vieux :d [s1] ≥ d [s2] ≥ . . . ≥ d [sk ] et d [s1] ≤ d [sk ] + 1

35/108

Page 97: Algorithmique Avancée pour l'Intelligence Artificielle et

Parcours de graphes Parcours en largeur (BFS)

1 Fonction calculeDistances(g, s0)2 pour chaque sommet si de g faire3 π[si ]← null4 Colorier si en blanc5 d [si ]←∞

6 Ajouter s0 dans f et colorier s0 en gris7 d [s0]← 08 tant que f n’est pas vide faire9 Soit sk le sommet le plus ancien dans f

10 pour chaque si ∈ succ(sk ) tq si est blanc faire11 Ajouter si dans f et colorier si en gris12 d [si ]← d [sk ] + 113 π[si ]← sk

14 Enlever sk de f et colorier sk en noir

15 retourne d

g

a

b

c d

e f

h i

f =< i >d [a] = 0, d [b] = 1, d [g] = 1,d [c] = 2, d [e] = 2, d [h] = 2,d [d ] = 3, d [f ] = 3, d [i] = 3

Preuve : propriétés invariantes à la ligne 91 Aucun successeur d’un sommet noir n’est blanc2 Pour tout sommet si gris ou noir, d [si ] = δ(s0, si)

3 Soit < s1, s2, . . . , sk > les sommets de f , du + récent au + vieux :d [s1] ≥ d [s2] ≥ . . . ≥ d [sk ] et d [s1] ≤ d [sk ] + 1

35/108

Page 98: Algorithmique Avancée pour l'Intelligence Artificielle et

Parcours de graphes Parcours en largeur (BFS)

1 Fonction calculeDistances(g, s0)2 pour chaque sommet si de g faire3 π[si ]← null4 Colorier si en blanc5 d [si ]←∞

6 Ajouter s0 dans f et colorier s0 en gris7 d [s0]← 08 tant que f n’est pas vide faire9 Soit sk le sommet le plus ancien dans f

10 pour chaque si ∈ succ(sk ) tq si est blanc faire11 Ajouter si dans f et colorier si en gris12 d [si ]← d [sk ] + 113 π[si ]← sk

14 Enlever sk de f et colorier sk en noir

15 retourne d

g

a

b

c d

e f

h i

f =< i >d [a] = 0, d [b] = 1, d [g] = 1,d [c] = 2, d [e] = 2, d [h] = 2,d [d ] = 3, d [f ] = 3, d [i] = 3

Preuve : propriétés invariantes à la ligne 91 Aucun successeur d’un sommet noir n’est blanc2 Pour tout sommet si gris ou noir, d [si ] = δ(s0, si)

3 Soit < s1, s2, . . . , sk > les sommets de f , du + récent au + vieux :d [s1] ≥ d [s2] ≥ . . . ≥ d [sk ] et d [s1] ≤ d [sk ] + 1

35/108

Page 99: Algorithmique Avancée pour l'Intelligence Artificielle et

Parcours de graphes Parcours en largeur (BFS)

1 Fonction calculeDistances(g, s0)2 pour chaque sommet si de g faire3 π[si ]← null4 Colorier si en blanc5 d [si ]←∞

6 Ajouter s0 dans f et colorier s0 en gris7 d [s0]← 08 tant que f n’est pas vide faire9 Soit sk le sommet le plus ancien dans f

10 pour chaque si ∈ succ(sk ) tq si est blanc faire11 Ajouter si dans f et colorier si en gris12 d [si ]← d [sk ] + 113 π[si ]← sk

14 Enlever sk de f et colorier sk en noir

15 retourne d

g

a

b

c d

e f

h i

f =<>d [a] = 0, d [b] = 1, d [g] = 1,d [c] = 2, d [e] = 2, d [h] = 2,d [d ] = 3, d [f ] = 3, d [i] = 3

Preuve : propriétés invariantes à la ligne 91 Aucun successeur d’un sommet noir n’est blanc2 Pour tout sommet si gris ou noir, d [si ] = δ(s0, si)

3 Soit < s1, s2, . . . , sk > les sommets de f , du + récent au + vieux :d [s1] ≥ d [s2] ≥ . . . ≥ d [sk ] et d [s1] ≤ d [sk ] + 1

35/108

Page 100: Algorithmique Avancée pour l'Intelligence Artificielle et

Parcours de graphes Parcours en largeur (BFS)

Affichage du plus court chemin1 Proc plusCourtChemin(s0, sj , π)

Entrée : 2 sommets s0 et sj , et une arborescence πPrécond. : π = arborescence retournée par calculeDistance(g, s0)Postcond. : Affiche un plus court chemin pour aller de s0 jusque sj

2 si s0 = sj alors afficher(s0);3 sinon si π[sj ] = null alors afficher("Pas de chemin !");4 sinon5 plusCourtChemin(s0, π[sj ], π)6 afficher(" suivi de ",sj )

Exemple :

j

g

a

b

c d

e f

h i

Tableau π correspondant :

- a b c b c a g h -a b c d e f g h i j

36/108

Page 101: Algorithmique Avancée pour l'Intelligence Artificielle et

Parcours de graphes Parcours en profondeur (DFS)

1 Introduction

2 Définitions

3 Structures de données pour représenter un graphe

4 Parcours de graphesGénéralités sur les parcoursParcours en largeur (BFS)Parcours en profondeur (DFS)

5 Plus courts chemins

6 Problèmes de planification

7 Quelques problèmes NP-difficiles sur les graphes

37/108

Page 102: Algorithmique Avancée pour l'Intelligence Artificielle et

Parcours de graphes Parcours en profondeur (DFS)

Parcours en profondeur (Depth First search / DFS)

1 Fonction DFS(g, s0)2 Soit p une pile (LIFO) initialisée à vide3 pour tout sommet si ∈ S faire4 π[si ]← null5 Colorier si en blanc

6 Empiler s0 dans p et colorier s0 en gris7 tant que p n’est pas vide faire8 Soit si le dernier sommet entré dans p9 si ∃sj ∈ succ(si ) tel que sj soit blanc alors

10 Empiler sj dans p et colorier sj en gris11 π[sj ]← si12 sinon13 Dépiler si de p et colorier si en noir

14 retourne π

h

dc

f

g

a

b

e

p =<>

Complexité de DFS pour un graphe ayant n sommets et p arcs?

; O(n + p) (sous réserve d’une implémentation par listes d’adjacence)

38/108

Page 103: Algorithmique Avancée pour l'Intelligence Artificielle et

Parcours de graphes Parcours en profondeur (DFS)

Parcours en profondeur (Depth First search / DFS)

1 Fonction DFS(g, s0)2 Soit p une pile (LIFO) initialisée à vide3 pour tout sommet si ∈ S faire4 π[si ]← null5 Colorier si en blanc

6 Empiler s0 dans p et colorier s0 en gris7 tant que p n’est pas vide faire8 Soit si le dernier sommet entré dans p9 si ∃sj ∈ succ(si ) tel que sj soit blanc alors

10 Empiler sj dans p et colorier sj en gris11 π[sj ]← si12 sinon13 Dépiler si de p et colorier si en noir

14 retourne π

c

f

g

a

b

e

h

d

p =< a >

Complexité de DFS pour un graphe ayant n sommets et p arcs?

; O(n + p) (sous réserve d’une implémentation par listes d’adjacence)

38/108

Page 104: Algorithmique Avancée pour l'Intelligence Artificielle et

Parcours de graphes Parcours en profondeur (DFS)

Parcours en profondeur (Depth First search / DFS)

1 Fonction DFS(g, s0)2 Soit p une pile (LIFO) initialisée à vide3 pour tout sommet si ∈ S faire4 π[si ]← null5 Colorier si en blanc

6 Empiler s0 dans p et colorier s0 en gris7 tant que p n’est pas vide faire8 Soit si le dernier sommet entré dans p9 si ∃sj ∈ succ(si ) tel que sj soit blanc alors

10 Empiler sj dans p et colorier sj en gris11 π[sj ]← si12 sinon13 Dépiler si de p et colorier si en noir

14 retourne π

f

g

a

b

e

h

dc

p =< a >si = a

Complexité de DFS pour un graphe ayant n sommets et p arcs?

; O(n + p) (sous réserve d’une implémentation par listes d’adjacence)

38/108

Page 105: Algorithmique Avancée pour l'Intelligence Artificielle et

Parcours de graphes Parcours en profondeur (DFS)

Parcours en profondeur (Depth First search / DFS)

1 Fonction DFS(g, s0)2 Soit p une pile (LIFO) initialisée à vide3 pour tout sommet si ∈ S faire4 π[si ]← null5 Colorier si en blanc

6 Empiler s0 dans p et colorier s0 en gris7 tant que p n’est pas vide faire8 Soit si le dernier sommet entré dans p9 si ∃sj ∈ succ(si ) tel que sj soit blanc alors

10 Empiler sj dans p et colorier sj en gris11 π[sj ]← si12 sinon13 Dépiler si de p et colorier si en noir

14 retourne π

f

g

a

b

e

h

dc

p =< a, b >si = a, sj = b

Complexité de DFS pour un graphe ayant n sommets et p arcs?

; O(n + p) (sous réserve d’une implémentation par listes d’adjacence)

38/108

Page 106: Algorithmique Avancée pour l'Intelligence Artificielle et

Parcours de graphes Parcours en profondeur (DFS)

Parcours en profondeur (Depth First search / DFS)

1 Fonction DFS(g, s0)2 Soit p une pile (LIFO) initialisée à vide3 pour tout sommet si ∈ S faire4 π[si ]← null5 Colorier si en blanc

6 Empiler s0 dans p et colorier s0 en gris7 tant que p n’est pas vide faire8 Soit si le dernier sommet entré dans p9 si ∃sj ∈ succ(si ) tel que sj soit blanc alors

10 Empiler sj dans p et colorier sj en gris11 π[sj ]← si12 sinon13 Dépiler si de p et colorier si en noir

14 retourne π

f

g

a

b

e

h

dc

p =< a, b >si = b

Complexité de DFS pour un graphe ayant n sommets et p arcs?

; O(n + p) (sous réserve d’une implémentation par listes d’adjacence)

38/108

Page 107: Algorithmique Avancée pour l'Intelligence Artificielle et

Parcours de graphes Parcours en profondeur (DFS)

Parcours en profondeur (Depth First search / DFS)

1 Fonction DFS(g, s0)2 Soit p une pile (LIFO) initialisée à vide3 pour tout sommet si ∈ S faire4 π[si ]← null5 Colorier si en blanc

6 Empiler s0 dans p et colorier s0 en gris7 tant que p n’est pas vide faire8 Soit si le dernier sommet entré dans p9 si ∃sj ∈ succ(si ) tel que sj soit blanc alors

10 Empiler sj dans p et colorier sj en gris11 π[sj ]← si12 sinon13 Dépiler si de p et colorier si en noir

14 retourne π

f

g

a

b

e

h

dc

p =< a, b, c >si = b, sj = c

Complexité de DFS pour un graphe ayant n sommets et p arcs?

; O(n + p) (sous réserve d’une implémentation par listes d’adjacence)

38/108

Page 108: Algorithmique Avancée pour l'Intelligence Artificielle et

Parcours de graphes Parcours en profondeur (DFS)

Parcours en profondeur (Depth First search / DFS)

1 Fonction DFS(g, s0)2 Soit p une pile (LIFO) initialisée à vide3 pour tout sommet si ∈ S faire4 π[si ]← null5 Colorier si en blanc

6 Empiler s0 dans p et colorier s0 en gris7 tant que p n’est pas vide faire8 Soit si le dernier sommet entré dans p9 si ∃sj ∈ succ(si ) tel que sj soit blanc alors

10 Empiler sj dans p et colorier sj en gris11 π[sj ]← si12 sinon13 Dépiler si de p et colorier si en noir

14 retourne π

f

g

a

b

e

h

dc

p =< a, b, c >si = c

Complexité de DFS pour un graphe ayant n sommets et p arcs?

; O(n + p) (sous réserve d’une implémentation par listes d’adjacence)

38/108

Page 109: Algorithmique Avancée pour l'Intelligence Artificielle et

Parcours de graphes Parcours en profondeur (DFS)

Parcours en profondeur (Depth First search / DFS)

1 Fonction DFS(g, s0)2 Soit p une pile (LIFO) initialisée à vide3 pour tout sommet si ∈ S faire4 π[si ]← null5 Colorier si en blanc

6 Empiler s0 dans p et colorier s0 en gris7 tant que p n’est pas vide faire8 Soit si le dernier sommet entré dans p9 si ∃sj ∈ succ(si ) tel que sj soit blanc alors

10 Empiler sj dans p et colorier sj en gris11 π[sj ]← si12 sinon13 Dépiler si de p et colorier si en noir

14 retourne π

f

g

a

b

e

h

dc

p =< a, b, c, d >si = c, sj = d

Complexité de DFS pour un graphe ayant n sommets et p arcs?

; O(n + p) (sous réserve d’une implémentation par listes d’adjacence)

38/108

Page 110: Algorithmique Avancée pour l'Intelligence Artificielle et

Parcours de graphes Parcours en profondeur (DFS)

Parcours en profondeur (Depth First search / DFS)

1 Fonction DFS(g, s0)2 Soit p une pile (LIFO) initialisée à vide3 pour tout sommet si ∈ S faire4 π[si ]← null5 Colorier si en blanc

6 Empiler s0 dans p et colorier s0 en gris7 tant que p n’est pas vide faire8 Soit si le dernier sommet entré dans p9 si ∃sj ∈ succ(si ) tel que sj soit blanc alors

10 Empiler sj dans p et colorier sj en gris11 π[sj ]← si12 sinon13 Dépiler si de p et colorier si en noir

14 retourne π

f

g

a

b

e

h

dc

p =< a, b, c >si = d

Complexité de DFS pour un graphe ayant n sommets et p arcs?

; O(n + p) (sous réserve d’une implémentation par listes d’adjacence)

38/108

Page 111: Algorithmique Avancée pour l'Intelligence Artificielle et

Parcours de graphes Parcours en profondeur (DFS)

Parcours en profondeur (Depth First search / DFS)

1 Fonction DFS(g, s0)2 Soit p une pile (LIFO) initialisée à vide3 pour tout sommet si ∈ S faire4 π[si ]← null5 Colorier si en blanc

6 Empiler s0 dans p et colorier s0 en gris7 tant que p n’est pas vide faire8 Soit si le dernier sommet entré dans p9 si ∃sj ∈ succ(si ) tel que sj soit blanc alors

10 Empiler sj dans p et colorier sj en gris11 π[sj ]← si12 sinon13 Dépiler si de p et colorier si en noir

14 retourne π

f

g

a

b

e

h

dc

p =< a, b, c >si = c

Complexité de DFS pour un graphe ayant n sommets et p arcs?

; O(n + p) (sous réserve d’une implémentation par listes d’adjacence)

38/108

Page 112: Algorithmique Avancée pour l'Intelligence Artificielle et

Parcours de graphes Parcours en profondeur (DFS)

Parcours en profondeur (Depth First search / DFS)

1 Fonction DFS(g, s0)2 Soit p une pile (LIFO) initialisée à vide3 pour tout sommet si ∈ S faire4 π[si ]← null5 Colorier si en blanc

6 Empiler s0 dans p et colorier s0 en gris7 tant que p n’est pas vide faire8 Soit si le dernier sommet entré dans p9 si ∃sj ∈ succ(si ) tel que sj soit blanc alors

10 Empiler sj dans p et colorier sj en gris11 π[sj ]← si12 sinon13 Dépiler si de p et colorier si en noir

14 retourne π

f

g

a

b

e

h

dc

p =< a, b, c, e >si = c, sj = e

Complexité de DFS pour un graphe ayant n sommets et p arcs?

; O(n + p) (sous réserve d’une implémentation par listes d’adjacence)

38/108

Page 113: Algorithmique Avancée pour l'Intelligence Artificielle et

Parcours de graphes Parcours en profondeur (DFS)

Parcours en profondeur (Depth First search / DFS)

1 Fonction DFS(g, s0)2 Soit p une pile (LIFO) initialisée à vide3 pour tout sommet si ∈ S faire4 π[si ]← null5 Colorier si en blanc

6 Empiler s0 dans p et colorier s0 en gris7 tant que p n’est pas vide faire8 Soit si le dernier sommet entré dans p9 si ∃sj ∈ succ(si ) tel que sj soit blanc alors

10 Empiler sj dans p et colorier sj en gris11 π[sj ]← si12 sinon13 Dépiler si de p et colorier si en noir

14 retourne π

f

g

a

b

e

h

dc

p =< a, b, c, e >si = e

Complexité de DFS pour un graphe ayant n sommets et p arcs?

; O(n + p) (sous réserve d’une implémentation par listes d’adjacence)

38/108

Page 114: Algorithmique Avancée pour l'Intelligence Artificielle et

Parcours de graphes Parcours en profondeur (DFS)

Parcours en profondeur (Depth First search / DFS)

1 Fonction DFS(g, s0)2 Soit p une pile (LIFO) initialisée à vide3 pour tout sommet si ∈ S faire4 π[si ]← null5 Colorier si en blanc

6 Empiler s0 dans p et colorier s0 en gris7 tant que p n’est pas vide faire8 Soit si le dernier sommet entré dans p9 si ∃sj ∈ succ(si ) tel que sj soit blanc alors

10 Empiler sj dans p et colorier sj en gris11 π[sj ]← si12 sinon13 Dépiler si de p et colorier si en noir

14 retourne π

f

g

a

b

e

h

dc

p =< a, b, c, e, h >si = e, sj = h

Complexité de DFS pour un graphe ayant n sommets et p arcs?

; O(n + p) (sous réserve d’une implémentation par listes d’adjacence)

38/108

Page 115: Algorithmique Avancée pour l'Intelligence Artificielle et

Parcours de graphes Parcours en profondeur (DFS)

Parcours en profondeur (Depth First search / DFS)

1 Fonction DFS(g, s0)2 Soit p une pile (LIFO) initialisée à vide3 pour tout sommet si ∈ S faire4 π[si ]← null5 Colorier si en blanc

6 Empiler s0 dans p et colorier s0 en gris7 tant que p n’est pas vide faire8 Soit si le dernier sommet entré dans p9 si ∃sj ∈ succ(si ) tel que sj soit blanc alors

10 Empiler sj dans p et colorier sj en gris11 π[sj ]← si12 sinon13 Dépiler si de p et colorier si en noir

14 retourne π

f

g

a

b

e

h

dc

p =< a, b, c, e >si = h

Complexité de DFS pour un graphe ayant n sommets et p arcs?

; O(n + p) (sous réserve d’une implémentation par listes d’adjacence)

38/108

Page 116: Algorithmique Avancée pour l'Intelligence Artificielle et

Parcours de graphes Parcours en profondeur (DFS)

Parcours en profondeur (Depth First search / DFS)

1 Fonction DFS(g, s0)2 Soit p une pile (LIFO) initialisée à vide3 pour tout sommet si ∈ S faire4 π[si ]← null5 Colorier si en blanc

6 Empiler s0 dans p et colorier s0 en gris7 tant que p n’est pas vide faire8 Soit si le dernier sommet entré dans p9 si ∃sj ∈ succ(si ) tel que sj soit blanc alors

10 Empiler sj dans p et colorier sj en gris11 π[sj ]← si12 sinon13 Dépiler si de p et colorier si en noir

14 retourne π

f

g

a

b

e

h

dc

p =< a, b, c >si = e

Complexité de DFS pour un graphe ayant n sommets et p arcs?

; O(n + p) (sous réserve d’une implémentation par listes d’adjacence)

38/108

Page 117: Algorithmique Avancée pour l'Intelligence Artificielle et

Parcours de graphes Parcours en profondeur (DFS)

Parcours en profondeur (Depth First search / DFS)

1 Fonction DFS(g, s0)2 Soit p une pile (LIFO) initialisée à vide3 pour tout sommet si ∈ S faire4 π[si ]← null5 Colorier si en blanc

6 Empiler s0 dans p et colorier s0 en gris7 tant que p n’est pas vide faire8 Soit si le dernier sommet entré dans p9 si ∃sj ∈ succ(si ) tel que sj soit blanc alors

10 Empiler sj dans p et colorier sj en gris11 π[sj ]← si12 sinon13 Dépiler si de p et colorier si en noir

14 retourne π

f

g

a

b

e

h

dc

p =< a, b >si = c

Complexité de DFS pour un graphe ayant n sommets et p arcs?

; O(n + p) (sous réserve d’une implémentation par listes d’adjacence)

38/108

Page 118: Algorithmique Avancée pour l'Intelligence Artificielle et

Parcours de graphes Parcours en profondeur (DFS)

Parcours en profondeur (Depth First search / DFS)

1 Fonction DFS(g, s0)2 Soit p une pile (LIFO) initialisée à vide3 pour tout sommet si ∈ S faire4 π[si ]← null5 Colorier si en blanc

6 Empiler s0 dans p et colorier s0 en gris7 tant que p n’est pas vide faire8 Soit si le dernier sommet entré dans p9 si ∃sj ∈ succ(si ) tel que sj soit blanc alors

10 Empiler sj dans p et colorier sj en gris11 π[sj ]← si12 sinon13 Dépiler si de p et colorier si en noir

14 retourne π

f

g

a

b

e

h

dc

p =< a, b >si = b

Complexité de DFS pour un graphe ayant n sommets et p arcs?

; O(n + p) (sous réserve d’une implémentation par listes d’adjacence)

38/108

Page 119: Algorithmique Avancée pour l'Intelligence Artificielle et

Parcours de graphes Parcours en profondeur (DFS)

Parcours en profondeur (Depth First search / DFS)

1 Fonction DFS(g, s0)2 Soit p une pile (LIFO) initialisée à vide3 pour tout sommet si ∈ S faire4 π[si ]← null5 Colorier si en blanc

6 Empiler s0 dans p et colorier s0 en gris7 tant que p n’est pas vide faire8 Soit si le dernier sommet entré dans p9 si ∃sj ∈ succ(si ) tel que sj soit blanc alors

10 Empiler sj dans p et colorier sj en gris11 π[sj ]← si12 sinon13 Dépiler si de p et colorier si en noir

14 retourne π

f

g

a

b

e

h

dc

p =< a, b, f >si = b, sj = f

Complexité de DFS pour un graphe ayant n sommets et p arcs?

; O(n + p) (sous réserve d’une implémentation par listes d’adjacence)

38/108

Page 120: Algorithmique Avancée pour l'Intelligence Artificielle et

Parcours de graphes Parcours en profondeur (DFS)

Parcours en profondeur (Depth First search / DFS)

1 Fonction DFS(g, s0)2 Soit p une pile (LIFO) initialisée à vide3 pour tout sommet si ∈ S faire4 π[si ]← null5 Colorier si en blanc

6 Empiler s0 dans p et colorier s0 en gris7 tant que p n’est pas vide faire8 Soit si le dernier sommet entré dans p9 si ∃sj ∈ succ(si ) tel que sj soit blanc alors

10 Empiler sj dans p et colorier sj en gris11 π[sj ]← si12 sinon13 Dépiler si de p et colorier si en noir

14 retourne π

f

g

a

b

e

h

dc

p =< a, b >si = f

Complexité de DFS pour un graphe ayant n sommets et p arcs?

; O(n + p) (sous réserve d’une implémentation par listes d’adjacence)

38/108

Page 121: Algorithmique Avancée pour l'Intelligence Artificielle et

Parcours de graphes Parcours en profondeur (DFS)

Parcours en profondeur (Depth First search / DFS)

1 Fonction DFS(g, s0)2 Soit p une pile (LIFO) initialisée à vide3 pour tout sommet si ∈ S faire4 π[si ]← null5 Colorier si en blanc

6 Empiler s0 dans p et colorier s0 en gris7 tant que p n’est pas vide faire8 Soit si le dernier sommet entré dans p9 si ∃sj ∈ succ(si ) tel que sj soit blanc alors

10 Empiler sj dans p et colorier sj en gris11 π[sj ]← si12 sinon13 Dépiler si de p et colorier si en noir

14 retourne π

f

g

a

b

e

h

dc

p =< a >si = b

Complexité de DFS pour un graphe ayant n sommets et p arcs?

; O(n + p) (sous réserve d’une implémentation par listes d’adjacence)

38/108

Page 122: Algorithmique Avancée pour l'Intelligence Artificielle et

Parcours de graphes Parcours en profondeur (DFS)

Parcours en profondeur (Depth First search / DFS)

1 Fonction DFS(g, s0)2 Soit p une pile (LIFO) initialisée à vide3 pour tout sommet si ∈ S faire4 π[si ]← null5 Colorier si en blanc

6 Empiler s0 dans p et colorier s0 en gris7 tant que p n’est pas vide faire8 Soit si le dernier sommet entré dans p9 si ∃sj ∈ succ(si ) tel que sj soit blanc alors

10 Empiler sj dans p et colorier sj en gris11 π[sj ]← si12 sinon13 Dépiler si de p et colorier si en noir

14 retourne π

f

g

a

b

e

h

dc

p =< a >si = a

Complexité de DFS pour un graphe ayant n sommets et p arcs?

; O(n + p) (sous réserve d’une implémentation par listes d’adjacence)

38/108

Page 123: Algorithmique Avancée pour l'Intelligence Artificielle et

Parcours de graphes Parcours en profondeur (DFS)

Parcours en profondeur (Depth First search / DFS)

1 Fonction DFS(g, s0)2 Soit p une pile (LIFO) initialisée à vide3 pour tout sommet si ∈ S faire4 π[si ]← null5 Colorier si en blanc

6 Empiler s0 dans p et colorier s0 en gris7 tant que p n’est pas vide faire8 Soit si le dernier sommet entré dans p9 si ∃sj ∈ succ(si ) tel que sj soit blanc alors

10 Empiler sj dans p et colorier sj en gris11 π[sj ]← si12 sinon13 Dépiler si de p et colorier si en noir

14 retourne π

fa

b

e

h

dc

g

p =< a, g >si = a, sj = g

Complexité de DFS pour un graphe ayant n sommets et p arcs?

; O(n + p) (sous réserve d’une implémentation par listes d’adjacence)

38/108

Page 124: Algorithmique Avancée pour l'Intelligence Artificielle et

Parcours de graphes Parcours en profondeur (DFS)

Parcours en profondeur (Depth First search / DFS)

1 Fonction DFS(g, s0)2 Soit p une pile (LIFO) initialisée à vide3 pour tout sommet si ∈ S faire4 π[si ]← null5 Colorier si en blanc

6 Empiler s0 dans p et colorier s0 en gris7 tant que p n’est pas vide faire8 Soit si le dernier sommet entré dans p9 si ∃sj ∈ succ(si ) tel que sj soit blanc alors

10 Empiler sj dans p et colorier sj en gris11 π[sj ]← si12 sinon13 Dépiler si de p et colorier si en noir

14 retourne π

fa

b

e

h

dc

g

p =< a >si = g

Complexité de DFS pour un graphe ayant n sommets et p arcs?

; O(n + p) (sous réserve d’une implémentation par listes d’adjacence)

38/108

Page 125: Algorithmique Avancée pour l'Intelligence Artificielle et

Parcours de graphes Parcours en profondeur (DFS)

Parcours en profondeur (Depth First search / DFS)

1 Fonction DFS(g, s0)2 Soit p une pile (LIFO) initialisée à vide3 pour tout sommet si ∈ S faire4 π[si ]← null5 Colorier si en blanc

6 Empiler s0 dans p et colorier s0 en gris7 tant que p n’est pas vide faire8 Soit si le dernier sommet entré dans p9 si ∃sj ∈ succ(si ) tel que sj soit blanc alors

10 Empiler sj dans p et colorier sj en gris11 π[sj ]← si12 sinon13 Dépiler si de p et colorier si en noir

14 retourne π

fa

b

e

h

dc

g

p =<>si = a

Complexité de DFS pour un graphe ayant n sommets et p arcs?

; O(n + p) (sous réserve d’une implémentation par listes d’adjacence)

38/108

Page 126: Algorithmique Avancée pour l'Intelligence Artificielle et

Parcours de graphes Parcours en profondeur (DFS)

Parcours en profondeur (Depth First search / DFS)

1 Fonction DFS(g, s0)2 Soit p une pile (LIFO) initialisée à vide3 pour tout sommet si ∈ S faire4 π[si ]← null5 Colorier si en blanc

6 Empiler s0 dans p et colorier s0 en gris7 tant que p n’est pas vide faire8 Soit si le dernier sommet entré dans p9 si ∃sj ∈ succ(si ) tel que sj soit blanc alors

10 Empiler sj dans p et colorier sj en gris11 π[sj ]← si12 sinon13 Dépiler si de p et colorier si en noir

14 retourne π

fa

b

e

h

dc

g

p =<>si = a

Complexité de DFS pour un graphe ayant n sommets et p arcs?

; O(n + p) (sous réserve d’une implémentation par listes d’adjacence)

38/108

Page 127: Algorithmique Avancée pour l'Intelligence Artificielle et

Parcours de graphes Parcours en profondeur (DFS)

Parcours en profondeur (Depth First search / DFS)

1 Fonction DFS(g, s0)2 Soit p une pile (LIFO) initialisée à vide3 pour tout sommet si ∈ S faire4 π[si ]← null5 Colorier si en blanc

6 Empiler s0 dans p et colorier s0 en gris7 tant que p n’est pas vide faire8 Soit si le dernier sommet entré dans p9 si ∃sj ∈ succ(si ) tel que sj soit blanc alors

10 Empiler sj dans p et colorier sj en gris11 π[sj ]← si12 sinon13 Dépiler si de p et colorier si en noir

14 retourne π

fa

b

e

h

dc

g

p =<>si = a

Complexité de DFS pour un graphe ayant n sommets et p arcs?

; O(n + p) (sous réserve d’une implémentation par listes d’adjacence)

38/108

Page 128: Algorithmique Avancée pour l'Intelligence Artificielle et

Parcours de graphes Parcours en profondeur (DFS)

Version récursive de DFS1 Proc DFSrec(g, s0)

Entrée : Un graphe g et un sommet s0Précond. : s0 est blanc

2 début3 Colorier s0 en gris4 pour tout sj ∈ succ(s0) faire5 si sj est blanc alors6 π[sj ]← s07 DFSrec(g, sj )

8 Colorier s0 en noir h

dc

f

g

a

b

e

Variables globales :

Tableau π, initialisé à null avant le premier appel

Couleur des sommets initialisée à blanc avant le premier appel

Remarque :

π correspond à l’arborescence des appels récursifs

39/108

Page 129: Algorithmique Avancée pour l'Intelligence Artificielle et

Parcours de graphes Parcours en profondeur (DFS)

Détection de circuits

1 Fonction booléen possèdeCircuit(g, s0)Entrée : Un graphe g et un sommet s0Sortie : Vrai si g possède un circuit ; faux

sinonPrécond. : s0 est blanc

2 début3 Colorier s0 en gris4 pour tout sj ∈ succ(s0) faire5 si sj est gris alors retourne vrai;6 sinon si sj est blanc alors7 si possèdeCircuit(g, sj ) alors8 retourne vrai

9 Colorier s0 en noir10 retourne faux

h

dc

f

g

a

b

e

40/108

Page 130: Algorithmique Avancée pour l'Intelligence Artificielle et

Parcours de graphes Parcours en profondeur (DFS)

Numérotation des sommets

1 Proc DFSnum(g)2 cpt ← 13 Colorier tous les sommets en blanc4 pour chaque sommet si de g faire5 si si est blanc alors DFSrec(g, si );

6 Proc DFSrec(g, s0)7 début8 Colorier s0 en gris9 pour tout sj ∈ succ(s0) faire

10 si sj est blanc alors11 π[sj ]← s012 DFSrec(g, sj )

13 Colorier s0 en noir14 num[s0]← cpt15 cpt ← cpt + 1

d

e f g h

abc

; num = Numéro d’ordre de coloriage en noir

41/108

Page 131: Algorithmique Avancée pour l'Intelligence Artificielle et

Parcours de graphes Parcours en profondeur (DFS)

Numérotation des sommets

1 Proc DFSnum(g)2 cpt ← 13 Colorier tous les sommets en blanc4 pour chaque sommet si de g faire5 si si est blanc alors DFSrec(g, si );

6 Proc DFSrec(g, s0)7 début8 Colorier s0 en gris9 pour tout sj ∈ succ(s0) faire

10 si sj est blanc alors11 π[sj ]← s012 DFSrec(g, sj )

13 Colorier s0 en noir14 num[s0]← cpt15 cpt ← cpt + 1

e f g h

abcd

Pile = < a >cpt = 1s0 = a ; sj = g

; num = Numéro d’ordre de coloriage en noir

41/108

Page 132: Algorithmique Avancée pour l'Intelligence Artificielle et

Parcours de graphes Parcours en profondeur (DFS)

Numérotation des sommets

1 Proc DFSnum(g)2 cpt ← 13 Colorier tous les sommets en blanc4 pour chaque sommet si de g faire5 si si est blanc alors DFSrec(g, si );

6 Proc DFSrec(g, s0)7 début8 Colorier s0 en gris9 pour tout sj ∈ succ(s0) faire

10 si sj est blanc alors11 π[sj ]← s012 DFSrec(g, sj )

13 Colorier s0 en noir14 num[s0]← cpt15 cpt ← cpt + 1

e f g h

abcd

Pile = < a, g >cpt = 1s0 = g ; sj = b

; num = Numéro d’ordre de coloriage en noir

41/108

Page 133: Algorithmique Avancée pour l'Intelligence Artificielle et

Parcours de graphes Parcours en profondeur (DFS)

Numérotation des sommets

1 Proc DFSnum(g)2 cpt ← 13 Colorier tous les sommets en blanc4 pour chaque sommet si de g faire5 si si est blanc alors DFSrec(g, si );

6 Proc DFSrec(g, s0)7 début8 Colorier s0 en gris9 pour tout sj ∈ succ(s0) faire

10 si sj est blanc alors11 π[sj ]← s012 DFSrec(g, sj )

13 Colorier s0 en noir14 num[s0]← cpt15 cpt ← cpt + 1

e f g h

abcd

Pile = < a, g, b >cpt = 1s0 = b

; num = Numéro d’ordre de coloriage en noir

41/108

Page 134: Algorithmique Avancée pour l'Intelligence Artificielle et

Parcours de graphes Parcours en profondeur (DFS)

Numérotation des sommets

1 Proc DFSnum(g)2 cpt ← 13 Colorier tous les sommets en blanc4 pour chaque sommet si de g faire5 si si est blanc alors DFSrec(g, si );

6 Proc DFSrec(g, s0)7 début8 Colorier s0 en gris9 pour tout sj ∈ succ(s0) faire

10 si sj est blanc alors11 π[sj ]← s012 DFSrec(g, sj )

13 Colorier s0 en noir14 num[s0]← cpt15 cpt ← cpt + 1

e f g h

abcd

Pile = < a, g, b >cpt = 2s0 = bnum[b]=1

; num = Numéro d’ordre de coloriage en noir

41/108

Page 135: Algorithmique Avancée pour l'Intelligence Artificielle et

Parcours de graphes Parcours en profondeur (DFS)

Numérotation des sommets

1 Proc DFSnum(g)2 cpt ← 13 Colorier tous les sommets en blanc4 pour chaque sommet si de g faire5 si si est blanc alors DFSrec(g, si );

6 Proc DFSrec(g, s0)7 début8 Colorier s0 en gris9 pour tout sj ∈ succ(s0) faire

10 si sj est blanc alors11 π[sj ]← s012 DFSrec(g, sj )

13 Colorier s0 en noir14 num[s0]← cpt15 cpt ← cpt + 1

e f g h

abcd

Pile = < a, g >cpt = 2s0 = g ; sj = hnum[b]=1

; num = Numéro d’ordre de coloriage en noir

41/108

Page 136: Algorithmique Avancée pour l'Intelligence Artificielle et

Parcours de graphes Parcours en profondeur (DFS)

Numérotation des sommets

1 Proc DFSnum(g)2 cpt ← 13 Colorier tous les sommets en blanc4 pour chaque sommet si de g faire5 si si est blanc alors DFSrec(g, si );

6 Proc DFSrec(g, s0)7 début8 Colorier s0 en gris9 pour tout sj ∈ succ(s0) faire

10 si sj est blanc alors11 π[sj ]← s012 DFSrec(g, sj )

13 Colorier s0 en noir14 num[s0]← cpt15 cpt ← cpt + 1

e f g h

bcd a

Pile = < a, g, h >cpt = 2s0 = hnum[b]=1

; num = Numéro d’ordre de coloriage en noir

41/108

Page 137: Algorithmique Avancée pour l'Intelligence Artificielle et

Parcours de graphes Parcours en profondeur (DFS)

Numérotation des sommets

1 Proc DFSnum(g)2 cpt ← 13 Colorier tous les sommets en blanc4 pour chaque sommet si de g faire5 si si est blanc alors DFSrec(g, si );

6 Proc DFSrec(g, s0)7 début8 Colorier s0 en gris9 pour tout sj ∈ succ(s0) faire

10 si sj est blanc alors11 π[sj ]← s012 DFSrec(g, sj )

13 Colorier s0 en noir14 num[s0]← cpt15 cpt ← cpt + 1

e f g h

abcd

Pile = < a, g, h >cpt = 3s0 = hnum[b]=1, num[h]=2

; num = Numéro d’ordre de coloriage en noir

41/108

Page 138: Algorithmique Avancée pour l'Intelligence Artificielle et

Parcours de graphes Parcours en profondeur (DFS)

Numérotation des sommets

1 Proc DFSnum(g)2 cpt ← 13 Colorier tous les sommets en blanc4 pour chaque sommet si de g faire5 si si est blanc alors DFSrec(g, si );

6 Proc DFSrec(g, s0)7 début8 Colorier s0 en gris9 pour tout sj ∈ succ(s0) faire

10 si sj est blanc alors11 π[sj ]← s012 DFSrec(g, sj )

13 Colorier s0 en noir14 num[s0]← cpt15 cpt ← cpt + 1

e f g h

abcd

Pile = < a, g >cpt = 4s0 = gnum[b]=1, num[h]=2, num[g]=3

; num = Numéro d’ordre de coloriage en noir

41/108

Page 139: Algorithmique Avancée pour l'Intelligence Artificielle et

Parcours de graphes Parcours en profondeur (DFS)

Numérotation des sommets

1 Proc DFSnum(g)2 cpt ← 13 Colorier tous les sommets en blanc4 pour chaque sommet si de g faire5 si si est blanc alors DFSrec(g, si );

6 Proc DFSrec(g, s0)7 début8 Colorier s0 en gris9 pour tout sj ∈ succ(s0) faire

10 si sj est blanc alors11 π[sj ]← s012 DFSrec(g, sj )

13 Colorier s0 en noir14 num[s0]← cpt15 cpt ← cpt + 1

e f g h

abcd

Pile = < a >cpt = 5s0 = anum[b]=1, num[h]=2, num[g]=3,num[a]=4

; num = Numéro d’ordre de coloriage en noir

41/108

Page 140: Algorithmique Avancée pour l'Intelligence Artificielle et

Parcours de graphes Parcours en profondeur (DFS)

Numérotation des sommets

1 Proc DFSnum(g)2 cpt ← 13 Colorier tous les sommets en blanc4 pour chaque sommet si de g faire5 si si est blanc alors DFSrec(g, si );

6 Proc DFSrec(g, s0)7 début8 Colorier s0 en gris9 pour tout sj ∈ succ(s0) faire

10 si sj est blanc alors11 π[sj ]← s012 DFSrec(g, sj )

13 Colorier s0 en noir14 num[s0]← cpt15 cpt ← cpt + 1

e f g h

abcd

Pile = <>cpt = 5

num[b]=1, num[h]=2, num[g]=3,num[a]=4

; num = Numéro d’ordre de coloriage en noir

41/108

Page 141: Algorithmique Avancée pour l'Intelligence Artificielle et

Parcours de graphes Parcours en profondeur (DFS)

Numérotation des sommets

1 Proc DFSnum(g)2 cpt ← 13 Colorier tous les sommets en blanc4 pour chaque sommet si de g faire5 si si est blanc alors DFSrec(g, si );

6 Proc DFSrec(g, s0)7 début8 Colorier s0 en gris9 pour tout sj ∈ succ(s0) faire

10 si sj est blanc alors11 π[sj ]← s012 DFSrec(g, sj )

13 Colorier s0 en noir14 num[s0]← cpt15 cpt ← cpt + 1

e f g h

abcd

Pile = < c >cpt = 5s0 = cnum[b]=1, num[h]=2, num[g]=3,num[a]=4

; num = Numéro d’ordre de coloriage en noir

41/108

Page 142: Algorithmique Avancée pour l'Intelligence Artificielle et

Parcours de graphes Parcours en profondeur (DFS)

Numérotation des sommets

1 Proc DFSnum(g)2 cpt ← 13 Colorier tous les sommets en blanc4 pour chaque sommet si de g faire5 si si est blanc alors DFSrec(g, si );

6 Proc DFSrec(g, s0)7 début8 Colorier s0 en gris9 pour tout sj ∈ succ(s0) faire

10 si sj est blanc alors11 π[sj ]← s012 DFSrec(g, sj )

13 Colorier s0 en noir14 num[s0]← cpt15 cpt ← cpt + 1

e f g h

abcd

Pile = < c >cpt = 6s0 = cnum[b]=1, num[h]=2, num[g]=3,num[a]=4, num[c]=5

; num = Numéro d’ordre de coloriage en noir

41/108

Page 143: Algorithmique Avancée pour l'Intelligence Artificielle et

Parcours de graphes Parcours en profondeur (DFS)

Numérotation des sommets

1 Proc DFSnum(g)2 cpt ← 13 Colorier tous les sommets en blanc4 pour chaque sommet si de g faire5 si si est blanc alors DFSrec(g, si );

6 Proc DFSrec(g, s0)7 début8 Colorier s0 en gris9 pour tout sj ∈ succ(s0) faire

10 si sj est blanc alors11 π[sj ]← s012 DFSrec(g, sj )

13 Colorier s0 en noir14 num[s0]← cpt15 cpt ← cpt + 1

e f g h

abcd

Pile = <>cpt = 6

num[b]=1, num[h]=2, num[g]=3,num[a]=4, num[c]=5

; num = Numéro d’ordre de coloriage en noir

41/108

Page 144: Algorithmique Avancée pour l'Intelligence Artificielle et

Parcours de graphes Parcours en profondeur (DFS)

Numérotation des sommets

1 Proc DFSnum(g)2 cpt ← 13 Colorier tous les sommets en blanc4 pour chaque sommet si de g faire5 si si est blanc alors DFSrec(g, si );

6 Proc DFSrec(g, s0)7 début8 Colorier s0 en gris9 pour tout sj ∈ succ(s0) faire

10 si sj est blanc alors11 π[sj ]← s012 DFSrec(g, sj )

13 Colorier s0 en noir14 num[s0]← cpt15 cpt ← cpt + 1

e f g h

abcd

Pile = < d >cpt = 6s0 = d ; sj = enum[b]=1, num[h]=2, num[g]=3,num[a]=4, num[c]=5

; num = Numéro d’ordre de coloriage en noir

41/108

Page 145: Algorithmique Avancée pour l'Intelligence Artificielle et

Parcours de graphes Parcours en profondeur (DFS)

Numérotation des sommets

1 Proc DFSnum(g)2 cpt ← 13 Colorier tous les sommets en blanc4 pour chaque sommet si de g faire5 si si est blanc alors DFSrec(g, si );

6 Proc DFSrec(g, s0)7 début8 Colorier s0 en gris9 pour tout sj ∈ succ(s0) faire

10 si sj est blanc alors11 π[sj ]← s012 DFSrec(g, sj )

13 Colorier s0 en noir14 num[s0]← cpt15 cpt ← cpt + 1

f g h

abcd

e

Pile = < d , e >cpt = 6s0 = e ; sj = fnum[b]=1, num[h]=2, num[g]=3,num[a]=4, num[c]=5

; num = Numéro d’ordre de coloriage en noir

41/108

Page 146: Algorithmique Avancée pour l'Intelligence Artificielle et

Parcours de graphes Parcours en profondeur (DFS)

Numérotation des sommets

1 Proc DFSnum(g)2 cpt ← 13 Colorier tous les sommets en blanc4 pour chaque sommet si de g faire5 si si est blanc alors DFSrec(g, si );

6 Proc DFSrec(g, s0)7 début8 Colorier s0 en gris9 pour tout sj ∈ succ(s0) faire

10 si sj est blanc alors11 π[sj ]← s012 DFSrec(g, sj )

13 Colorier s0 en noir14 num[s0]← cpt15 cpt ← cpt + 1

h

abcd

e f g

Pile = < d , e, f >cpt = 6s0 = fnum[b]=1, num[h]=2, num[g]=3,num[a]=4, num[c]=5

; num = Numéro d’ordre de coloriage en noir

41/108

Page 147: Algorithmique Avancée pour l'Intelligence Artificielle et

Parcours de graphes Parcours en profondeur (DFS)

Numérotation des sommets

1 Proc DFSnum(g)2 cpt ← 13 Colorier tous les sommets en blanc4 pour chaque sommet si de g faire5 si si est blanc alors DFSrec(g, si );

6 Proc DFSrec(g, s0)7 début8 Colorier s0 en gris9 pour tout sj ∈ succ(s0) faire

10 si sj est blanc alors11 π[sj ]← s012 DFSrec(g, sj )

13 Colorier s0 en noir14 num[s0]← cpt15 cpt ← cpt + 1

h

abcd

e f g

Pile = < d , e, f >cpt = 7s0 = fnum[b]=1, num[h]=2, num[g]=3,num[a]=4, num[c]=5, num[f]=6

; num = Numéro d’ordre de coloriage en noir

41/108

Page 148: Algorithmique Avancée pour l'Intelligence Artificielle et

Parcours de graphes Parcours en profondeur (DFS)

Numérotation des sommets

1 Proc DFSnum(g)2 cpt ← 13 Colorier tous les sommets en blanc4 pour chaque sommet si de g faire5 si si est blanc alors DFSrec(g, si );

6 Proc DFSrec(g, s0)7 début8 Colorier s0 en gris9 pour tout sj ∈ succ(s0) faire

10 si sj est blanc alors11 π[sj ]← s012 DFSrec(g, sj )

13 Colorier s0 en noir14 num[s0]← cpt15 cpt ← cpt + 1

g h

abcd

e f

Pile = < d , e >cpt = 8s0 = enum[b]=1, num[h]=2, num[g]=3,num[a]=4, num[c]=5, num[f]=6,num[e]=7

; num = Numéro d’ordre de coloriage en noir

41/108

Page 149: Algorithmique Avancée pour l'Intelligence Artificielle et

Parcours de graphes Parcours en profondeur (DFS)

Numérotation des sommets

1 Proc DFSnum(g)2 cpt ← 13 Colorier tous les sommets en blanc4 pour chaque sommet si de g faire5 si si est blanc alors DFSrec(g, si );

6 Proc DFSrec(g, s0)7 début8 Colorier s0 en gris9 pour tout sj ∈ succ(s0) faire

10 si sj est blanc alors11 π[sj ]← s012 DFSrec(g, sj )

13 Colorier s0 en noir14 num[s0]← cpt15 cpt ← cpt + 1

f g h

abcd

e

Pile = < d >cpt = 9s0 = dnum[b]=1, num[h]=2, num[g]=3,num[a]=4, num[c]=5, num[f]=6,num[e]=7, num[d]=8

; num = Numéro d’ordre de coloriage en noir

41/108

Page 150: Algorithmique Avancée pour l'Intelligence Artificielle et

Parcours de graphes Parcours en profondeur (DFS)

Numérotation des sommets

1 Proc DFSnum(g)2 cpt ← 13 Colorier tous les sommets en blanc4 pour chaque sommet si de g faire5 si si est blanc alors DFSrec(g, si );

6 Proc DFSrec(g, s0)7 début8 Colorier s0 en gris9 pour tout sj ∈ succ(s0) faire

10 si sj est blanc alors11 π[sj ]← s012 DFSrec(g, sj )

13 Colorier s0 en noir14 num[s0]← cpt15 cpt ← cpt + 1

e f g h

abcd

Pile = <>cpt = 9

num[b]=1, num[h]=2, num[g]=3,num[a]=4, num[c]=5, num[f]=6,num[e]=7, num[d]=8

; num = Numéro d’ordre de coloriage en noir

41/108

Page 151: Algorithmique Avancée pour l'Intelligence Artificielle et

Parcours de graphes Parcours en profondeur (DFS)

Tri topologique d’un DAG

Définitions :

DAG : graphe orienté sans circuit

Tri topologique d’un DAG G = (S,A) : Ordre total sur S tel que∀(si , sj) ∈ A, si < sj

Théorème :Après l’exécution de DFSnum, pour tout arc (si , sj) ∈ A : num[sj ] < num[si ]

Exercice 1 : Tri topologique du graphe suivant

e f g h

abcd

42/108

Page 152: Algorithmique Avancée pour l'Intelligence Artificielle et

Parcours de graphes Parcours en profondeur (DFS)

Tri topologique d’un DAG

Définitions :

DAG : graphe orienté sans circuit

Tri topologique d’un DAG G = (S,A) : Ordre total sur S tel que∀(si , sj) ∈ A, si < sj

Théorème :Après l’exécution de DFSnum, pour tout arc (si , sj) ∈ A : num[sj ] < num[si ]

Exercice 2 : Comparer la complexité avec un algo decrease and conquer

1 Soit L une liste vide2 tant que G possède un sommet v tq d−(v) = 0 faire3 Ajouter v dans L4 Supprimer v (et les arcs incidents à v ) de G

5 si G n’a plus de sommets alors retourne L;6 sinon afficher "Le graphe n’est pas un DAG!";

42/108

Page 153: Algorithmique Avancée pour l'Intelligence Artificielle et

Parcours de graphes Parcours en profondeur (DFS)

Recherche des composantes fortements connexes

1 Fonction SCC(g)2 SCC ← ∅3 DFSnum(g)4 Construire le graphe gt = (S,At ) tel que At = {(si , sj ) | (sj , si ) ∈ A}5 Colorier tous les sommets de gt en blanc6 pour chaque sommet si pris par ordre de num décroissant faire7 si si est blanc alors8 Blanc ← {sj ∈ S|sj est blanc}9 DFSrec(gt , si )

10 Ajouter à SCC l’ensemble {sj ∈ Blanc | sj est noir}

11 retourne SCC

Exercice :

a

b

c

d

g

h

f

i

e

43/108

Page 154: Algorithmique Avancée pour l'Intelligence Artificielle et

Parcours de graphes Parcours en profondeur (DFS)

Recherche des composantes fortements connexes1 Fonction SCC(g)2 SCC ← ∅3 DFSnum(g)4 Construire le graphe gt = (S,At ) tel que At = {(si , sj ) | (sj , si ) ∈ A}5 Colorier tous les sommets de gt en blanc6 pour chaque sommet si pris par ordre de num décroissant faire7 si si est blanc alors8 Blanc ← {sj ∈ S|sj est blanc}9 DFSrec(gt , si )

10 Ajouter à SCC l’ensemble {sj ∈ Blanc | sj est noir}

11 retourne SCC

Preuve de correction :; Faite en TD

xx

43/108

Page 155: Algorithmique Avancée pour l'Intelligence Artificielle et

Plus courts chemins Définitions et propriétés

1 Introduction

2 Définitions

3 Structures de données pour représenter un graphe

4 Parcours de graphes

5 Plus courts cheminsDéfinitions et propriétésPlus courts chemins à origine uniquePlus courts chemins pour tout couple de sommetsGénéralisation à la recherche de meilleurs chemins

6 Problèmes de planification

7 Quelques problèmes NP-difficiles sur les graphes

44/108

Page 156: Algorithmique Avancée pour l'Intelligence Artificielle et

Plus courts chemins Définitions et propriétés

Définitions :Soit G = (S,A) un graphe (orienté ou non) et une fonction coût c : A→ R

Coût d’un chemin p = 〈s0, s1, s2, . . . , sk 〉 : c(p) =∑k

i=1 c(si−1, si)

Coût d’un plus court chemin de si vers sj = δ(si , sj) :

δ(si , sj) = +∞ si 6 ∃ chemin de si vers sjδ(si , sj) = −∞ si ∃ circuit absorbantδ(si , sj) = min{c(p)|p = chemin de si a sj} sinon

Exemples :

−2a

b c

de6

4

3

−3

2 2 7

6

3

7

s

a b

c d

e f

g

3

5

2

−4

6

−3

3

−6

4

8

45/108

Page 157: Algorithmique Avancée pour l'Intelligence Artificielle et

Plus courts chemins Définitions et propriétés

Principe d’optimalité d’une sous-structure

Tout sous-chemin d’un plus court chemin est un plus court chemin :

Soit p =< s0, s1, . . . , sk > un plus court chemin∀i , j tel que 0 ≤ i ≤ j ≤ k : pij =< si , si+1, . . . , sj > est un plus court chemin

Exercice :Démonstration...

Exploitation par des algorithmes :

Dijkstra, Bellman-Ford :

δ(si , sj) = minsk∈pred(sj ) δ(si , sk ) + c(sk , sj)

Floyd-Warshall :

δ(si , sj) = minsk∈S δ(si , sk ) + δ(sk , sj)

46/108

Page 158: Algorithmique Avancée pour l'Intelligence Artificielle et

Plus courts chemins Plus courts chemins à origine unique

1 Introduction

2 Définitions

3 Structures de données pour représenter un graphe

4 Parcours de graphes

5 Plus courts cheminsDéfinitions et propriétésPlus courts chemins à origine uniquePlus courts chemins pour tout couple de sommetsGénéralisation à la recherche de meilleurs chemins

6 Problèmes de planification

7 Quelques problèmes NP-difficiles sur les graphes

47/108

Page 159: Algorithmique Avancée pour l'Intelligence Artificielle et

Plus courts chemins Plus courts chemins à origine unique

Specification d’un algo de plus courts chemins à origine unique

1 Fonction PlusCourtsChemins(g, c, s0)Entrée : Un graphe (orienté ou non) g = (S,A)

Une fonction de coût c : A→ RUn sommet de départ s0 ∈ S

Sortie : Une arborescence des plus courts chemins partant de s0Un tableau d tel que ∀si ∈ S,d [si ] = δ(s0, si)

Arborescence des plus courts chemins :

Tableau π tq π[s0] = null et π[sj ] = si si si → sj est un arc de l’arboRm : ∀si ∈ S, π[si ] 6= null ⇒ δ(s0, si) = δ(s0, π[si ]) + c(π[si ], si)

Exemple :

−2a

b c

de6

4

3

−3

2 2 7

6

3

48/108

Page 160: Algorithmique Avancée pour l'Intelligence Artificielle et

Plus courts chemins Plus courts chemins à origine unique

Principe des algorithmes de recherche de plus courts chemins :

Initialiser d [s0] à 0

∀si ∈ S \ {s0}, initialiser d [si ] à +∞; d [si ] = borne supérieure de δ(s0, si)

Grignoter itérativement les bornes d en relâchant des arcs

1 Proc relacher((si , sj), π, d)Entrée : Un arc (si , sj)Entrée/Sortie : Les tableaux π et dPrécond. : d [si ] ≥ δ(s0, si) et d [sj ] ≥ δ(s0, sj)Postcond. : δ(s0, sj) ≤ d [sj ] ≤ d [si ] + c(si , sj)

2 début3 si d [sj ] > d [si ] + c(si , sj) alors4 d [sj ]← d [si ] + c(si , sj)5 π[sj ]← si

49/108

Page 161: Algorithmique Avancée pour l'Intelligence Artificielle et

Plus courts chemins Plus courts chemins à origine unique

Algorithmes de recherche de plus courts chemins

Principe commun à tous les algorithmes :

Grignotage progressif de d en relâchant des arcs

Question : Dans quel ordre relâcher les arcs?

Dijkstra relâche les arcs partant du sommet minimisant d; Chaque arc est relâché exactement une fois; Ne marche que si tous les coûts sont positifs

TopoDAG relâche un arc si tous ses prédécesseurs ont été relâchés; Chaque arc est relâché exactement une fois; Ne marche que si le graphe est acyclique

Bellman-Ford relâche tous les arcs à chaque itér., jusqu’à convergence; Chaque arc est relâché plusieurs fois; Marche dans tous les cas

50/108

Page 162: Algorithmique Avancée pour l'Intelligence Artificielle et

Plus courts chemins Plus courts chemins à origine unique

Principe de l’algorithme de Dijkstra

Généralisation d’un BFS à des graphes valués :

Procède par coloriage des sommets :

si est blanc s’il n’a pas encore été découvert; d [si ] = +∞si est gris s’il a été découvert et sa borne peut encore diminuer; δ(s0, si) ≤ d [si ] < +∞si est noir si sa borne ne peut plus diminuer; d [si ] = δ(s0, si); Tous les arcs partant de si peuvent être relâchés

A chaque itération, un sommet gris est colorié en noir et ses arcs sontrelâchés

Stratégie gloutonne pour choisir ce sommet gris; Sommet gris minimisant dNe marche que si tous les coûts sont positifs; Précondition à Dijkstra : Pour tout arc (si , sj) ∈ A, cout(si , sj) ≥ 0

51/108

Page 163: Algorithmique Avancée pour l'Intelligence Artificielle et

Plus courts chemins Plus courts chemins à origine unique

1 Fonction Dijkstra(g, c, s0)2 pour chaque sommet si ∈ S faire3 d [si ]← +∞ ; π[si ]← null ; Colorier si en blanc

4 d [s0]← 0 ; Colorier s0 en gris5 tant que il existe un sommet gris faire6 Soit si le sommet gris tq d [si ] soit minimal7 pour tout sommet sj ∈ succ(si ) faire8 si sj est blanc ou gris alors9 relacher((si , sj ), π, d)

10 si sj est blanc alors11 Colorier sj en gris

12 Colorier si en noir

13 retourne π et d

Propriété invariante ligne 5 :

Pour tout sommet si ,

Si si est gris alors d [si ] =longueur du plus courtchemin de s0 à si nepassant que par dessommets noirs

Si si est noir alorsd [sj ] = δ(s0, si )

Les succ. d’un sommet noirsont gris ou noirs

Exemple :4

a

b c

de

3

6

2 7

6

3

5

2 1

52/108

Page 164: Algorithmique Avancée pour l'Intelligence Artificielle et

Plus courts chemins Plus courts chemins à origine unique

1 Fonction Dijkstra(g, c, s0)2 pour chaque sommet si ∈ S faire3 d [si ]← +∞ ; π[si ]← null ; Colorier si en blanc

4 d [s0]← 0 ; Colorier s0 en gris5 tant que il existe un sommet gris faire6 Soit si le sommet gris tq d [si ] soit minimal7 pour tout sommet sj ∈ succ(si ) faire8 si sj est blanc ou gris alors9 relacher((si , sj ), π, d)

10 si sj est blanc alors11 Colorier sj en gris

12 Colorier si en noir

13 retourne π et d

Propriété invariante ligne 5 :

Pour tout sommet si ,

Si si est gris alors d [si ] =longueur du plus courtchemin de s0 à si nepassant que par dessommets noirs

Si si est noir alorsd [sj ] = δ(s0, si )

Les succ. d’un sommet noirsont gris ou noirs

Exemple :

s0 = a

0

a

b c

de

3

6

2 7

6

3

5

1 1 3

52/108

Page 165: Algorithmique Avancée pour l'Intelligence Artificielle et

Plus courts chemins Plus courts chemins à origine unique

1 Fonction Dijkstra(g, c, s0)2 pour chaque sommet si ∈ S faire3 d [si ]← +∞ ; π[si ]← null ; Colorier si en blanc

4 d [s0]← 0 ; Colorier s0 en gris5 tant que il existe un sommet gris faire6 Soit si le sommet gris tq d [si ] soit minimal7 pour tout sommet sj ∈ succ(si ) faire8 si sj est blanc ou gris alors9 relacher((si , sj ), π, d)

10 si sj est blanc alors11 Colorier sj en gris

12 Colorier si en noir

13 retourne π et d

Propriété invariante ligne 5 :

Pour tout sommet si ,

Si si est gris alors d [si ] =longueur du plus courtchemin de s0 à si nepassant que par dessommets noirs

Si si est noir alorsd [sj ] = δ(s0, si )

Les succ. d’un sommet noirsont gris ou noirs

Exemple :

si = aArcs relâchés : (a,b), (a,e)

0

3

5

a

b c

de

3

6

2 7

6

3

5

1 1 3

52/108

Page 166: Algorithmique Avancée pour l'Intelligence Artificielle et

Plus courts chemins Plus courts chemins à origine unique

1 Fonction Dijkstra(g, c, s0)2 pour chaque sommet si ∈ S faire3 d [si ]← +∞ ; π[si ]← null ; Colorier si en blanc

4 d [s0]← 0 ; Colorier s0 en gris5 tant que il existe un sommet gris faire6 Soit si le sommet gris tq d [si ] soit minimal7 pour tout sommet sj ∈ succ(si ) faire8 si sj est blanc ou gris alors9 relacher((si , sj ), π, d)

10 si sj est blanc alors11 Colorier sj en gris

12 Colorier si en noir

13 retourne π et d

Propriété invariante ligne 5 :

Pour tout sommet si ,

Si si est gris alors d [si ] =longueur du plus courtchemin de s0 à si nepassant que par dessommets noirs

Si si est noir alorsd [sj ] = δ(s0, si )

Les succ. d’un sommet noirsont gris ou noirs

Exemple :

si = aArcs relâchés : (a,b), (a,e)

3

0

5

b c

de

3

6

2 7

6

3

5

2 14

a

52/108

Page 167: Algorithmique Avancée pour l'Intelligence Artificielle et

Plus courts chemins Plus courts chemins à origine unique

1 Fonction Dijkstra(g, c, s0)2 pour chaque sommet si ∈ S faire3 d [si ]← +∞ ; π[si ]← null ; Colorier si en blanc

4 d [s0]← 0 ; Colorier s0 en gris5 tant que il existe un sommet gris faire6 Soit si le sommet gris tq d [si ] soit minimal7 pour tout sommet sj ∈ succ(si ) faire8 si sj est blanc ou gris alors9 relacher((si , sj ), π, d)

10 si sj est blanc alors11 Colorier sj en gris

12 Colorier si en noir

13 retourne π et d

Propriété invariante ligne 5 :

Pour tout sommet si ,

Si si est gris alors d [si ] =longueur du plus courtchemin de s0 à si nepassant que par dessommets noirs

Si si est noir alorsd [sj ] = δ(s0, si )

Les succ. d’un sommet noirsont gris ou noirs

Exemple :

si = bArcs relâchés : (a,b), (a,e), (b,e), (b, c)

4 5

3

0

9

a

b c

de

3

6

2 7

6

3

5

1 31

52/108

Page 168: Algorithmique Avancée pour l'Intelligence Artificielle et

Plus courts chemins Plus courts chemins à origine unique

1 Fonction Dijkstra(g, c, s0)2 pour chaque sommet si ∈ S faire3 d [si ]← +∞ ; π[si ]← null ; Colorier si en blanc

4 d [s0]← 0 ; Colorier s0 en gris5 tant que il existe un sommet gris faire6 Soit si le sommet gris tq d [si ] soit minimal7 pour tout sommet sj ∈ succ(si ) faire8 si sj est blanc ou gris alors9 relacher((si , sj ), π, d)

10 si sj est blanc alors11 Colorier sj en gris

12 Colorier si en noir

13 retourne π et d

Propriété invariante ligne 5 :

Pour tout sommet si ,

Si si est gris alors d [si ] =longueur du plus courtchemin de s0 à si nepassant que par dessommets noirs

Si si est noir alorsd [sj ] = δ(s0, si )

Les succ. d’un sommet noirsont gris ou noirs

Exemple :

si = bArcs relâchés : (a,b), (a,e), (b,e), (b, c)

4 5

3

0

9b c

de

3

6

2 7

6

3

5

1 1 3a

52/108

Page 169: Algorithmique Avancée pour l'Intelligence Artificielle et

Plus courts chemins Plus courts chemins à origine unique

1 Fonction Dijkstra(g, c, s0)2 pour chaque sommet si ∈ S faire3 d [si ]← +∞ ; π[si ]← null ; Colorier si en blanc

4 d [s0]← 0 ; Colorier s0 en gris5 tant que il existe un sommet gris faire6 Soit si le sommet gris tq d [si ] soit minimal7 pour tout sommet sj ∈ succ(si ) faire8 si sj est blanc ou gris alors9 relacher((si , sj ), π, d)

10 si sj est blanc alors11 Colorier sj en gris

12 Colorier si en noir

13 retourne π et d

Propriété invariante ligne 5 :

Pour tout sommet si ,

Si si est gris alors d [si ] =longueur du plus courtchemin de s0 à si nepassant que par dessommets noirs

Si si est noir alorsd [sj ] = δ(s0, si )

Les succ. d’un sommet noirsont gris ou noirs

Exemple :

si = eArcs relâchés : (a,b), (a,e), (b,e), (b, c),(e, c), (e,d) 5

3

0

9

4

7

10

1 1a

b c

de

3

6

2 7

6

3

5

3

52/108

Page 170: Algorithmique Avancée pour l'Intelligence Artificielle et

Plus courts chemins Plus courts chemins à origine unique

1 Fonction Dijkstra(g, c, s0)2 pour chaque sommet si ∈ S faire3 d [si ]← +∞ ; π[si ]← null ; Colorier si en blanc

4 d [s0]← 0 ; Colorier s0 en gris5 tant que il existe un sommet gris faire6 Soit si le sommet gris tq d [si ] soit minimal7 pour tout sommet sj ∈ succ(si ) faire8 si sj est blanc ou gris alors9 relacher((si , sj ), π, d)

10 si sj est blanc alors11 Colorier sj en gris

12 Colorier si en noir

13 retourne π et d

Propriété invariante ligne 5 :

Pour tout sommet si ,

Si si est gris alors d [si ] =longueur du plus courtchemin de s0 à si nepassant que par dessommets noirs

Si si est noir alorsd [sj ] = δ(s0, si )

Les succ. d’un sommet noirsont gris ou noirs

Exemple :

si = eArcs relâchés : (a,b), (a,e), (b,e), (b, c),(e, c), (e,d) 5

3

0

9

4

7

10

1 1a

b c

de

3

6

2 7

6

3

5

3

52/108

Page 171: Algorithmique Avancée pour l'Intelligence Artificielle et

Plus courts chemins Plus courts chemins à origine unique

1 Fonction Dijkstra(g, c, s0)2 pour chaque sommet si ∈ S faire3 d [si ]← +∞ ; π[si ]← null ; Colorier si en blanc

4 d [s0]← 0 ; Colorier s0 en gris5 tant que il existe un sommet gris faire6 Soit si le sommet gris tq d [si ] soit minimal7 pour tout sommet sj ∈ succ(si ) faire8 si sj est blanc ou gris alors9 relacher((si , sj ), π, d)

10 si sj est blanc alors11 Colorier sj en gris

12 Colorier si en noir

13 retourne π et d

Propriété invariante ligne 5 :

Pour tout sommet si ,

Si si est gris alors d [si ] =longueur du plus courtchemin de s0 à si nepassant que par dessommets noirs

Si si est noir alorsd [sj ] = δ(s0, si )

Les succ. d’un sommet noirsont gris ou noirs

Exemple :

si = cArcs relâchés : (a,b), (a,e), (b,e), (b, c),(e, c), (e,d), (c,d) 5

3

0

9

4

7

10

9

1a

b c

de

3

6

2 7

6

3

5

31

52/108

Page 172: Algorithmique Avancée pour l'Intelligence Artificielle et

Plus courts chemins Plus courts chemins à origine unique

1 Fonction Dijkstra(g, c, s0)2 pour chaque sommet si ∈ S faire3 d [si ]← +∞ ; π[si ]← null ; Colorier si en blanc

4 d [s0]← 0 ; Colorier s0 en gris5 tant que il existe un sommet gris faire6 Soit si le sommet gris tq d [si ] soit minimal7 pour tout sommet sj ∈ succ(si ) faire8 si sj est blanc ou gris alors9 relacher((si , sj ), π, d)

10 si sj est blanc alors11 Colorier sj en gris

12 Colorier si en noir

13 retourne π et d

Propriété invariante ligne 5 :

Pour tout sommet si ,

Si si est gris alors d [si ] =longueur du plus courtchemin de s0 à si nepassant que par dessommets noirs

Si si est noir alorsd [sj ] = δ(s0, si )

Les succ. d’un sommet noirsont gris ou noirs

Exemple :

si = cArcs relâchés : (a,b), (a,e), (b,e), (b, c),(e, c), (e,d), (c,d) 5

3

0

9

4

7

10

9

1a

b c

de

3

6

2 7

6

3

5

31

52/108

Page 173: Algorithmique Avancée pour l'Intelligence Artificielle et

Plus courts chemins Plus courts chemins à origine unique

1 Fonction Dijkstra(g, c, s0)2 pour chaque sommet si ∈ S faire3 d [si ]← +∞ ; π[si ]← null ; Colorier si en blanc

4 d [s0]← 0 ; Colorier s0 en gris5 tant que il existe un sommet gris faire6 Soit si le sommet gris tq d [si ] soit minimal7 pour tout sommet sj ∈ succ(si ) faire8 si sj est blanc ou gris alors9 relacher((si , sj ), π, d)

10 si sj est blanc alors11 Colorier sj en gris

12 Colorier si en noir

13 retourne π et d

Propriété invariante ligne 5 :

Pour tout sommet si ,

Si si est gris alors d [si ] =longueur du plus courtchemin de s0 à si nepassant que par dessommets noirs

Si si est noir alorsd [sj ] = δ(s0, si )

Les succ. d’un sommet noirsont gris ou noirs

Exemple :

si = dArcs relâchés : (a,b), (a,e), (b,e), (b, c),(e, c), (e,d), (c,d) 5

3

0

9

4

7

10

9

1a

b c

de

3

6

2 7

6

3

5

31

52/108

Page 174: Algorithmique Avancée pour l'Intelligence Artificielle et

Plus courts chemins Plus courts chemins à origine unique

1 Fonction Dijkstra(g, c, s0)2 pour chaque sommet si ∈ S faire3 d [si ]← +∞ ; π[si ]← null ; Colorier si en blanc

4 d [s0]← 0 ; Colorier s0 en gris5 tant que il existe un sommet gris faire6 Soit si le sommet gris tq d [si ] soit minimal7 pour tout sommet sj ∈ succ(si ) faire8 si sj est blanc ou gris alors9 relacher((si , sj ), π, d)

10 si sj est blanc alors11 Colorier sj en gris

12 Colorier si en noir

13 retourne π et d

Propriété invariante ligne 5 :

Pour tout sommet si ,

Si si est gris alors d [si ] =longueur du plus courtchemin de s0 à si nepassant que par dessommets noirs

Si si est noir alorsd [sj ] = δ(s0, si )

Les succ. d’un sommet noirsont gris ou noirs

Exemple : s

s s

s

j i

l

k

s0

noirs

blancs

gris

52/108

Page 175: Algorithmique Avancée pour l'Intelligence Artificielle et

Plus courts chemins Plus courts chemins à origine unique

1 Fonction Dijkstra(g, c, s0)2 pour chaque sommet si ∈ S faire3 d [si ]← +∞ ; π[si ]← null ; Colorier si en blanc

4 d [s0]← 0 ; Colorier s0 en gris5 tant que il existe un sommet gris faire6 Soit si le sommet gris tq d [si ] soit minimal7 pour tout sommet sj ∈ succ(si ) faire8 si sj est blanc ou gris alors9 relacher((si , sj ), π, d)

10 si sj est blanc alors11 Colorier sj en gris

12 Colorier si en noir

13 retourne π et d

Propriété invariante ligne 5 :

Pour tout sommet si ,

Si si est gris alors d [si ] =longueur du plus courtchemin de s0 à si nepassant que par dessommets noirs

Si si est noir alorsd [sj ] = δ(s0, si )

Les succ. d’un sommet noirsont gris ou noirs

Complexité pour un graphe ayant n sommets et p arcs?

O(n2) si recherche linéaire du sommet gris minimisant d (ligne 6)

O((n + p)log(n)) si les sommets gris sont stockés dans un tas binaire

52/108

Page 176: Algorithmique Avancée pour l'Intelligence Artificielle et

Plus courts chemins Plus courts chemins à origine unique

1 Fonction Dijkstra(g, c, s0)2 pour chaque sommet si ∈ S faire3 d [si ]← +∞ ; π[si ]← null ; Colorier si en blanc

4 d [s0]← 0 ; Colorier s0 en gris5 tant que il existe un sommet gris faire6 Soit si le sommet gris tq d [si ] soit minimal7 pour tout sommet sj ∈ succ(si ) faire8 si sj est blanc ou gris alors9 relacher((si , sj ), π, d)

10 si sj est blanc alors11 Colorier sj en gris

12 Colorier si en noir

13 retourne π et d

Propriété invariante ligne 5 :

Pour tout sommet si ,

Si si est gris alors d [si ] =longueur du plus courtchemin de s0 à si nepassant que par dessommets noirs

Si si est noir alorsd [sj ] = δ(s0, si )

Les succ. d’un sommet noirsont gris ou noirs

Complexité pour un graphe ayant n sommets et p arcs?

O(n2) si recherche linéaire du sommet gris minimisant d (ligne 6)

O((n + p)log(n)) si les sommets gris sont stockés dans un tas binaire

52/108

Page 177: Algorithmique Avancée pour l'Intelligence Artificielle et

Plus courts chemins Plus courts chemins à origine unique

1 Fonction Dijkstra(g, c, s0)2 pour chaque sommet si ∈ S faire3 d [si ]← +∞ ; π[si ]← null ; Colorier si en blanc

4 d [s0]← 0 ; Colorier s0 en gris5 tant que il existe un sommet gris faire6 Soit si le sommet gris tq d [si ] soit minimal7 pour tout sommet sj ∈ succ(si ) faire8 si sj est blanc ou gris alors9 relacher((si , sj ), π, d)

10 si sj est blanc alors11 Colorier sj en gris

12 Colorier si en noir

13 retourne π et d

Propriété invariante ligne 5 :

Pour tout sommet si ,

Si si est gris alors d [si ] =longueur du plus courtchemin de s0 à si nepassant que par dessommets noirs

Si si est noir alorsd [sj ] = δ(s0, si )

Les succ. d’un sommet noirsont gris ou noirs

Complexité pour un graphe ayant n sommets et p arcs?

O(n2) si recherche linéaire du sommet gris minimisant d (ligne 6)

O((n + p)log(n)) si les sommets gris sont stockés dans un tas binaire

52/108

Page 178: Algorithmique Avancée pour l'Intelligence Artificielle et

Plus courts chemins Plus courts chemins à origine unique

Principe de l’algorithme TopoDAG

Rappel :

Un DAG est un graphe orienté sans circuit

Idée :

Relâcher les arcs partant de si seulement si tous les arcs se trouvantsur un chemin entre s0 et si ont déjà été relâchés; Dans ce cas, on a la garantie que d [si ] = δ(s0, si)

Utiliser un tri topologique pour déterminer l’ordre de relâchement

53/108

Page 179: Algorithmique Avancée pour l'Intelligence Artificielle et

Plus courts chemins Plus courts chemins à origine unique

Algorithme TopoDAG1 Fonction TopoDAG(g, c, s0)

Précond. : g est un DAG2 pour chaque sommet si ∈ S faire3 d [si ]← +∞4 π[si ]← null

5 d [s0]← 06 Trier topologiquement les sommets de g à l’aide d’un parcours en profondeur7 pour chaque sommet si pris selon l’ordre topologique faire8 pour chaque sommet sj ∈ succ(si ) faire9 relacher((si , sj ), π, d)

10 retourne π et d

Exercice :

2

8

3 4

42

1

3

4 9

41

f g h

abcd

e

54/108

Page 180: Algorithmique Avancée pour l'Intelligence Artificielle et

Plus courts chemins Plus courts chemins à origine unique

Algorithme TopoDAG1 Fonction TopoDAG(g, c, s0)

Précond. : g est un DAG2 pour chaque sommet si ∈ S faire3 d [si ]← +∞4 π[si ]← null

5 d [s0]← 06 Trier topologiquement les sommets de g à l’aide d’un parcours en profondeur7 pour chaque sommet si pris selon l’ordre topologique faire8 pour chaque sommet sj ∈ succ(si ) faire9 relacher((si , sj ), π, d)

10 retourne π et d

Complexité pour un graphe ayant n sommets et p arcs?

; O(n + p)

x

54/108

Page 181: Algorithmique Avancée pour l'Intelligence Artificielle et

Plus courts chemins Plus courts chemins à origine unique

Algorithme TopoDAG1 Fonction TopoDAG(g, c, s0)

Précond. : g est un DAG2 pour chaque sommet si ∈ S faire3 d [si ]← +∞4 π[si ]← null

5 d [s0]← 06 Trier topologiquement les sommets de g à l’aide d’un parcours en profondeur7 pour chaque sommet si pris selon l’ordre topologique faire8 pour chaque sommet sj ∈ succ(si ) faire9 relacher((si , sj ), π, d)

10 retourne π et d

Complexité pour un graphe ayant n sommets et p arcs?

; O(n + p)

x

54/108

Page 182: Algorithmique Avancée pour l'Intelligence Artificielle et

Plus courts chemins Plus courts chemins à origine unique

Points communs et limitations de Dijkstra et TopoDAG

Disjkstra et TopoDAG sont des algorithmes gloutons

Si d [si ] = δ(s0, si), alors on peut relâcher chaque arc (si , sj); Principe d’optimalité des sous-chemins :

δ(s0, sj) = minsi∈pred(sj )

δ(s0, si) + c(si , sj)

Principe glouton pour choisir si :Dijkstra : Choisir si gris qui minimise d; Si tous les coûts sont positifs, d [si ] ne pourra plus diminuerTopoDAG : Choisir si selon un ordre topologique; Si le graphe est un DAG, d [si ] ne pourra plus diminuer

Exemple de graphe pour lequel Dijkstra et TopoDAG ne marchent pas :

2

b

c

d

e f

1

4

−4

11 1

a

55/108

Page 183: Algorithmique Avancée pour l'Intelligence Artificielle et

Plus courts chemins Plus courts chemins à origine unique

Programmation dynamique pour le calcul de plus courts chemins

Principe des approches "Diviser pour Régner" :

Décomposer le problème à résoudre en sous-problèmes

Résoudre chaque sous-problème

Calculer la solution du problème initial à partir des solutions dessous-problèmes

Exemples : Quicksort, MergeSort, Branch-and-Bound, ..

; Tous les sous-problèmes sont différents

Programmation dynamique?

Approche "Diviser pour régner" où un même sous-problème peut apparaîtreplusieurs fois

56/108

Page 184: Algorithmique Avancée pour l'Intelligence Artificielle et

Plus courts chemins Plus courts chemins à origine unique

Etapes pour résoudre un problème en programmation dynamique

Etape 1 : Définir ce qu’est un sous-problème

Etape 2 : Définir récursivement la solution d’un sous-problèmeIdentifier les cas de base, où la solution est connue sans calculDéfinir la solution aux sous-problèmes plus compliqués en fonction dessolutions de sous-problèmes plus simples

Eq. de Bellman basées sur le principe d’optimalité des sous-structures

Etape 3 : Analyse des performances

Combien de sous-problèmes différents doivent être résolus?

Etape 4 : Choisir une approche pour éviter de recalculer des solutionsTop-Down : Implémentation récursive + mémoïsation; Facile à programmer (et à prouver correct !)Bottom-Up : Implémentation itérative, en remplissant un tableau; Parfois plus économe en mémoire

57/108

Page 185: Algorithmique Avancée pour l'Intelligence Artificielle et

Plus courts chemins Plus courts chemins à origine unique

Rappelez-vous, au S1... le sac-à-dos !

Description du problème :Entrée : un poids max pmax et un ensembled’objets O = {1, . . . ,n}; Chaque objet i a un poids pi et une utilité uiSortie : le sous-ensemble S ⊆ O maximisant∑

i∈S ui et tel que∑

i∈S pi ≤ pmax

Etape 1 : Définir ce qu’est un sous-problème∀i ∈ [1,n],∀p ∈ [1,pmax ] : m(i ,p) = sol. opt. qd O = {1, . . . , i} et pmax = p

Etape 2 : Equations de Bellmanm(1,p) = 0 si p < p1 et m(1,p) = u1 sinon∀i ∈ [2,n],∀p ∈ [0,pi − 1] : m(i ,p) = m(i − 1,p)∀i ∈ [2,n],∀p ∈ [pi ,pmax ] : m(i ,p) = max{ui +m(i−1,p−pi),m(i−1,p)}

Etape 3 : Analyse des performancesCombien de sous-problèmes différents?

58/108

Page 186: Algorithmique Avancée pour l'Intelligence Artificielle et

Plus courts chemins Plus courts chemins à origine unique

Programmation dynamique pour le calcul de plus courts chemins

Etape 1 : Définir ce qu’est un sous-problème

Pour tout entier k et pour tout sommet si : sous-problème d(k , si); longueur du + court chemin de s0 jusque si utilisant au + k arcs

Etape 2 : Equations de Bellman

k = 0 : d(0, si) = 0 si si = s0 et d(0, si) = +∞ sinon

k > 1 :d(k , si) = min({d(k − 1, si)} ∪ {d(k − 1, sj) + c(sj , si)|sj ∈ pred(si)}

Question : Pour quelle valeur de k est-on sûr d’avoir d(k , si) = δ(s0, si)?

Etape 3 : Analyse des performances :

Combien de sous-problèmes différents pour un graphe ayant nsommets ?

Que doit-on faire pour chaque sous-problème?

59/108

Page 187: Algorithmique Avancée pour l'Intelligence Artificielle et

Plus courts chemins Plus courts chemins à origine unique

Etape 4 : Calcul récursif Top-down

Rappel des équations de Bellman :

k = 0 : d(0, si) = 0 si si = s0 et d(0, si) = +∞ sinonk > 1 :d(k , si) = min({d(k − 1, si)} ∪ {d(k − 1, sj) + c(sj , si)|sj ∈ pred(si)}

1 Fonction Calcul-récursif(g, c, s0, k, si)2 si k = 0 alors3 si si = s0 alors retourne 0;4 retourne∞

5 d ← Calcul-récursif(g, c, s0, k− 1, si)6 pour chaque sommet sj ∈ pred(si ) faire7 d ← min(d ,Calcul-récursif(g, c, s0, k− 1, sj) + c(sj , si ))

8 retourne d

Appel initial pour calculer δ(s0, si) : Calcul-récursif(g, c, s0, si ,n − 1)

Complexité de cet algorithme?

Il faut mémoïser pour ne pas calculer plusieurs fois d(k , si) !

60/108

Page 188: Algorithmique Avancée pour l'Intelligence Artificielle et

Plus courts chemins Plus courts chemins à origine unique

Etape 4 : Calcul récursif Top-down

Rappel des équations de Bellman :

k = 0 : d(0, si) = 0 si si = s0 et d(0, si) = +∞ sinonk > 1 :d(k , si) = min({d(k − 1, si)} ∪ {d(k − 1, sj) + c(sj , si)|sj ∈ pred(si)}

1 Fonction Calcul-récursif(g, c, s0, k, si)2 si k = 0 alors3 si si = s0 alors retourne 0;4 retourne∞

5 d ← Calcul-récursif(g, c, s0, k− 1, si)6 pour chaque sommet sj ∈ pred(si ) faire7 d ← min(d ,Calcul-récursif(g, c, s0, k− 1, sj) + c(sj , si ))

8 retourne d

Appel initial pour calculer δ(s0, si) : Calcul-récursif(g, c, s0, si ,n − 1)

Complexité de cet algorithme?

Il faut mémoïser pour ne pas calculer plusieurs fois d(k , si) !

60/108

Page 189: Algorithmique Avancée pour l'Intelligence Artificielle et

Plus courts chemins Plus courts chemins à origine unique

Etape 4 : Calcul récursif Top-down avec mémoïsation

Rappel des équations de Bellman :k = 0 : d(0, si) = 0 si si = s0 et d(0, si) = +∞ sinonk > 1 :d(k , si) = min({d(k − 1, si)} ∪ {d(k − 1, sj) + c(sj , si)|sj ∈ pred(si)}

Utilisation d’une var. globale d pour mémoïser les valeurs calculées :1 Fonction Calcul-réc-mémo(g, c, s0, k , si )2 si k = 0 alors3 si si = s0 alors retourne 0 sinon retourne∞;

4 si d [k ][si ] = null alors5 d [k ][si ]← Calcul-réc-mémo(g, c, s0, k − 1, si )6 pour chaque sommet sj ∈ pred(si ) faire7 d [k ][si ]← min(d [k ][si ],Calcul-réc-mémo(g, c, s0, k − 1, sj ) + c(sj , si ))

8 retourne d [k ][si ]

Complexité :

O(np)Lignes 5-7 exécutées pour chaque k ∈ [0,n − 1] et si ∈ S ⇒ O(n2)Chaque exécution⇒ Parcours de l’ensemble pred(si)

61/108

Page 190: Algorithmique Avancée pour l'Intelligence Artificielle et

Plus courts chemins Plus courts chemins à origine unique

Etape 4 : Calcul récursif Top-down avec mémoïsation

Rappel des équations de Bellman :k = 0 : d(0, si) = 0 si si = s0 et d(0, si) = +∞ sinonk > 1 :d(k , si) = min({d(k − 1, si)} ∪ {d(k − 1, sj) + c(sj , si)|sj ∈ pred(si)}

Utilisation d’une var. globale d pour mémoïser les valeurs calculées :1 Fonction Calcul-réc-mémo(g, c, s0, k , si )2 si k = 0 alors3 si si = s0 alors retourne 0 sinon retourne∞;

4 si d [k ][si ] = null alors5 d [k ][si ]← Calcul-réc-mémo(g, c, s0, k − 1, si )6 pour chaque sommet sj ∈ pred(si ) faire7 d [k ][si ]← min(d [k ][si ],Calcul-réc-mémo(g, c, s0, k − 1, sj ) + c(sj , si ))

8 retourne d [k ][si ]

Complexité : O(np)Lignes 5-7 exécutées pour chaque k ∈ [0,n − 1] et si ∈ S ⇒ O(n2)Chaque exécution⇒ Parcours de l’ensemble pred(si) 61/108

Page 191: Algorithmique Avancée pour l'Intelligence Artificielle et

Plus courts chemins Plus courts chemins à origine unique

Etape 4 : Calcul itératif, de bas en haut

Rappel des équations de Bellman :

k = 0 : d(0, si) = 0 si si = s0 et d(0, si) = +∞ sinon

k > 1 :d(k , si) = min({d(k − 1, si)} ∪ {d(k − 1, sj) + c(sj , si)|sj ∈ pred(si)}

1 Fonction Calcul-itératif(g, c, s0)2 pour chaque sommet si ∈ S faire d [0][si ]← +∞;3 d [0][s0]← 04 pour k variant de 1 à #S − 1 faire5 pour chaque sommet si ∈ S faire6 d [k ][si ]← d [k − 1][si ]7 pour chaque sommet sj ∈ pred(si ) faire8 d [k ][si ]← min(d [k ][si ], d [k − 1][sj ] + c(sj , si ))

9 retourne d [#S − 1]

Complexité de cet algorithme?

O(np)

62/108

Page 192: Algorithmique Avancée pour l'Intelligence Artificielle et

Plus courts chemins Plus courts chemins à origine unique

Etape 4 : Calcul itératif, de bas en haut

Rappel des équations de Bellman :

k = 0 : d(0, si) = 0 si si = s0 et d(0, si) = +∞ sinon

k > 1 :d(k , si) = min({d(k − 1, si)} ∪ {d(k − 1, sj) + c(sj , si)|sj ∈ pred(si)}

1 Fonction Calcul-itératif(g, c, s0)2 pour chaque sommet si ∈ S faire d [0][si ]← +∞;3 d [0][s0]← 04 pour k variant de 1 à #S − 1 faire5 pour chaque sommet si ∈ S faire6 d [k ][si ]← d [k − 1][si ]7 pour chaque sommet sj ∈ pred(si ) faire8 d [k ][si ]← min(d [k ][si ], d [k − 1][sj ] + c(sj , si ))

9 retourne d [#S − 1]

Complexité de cet algorithme?

O(np)

62/108

Page 193: Algorithmique Avancée pour l'Intelligence Artificielle et

Plus courts chemins Plus courts chemins à origine unique

1 Fonction Calcul-itératif(g, c, s0)2 pour chaque sommet si ∈ S faire d [0][si ]← +∞;3 d [0][s0]← 04 pour k variant de 1 à #S − 1 faire5 pour chaque sommet si ∈ S faire6 d [k ][si ]← d [k − 1][si ]7 pour chaque sommet sj ∈ pred(si ) faire8 d [k ][si ]← min(d [k ][si ], d [k − 1][sj ] + c(sj , si ))

9 retourne d [#S − 1]

−3

3

a

b c

de

6

2 7

6

3

1

5

−10

30 1 2 4

30 1 2 4 30 1 2 4

30 1 2 430 1 2 4

Détecter les circuits absorbants :Ligne 9 : Tester si ∃(si , sj) ∈ A tq d [#S − 1][sj ] > d [#S − 1][si ] + c(si , sj)

Possibilité d’améliorer les performances (sans changer la complexité) :

Sortir de la boucle (4-8) si d [k ] = d [k − 1]

XXX

63/108

Page 194: Algorithmique Avancée pour l'Intelligence Artificielle et

Plus courts chemins Plus courts chemins à origine unique

1 Fonction Calcul-itératif(g, c, s0)2 pour chaque sommet si ∈ S faire d [0][si ]← +∞;3 d [0][s0]← 04 pour k variant de 1 à #S − 1 faire5 pour chaque sommet si ∈ S faire6 d [k ][si ]← d [k − 1][si ]7 pour chaque sommet sj ∈ pred(si ) faire8 d [k ][si ]← min(d [k ][si ], d [k − 1][sj ] + c(sj , si ))

9 retourne d [#S − 1]

a

b c

de

6

2 7

6

3

5

1−1

3

−30 0

30 1 2 4

3

30 1 2 4 30 1 2 4

30 1 2 45

30 1 2 4

Détecter les circuits absorbants :Ligne 9 : Tester si ∃(si , sj) ∈ A tq d [#S − 1][sj ] > d [#S − 1][si ] + c(si , sj)

Possibilité d’améliorer les performances (sans changer la complexité) :

Sortir de la boucle (4-8) si d [k ] = d [k − 1]

XXX

63/108

Page 195: Algorithmique Avancée pour l'Intelligence Artificielle et

Plus courts chemins Plus courts chemins à origine unique

1 Fonction Calcul-itératif(g, c, s0)2 pour chaque sommet si ∈ S faire d [0][si ]← +∞;3 d [0][s0]← 04 pour k variant de 1 à #S − 1 faire5 pour chaque sommet si ∈ S faire6 d [k ][si ]← d [k − 1][si ]7 pour chaque sommet sj ∈ pred(si ) faire8 d [k ][si ]← min(d [k ][si ], d [k − 1][sj ] + c(sj , si ))

9 retourne d [#S − 1]

a

b c

de

6

2 7

6

3

5

1−1 −3

3

0 0 0

30 1 2 4

3 3

30 1 2 4

2

30 1 2 4

11

30 1 2 45 2

30 1 2 4

Détecter les circuits absorbants :Ligne 9 : Tester si ∃(si , sj) ∈ A tq d [#S − 1][sj ] > d [#S − 1][si ] + c(si , sj)

Possibilité d’améliorer les performances (sans changer la complexité) :

Sortir de la boucle (4-8) si d [k ] = d [k − 1]

XXX

63/108

Page 196: Algorithmique Avancée pour l'Intelligence Artificielle et

Plus courts chemins Plus courts chemins à origine unique

1 Fonction Calcul-itératif(g, c, s0)2 pour chaque sommet si ∈ S faire d [0][si ]← +∞;3 d [0][s0]← 04 pour k variant de 1 à #S − 1 faire5 pour chaque sommet si ∈ S faire6 d [k ][si ]← d [k − 1][si ]7 pour chaque sommet sj ∈ pred(si ) faire8 d [k ][si ]← min(d [k ][si ], d [k − 1][sj ] + c(sj , si ))

9 retourne d [#S − 1]

a

b c

de

6

2 7

6

3

5

1−1 −3

3

11 4

30 1 2 45 2 2

30 1 2 4

0 0 0 0

30 1 2 4

3 3 3

30 1 2 4

2 −1

30 1 2 4

Détecter les circuits absorbants :Ligne 9 : Tester si ∃(si , sj) ∈ A tq d [#S − 1][sj ] > d [#S − 1][si ] + c(si , sj)

Possibilité d’améliorer les performances (sans changer la complexité) :

Sortir de la boucle (4-8) si d [k ] = d [k − 1]

XXX

63/108

Page 197: Algorithmique Avancée pour l'Intelligence Artificielle et

Plus courts chemins Plus courts chemins à origine unique

1 Fonction Calcul-itératif(g, c, s0)2 pour chaque sommet si ∈ S faire d [0][si ]← +∞;3 d [0][s0]← 04 pour k variant de 1 à #S − 1 faire5 pour chaque sommet si ∈ S faire6 d [k ][si ]← d [k − 1][si ]7 pour chaque sommet sj ∈ pred(si ) faire8 d [k ][si ]← min(d [k ][si ], d [k − 1][sj ] + c(sj , si ))

9 retourne d [#S − 1]

a

b c

de

6

2 7

6

3

5

1−1 −3

3

3

30 1 2 4

2 −1 −1

30 1 2 4

11 4 1

30 1 2 4

5 2 2 2

30 1 2 4

0 0 0 0 0

30 1 2 4

3 3 3

Détecter les circuits absorbants :Ligne 9 : Tester si ∃(si , sj) ∈ A tq d [#S − 1][sj ] > d [#S − 1][si ] + c(si , sj)

Possibilité d’améliorer les performances (sans changer la complexité) :

Sortir de la boucle (4-8) si d [k ] = d [k − 1]

XXX

63/108

Page 198: Algorithmique Avancée pour l'Intelligence Artificielle et

Plus courts chemins Plus courts chemins à origine unique

1 Fonction Calcul-itératif(g, c, s0)2 pour chaque sommet si ∈ S faire d [0][si ]← +∞;3 d [0][s0]← 04 pour k variant de 1 à #S − 1 faire5 pour chaque sommet si ∈ S faire6 d [k ][si ]← d [k − 1][si ]7 pour chaque sommet sj ∈ pred(si ) faire8 d [k ][si ]← min(d [k ][si ], d [k − 1][sj ] + c(sj , si ))

9 retourne d [#S − 1]

Détecter les circuits absorbants :Ligne 9 : Tester si ∃(si , sj) ∈ A tq d [#S − 1][sj ] > d [#S − 1][si ] + c(si , sj)

Possibilité d’améliorer les performances (sans changer la complexité) :

Sortir de la boucle (4-8) si d [k ] = d [k − 1]

XXX

63/108

Page 199: Algorithmique Avancée pour l'Intelligence Artificielle et

Plus courts chemins Plus courts chemins à origine unique

1 Fonction Calcul-itératif(g, c, s0)2 pour chaque sommet si ∈ S faire d [0][si ]← +∞;3 d [0][s0]← 04 pour k variant de 1 à #S − 1 faire5 pour chaque sommet si ∈ S faire6 d [k ][si ]← d [k − 1][si ]7 pour chaque sommet sj ∈ pred(si ) faire8 d [k ][si ]← min(d [k ][si ], d [k − 1][sj ] + c(sj , si ))

9 retourne d [#S − 1]

Détecter les circuits absorbants :Ligne 9 : Tester si ∃(si , sj) ∈ A tq d [#S − 1][sj ] > d [#S − 1][si ] + c(si , sj)

Possibilité d’améliorer les performances (sans changer la complexité) :

Sortir de la boucle (4-8) si d [k ] = d [k − 1]

XXX

63/108

Page 200: Algorithmique Avancée pour l'Intelligence Artificielle et

Plus courts chemins Plus courts chemins à origine unique

Etape 4 : Bellman-Ford (avec procédure de relâchement)

1 Fonction Bellman-Ford(g, c, s0)2 pour chaque sommet si ∈ S faire3 d [si ]← +∞4 π[si ]← null

5 d [s0]← 06 pour k variant de 1 à #S − 1 faire7 pour chaque sommet si ∈ S faire8 pour chaque sommet sj ∈ pred(si ) faire9 relacher((si , sj ), π, d)

10 retourne π et d

Que change le fait d’utiliser le même d pour toutes les itérations?

Complexité pour un graphe ayant n sommets et p arcs?

O(np)Possibilité d’améliorer les performances (sans changer la complexité) :

Sortir de la boucle (6-9) si d n’est pas modifiéNe relâcher que les arcs (si , sj) pour lesquels d [si ] a été modifié 64/108

Page 201: Algorithmique Avancée pour l'Intelligence Artificielle et

Plus courts chemins Plus courts chemins à origine unique

Etape 4 : Bellman-Ford (avec procédure de relâchement)

1 Fonction Bellman-Ford(g, c, s0)2 pour chaque sommet si ∈ S faire3 d [si ]← +∞4 π[si ]← null

5 d [s0]← 06 pour k variant de 1 à #S − 1 faire7 pour chaque sommet si ∈ S faire8 pour chaque sommet sj ∈ pred(si ) faire9 relacher((si , sj ), π, d)

10 retourne π et d

Que change le fait d’utiliser le même d pour toutes les itérations?

Complexité pour un graphe ayant n sommets et p arcs?

O(np)Possibilité d’améliorer les performances (sans changer la complexité) :

Sortir de la boucle (6-9) si d n’est pas modifiéNe relâcher que les arcs (si , sj) pour lesquels d [si ] a été modifié 64/108

Page 202: Algorithmique Avancée pour l'Intelligence Artificielle et

Plus courts chemins Plus courts chemins pour tout couple de sommets

1 Introduction

2 Définitions

3 Structures de données pour représenter un graphe

4 Parcours de graphes

5 Plus courts cheminsDéfinitions et propriétésPlus courts chemins à origine uniquePlus courts chemins pour tout couple de sommetsGénéralisation à la recherche de meilleurs chemins

6 Problèmes de planification

7 Quelques problèmes NP-difficiles sur les graphes

65/108

Page 203: Algorithmique Avancée pour l'Intelligence Artificielle et

Plus courts chemins Plus courts chemins pour tout couple de sommets

Spécification du pb de + court chemin pour tout couple de sommets

1 Fonction PlusCourtsChemins(g, c)Entrée : Un graphe g = (S,A) et une fct coût c : A→ RPostcond. : Retourne une matrice de liaisons π et un tableau d tq

∀si , sj ∈ S,d [si ][sj ] = δ(si , sj)

Matrice de liaison : Tableau π : S × S → S ∪ {null} tel que

Si i = j ou si 6; sj , alors π[si ][sj ] = nullSinon : π[si ][sj ] = préd. de sj dans un + court chemin de si à sj

Exemple :

−2a

b c

de6

4

3

−3

2 2 7

6

3

66/108

Page 204: Algorithmique Avancée pour l'Intelligence Artificielle et

Plus courts chemins Plus courts chemins pour tout couple de sommets

Résolution par programmation dynamique

Etape 1 : Définir ce qu’est un sous-problème

Pour tout k ∈ [0, |S|] et pour tout sommet si : sous-problème d(k , si , sj); longueur du + court chemin de si jusque sj en n’utilisant que lessommets {s1, . . . , sk}

Etape 2 : Equations de Bellman

k = 0 : d(0, si , sj) = c(si , sj) si (i , j) ∈ A et d(0, si , sj) = +∞ sinon

k > 1 : d(k , si , sj) = min{d(k − 1, si , sj),d(k − 1, si , sk ) + d(k − 1, sk , sj)}

Etape 3 : Analyse des performances :

Combien de sous-problèmes différents pour un graphe ayant nsommets ?

Que doit-on faire pour chaque sous-problème?

67/108

Page 205: Algorithmique Avancée pour l'Intelligence Artificielle et

Plus courts chemins Plus courts chemins pour tout couple de sommets

Algorithme de Floyd-Warshall1 Fonction Floyd-Warshall(g, c)2 pour chaque couple de sommets (si , sj ) ∈ S × S faire3 si (si , sj ) ∈ A alors d [0][si ][sj ]← c[si ][sj ];4 sinon d [0][si ][sj ]← +∞;

5 pour k variant de 1 à n faire6 pour chaque couple de sommets (si , sj ) ∈ S × S faire7 d [k ][si ][sj ]← min(d [k − 1][si ][sj ], d [k − 1][si ][sk ]+d [k − 1][sk ][sj ])

8 retourne d [n]

Complexité de Floyd-Warshall ?

: O(n3)

Calcul de la matrice de liaisonsCalcul d’une matrice π[k ] pour chaque k ∈ [0,n] :

π[0] correspond à la matrice d’adjacence de gπ[k ][si ][sj ] = π[k − 1][si ][sj ] ou π[k − 1][sk ][sj ] selon le min (ligne 7)

π[n] est la matrice de liaisons finale

68/108

Page 206: Algorithmique Avancée pour l'Intelligence Artificielle et

Plus courts chemins Plus courts chemins pour tout couple de sommets

Algorithme de Floyd-Warshall1 Fonction Floyd-Warshall(g, c)2 pour chaque couple de sommets (si , sj ) ∈ S × S faire3 si (si , sj ) ∈ A alors d [0][si ][sj ]← c[si ][sj ];4 sinon d [0][si ][sj ]← +∞;

5 pour k variant de 1 à n faire6 pour chaque couple de sommets (si , sj ) ∈ S × S faire7 d [k ][si ][sj ]← min(d [k − 1][si ][sj ], d [k − 1][si ][sk ]+d [k − 1][sk ][sj ])

8 retourne d [n]

Complexité de Floyd-Warshall : O(n3)

Calcul de la matrice de liaisonsCalcul d’une matrice π[k ] pour chaque k ∈ [0,n] :

π[0] correspond à la matrice d’adjacence de gπ[k ][si ][sj ] = π[k − 1][si ][sj ] ou π[k − 1][sk ][sj ] selon le min (ligne 7)

π[n] est la matrice de liaisons finale

68/108

Page 207: Algorithmique Avancée pour l'Intelligence Artificielle et

Plus courts chemins Plus courts chemins pour tout couple de sommets

Algorithme de Floyd-Warshall1 Fonction Floyd-Warshall(g, c)2 pour chaque couple de sommets (si , sj ) ∈ S × S faire3 si (si , sj ) ∈ A alors d [0][si ][sj ]← c[si ][sj ];4 sinon d [0][si ][sj ]← +∞;

5 pour k variant de 1 à n faire6 pour chaque couple de sommets (si , sj ) ∈ S × S faire7 d [k ][si ][sj ]← min(d [k − 1][si ][sj ], d [k − 1][si ][sk ]+d [k − 1][sk ][sj ])

8 retourne d [n]

Complexité de Floyd-Warshall : O(n3)

Calcul de la matrice de liaisonsCalcul d’une matrice π[k ] pour chaque k ∈ [0,n] :

π[0] correspond à la matrice d’adjacence de gπ[k ][si ][sj ] = π[k − 1][si ][sj ] ou π[k − 1][sk ][sj ] selon le min (ligne 7)

π[n] est la matrice de liaisons finale

68/108

Page 208: Algorithmique Avancée pour l'Intelligence Artificielle et

Plus courts chemins Généralisation à la recherche de meilleurs chemins

1 Introduction

2 Définitions

3 Structures de données pour représenter un graphe

4 Parcours de graphes

5 Plus courts cheminsDéfinitions et propriétésPlus courts chemins à origine uniquePlus courts chemins pour tout couple de sommetsGénéralisation à la recherche de meilleurs chemins

6 Problèmes de planification

7 Quelques problèmes NP-difficiles sur les graphes

69/108

Page 209: Algorithmique Avancée pour l'Intelligence Artificielle et

Plus courts chemins Généralisation à la recherche de meilleurs chemins

Problèmes de recherche de meilleurs chemins

Exemple 1 : Chemin le plus long

Coût d’un chemin π = somme des coûts des arcs de π

Objectif = Chercher un chemin de coût maximal

Exemple 2 : Chemin le plus probable

Coût d’un chemin π = produit des probabilités des arcs de π

Objectif = Chercher un chemin de coût maximal

Exemple 3 : Chemin le plus court avec une borne b sur la probabilité

Coût d’un chemin π :

Si le produit des proba des arcs de π < b alors coût de π =∞Sinon coût de π = somme des coûts des arcs de π

Objectif = Chercher un chemin de coût minimal

70/108

Page 210: Algorithmique Avancée pour l'Intelligence Artificielle et

Plus courts chemins Généralisation à la recherche de meilleurs chemins

Peut-on adapter les algorithmes de calcul de plus court chemins?

Condition commune à tous les algorithmes vus :

Optimalité des sous-structures; Tout sous-chemin d’un chemin optimal est optimal

Cette propriété est-elle vérifiée pour les 3 exemples?

Chemin le plus long?

Chemin le plus probable?

Chemin le plus court avec une borne sur la probabilité?

Que faire si la cond. d’optimalité des ss-structures n’est pas vérifiée?

Le problème devient NP-difficile; On y reviendra plus tard !

71/108

Page 211: Algorithmique Avancée pour l'Intelligence Artificielle et

Plus courts chemins Généralisation à la recherche de meilleurs chemins

Extension de Dijkstra pour calculer un “meilleur” chemin

Précondition à l’utilisation de Dijkstra :

L’ajout d’un arc (si , sj) à un chemin s0 ; si ne peut que dégrader son coût :Si on cherche un min, alors cout(s0 ; si → sj) ≥ cout(s0 ; si)

Si on cherche un max, alors cout(s0 ; si → sj) ≤ cout(s0 ; si)

72/108

Page 212: Algorithmique Avancée pour l'Intelligence Artificielle et

Plus courts chemins Généralisation à la recherche de meilleurs chemins

Extension de Dijkstra pour calculer un “meilleur” chemin

Précondition à l’utilisation de Dijkstra :

L’ajout d’un arc (si , sj) à un chemin s0 ; si ne peut que dégrader son coût :Si on cherche un min, alors cout(s0 ; si → sj) ≥ cout(s0 ; si)

Si on cherche un max, alors cout(s0 ; si → sj) ≤ cout(s0 ; si)

Exemple : Chemin le plus long

OK si cout(s0 ; si → sj) = cout(s0 ; si) + c(si , sj) ≤ cout(s0 ; si); Il faut que c(si , sj) soit négatif pour tout arc (si , sj)

Initialiser d à −∞, sauf pour d [s0] qui est initialisé à 0

Procédure de relâchement :1 Proc relacher((si , sj ), π, d)2 si d [sj ] > d [si ] + c(si , sj ) alors3 d [sj ]← d [si ] + c(si , sj )4 π[sj ]← si

72/108

Page 213: Algorithmique Avancée pour l'Intelligence Artificielle et

Plus courts chemins Généralisation à la recherche de meilleurs chemins

Extension de Dijkstra pour calculer un “meilleur” chemin

Précondition à l’utilisation de Dijkstra :

L’ajout d’un arc (si , sj) à un chemin s0 ; si ne peut que dégrader son coût :Si on cherche un min, alors cout(s0 ; si → sj) ≥ cout(s0 ; si)

Si on cherche un max, alors cout(s0 ; si → sj) ≤ cout(s0 ; si)

Exemple : Chemin le plus probable

OK si cout(s0 ; si → sj) = cout(s0 ; si) ∗ p(si , sj) ≤ cout(s0 ; si); Toujours vrai car 0 ≤ p(si , sj) ≤ 1, pour tout arc (si , sj)

Initialiser d à 0, sauf pour d [s0] qui est initialisé à 1

Procédure de relâchement :1 Proc relacher((si , sj ), π, d)2 si d [sj ] < d [si ] ∗ p(si , sj ) alors3 d [sj ]← d [si ] ∗ p(si , sj )4 π[sj ]← si

72/108

Page 214: Algorithmique Avancée pour l'Intelligence Artificielle et

Plus courts chemins Généralisation à la recherche de meilleurs chemins

Extension de TopoDAG pour calculer un “meilleur” chemin

Précondition à l’utilisation de TopoDAG :Le graphe ne doit pas avoir de circuit

Exemple d’adaptation de TopoDAG :

Recherche d’un plus long chemin quand le coût d’un chemin est égal au coûtde son plus petit arc

Initialiser d à −∞, sauf pour d [s0] qui est initialisé à +∞Procédure de relâchement :

1 Proc relacher((si , sj ), π, d)2 si d [sj ] < min(d [si ], cout(si , sj )) alors3 d [sj ]← min(d [si ], cout(si , sj ))4 π[sj ]← si

Aurait-on pu utiliser Dijkstra dans ce cas ?

73/108

Page 215: Algorithmique Avancée pour l'Intelligence Artificielle et

Plus courts chemins Généralisation à la recherche de meilleurs chemins

Extension de TopoDAG pour calculer un “meilleur” chemin

Précondition à l’utilisation de TopoDAG :Le graphe ne doit pas avoir de circuit

Exemple d’adaptation de TopoDAG :

Recherche d’un plus long chemin quand le coût d’un chemin est égal au coûtde son plus petit arc

Initialiser d à −∞, sauf pour d [s0] qui est initialisé à +∞Procédure de relâchement :

1 Proc relacher((si , sj ), π, d)2 si d [sj ] < min(d [si ], cout(si , sj )) alors3 d [sj ]← min(d [si ], cout(si , sj ))4 π[sj ]← si

Aurait-on pu utiliser Dijkstra dans ce cas?

73/108

Page 216: Algorithmique Avancée pour l'Intelligence Artificielle et

Plus courts chemins Généralisation à la recherche de meilleurs chemins

Extensions de Bellman-Ford et Floyd-Warshall

Précondition à l’utilisation de Bellman-Ford ou Floyd-Warshall

Pas de circuit absorbant (et optimalité des sous-structures, évidemment)

Exemples :

Chemin maximisant la somme des coûts :; Pas de circuit dont la somme des coûts est positive

Chemin maximisant le produit des coûts :; Pas de circuit dont le produit des coûts est supérieur à 1

74/108

Page 217: Algorithmique Avancée pour l'Intelligence Artificielle et

Plus courts chemins Généralisation à la recherche de meilleurs chemins

Et si on recherche un plus court chemin pour allerde s0 vers un unique sommet destination si ?

En théorie :Pas d’algorithme plus efficace que TopoDAG (si pas de circuits) ou Dijkstra(si tous les coûts sont positifs)

En pratique :

Possibilité d’améliorer les performances en utilisant des bornes(par exemple : distance euclidienne); Algorithme A* étudié dans la deuxième partie du cours !

75/108

Page 218: Algorithmique Avancée pour l'Intelligence Artificielle et

Problèmes de planification

1 Introduction

2 Définitions

3 Structures de données pour représenter un graphe

4 Parcours de graphes

5 Plus courts chemins

6 Problèmes de planification

7 Quelques problèmes NP-difficiles sur les graphes

76/108

Page 219: Algorithmique Avancée pour l'Intelligence Artificielle et

Problèmes de planification

Définition d’un problème de planification

Données en entrée du problème :

Un ensemble (éventuellement infini) d’états E

Un état initial einit ∈ E et un ensemble d’états finaux F ⊆ E

Un ensemble d’actions A et une fonction actions : E → P(A); actions(e) = ensemble des actions pouvant être appliquées à l’état e

Une fonction de transition t : E × A→ E; si a ∈ actions(e) alors t(e,a) = état obtenu quand on applique a sur e

Données en sortie :

Un plan d’action = une séquence < e1,a1, . . . ,en,an,en+1 > telle que

e1 = einiten+1 ∈ F∀i ∈ [1,n],ai ∈ actions(ei) et ei+1 = t(ei ,ai)

Variante : Trouver le meilleur plan (plus court, moins coûteux, etc)

77/108

Page 220: Algorithmique Avancée pour l'Intelligence Artificielle et

Problèmes de planification

Exemple 1 : Le compte est bon

Objectif du problème :

Trouver comment calculer un nombre x à partir d’un ensemble N de nombres

Formalisation du problème :

Chaque état est un ensemble de nombresL’état initial est N et F est l’ensemble des états contenant xUne action est l’application d’une opération (+,-,* ou /) à deux nombresactions(e) = {x op y |{x , y} ⊆ e,op ∈ {+,−, ∗, /}}t(e, x op y) = e \ {x , y} ∪ {x op y}

Plan pour x = 321 et N = {1,3,4,5,7,10,25} :e1 = {1,3,4,5,7,10,25} et a1 = 25 ∗ 3e2 = {1,4,5,7,10,75} et a2 = 75 + 5e3 = {1,4,7,10,80} et a3 = 80 ∗ 4e4 = {1,7,10,320} et a4 = 320 + 1e5 = {7,10,321}

78/108

Page 221: Algorithmique Avancée pour l'Intelligence Artificielle et

Problèmes de planification

Exemple 2 : Traversées de rivières (ou de ponts, etc) (1/2)

Objectif du problème :

Faire traverser une rivière à ungroupe P en respectant descontraintes

Image : https ://xkcd.com/1134/

79/108

Page 222: Algorithmique Avancée pour l'Intelligence Artificielle et

Problèmes de planification

Exemple 2 : Traversées de rivières (ou de ponts, etc) (2/2)

Formalisation du problème :

E = ens. des partitions de P en 2 parties (1 de chaque coté de la rivière)L’état initial est (P, ∅) et F = {(∅,P)}Une action est le passage de personnes d’un coté à l’autreactions(P1,P2) = {(x ,1)|x ⊆ P1} ∪ {(x ,2)|x ⊆ P2} tq contraintes OKt((P1,P2), (x ,1)) = (P1 \ x ,P2 ∪ x) et t((P1,P2), (x ,2) = (P1 ∪ x ,P2 \ x)

Plan pour faire traverser un chou, une brebis et un loup par un passeur :

P = {C,B,L,P} et contraintes = ne pas laisser C et B seuls, ni B et L seuls

e1 = ({C,B, L,P}, ∅), a1 = ({B,P}, 1)e2 = ({C, L}, {B,P}), a2 = ({P}, 2)e3 = ({C, L,P}, {B}), a3 = ({C,P}, 1)e4 = ({L}, {B,C,P}), a4 = ({P,B}, 2)

e5 = ({L,P,B}, {C}), a5 = ({L,P}, 1)e6 = ({B}, {C, L,P}), a6 = ({P}, 2)e7 = ({B,P}, {C, L}), a7 = ({P,B}, 1)e8 = (∅, {P,B,C, L})

80/108

Page 223: Algorithmique Avancée pour l'Intelligence Artificielle et

Problèmes de planification

Exemple 3 : Le monde des blocs

Objectif du problème :

Programmer un robot pour qu’il change la configuration de blocs

Formalisation du problème :

E = ensemble des configurations de x blocs sur y pilesL’état initial et l’état final sont 2 configurations donnéesAction = faire passer un bloc d’une pile à une autreactions(c) = {(p1,p2)|p1 est une pile contenant au - 1 bloc}t((p1,p2), c) = faire passer le bloc au sommet de p1 sur p2

Exemple de plan pour Einit = A B C et F = { A B C }Actions du plan : (A,B), (A,B), (A,C), (B,A), (B,C), (B,C), (A,C)

81/108

Page 224: Algorithmique Avancée pour l'Intelligence Artificielle et

Problèmes de planification

Modéliser un problème de planification à l’aide d’un graphe

Définition du graphe états-transitions

Les sommets du graphe sont les étatsLes arcs correspondent aux transitions possibles entre étatsLes arcs sont étiquetés par les actions

Graphe orienté ou non selon que les transitions sont symétriques ou non

Exemple : Graphe pour la traversée de rivière

P

CB

L

L

B

C

L

C B

L

C B

L C

B

L

B

C

B

L

C

B L

C

B

C

LC L

B

BL

C

Etat initial Etat final

P

P

P

P

PP

PP

PP

82/108

Page 225: Algorithmique Avancée pour l'Intelligence Artificielle et

Problèmes de planification

Résoudre un problème de planification à l’aide d’un graphe

Quels algorithmes utiliser pour...

Déterminer s’il existe un plan d’actions?

Chercher le plan d’action le plus court ?

Chercher le plan d’action le moins coûteux (si chaque action a un coût)?

Compter le nombre de plans d’actions différents possibles?

Quelles sont les complexités de ces algorithmes?

Par rapport au graphe Etats-Transitions?

Par rapport au problème de planification?

On peut faire mieux !

; cf deuxième partie du cours...

83/108

Page 226: Algorithmique Avancée pour l'Intelligence Artificielle et

Problèmes de planification

Résoudre un problème de planification à l’aide d’un graphe

Quels algorithmes utiliser pour...

Déterminer s’il existe un plan d’actions?

Chercher le plan d’action le plus court ?

Chercher le plan d’action le moins coûteux (si chaque action a un coût)?

Compter le nombre de plans d’actions différents possibles?

Quelles sont les complexités de ces algorithmes?

Par rapport au graphe Etats-Transitions?

Par rapport au problème de planification?

On peut faire mieux !

; cf deuxième partie du cours...

83/108

Page 227: Algorithmique Avancée pour l'Intelligence Artificielle et

Quelques problèmes NP-difficiles sur les graphes Classes de complexité

1 Introduction

2 Définitions

3 Structures de données pour représenter un graphe

4 Parcours de graphes

5 Plus courts chemins

6 Problèmes de planification

7 Quelques problèmes NP-difficiles sur les graphesClasses de complexitéRecherche de cliquesColoriage de graphes

84/108

Page 228: Algorithmique Avancée pour l'Intelligence Artificielle et

Quelques problèmes NP-difficiles sur les graphes Classes de complexité

Problèmes, instances et algorithmes (rappels)

Spécification d’un problème :

Paramètres en entrée et en sortie

Eventuellement : Préconditions sur les paramètres en entrée

Postrelation entre les valeurs des paramètres en entrée et en sortie

Instance d’un problème :

Valuation des paramètres en entrée satisfaisant les préconditions

Algorithme pour un problème P :

Séquence d’instructions élémentaires permettant de calculer les valeurs desparamètres en sortie à partir des valeurs des paramètres en entrée, pourtoute instance de P

85/108

Page 229: Algorithmique Avancée pour l'Intelligence Artificielle et

Quelques problèmes NP-difficiles sur les graphes Classes de complexité

Exemple 1 : Recherche d’un élément dans un tableau trié

Spécification du problème :

Entrées :un tableau tab comportant n entiers indicés de 0 à n − 1une valeur entière e

Sortie : un entier iPrécondition : les éléments de tab sont triés par ordre croissantPostrelation :

si ∀j ∈ [0,n − 1], tab[j] 6= e alors i = nsinon i ∈ [0,n − 1] et tab[i] = e

Exemples d’instances :

Entrées : e = 8 et tab = 4 4 7 8 10 11 12; Sortie : i = 3

Entrées : e = 9 et tab = 4 4 7 8 10 11 12; Sortie : i = 7

86/108

Page 230: Algorithmique Avancée pour l'Intelligence Artificielle et

Quelques problèmes NP-difficiles sur les graphes Classes de complexité

Exemple 2 : Satisfiabilité d’une formule booléenne (SAT)

Spécification du problème :

Entrées : une formule booléenne F définie sur un ens. X de n variables

Sortie : une valuation V : X → {vrai , faux} des variables de F

Précondition : F est sous forme normale conjonctive (CNF)

Postrelation : Si F est satisfiable alors V satisfait F

Exemple d’instance

Entrées : X = {a,b, c,d ,e},F = (a ∨ ¬b) ∧ (¬a ∨ c ∨ ¬d) ∧ (¬b ∨ ¬c ∨ ¬e) ∧ (a ∨ b ∨ d ∨ e); Sortie : V = {a = vrai ,b = faux , c = vrai ,d = vrai ,e = faux}

87/108

Page 231: Algorithmique Avancée pour l'Intelligence Artificielle et

Quelques problèmes NP-difficiles sur les graphes Classes de complexité

Complexité d’un algorithme (rappel)

Estimation des ressources nécessaires à l’exécution d’un algorithme :

Temps = estimation du nombre d’instructions élémentaires

Espace = estimation de l’espace mémoire utilisé

; Estimation dépendante de la taille n des paramètres en entrée

Ordre de grandeur d’une fonction f (n) :

O(g(n)) ; ∃c,n0 tel que ∀n > n0, f (n) < c.g(n)

O(logk (n)) : logarithmique

O(n) : linéaire

O(nk ) : polynomial

O(kn) : exponentiel

88/108

Page 232: Algorithmique Avancée pour l'Intelligence Artificielle et

Quelques problèmes NP-difficiles sur les graphes Classes de complexité

Complexité des problèmes de décision

Problèmes de décision :La sortie et la postrelation sont remplacées par une question binaire sur lesparamètres en entrée (; Réponse ∈ {vrai , faux})

Exemple : Description du problème de décision Recherche

Entrées = un tableau tab contenant n entiers et un entier eQuestion = Existe-t-il un élément de tab qui soit égal à e ?

Complexité d’un problème X :

Complexité du meilleur algo (pas nécessairement connu) résolvant X :

Chaque algorithme résolvant X fournit une borne supérieureOn peut trouver des bornes inférieures en analysant le problème

Si plus grande borne inférieure = plus petite borne supérieureAlors la complexité de X est connue ; Sinon la complexité est ouverte. . .

89/108

Page 233: Algorithmique Avancée pour l'Intelligence Artificielle et

Quelques problèmes NP-difficiles sur les graphes Classes de complexité

La classe P

Appartenance d’un problème de décision X à la classe P :

X ∈ P s’il existe un algorithme Polynomial pour résoudre X; Complexité en O(nk ) avec

n = taille des données en entrée de l’instancek = constante indépendante de l’instance

P est la classe des problèmes traitables en un temps raisonnable; Tractable problems

Exemples de problèmes de décision appartenant à P :

Déterminer si un entier appartient à un tableau (trié ou pas)Déterminer s’il existe un chemin entre 2 sommets d’un grapheDéterminer s’il existe un arbre couvrant de coût borné dans un graphe

. . .Déterminer si un nombre est premier; Prime is in P [Agrawal - Kayal - Saxena 2002] !

90/108

Page 234: Algorithmique Avancée pour l'Intelligence Artificielle et

Quelques problèmes NP-difficiles sur les graphes Classes de complexité

La classe NP

Appartenance d’un problème de décision X à la classe NP :X ∈ NP s’il existe un algorithme Polynomial pour une machine deTuring Non déterministeAutrement dit : X ∈ NP si pour toute instance I de X telle queréponse(I) = vrai, il existe un certificat c(I) permettant de vérifier entemps polynomial que réponse(I) = vrai

Exemple : SAT ∈ NPDescription du problème SAT (rappel) :

Entrées = une formule bool. F portant sur un ens. X de n variablesQuestion = Existe-t-il une valuation des var. de X qui satisfait F ?

Algorithme pour une machine non déterministe :1 pour chaque variable xi ∈ X faire Choisir une valeur vi ∈ {vrai, faux};2 si F est satisfaite quand x1 = v1, . . . , xn = vn alors retourne vrai ;3 sinon retourne faux ;

Réponse = vrai si au moins une branche a retourné vraiCertificat = une valuation V : X → {vrai , faux} qui satisfait F

91/108

Page 235: Algorithmique Avancée pour l'Intelligence Artificielle et

Quelques problèmes NP-difficiles sur les graphes Classes de complexité

Relation entre P et NP :P ⊆ NP

Conjecture : P 6= NP1 million de dollars à gagner (cf www.claymath.org/millennium-problems)

Problèmes NP-complets :

Les problèmes les plus difficiles de la classe NP :; X est NP-complet si (X ∈ NP) et (X ∈ P ⇒ P=NP)

Théorème de [Cook 1971] : SAT est NP-complet

Depuis 1971, des centaines de problèmes montrés NP-complets; Voir par exemple [Garey et Johnson 1979]

Démonstration de NP-complétude :

Montrer que le problème X appartient à NP

Trouver une réduction polynomiale pour transformer un problèmeNP-complet connu en X

92/108

Page 236: Algorithmique Avancée pour l'Intelligence Artificielle et

Quelques problèmes NP-difficiles sur les graphes Classes de complexité

Problème de réduction entre problèmes

Définition du problème de réduction de P1 vers P2 :

Entrée : une instance I1 du problème de décision P1

Sortie : une instance I2 du problème de décision P2

Postrelation : réponse de P1(I1) = réponse de P2(I2)

Utilisation de réductions pour calculer une borne sur la complexité :

Etant donnés :

un algorithme Ar de réduction de P1 vers P2

un algorithme A2 résolvant le problème P2,

Algorithme pour résoudre une instance I1 de P1 = A2(Ar (I1))⇒ Complexité de P1 ≤ Complexité de A2 et Ar⇒ Si P1 est NP-complet, et Ar et A2 sont polynomiaux alors P = NP

93/108

Page 237: Algorithmique Avancée pour l'Intelligence Artificielle et

Quelques problèmes NP-difficiles sur les graphes Classes de complexité

Exercice

Description du problème Clique :

Entrées : un graphe non orienté G = (V ,E) et un entier positif k

Question : Existe-t-il S ⊆ V tel que #S = k et ∀{i , j} ⊆ S, {i , j} ∈ E

Montrer que Clique ∈ NP :

; Certificat?

Montrer que Clique est NP-complet :

; Réduction de SAT vers Clique :

Donner un algorithme polynomial résolvant le problème de réduction :

Entrée : une instance de SAT = une formule CNF FSortie : une instance de Clique = un graphe G et un entier kPostrelation : F est satisfiable⇔ G contient une clique d’ordre k

94/108

Page 238: Algorithmique Avancée pour l'Intelligence Artificielle et

Quelques problèmes NP-difficiles sur les graphes Classes de complexité

Solution

Graphe non orienté G = (S,A) associé à une formule F :

S associe un sommet à chaque littéral de chaque clause de F; c(u) et l(u) = clause et littéral correspondant au sommet u

A = {{u, v} ⊆ S | c(u) 6= c(v) et l(u) 6= ¬l(v)}

Exemple :

Formule F :(a ∨ ¬c ∨ d) ∧(¬a ∨ b ∨ c) ∧(¬b ∨ ¬c ∨ ¬d)

a

c

b

d

¬c

¬a

¬d¬c¬b

c1 c2

c3 95/108

Page 239: Algorithmique Avancée pour l'Intelligence Artificielle et

Quelques problèmes NP-difficiles sur les graphes Classes de complexité

Problèmes NP-difficiles

Problèmes au moins aussi difficiles que ceux de NP :

X est NP-difficile si : X ∈ P ⇒ P = NP; Vérifier qu’une solution de X est correcte peut être un pb difficile

NP-complet ⊂ NP-difficile

Exemple : Problème de la clique exacte

Entrées : un graphe non orienté G = (S,A) et un entier positif k

Question : La plus grande clique de G est-elle de taille k ?

Ce problème appartient-il à NP ?

Complexité des problèmes d’optimisation :

Déterminée en fonction du problème de décision associé

NP-difficile si le problème de décision est NP-complet

96/108

Page 240: Algorithmique Avancée pour l'Intelligence Artificielle et

Quelques problèmes NP-difficiles sur les graphes Classes de complexité

Problèmes indécidables; Problèmes pour lesquels il n’existe pas d’algo pour une machine de Turing

Exemple 1 : Problème de l’arrêtEntrée : Un programme P (une suite de caractères)Question : Est-ce que l’exécution de P se termine en un temp fini?

Exemple 2 : Problème de PostEntrée : 2 listes finies α1, α2, . . . , αn et β1, β2, . . . , βn de motsQuestion : ∃k indices i1, i2, . . . , ik tq αi1αi2 . . . αin = βi1βi2 . . . βin ?Exemple d’instance : Entrée =

Exemple 3 : Problème de pavageEntrée : Un ensemble fini S de carrés aux arêtes coloriéesQuestion : Peut-on paver n’importe quel cadre n × n avec des copies decarrés de S de sorte que 2 arêtes adjacentes soient de même couleur?Exemple d’instance : Entrée =

97/108

Page 241: Algorithmique Avancée pour l'Intelligence Artificielle et

Quelques problèmes NP-difficiles sur les graphes Recherche de cliques

1 Introduction

2 Définitions

3 Structures de données pour représenter un graphe

4 Parcours de graphes

5 Plus courts chemins

6 Problèmes de planification

7 Quelques problèmes NP-difficiles sur les graphesClasses de complexitéRecherche de cliquesColoriage de graphes

98/108

Page 242: Algorithmique Avancée pour l'Intelligence Artificielle et

Quelques problèmes NP-difficiles sur les graphes Recherche de cliques

Enumération de toutes les cliques d’un graphe

1 Fonction enumClique(g, c)Entrée : Un graphe g = (S,A) et un ens. de sommets c ⊆ SPrécond. : c est une clique de gPostcond. : Affiche toute clique c′ de c telle que c ⊆ c′

2 Afficher c3 cand ← {si ∈ S | ∀sj ∈ c, {si , sj} ∈ A et si > sj}4 pour chaque sommet si ∈ cand faire5 enumClique(g, c ∪ {si})

Arbre de recherche associé à une exécution de enumClique :

Chaque nœud de l’arbre = 1 clique

Racine = clique vide

c est le père de c′ si enumClique(g, c) appelle enumClique(g, c′)

Exploration de l’arbre en profondeur d’abord (retour-arrière chronologique)

99/108

Page 243: Algorithmique Avancée pour l'Intelligence Artificielle et

Quelques problèmes NP-difficiles sur les graphes Recherche de cliques

Exemple d’arbre de recherche :

7

2

1

3

4

5

6

c={3,6}

cand={2,3,4}

cand={}c={1,3,4}cand={}

c={1,2}cand={3}

c={1,3} c={1,4}cand={}

c={1,2,3}

cand={4}

c={5}cand={6,7}

c={}cand={1,2,3,4,5,6,7}

c={3,4,5,6}cand={}

cand={}c={3,4,6}c={3,4,5}

cand={6}c={3,5,6}cand={}

cand={}

c={4,5,6}cand={7}

c={4,5,6,7}

c={4,6,7}cand={}cand={}

c={4,5,7}

cand={}

c={4}cand={5,6,7}

c={4,5}cand={6,7}

c={4,6}cand={7}

c={4,7} c={5,6}cand={7}

c={5,6,7}cand={}

c={5,7}cand={} cand={}

c={6}cand={7}

c={6,7}

c={7}cand={}

c={2}cand={3}

cand={}c={2,3}

cand={}

c={3}cand={4,5,6}

cand={5,6}c={3,4} c={3,5}

cand={6}

c={1}

100/108

Page 244: Algorithmique Avancée pour l'Intelligence Artificielle et

Quelques problèmes NP-difficiles sur les graphes Recherche de cliques

1 Fonction enumClique(g, c)Entrée : Un graphe g = (S,A) et un ens. de sommets c ⊆ SPrécond. : c est une clique de gPostcond. : Affiche toute clique c′ de g telle que c ⊆ c′

2 Affiche c3 cand ← {si ∈ S | ∀sj ∈ c, {si , sj} ∈ A et si > sj}4 pour chaque sommet si ∈ cand faire5 enumClique(g, c ∪ {si})

Complexité de enumClique si |S| = n et si g contient x cliques :

Nombre d’appels à enumclique = x :

A chaque appel, le paramètre c en entrée est une cliqueSi c′ est une clique de g alors il y aura exactement 1 appel àenumClique pour lequel c = c′

A chaque appel, construction de cand (ou maintien incrémental)

; Complexité = O(nx) (incremental polynomial time)

101/108

Page 245: Algorithmique Avancée pour l'Intelligence Artificielle et

Quelques problèmes NP-difficiles sur les graphes Recherche de cliques

Recherche d’une clique d’ordre k1 Fonction chercheClique(g, c, k)

Entrée : graphe g = (S,A), c ⊆ S et entier kPrécond. : c est une clique de taille inférieure ou égale à kPostcond. : Retourne vrai si ∃ une clique c′ de g tq #c′ = k et c ⊆ c′ ; faux sinon

2 si #c = k alors retourne vrai ;3 cand ← {si ∈ S | ∀sj ∈ c, {si , sj} ∈ A ∧ si > sj}4 si #c +#cand < k alors retourne faux ;5 pour chaque sommet s ∈ cand faire6 si chercheClique(g, c ∪ {s}, k) alors retourne vrai ;

7 retourne faux

Arbre de recherche pour k = 4 :

7

2

1

3

4

5

6

cand={4}

cand={2,3,4}

c={1,2}cand={3}

c={1,3} c={1,4}cand={}

c={2}cand={3}

c={3}cand={4,5,6}

cand={5,6}c={3,4}

c={3,4,5,6}cand={}

c={3,4,5}cand={6}

c={}cand={1,2,3,4,5,6,7}

c={1}

102/108

Page 246: Algorithmique Avancée pour l'Intelligence Artificielle et

Quelques problèmes NP-difficiles sur les graphes Recherche de cliques

Recherche d’une clique maximum1 Fonction chercheCliqueMax(g, c, k)

Entrée : graphe g = (S,A), c ⊆ S et entier kPrécond. : c est une cliquePostcond. : ret. max(k , k ′) où k ′ = taille de la + grande clique de g contenant c

2 cand ← {si ∈ S | ∀sj ∈ c, {si , sj} ∈ A ∧ si > sj}3 si cand = ∅ alors retourne max(#c, k);4 pour chaque sommet s ∈ cand et tant que #c +#cand > k faire5 k ←chercheCliqueMax(g, c ∪ {s}, k)

6 retourne k

Arbre de recherche :

7

2

1

3

4

5

6

k=4

c={1,2,3}cand={}

c={1,3}c={1,2} c={1,4}cand={}cand={4}cand={3}

k=0 k=3

k=0 k=3 k=3 k=3

c={1}cand={2,3,4}

c={3,4,5}cand={6}

c={4}cand={5,6,7}

c={6}cand={7}

c={7}cand=}

c={}cand={1,2,3,4,5,6,7}

c={2}cand={3}

k=3

k=3

k=3 k=4

k=4

k=4

c={3}cand={4,5,6}

c={3,4,5,6}cand={}

cand={5,6}c={3,4}

c={5}cand={6,7}

k=0k=3 k=3 k=4 k=4 k=4 k=4

103/108

Page 247: Algorithmique Avancée pour l'Intelligence Artificielle et

Quelques problèmes NP-difficiles sur les graphes Recherche de cliques

Construction gloutonne d’une clique

1 Fonction chercheCliqueGlouton(g)Entrée : Un graphe g = (S,A)Postcond. : retourne une clique de g

2 cand ← S3 c ← ∅4 tant que cand 6= ∅ faire5 Soit si le sommet de cand maximisant #(cand ∩ adj(si ))6 c ← c ∪ {si}7 cand ← cand ∩ adj(si )

8 retourne c

Exercice :

7

2

1

3

4

5

6

104/108

Page 248: Algorithmique Avancée pour l'Intelligence Artificielle et

Quelques problèmes NP-difficiles sur les graphes Recherche de cliques

Construction gloutonne d’une clique

1 Fonction chercheCliqueGlouton(g)Entrée : Un graphe g = (S,A)Postcond. : retourne une clique de g

2 cand ← S3 c ← ∅4 tant que cand 6= ∅ faire5 Soit si le sommet de cand maximisant #(cand ∩ adj(si ))6 c ← c ∪ {si}7 cand ← cand ∩ adj(si )

8 retourne c

Complexité?

104/108

Page 249: Algorithmique Avancée pour l'Intelligence Artificielle et

Quelques problèmes NP-difficiles sur les graphes Coloriage de graphes

1 Introduction

2 Définitions

3 Structures de données pour représenter un graphe

4 Parcours de graphes

5 Plus courts chemins

6 Problèmes de planification

7 Quelques problèmes NP-difficiles sur les graphesClasses de complexitéRecherche de cliquesColoriage de graphes

105/108

Page 250: Algorithmique Avancée pour l'Intelligence Artificielle et

Quelques problèmes NP-difficiles sur les graphes Coloriage de graphes

Coloriage de graphes

Définitions pour un graphe non orienté G = (S,A) :

Coloriage de G = fonction c : S → N tq ∀{si , sj} ∈ A, c(si) 6= c(sj)

Nombre chromatique de G = χ(G) = minc(maxsi∈S(c(si)))

Complexité :

Décider si χ(G) est inférieur à une borne k donnée est NP-complet

Déterminer χ(G) est NP-difficile

Relation entre coloriage et cliques :

Pour tout graphe G, χ(G) ≥ nombre de sommets de la clique maximum de G

106/108

Page 251: Algorithmique Avancée pour l'Intelligence Artificielle et

Quelques problèmes NP-difficiles sur les graphes Coloriage de graphes

Algorithme glouton de Brélaz (DSATUR)1 Fonction brélaz(g)

Postcond. : retourne une borne supérieure de χ(g)2 borneχ← 03 tant que tous les sommets ne sont pas coloriés faire4 Choisir un sommet si non colorié tel que :5 - si = sommet ayant le plus de voisins coloriés avec des valeurs différentes6 - en cas d’ex æquo, si = sommet ayant le plus de voisins non coloriés7 si ∀k ∈ [1, borneχ],∃sj ∈ adj(si ) tel que sj est colorié avec k alors8 borneχ← borneχ+ 1

9 k ← plus petite couleur ∈ [1, borneχ] non prise par un voisin de si10 Colorier si avec k

11 retourne borneχ

Exercice :

7

2

1

3

4

5

6

107/108

Page 252: Algorithmique Avancée pour l'Intelligence Artificielle et

Quelques problèmes NP-difficiles sur les graphes Coloriage de graphes

Algorithme glouton de Brélaz (DSATUR)

1 Fonction brélaz(g)Postcond. : retourne une borne supérieure de χ(g)

2 borneχ← 03 tant que tous les sommets ne sont pas coloriés faire4 Choisir un sommet si non colorié tel que :5 - si = sommet ayant le plus de voisins coloriés avec des valeurs différentes6 - en cas d’ex æquo, si = sommet ayant le plus de voisins non coloriés7 si ∀k ∈ [1, borneχ],∃sj ∈ adj(si ) tel que sj est colorié avec k alors8 borneχ← borneχ+ 1

9 k ← plus petite couleur ∈ [1, borneχ] non prise par un voisin de si10 Colorier si avec k

11 retourne borneχ

Complexité?

107/108

Page 253: Algorithmique Avancée pour l'Intelligence Artificielle et

Quelques problèmes NP-difficiles sur les graphes Coloriage de graphes

Au delà des cliques et du coloriage

Il existe bien d’autres problèmes NP-difficiles

Recherche de circuits hamiltoniens, Voyageur de commerceRecherche de plus courts chemins sous contraintesPartitionnement de graphes, Coupure minimale sous contraintes...

Ces problèmes sont rencontrés dans de très nombreuses applications

Optimisation de tournées de livraisonRecherche du chemin le plus rapide comportant moins de kchangements dans un réseau de transports en communSegmentation d’images...

Besoin de concevoir des algorithmes qui passent à l’échelle !

C’est ce que vous verrez dans la suite du cours (entre autres...)

108/108