ift-10541a : hiver 2003 semaine 7 : les graphes (suite)

Post on 04-Apr-2015

108 Views

Category:

Documents

1 Downloads

Preview:

Click to see full reader

TRANSCRIPT

IFT-10541A : Hiver 2003

Semaine 7 :Les graphes (suite)

2

Tri topologique Idée :

ordonner les sommets selon la préséance indiquée par les arcs

ordre linéaire partiel sur V, appelé T

But : comparer s1 et s2 de V pour savoir si

l’un vient avant l’autre, sans trouver le chemin entre s1 et s2

3

Tri topologique Préconditions :

S est un graphe acyclique s1 vient avant s2 il y a un chemin de

s1 à s2 dans S alors : s1 < s2 dans T

Exemple : préséance de tâches en planification

4

Tri topologique : exemples

(S)A

B

C

D

E

F

G

(a)

AB CD EFG

(b)

AB CDE FG

5

Tri topologique : la mécanique Attention :

ordre partiel s1 et s2 pas toujours comparables : s1 < s2, s1 > s2, s1 = s2, ou s1 ≠ s2

Il existe toujours un tri topologique sur tout graphe acyclique (basé sur l’ordre d’entrée des nœuds). À lire : algorithme de la p. 151

6

Tri topologique : algo. p.151

(S)A

B

C

D

E

F

G

(a)

AB CD EFG

(b)

AB CDE FG

7

Tri : adressage hiérarchique

(S)A

B

C

D

E

F

G

(b)

AB CDE FG1.1

2.1 3.11

2.23.2

32

3.1.1

1.1

3.2

3

1

3.1

2

2.1

2.2

2.1.13.1.1

2.1.1

x < x.*

8

Spécifications formellesDescription en termes de types abstraits 1. initialiser un graphe à vide (création) 2. ajouter un sommet à un graphe 3. ajouter un arc à un graphe4. ôter un sommet du graphe et tous les arcs associés5. ôter un arc 6. permettre l'accès à un sommet nommé (désigné)7. indiquer si un sommet n'a pas de voisins8. parcourir les voisins d'un sommet (parcours) 9. voir si un chemin existe entre 2 sommets10. trouver le chemin le plus court (# arêtes, distance)11. trouver tous les chemins entre 2 sommets

9

Modèles d’implantation

matrice d’adjacence :

4

25

3

1

1

1 1

1 1

1

1 2 3 4 51

2

3

4

5

10

Matrice d’adjacence#define nbSommet 5sommet sommets[nbSommet];

Bool arc[nbSommet][nbSommet];

1

1 1

1 1

1

1 2 3 4 51

2

3

4

5

4

25

3

1

int no;int tag;Bool pres;char *nom;

sommet

11

1

1 1

1 1

1

1 2 3 4 51

2

3

4

5 1

1 1

1

1

1

4

25

3

1

#define nbSommet 5sommet sommets[nbSommet];

Bool arc[nbSommet][nbSommet];

int no;int tag;Bool pres;char *nom;

sommet

Matrice triangulaire

12

1

1 1

1 1

1

1 2 3 4 51

2

3

4

5 1

1 1

1

1

1

1

11

1

1

2

3

4

5 1

1

1 2 3 4 5

#define nbSommet 5sommet sommets[nbSommet];

Bool *arc[nbSommet];

int no;int tag;Bool pres;char *nom;

sommet

Matrice triangulaire

13

1

1 1

1 1

1

1 2 3 4 51

2

3

4

5 1

1 1

1

1

1

1

11

1

1

2

3

4

5 1

1

1 2 3 4 5

#define nbSommet 5sommet sommets[nbSommet];

Bool *arc[nbSommet];

int no;int tag;Bool pres;char *nom;Bool *arc;

sommet

+

Matrice triangulaire

14

1

1 1

1 1

1

1 2 3 4 51

2

3

4

5 1

1 1

1

1

1

1

21

4

1

2

3

4

5 1

3

#define nbSommet 5sommet sommets[nbSommet];

int *arc[nbSommet];

int no;int tag;Bool pres;char *nom;

sommet

Matrice triangulaire

15

1

1 1

1 1

1

1 2 3 4 51

2

3

4

5 1

1 1

1

1

1

1

21

4

1

2

3

4

5 1

3

#define nbSommet 5sommet sommets[nbSommet];

int *arc[nbSommet];

int no;int tag;Bool pres;char *nom;no *arc;

sommet

+

Matrice triangulaire

16

1

1 1

1 1

1

1 2 3 4 51

2

3

4

5 1

1 1

1

1

1

1

21

4

1

2

3

4

5 1

3

#define nbSommet 5sommet sommets[nbSommet];

int *arc[nbSommet];

int no;int tag;Bool pres;char *nom;no *arc;

sommet

Listes d’adjacence

17

Listes d’adjacenceA B

C

D

E FG

H

I

1

2

3

4

5

6

7

8

9

A

B

C

D

E

F

G

H

I

3

1

5

1

4

5

4

2

7

7

6

Numéro Nom Ptr. Listes des noeuds adjacents au ne noeud

18

Graphe non orienté 2 arcs distincts : A-B et B-A, à

relier inutile si on ordonne A et B

19

Listes croisées

1

1 1

1 1

1

1 2 3 4 51

2

3

4

5

4

25

3

1

1

2

3

4

5

1 2 3 4 5

1

1 1

1 1

1

20

Listes croisées

1

1 1

1 1

1

1 2 3 4 51

2

3

4

5

4

25

3

1

1

2

3

4

5

1 2 3 4 5

1

1 1

1 1

1

...

Le plus court chemin

22

Introduction Soient deux sommets s et t d'un graphe

G Si s et t représentent des villes, quel est

le plus court chemin entre ces deux villes sachant que : les arêtes du graphe G sont pondérées la pondération c(i,j) représente la distance

entre les deux sommets (deux villes) i et j du graphe

la pondération est positive

23

Exemple Quel est le plus court chemin reliant f à

b? p = (f, g, h, e, d, b) ||p|| = 3 + 2 + 4 + 1 + 6 ||p|| = 16

24

Cas général Comment trouver le plus court

chemin entre 2 sommets s et t d'un graphe G ?

Il existe plusieurs algorithmes : Parcours exhaustif des nœuds Algorithme de Dijkstra Algorithme de Bellman-Ford (utile

pour des pondérations négatives)

25

Parcours exhaustif des nœuds Déterminer tous les chemins possibles Choisir le plus court chemin entre s et t (2

sommets) Sur un graphe de 20 sommets avec :

une machine de 109 opérations / seconde recherche d'un chemin = 1 opération

77 ans pour avoir le résultat Un graphe de 26 sommets : avant le Big

Bang Le nombre de chemin est de l'ordre de n!

26

Algorithme de Dijkstra Se base sur le principe de la sous-

optimalité Si p est le plus court chemin entre s et t

alors: v sommet appartenant à p le sous-chemin de p (s, v) est optimal

(le plus court) le sous-chemin de p (v, t) est optimal

(le plus court)

27

Algorithme de Dijkstra Recherche du chemin le plus court avec n

sommet = un problème d'optimisation sur n variables

À chaque sommet i : une variable yi

yi = lpcc(s,i) État initial :

ys = 0 yi = + avec i s

À chaque étape : essayer de minimiser les yi

28

Algorithme de Dijkstra Soit V l’ensemble des sommets d’un graphes

Initialiser yi = + pour tous les sommets i Initialiser ys = 0.

Initialiser S à l'ensemble vide, T = V. Tant que T n'est pas vide

1.Sélectionner le sommet j de T de plus petite valeur yi

2.Faire T = T \ j et S = S j

3.Pour tous les sommets k de T adjacents à j, mettre à jour yk = min { yk, yj + c(j,k)}

Fin Tant que.

29

Algorithme de Dijkstra

a

db

f

c e

4 56

310

2

81 20

30

Algorithme de Bellman-Ford

Soit le graphe G(V,E)

Initialiser yi = + pour tous les sommets i

Initialiser ys = 0.

Répéter |V| - 1 FOIS

Pour tout arc (u,v) de E faire

yv = min { yv, yu + c(u,v)}

Pour tout arc (u,v) de E faire

Si yv > yu + c(u,v) Alors

Retourner FAUX

Retourner VRAI

Composantes connexes

32

Connexité des graphes

Connexité des graphes non

orientés

Connexité des graphes

orientés

33

Connexité des graphes non orientés

Un graphe non orienté G est connexe ssi il existe un chemin entre n’importe quelle paire de sommets distincts du graphe

34

Arbre Chemin Circuit

Graphes connexes (cas particuliers)

35

Connexité des graphes non orientés

Que se passe-t-il si le graphe G n'est pas connexe?

G apparaîtra comme un ensemble de sous-graphes connexes

On appelle chacun de ces sous-graphes une composante connexe de G

36

Composante connexe G'=(S',A') une composante connexe de

G G' est un sous-graphe connexe maximal

: S'' = S' {v} tel que G'' = (S'', A') est une composante connexe

37

Propriétés Un graphe non connexe se compose de

plusieurs composantes connexes non reliées entre elles et dont le nombre est constant.

Un graphe est connexe ssi il ne possède qu'une seule composante connexe.

Un sommet isolé (de degré 0) constitue toujours une composante connexe à lui seul.

Un graphe connexe d'ordre n (le nombre de sommets) comporte au moins n-1 arêtes.

38

Dans un graphe non orienté : un chemin est une suite d’arêtes S’il existe un chemin entre deux sommets a

et b alors celui-ci est aussi un chemin entre b et a

Dans un graphe orienté : un chemin est une suite d’arcs S’il existe un chemin entre deux sommets a

et b alors on ne peut rien conclure concernant le lien de b avec a

Connexité des graphes orientés

39

Un graphe G est fortement connexe ssi pour n’importe quelle paire de sommets distincts (a,b) de G, il existe un chemin du sommet a au sommet b et un autre chemin du sommet b au sommet a.

Connexité des graphes orientés

40

graphe G

a b

d c

e

graphe H

a b

d c

e

graphe I

a b

d c

e

Connexité des graphes orientés (exemples)

41

graphe G

a b

d c

e

graphe G’

a b

d c

e

Connexité des graphes orientés

42

Connexité des graphes orientés

Un graphe orienté G est faiblement connexe ssi son graphe non orienté sous-jacent G’ est connexe. Autrement dit, le graphe G’, qui est le graphe G dans lequel les arcs ont été remplacés par des arêtes, est connexe.

43

a b

d c

e f

a b

d c

e f

Graphes faiblement connexes (exemples)

44

Algorithme

top related