1 / 26

Les Graphes

Les Graphes. I.A. Session 2009/2010. E.P.S.I. Bordeaux – C.S.I.I – 2 ème Année – Cours n°1. Définition. Un graphe est un ensemble de points (les sommets), reliés par des liens (les arêtes). Exemples : Le plan des bus et des trams de Bordeaux Votre réseau d’amis sur Facebook

janina
Télécharger la présentation

Les Graphes

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Les Graphes I.A. Session 2009/2010 E.P.S.I. Bordeaux – C.S.I.I – 2ème Année – Cours n°1

  2. Définition • Un graphe est un ensemble de points (les sommets), reliés par des liens (les arêtes). • Exemples : • Le plan des bus et des trams de Bordeaux • Votre réseau d’amis sur Facebook • Un site internet (pages = sommets, liens = arêtes) • Une arborescence de fichiers • Note : un arbre est un type de graphe particulier !

  3. Représentation d’un graphe

  4. Graphes orientés / non orientés Graphe non orienté 1 → 2 = 2 → 1 Graphe orienté 1 → 2 ≠ 2 → 1 On peut aller dans les deux sens, mais il faut le spécifier :

  5. Autres spécificités • Une arête est appelée « arc » dans le cas d’un graphe orienté. • Les arêtes peuvent être dotés d’un poids. • Poids = « péage » pour passer d’un sommet à un autre. • On dit alors que le graphe est valué. • Réflexivité. • Un sommet peut tout à fait être relié à lui-même.

  6. Connexité • La connexité d’un graphe signifie que tous les sommets du graphe sont accessibles entre eux. • Autrement dit, je peux me rendre de n’importe quel sommet à n’importe quel autre. Connexe Pas connexe

  7. Fermeture transitive • L’algorithme de fermeture transitive permet de vérifier la connexité d’un graphe. • Le principe est d’ajouter des arêtes au graphe de façon à ce que chaque sommet soit à une arête des autres sommets atteignables. Avant la fermeture transitive Après la fermeture transitive

  8. Représentation informatique • Sous forme de liste chainée. • Sous forme de matrice d’adjacence. • Exemple : Graphe Matrice d’adjacence • Note : un graphe non orienté est représenté par une matrice symétrique.

  9. Algorithmes courants • Algorithmes de parcours de graphes • Problème : visiter (une seule fois) tous les sommets • Algorithmes de recherche du plus court chemin • Problème : quel est le chemin le plus rapide pour aller du sommet A au sommet B ?

  10. Algorithmes de parcours • Parcours en largeur • In English : BFS for Breadth First Search • Parcours en profondeur • In English : DFS for Depth First Search

  11. Le parcours en profondeur 1 / 3 • Comment parcourir un labyrinthe sans tourner en rond ? • Toujours tourner à droite (ou à gauche, ce qui revient au même) à chaque intersection. • Le parcours en profondeur se base sur cette méthode. • Achtung ! L’algorithme du parcours en profondeur est récursif.

  12. Le parcours en profondeur 2 / 3 Algorithmdfs(x) {  visit(x) foreach y such that (x,y) is an edge do { if y was not visited yet then {   dfs(y)  } } }

  13. Le parcours en profondeur 3 / 3 • Exemple : Quel est le parcours en profondeur du graphe ci-contre ? Source : wikipédia

  14. Le parcours en profondeur 3 / 3 • Exemple : Quel est le parcours en profondeur du graphe ci-contre ? • Réponse : A, B, D, F, C, G, E. Source : wikipédia

  15. Le parcours en largeur 1 / 3 • Se fonde sur l’utilisation d’une file FIFO (First In / First Out) • Principe : 1. Enfiler le nœud de départ 2. Examiner le nœud du début de la file 3. Mettre tous ses voisins non examinés à la fin 4. Si la file n’est pas vide, reprendre à l’étape 2. • Cet algorithme est itératif. (il n’est pas récursif).

  16. Le parcours en largeur 2 / 3 Algorithmbfs() { visit(start node) queue ← start node  while queue is not empty do { x ← queue     for each y such that (x,y) is an edge and y has not been visited yet do { visit(y) queue ← y } } } 

  17. Le parcours en largeur 3 / 3 • Exemple : Quel est le parcours en largeur du graphe ci-contre ? Source : wikipédia

  18. Le parcours en largeur 3 / 3 • Exemple : Quel est le parcours en largeur du graphe ci-contre ? • Réponse : A, B, C, E, D, F, G. Source : wikipédia

  19. Plus court chemin • Algorithme de Floyd-Warshall • Fonctionne pour les graphes orientés et valués. • Algorithme de Dijkstra • Fonctionne pour les graphes dont le poids des arêtes est positif ou nul. • Pas de boucle dans le graphe • Algorithme A* (prononcer : A étoile / A star) • Algorithme rapide. • Le chemin calculé n’est pas forcément le plus court ! • Souvent utilisé pour le pathfinding dans le jeu vidéo (car il privilégie la vitesse de calcul à l’exactitude des résultats) • Plusieurs autres algorithmes existent…

  20. Dijkstra - Principe • Assigner une distance de 0 au sommet initial et de ∞ à tous les autres sommets. • Marquer tous les sommets comme non visité. Marquer le sommet de départ comme sommet courant. • Calculer la distance depuis le sommet initial de tous les voisins non visités du sommet courant. Si la distance est inférieure à la distance précédente, remplacer la valeur sauvegardée. • Une fois que tous les voisins ont été visités, marquer le sommet courant comme visité. • Le sommet non visité avec la plus petite distance devient sommet courant, et on reprend depuis l’étape 3.

  21. Dijkstra - Algorithme AlgorithmDjikstra(Graph, source) { for each vertex v in Graph { dist[v] ← infinity previous[v] ← undefined } dist[source] ← 0 // Previous node in optimal path from source Q ← the set of all nodes in Graph while Q is not empty { u ← vertex in Q with smallest dist[] if dist[u] = infinity { break // All remaining vertices are inaccessible from source } remove u from Q for each neighbor v of u { alt ← dist[u] + dist_between(u, v) if alt < dist[v] { dist[v] ← alt previous[v] ← u } } return dist[] }

  22. Dijkstra– Exemple 1 / 4 • Quel est le plus court chemin de A à J ?

  23. Dijkstra– Exemple 2 / 4 • Quel est le plus court chemin de A à J ?

  24. Dijkstra– Exemple 3/ 4 • Quel est le plus court chemin de A à J ? itérations

  25. Dijkstra– Exemple 4 / 4 • Quel est le plus court chemin de A à J ? Réponse : 487 Km, en suivant le trajet A – C – H – J

  26. Authors: Ophir Paz (ophir.paz@nova-box.com ) GeoffroyVincens (geoffroy.vincens@nova-box.com) Merci. “We are continually faced with a series of great opportunities brilliantly disguised as insoluble problems.”  John W. Gardner

More Related