2012-01-17 10 views
9

Załóżmy, że mamy DIRECTED, WAŻONY i Cyclic wykres.Algorytm znalezienia różnych ścieżek z A do B na ciężarze, skierowanej, cykliczne wykresie

Załóżmy, opiszemy tylko w ścieżkach z całkowitej masy poniżej MAX_WEIGHT

co jest najbardziej odpowiedni (lub występuje) algorytm, aby znaleźć numer oddzielnych ścieżek między węzłami A i B o łącznej wadze mniejszej niż MAX_WEIGHT?

P.S: To nie jest moja praca domowa. Tylko osobisty, niekomercyjny projekt.

+0

Czy zezwalasz na ścieżki, które odwiedzają ten sam wierzchołek więcej niż raz (pod warunkiem, że długość ścieżki jest mniejsza niż MAX_WEIGHT)? – NPE

+2

Czy możemy założyć, że nie ma cykli zerowej wagi? – bdares

+1

@aix: Tak, przepraszam, zapomniałem wspomnieć. Możesz wykonywać pętle tyle, ile chcesz, o ile spełnione jest kryterium MAX_WEIGHT. – Babak

Odpowiedz

2

Jeżeli liczba węzłów i MAX_WEIGHT nie są zbyt duże (i wszystkie wagi są liczbami całkowitymi), można użyć programowania dynamicznego

unsigned long long int num_of_paths[MAX_WEIGHT+1][num_nodes]; 

zainicjować 0, z wyjątkiem num_of_paths[0][start] = 1;. Roztwór jest sumą num_of_paths[w][target], 0 <= w <= MAX_WEIGHT.

+0

Jeśli rozwiążesz ten problem w ten sposób, rozwiążesz ogólną ścieżkę k-rozłączną Przypadek w O (n * MAX_WEIGHT) i jeśli założysz, że wszystkie krawędzie mają wagę "1", możesz rozwiązać ją w O (n^3), ale w tym przypadku jest to NP-trudna. –

+0

Nie widzę, jak rozłączne ścieżki są istotne dla problemu, jak stwierdzono. –

+0

Jest to część pytania: "Jaki jest najbardziej odpowiedni (lub dowolny) algorytm, aby znaleźć" liczbę różnych ścieżek "między dwoma węzłami A i B", a dla większej ilości szczegółów przeczytaj moją odpowiedź. –

1

Prosta rekursja. Masz to w wykładniczym czasie. Oczywiście nie dopuszcza się cykli zerowych.

funkcja Noe (węzeł N limit wagi W)

  1. nr. ścieżki wynosi zero, jeśli wszystkie wychodzące krawędzie mają masę> W

  2. inaczej nie. ścieżki to suma liczb ścieżki uzyskanych przez sumę (noe (C1, W-W1), noe (C2, W-W2), ... noe (Cn, W-Wn)), gdzie C1 ... Cn są węzły podłączone do N, dla których W-Wi nie jest ujemne, gdzie Wi jest masą łączącej krawędzi, napisane w twoim ulubionym języku.

Powinno istnieć bardziej skuteczne rozwiązanie, zgodnie z algorytmem Dijkstry, ale myślę, że wystarczy to do pracy domowej.

0

Problemu bardziej ogólnego przypadku K-Disjoint Path In directed planar graphs, a nie stałe K.

K rozłączne ścieżki problem dla skierowanych płaskich wykresach jest następująco:

podane: skierowanego płaskiej wykres G = (V ; E) i k par (r ; s); ....; (r k; s k) wierzchołków G;

znaleźć: k parami wierzchołek-rozłącznych skierowane ścieżek P ; ...; P K G, gdzie P i biegnie od R i Do S i (i = 1, ...., K).

w K-rozłączne ścieżki można narysować łuk ze wszystkich s i do B, a także łuk od A do wszystkich r i przez ten sposób stworzyć wykres G”z G.

Teraz, jeśli możesz rozwiązać swój problem w G 'w P możesz rozwiązać k-rozłączną ścieżkę w G, So P = NP.

Ale jeśli czytasz powiązaną pracę, daje to pewien pomysł na ogólny wykres (rozwiązanie k-rozłącznej ścieżki ze stałym k) i możesz go użyć, aby uzyskać dobre przybliżenie.

Również jest bardziej skomplikowany algorytm, który rozwiązuje ten problem w P (dla stałej k) w ogólnych wykresach. ale w sumie to nie jest łatwe (to jest Seymour).

Twoim najlepszym wyborem jest obecnie użycie algorytmów brutalnej siły.

Edit: Ponieważ MAXWEIGHT jest niezależny do wielkości wejściowej (twój rozmiar wykres) To nie ma wpływu na ten problem, także dlatego, że jest NP-trudny do undirected nieważone wykresu, nadal po prostu można go zawrzeć jest NP-trudny .

+0

Jeśli interesuje Cię więcej tematów na ten temat, możesz zajrzeć do http://homepages.cwi.nl/~lex/files/agt3.pdf –

Powiązane problemy