Télécharger la présentation
Publié parLéonne Chauveau Modifié depuis plus de 10 années
1
Pour le chemin le plus court pour tous les couples
Algorithme de Johnson Pour le chemin le plus court pour tous les couples
2
Déroulement Introduction Le problème algorithmique L’état de l’art
Les grands principes utilisés Détails d’implémentation et structures de données Analyse de complexité Conclusion
3
Introduction 2 algorithmes de Johnson Bref historique
Le plus court chemin Optimiser l’ordonnancement des processus Bref historique Donald Bruce Johnson Professeur à l’Université de Cornell à Ithaca à New York Publié l’algorithme en 1977
4
Le problème algorithmique
Le plus court chemin entre deux points Application à tous les couples Exemples Plus de nœuds = plus complexe
5
L’état de l’art Beaucoup de chercheurs impliqués Deux catégories
Dijkstra et Bellman-Ford OSPF A* Fonction heuristique Floyd-Warshall Programmation dynamique Matrice Pas de cycle négatif
6
Les grands principes utilisés
Afin de bien illustrer les grands principes de l’algorithme, nous utiliserons le graphe orienté pondéré suivant :
7
Les grands principes utilisés (suite)
Première étape : Ajout d’un nœud Nouveau nœud appelé « X » Le nouveau nœud est connecté à tous les autres nœuds du graphe grâce à des arcs de poids zéro. C’est donc le même coût pour passer du nœud « X » à n’importe quel autre nœud du graphe.
8
Les grands principes utilisés (suite)
9
Les grands principes utilisés (suite)
Deuxième étape : Algorithme Bellman-Ford Capacité de trouver le meilleur chemin dans un graphe avec des poids négatifs. Ici, il est utilisé pour détecter la présence ou non de circuit(s) absorbant(s) à l’intérieur du graphe. Circuit : Chemin partant d’un sommet, effectue la visite d’autres sommets et revient se terminer au sommet de départ. Circuit absorbant : Circuit qui possède un poids total négatif. Si un circuit absorbant est détecté, alors l’algorithme de Johnson s’arrête puisque celui-ci ne s’applique par sur les graphes possédant des circuits.
10
Les grands principes utilisés (suite)
Si l’algorithme Bellman-Ford ne détecte pas de circuit(s), il calcule le poids minimum nécessaire pour passer du nouveau nœud « X » jusqu’à chacun des nœuds du graphe.
11
Les grands principes utilisés (suite)
Troisième étape : Ajuster la valeur des arcs Appelons p(y,z), l’arc passant du nœud y au nœud z. Modifions la valeur de p(y,z) par le résultat de p(y,z) + [h(y) – h(z)]. Après avoir effectué ce calcul pour tous les arcs, nous aurons un graphe contenant des arcs de poids nul ou positif.
12
Les grands principes utilisés (suite)
Exemple de calcul : p(y,z) = p(y,z) + [h(y) – h(z)] p(B,A) = p(B,A) + [h(B) – h(A)] p(B,A) = 2 + [-1 – 0] p(B,A) = 1 Exemple de calcul : p(y,z) = p(y,z) + [h(y) – h(z)] p(E,D) = p(E,D) + [h(E) – h(D)] p(E,D) = -1 + [-3 – -5] p(E,D) = 1
13
Les grands principes utilisés (suite)
Quatrième et dernière étape : L’algorithme de Dijkstra Permets de trouver le chemin le plus court entre deux nœuds dans un graphe ou le poids des arcs est nul ou positif. (on ne pouvait pas l’utiliser au départ puisque notre graphe original contenait des arcs au poids négatif) Il suffit de partir du nœud de départ, et de choisir l’arc qui a une valeur minimale Ensuite, développer les nœuds atteignables à partir de cet endroit. Puis, trouver l’arc avec une valeur minimale à partir des arcs de départ et ceux développés.
14
Les grands principes utilisés (suite)
Répéter l’opération jusqu’à ce que le nœud d’arrivée soit atteint. Faire cette série d’opérations pour l’ensemble des nœuds du graphe. Nous avons donc le chemin le plus court pour chaque couple !
15
Les grands principes utilisés (suite)
16
Détails d’implémentation et structures de données
Expliquer la rivalité: Johnson VS Floyd-Warshall Johnson Nœud extérieur Bellman-Ford Dijkstra Floyd-Warshall Initialiser avec une grande valeur, boucle n² Calcul des chemins dans la boucle n³
17
Détails d’implémentation et structures de données
Présentation du graphe à résoudre 26 liens 16 noeuds
18
Détails d’implémentation et structures de données
Présentation du prototype Succès!
19
Détails d’implémentation et structures de données
Où est le problème chez Floyd-Warshall?
20
Analyse de la complexité
Ajout d’un nœud et des arcs : Θ(N) Bellman-Ford : O( N*A) Ajustement des poids des arcs : Θ(A) Dijkstra Tableau simple ou liste chaînée : O(N² + A) Arbre binaire : O( (N+A) log N) Monceau : O(N log N + A) Au final : O(N² log N + N*A) avec le monceau (car pour tous les couples) Pour Dijkstra, dire que c’est la structure contenant les nœuds qui ont été évalués qui influence la complexité.
21
Conclusion Efficace: Questions Floyd-Warshall = Θ(N3)
Johnson = O(N² log N + N*A) Questions
Présentations similaires
© 2024 SlidePlayer.fr Inc.
All rights reserved.