La présentation est en train de télécharger. S'il vous plaît, attendez

La présentation est en train de télécharger. S'il vous plaît, attendez

Semaine 7 : Les graphes (suite)

Présentations similaires


Présentation au sujet: "Semaine 7 : Les graphes (suite)"— Transcription de la présentation:

1 Semaine 7 : Les graphes (suite)
IFT-10541A : Hiver 2003 Semaine 7 : Les graphes (suite)

2 Tri topologique Idée : But :
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 : Exemple : 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

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

7 Tri : adressage hiérarchique
x < x.* 2.1 3.2 2 2.1 3.1 2.2 1 2 3 1 1.1 2.1.1 2.2 1.1 3.1.1 3.2 2.1.1 3.1.1 3 3.1

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

9 Modèles d’implantation
1 2 5 4 3 matrice d’adjacence : 1 2 3 4 5 1 1 2 1 1 3 4 1 1 5 1

10 Matrice d’adjacence #define nbSommet 5 sommet sommets[nbSommet];
Bool arc[nbSommet][nbSommet]; sommet int no; int tag; Bool pres; char *nom; 1 2 3 4 5 1 2 5 4 3

11 Matrice triangulaire #define nbSommet 5 sommet sommets[nbSommet];
Bool arc[nbSommet][nbSommet]; sommet int no; int tag; Bool pres; char *nom; 1 2 3 4 5 1 2 5 4 3

12 Matrice triangulaire #define nbSommet 5 sommet sommets[nbSommet];
Bool *arc[nbSommet]; sommet int no; int tag; Bool pres; char *nom; 1 2 3 4 5 1 2 3 4 5 1 1 1 1 1 2 1 1 2 1 3 1 3 4 1 1 1 1 4 1 1 1 5 1 1 5 1 1

13 Matrice triangulaire #define nbSommet 5 sommet sommets[nbSommet];
Bool *arc[nbSommet]; sommet int no; int tag; Bool pres; char *nom; Bool *arc; + 1 2 3 4 5 1 2 3 4 5 1 1 1 1 1 2 1 1 2 1 3 1 3 4 1 1 1 1 4 1 1 1 5 1 1 5 1 1

14 Matrice triangulaire #define nbSommet 5 sommet sommets[nbSommet];
int *arc[nbSommet]; sommet int no; int tag; Bool pres; char *nom; 1 2 3 4 5 1 1 1 1 1 2 1 1 2 1 3 1 3 4 1 1 1 1 4 1 2 3 5 1 1 5 1 4

15 Matrice triangulaire #define nbSommet 5 sommet sommets[nbSommet];
int *arc[nbSommet]; sommet int no; int tag; Bool pres; char *nom; no *arc; + 1 2 3 4 5 1 1 1 1 1 2 1 1 2 1 3 1 3 4 1 1 1 1 4 1 2 3 5 1 1 5 1 4

16 Listes d’adjacence #define nbSommet 5 sommet sommets[nbSommet];
int *arc[nbSommet]; sommet int no; int tag; Bool pres; char *nom; no *arc; 1 2 3 4 5 1 1 1 1 1 2 1 1 2 1 3 1 3 4 1 1 1 1 4 1 2 3 5 1 1 5 1 4

17 Listes d’adjacence N u m é r o N o m P t r . L i s t e s d e s n o e u
B I C D G E F N u m é r o N o m P t r . L i s t e s d e s n o e u d s a d j a c e n t s a u n e n o e u d 1 A 3 4 H 2 B 1 2 6 3 C 5 7 4 D 1 5 E 4 6 F 7 G 8 H 5 7 9 I

18 Graphe non orienté 2 arcs distincts : A-B et B-A, à relier
inutile si on ordonne A et B

19 Listes croisées 4 2 5 3 1 1 2 3 4 5 1 1 1 1 2 1 1 2 1 1 3 3 4 1 1 4 1 1 5 1 5 1

20 Listes croisées 4 2 5 3 1 ... 1 2 3 4 5 1 1 1 1 2 1 1 2 1 1 3 3 4 1 1 4 1 1 5 1 5 1

21 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|| = ||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
b d 5 4 6 a f 1 8 2 3 2 10 c e

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)} Si yv > yu + c(u,v) Alors Retourner FAUX Retourner VRAI

31 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 Graphes connexes (cas particuliers)
Arbre Chemin Circuit

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 Connexité des graphes orientés
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

39 Connexité des graphes orientés
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.

40 Connexité des graphes orientés (exemples)

41 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 Graphes faiblement connexes (exemples)

44 Algorithme


Télécharger ppt "Semaine 7 : Les graphes (suite)"

Présentations similaires


Annonces Google