120 likes | 221 Views
CHEMINS DANS LES GRAPHES. Le PCC entre 2 sommets dans un graphe sans poids Le PCC entre un sommet et tous les autres sommets dans un graphe à des poids positifs Le PCC entre un sommet et tous les autres sommets dans un graphe pondéré.
E N D
CHEMINS DANS LES GRAPHES • Le PCC entre 2 sommets dans un graphe sans poids • Le PCC entre un sommet et tous les autres sommets dans un graphe à des poids positifs • Le PCC entre un sommet et tous les autres sommets dans un graphe pondéré. • Le PCC entre un sommet et tous les autres sommets dans un graphe orienté et sans cycle
GenericShortestPath(G, s) Dist= ∞ for u in G Dists = 0 P = Ps = s Q = Q.append(s) whileQ: z = Q.get_and_delete() forxin Adjz: If Distx > Distz+w(z, x): /edge (z,x) is « tense» Distx = Distz+w(z, x) Px = z Q.append(x) Return < P, D >
Le plus court chemin entre 2 sommets • Données: Un grapheG avec des arêtes (arcs) sans poidset 2 sommetss et t de de G. • But: Le plus court chemin entre s et t. Complexité: O(V+E)
ShortestPath(G, s) Dist= ∞ for u in G Dists = 0 P = Ps = s Q = Q.append(s) whileQ: z = Q.pop() forxin Adjz: If Px == 0: /edge (z,x) is « tense»!!!! Distx = Distz+1 Px = z Q.append(x) returnpath(P,s,t)
Le plus court chemin: Dijkstra • Données: Un grapheG avec des arêtes (arcs) à des poidspositifset un sommets. • But: Le plus court chemin entre s et les autres sommets du graphe. Complexité: O(V2+E) // O((V+E)log V) // O(E+Vlog V)
The algorithm DIJKSTRA(G,s) Dist= infinity for u in G Dists=0 Ps=s Q = V whileQ: z = Q.delete_min() forxin Adjz: Relax(z, x) ... Return <P, Dist>
Dijkstra1 (G.w, s) Dist= ∞for u in G Dists = 0 Ps = s Q = Makeheap(V) (usingdist-values as keys) whileQ: z = Q.deletemin_key() forxin Adjz: If Distx > Distz+w(z, x): Distx = Distz+w(z, x) Px= z Q.decrease_key(x)
Dijkstra2 (G.w, s) Dist= ∞ for u in G M = 0 for u in G P= Dists = 0 Ms=1 Ps = s Q.add(s) whileQ: z = Q.delete_min() forxin Adjz: If Distx > Distz+c(z, x) Distx = Distz+c(z, x) Px= z If Mx==0: Mx=1 Q.add(x) elifQ.decrease_key(x)
Le plus court chemin: Bellman-Ford Données: Un graphevaluéG et un sommets sans cycle négatif. But: Le plus court chemin entre s et les autres sommets du graphe. Complexité: O(VE)
Bellman-Ford (G.w, s) Dist= ∞ for u in G M = 0 for u in G P = Dists=0 Ms=1 Ps=s Q.enqueue(s) whileQ: z = Q.dequeue() Mz=0 forxin Adjz: If Distx > Distz+w(z,x) Distx = Distz+w(z,x) Px= z if Mx==0: Mx=1 Q.enqueue(x)
Le chemin le plus court: DAGs • Données: Un grapheorienté et sans cycle G, et un sommetsde G. • But: Le plus court chemin entre s et les autres sommets du graphe. Complexité: O(V+E)
SHORTEST_PATHS_DAGs(G.w, s) Dist= ∞for u in G Dists =0 Ps = s Q = Topological_sort(G) whileQ: z = Q.pop() forxin Adjz: If Distx > Distz+w(z, x) Distx = Distz+w(z, x)