Zaimplementowałem sortowanie topologiczne na podstawie artykułu z Wikipedii, którego używam do rozwiązywania zależności, ale zwraca ono listę liniową. Jakiego algorytmu mogę użyć do znalezienia niezależnych ścieżek?
13
Zaimplementowałem sortowanie topologiczne na podstawie artykułu z Wikipedii, którego używam do rozwiązywania zależności, ale zwraca ono listę liniową. Jakiego algorytmu mogę użyć do znalezienia niezależnych ścieżek?
Odpowiedzi:
Zakładam, że zbocze oznacza, że należy wykonać przed . Jeśli tak nie jest, odwróć wszystkie krawędzie. Ponadto zakładam, że jesteś mniej zainteresowany ścieżkami (te są już podane przez DAG) niż strategią dobrego wykonania, biorąc pod uwagę zależności.u v( u , v ) u v
Możesz łatwo dostosować procedurę sortowania topologicznego: zamiast dołączać, scal wszystkie elementy o tej samej „głębokości” w jeden zestaw. Otrzymasz listę zestawów, z których każdy zawiera elementy, które możesz wykonać / zainstalować równolegle. Formalnie zbiory są zdefiniowane w ten sposób dla wykresu : G = ( V , E )Si G=(V,E)
Następnie możesz wykonać swoje zadania w ten sposób (załóżmy, że istnieje zestawów):k
Oczywiście nie zapewnia to maksymalnej przepustowości, jeśli zadania zajmują inny czas: dwa równoległe, niezależne łańcuchy liniowe synchronizują się po każdym elemencie. Aby to obejść, sugeruję, abyś pracował bezpośrednio na DAG z równoległym przechodzeniem zaczynającym się w węzłach źródłowych - tych w - i synchronizując / rozwidlając w węzłach z kilkoma krawędziami wejściowymi / wyjściowymi:S0
gdzie
i
T.count
jest prostym licznikiem zawierającym liczbę poprzedników,T
które zostały już wykonane,T.indeg
liczbę poprzedników iT.succ
zestaw następców.źródło