CSII2 – 01 – Les Graphes.pps - Nova-box

publicité
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
Les Graphes
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 !
Les Graphes
Représentation d’un graphe
Les Graphes
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 :
Les Graphes
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.
Les Graphes
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.
Pas connexe
Connexe
Les Graphes
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
Les Graphes
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.
Les Graphes
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 ?
Les Graphes
Algorithmes de parcours
• Parcours en largeur
– In English : BFS for Breadth First Search
• Parcours en profondeur
– In English : DFS for Depth First Search
Les Graphes
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.
Les Graphes
Le parcours en profondeur 2 / 3
Algorithm dfs(x)
{
visit(x)
for each y such that (x,y) is an edge do
{
if y was not visited yet then
{
dfs(y)
}
}
}
Les Graphes
Le parcours en profondeur 3 / 3
• Exemple : Quel est le parcours en profondeur
du graphe ci-contre ?
Source : wikipédia
Les Graphes
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
Les Graphes
Le parcours en largeur 1 / 3
• Se fonde sur l’utilisation d’une file FIFO
• Principe :
(First In / First Out)
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).
Les Graphes
Le parcours en largeur 2 / 3
Algorithm bfs()
{
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
}
}
}
Les Graphes
Le parcours en largeur 3 / 3
• Exemple : Quel est le parcours en largeur du
graphe ci-contre ?
Source : wikipédia
Les Graphes
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
Les Graphes
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…
Les Graphes
Dijkstra - Principe
1. Assigner une distance de 0 au sommet initial et de ∞ à
tous les autres sommets.
2. Marquer tous les sommets comme non visité. Marquer le
sommet de départ comme sommet courant.
3. 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.
4. Une fois que tous les voisins ont été visités, marquer le
sommet courant comme visité.
5. Le sommet non visité avec la plus petite distance devient
sommet courant, et on reprend depuis l’étape 3.
Les Graphes
Dijkstra - Algorithme
Algorithm Djikstra(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[]
}
Les Graphes
Dijkstra– Exemple 1 / 4
• Quel est le plus court chemin de A à J ?
Les Graphes
Dijkstra– Exemple 2 / 4
• Quel est le plus court chemin de A à J ?
Les Graphes
Dijkstra– Exemple 3/ 4
• Quel est le plus court chemin de A à J ?
itérations
Les Graphes
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
Les Graphes
Authors:
Ophir Paz ([email protected] )
Geoffroy Vincens ([email protected])
Merci.
“We are continually faced with a series of great opportunities
brilliantly disguised as insoluble problems.”
John W. Gardner
Téléchargement