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

CHEMINS DANS LES GRAPHES Le PCC entre un sommet et tous les autres sommets dans un graphe sans poids Le PCC entre un sommet et tous les autres sommets.

Présentations similaires


Présentation au sujet: "CHEMINS DANS LES GRAPHES Le PCC entre un sommet et tous les autres sommets dans un graphe sans poids Le PCC entre un sommet et tous les autres sommets."— Transcription de la présentation:

1 CHEMINS DANS LES GRAPHES Le PCC entre un sommet et tous les autres 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

2 Dist = for u in G Dist s = 0 P = P s = s Q = Q.append(s) while Q: z = Q.get_and_delete() for x in Adj z : If Dist x > Dist z +w(z, x): / the edge(z, x) is « tense » Dist x = Dist z +w(z, x) P x = z Q.append(x) Return

3 Le plus court chemin entre 2 sommets Données: Un graphe G avec des arêtes (arcs) sans poids et sommet s de G. But: Le plus court chemin entre s et les autres sommets du graphe Complexité : O(V+E)

4 Dist = for u in G Dist s = 0 P s = s Q = Q.append(s) while Q: z = Q.pop() for x in Adj z : If P x == 0: Dist x = Dist z +1 P x = z Q.append(x) return path(P)

5 Le plus court chemin: Dijkstra Données: Un graphe G avec des arêtes (arcs) à des poids positifs et un sommet s. But: Le plus court chemin entre s et les autres sommets du graphe. Complexité : O(V 2 +E) // O((V+E)log V) // O(E+Vlog V)

6 Dist = for u in G Dist s =0 P s =s Q = V while Q: z = Q.delete_min() for x in Adj z : Relax(z, x)... Return

7 Dist = for u in G Dist s = 0 P s = s Q = Makeheap(V) (using dist-values as keys) while Q: z = Q.deletemin_key() / extract min operation for x in Adj z : If Dist x > Dist z +w(z, x) Q.decrease_key(x) / Dist x = Dist z +w(z, x), P x = z

8 M = 0 for u in G Dist = for u in G Dist s = 0 P s = s Q.add(s) / altenatively, Q={s} and insert nodes when reached while Q: z = Q.delete_min() for x in Adj z : If Dist x > Dist z +w(z, x) Q.decrease_key(x) / Dist x = Dist z +w(z, x), P x = z If M x ==0: M x =1 Q.add(x)

9 Opérations: Extract-Min Decrease-Key # ops: V E Temps/Op. Array: O(V) O(1) Heap: O(logV) O(logV) Fibonacci Heap: O(logV) O(1) (amortie) Complexité totale en Temps: Array: O(V 2 ) Heap: O((V+E)logV) Fibonacci Heap: O(E+VlogV) COMPLEXITE

10 Le plus court chemin: Bellman-Ford Données: Un graphe valué G et un sommet s sans cycle négatif. But: Le plus court chemin entre s et les autres sommets du graphe. Complexité: O(VE)

11 M = 0 for u in G Dist = for u in G M s =1 Dist s =0 Q.enqueue(s) P s =s while Q: z = Q.dequeue() M z =0 for x in Adj z : If Dist x > Dist z +w(z, x) Dist x = Dist z +w(z,x) P x = z if M x ==0: M x =1 Q.enqueue(x)

12 Le chemin le plus court : DAGs Données: Un graphe orienté et sans cycle G, et un sommet s de G. But: Le plus court chemin entre s et les autres sommets du graphe. Complexité: O(V+E )

13 Dist = for u in G Dist s =0 P s = s Q = Topological_sort(G) while Q: z = Q.pop() for x in Adj z : If Dist x > Dist z +w(z, x) Dist x = Dist z +w(z, x) P x = z

14 Détection des Cycles négatifs Données: Un graphe G et un sommet s. But: G posséde t-il un cycle négatif? Complexité: O(VE )

15 M = 0 for u in G, Dist = for u in G, Dist s =0, a =1, Q.enqueue(s), Q.enqueue( ) while Q: z = Q.dequeue() if z == : if a < n : Q.enqueue( ) a+=1 elif Q: PRINT G contains a negative cycle break for x in Adj z : If Dist x > Dist z +w(z, x): Dist x = Dist z +w(z, x) if M x a: M x = a Q.enqueue(x) G does not contains a negative cycle

16 Currency conversion. Given currencies and exchange rates, what is best way to convert one ounce of gold to US dollars ? 1 oz. Gold 327.25 US Dollar. 1 oz. gold 208.10 UKPound 327.00 US Dollar [ 208.10 x 1.5714 ] 1 oz. gold 455.2 Francs 304.39 Euros 327.28 UKPound [ 455.2 x 0.6677 x 1.0752 ] Currency UKPound Euro JapYen Swiss US Dollar Gold (oz.) UKPound 1.0000 0.6853 0.005290 0.4569 0.6368 208.100 Euro 1.4599 1.0000 0.007721 0.6677 0.9303 304.028 JapYen 189.050 129.520 1.0000 85.4694 120.400 39346.7 Swiss 2.1904 1.4978 0.011574 1.0000 1.3941 455.200 US Dollar 1.57141.0752 0.008309 0.7182 1.0000 327.250 Gold(oz.) 0.004816 0.00329 0.0000255 0.002201 0.003065 1.0000 Shortest paths application: Currency conversion


Télécharger ppt "CHEMINS DANS LES GRAPHES Le PCC entre un sommet et tous les autres sommets dans un graphe sans poids Le PCC entre un sommet et tous les autres sommets."

Présentations similaires


Annonces Google