2009-10-29 9 views
13

Powiel możliwe:
Graph Algorithm To Find All Connections Between Two Arbitrary VerticesAlgorytm znaleźć szereg odrębnych ścieżek w reżyserii wykresie

mam graf skierowany, co algorytm można użyć, aby znaleźć liczbę odrębne acykliczne ścieżki między dwoma poszczególnymi wierzchołkami i policzyć maksymalne czasy, w których dana ścieżka jest wykorzystywana w tych odrębnych ścieżkach? Dwie ścieżki są różne, jeśli odwiedzają inną liczbę wierzchołków lub odwiedzają wierzchołki w innej kolejności.

+6

IMHO To nie musi być duplikat. Istnieje różnica między znajomością liczby wartości (liczbą całkowitą) a znajomością wszystkich wartości (zestawu list węzłów). Dla mojego celu, nawet rozsądna domysłowa liczba (górna granica) jest w porządku, więc dla mnie nie jest to duplikat. – danatel

+3

[Algorytm do znajdowania wszystkich połączeń między dwoma arbitralnymi wierzchołkami] (http://stackoverflow.com/q/58306) wcale nie jest duplikatem: wyliczanie i liczenie są różnymi problemami, a kierowany wykres to inna bestia z niekierowany wykres. Jeśli chodzi o złożoność liczenia prostych ścieżek, zobacz [Jak trudno jest zliczyć liczbę prostych ścieżek między dwoma węzłami na grafie?] (Http://cs.stackexchange.com/q/423) na [cs.se]. – Gilles

+0

Zgadzam się z Danatel - w przypadku dużych wykresów niepożądane jest policzenie wyliczenia wszystkich możliwych ścieżek. –

Odpowiedz

5

Jeśli stosujesz nieco zmodyfikowany algorytm Dijkstry, możesz mieć rozwiązanie z wszystkimi parami.

Wyjaśnienie: Ścieżki od u do v jest sumą następujących elementów:

  1. Ścieżki z u do v który nie przechodzi przez w
  2. Ścieżki, które przechodzą przez w = liczba ścieżek od u do wrazy liczba ścieżek od w do v

Inicjuj macierz za pomocą zer, z wyjątkiem sytuacji, gdy istnieje krawędź od i do j (co oznacza 1). Wtedy następujący algorytm daje wynik (all-para-path-count)

for i = 1 to n: 
    for j = 1 to n: 
     for k = 1 to n: 
      paths[i][i] += paths[i][k] * paths[k][j] 

trzeba powiedzieć: O(n^3)

Marzą ci się czytać jedno rozwiązanie pary. :)

+3

To rozwiązanie nie działa poprawnie z wymaganiem, że ścieżki nie mogą mieć żadnych cykli. – hugomg

+3

To zmodyfikowany Bellman-Ford, a nie zmodyfikowany Dijkstra (stąd kwestia cyklu). –

Powiązane problemy