Algorytm sortowania topologicznego

Algorytm sortowania topologicznego
Algorytm sortowania topologicznego działa z DAG (bezpośredni Acykliczny wykres). Znaczenie sortowania topologicznego polega na tym, że jeśli jakikolwiek węzeł wskazuje na inny węzeł, wówczas węzeł, który wskazuje na inny węzeł. Tak więc, jeśli mamy wykres cykliczny, nie możemy przewidzieć, który węzeł pojawia się, po którym węzeł. To jest powód, dla którego algorytm sortowania topologicznego działa tylko z wykresem acyklicznym, a nie z wykresem cyklicznym.

Każdy wykres ma więcej niż jedną sekwencję sortowania topologicznego, ponieważ zależy to od stopnia krawędzi węzłów. Pierwszy węzeł początkowy, który wybieramy z liczbą węzłów w stopniu, wynosi 0.

Zrozum algorytm sortowania topologicznego z przykładem.

Krok 1: Wkładamy węzły, których przychodząca liczba krawędzi jest równa 0. Więc te węzły są węzłem 1 i węzła 4.

Krok 2:

A. Zaczynamy od węzła 1. Możemy wybrać dowolny węzeł między węzłem 1 a węzłem 4.

B. Zmniejszamy każdą krawędź węzła o 1, która jest podłączona do węzła 1. Zmniejszamy krawędź węzłów (0, 2 i 3).

C. Przenosimy węzeł 1 z listy do listy sortowanej topologicznie, jak pokazano poniżej.

Krok 3:

A. Teraz przechodzimy z listy, która jest węzłem 4.

B. Zmniejszamy wszystkie wychodzące krawędzie węzłów podłączonych do węzła 4, które są węzłami (0 i 3).

C. Teraz węzeł 3 nie ma przychodzących krawędzi, więc wcisnęliśmy je na listę, a węzeł 4 przesuwa się na listy sortowanej topologicznie.

Krok 4:

A. Teraz przechodzimy z listy, która jest węzłem 3.

B. Zmniejszamy wszystkie wychodzące krawędzie węzłów podłączonych do węzła 3, które są węzłami (0 i 2).

C. Teraz węzły 0 i węzeł 2 nie mają przychodzących krawędzi, więc wkładamy je na listę, a węzeł 3 przesuwa się na listy sortowanej topologicznie.

Krok 5:

A. Teraz przechodzimy z listy, która jest węzłem 0.

B. Jak nie ma wychodzących krawędzi z węzła 0, więc po prostu dodajemy je do listy sortowania topologicznego.

Krok 6:

A. Teraz przechodzimy z listy, która jest węzłem 2.

B. Jak żadne wychodzące krawędzie z węzła 2, więc po prostu dodajemy je do listy sortowania topologicznego.

Krok 7:

Na koniec posortowaliśmy listę tutaj.

Algorytm sortowania topologicznego

Poniżej znajdują się kroki dla algorytmu sortowania topologicznego, który musimy śledzić.

Krok 0: Oblicz stopień każdego węzła wykresu.

Krok 1: Najpierw musimy znaleźć węzeł, który ma przychodzące krawędzie zero.

Krok 2: Usuwamy ten węzeł z wykresu i dodajemy go do listy topologicznych zamówień sortowania.

Krok 3: Usuń węzły, które mają wychodzące krawędzie.

Krok 4: Zmniejsz stopień stopnia o liczbę usuniętych pokrewnych krawędzi.

Krok 5: Powtórz kroki 1-4, aż nie ma węzłów z 0 na stopniu.

Krok 6: Sprawdź, czy wszystkie elementy są we właściwej sekwencji.

Krok 7: Teraz posortowaliśmy zamówienie od kroku 6.

Krok 8: Zakończ algorytm.

Kod Pythona: Poniżej jest wdrożenie Pythona powyższego przykładu.

FromCollectionSimportDefaultdict
ClassBuildGrafh:
def__init __ (self, węzły: int):
samego siebie.Węzły = węzły
# Teraz przechowujemy wykres w sąsiednim formacie listy
samego siebie.adjlistDetails = Defaultdict (lista)
# Będzie przechowywać informacje o konkretnym przychodzącym węźle
# krawędzie na wykresie
samego siebie.count_numbers_of_incinging_edge_of_a_node = []
# Przechowujemy posortowane węzły w kolejności topologicznej
samego siebie.topological_sorted_order = []
# Przechowujemy informacje o wszystkich tych węzłach
# mają wszelkie przychodzące krawędzie na wykresie
samego siebie.węzły_have_zero_incinging_edges = []
# Teraz tworzymy sąsiednią listę wszystkich wykresów do sortowania
defaddgraphEdge (self, Źródło: int, miejsce docelowe: int):
samego siebie.adjlistDetails [Źródło].Dodatek (miejsce docelowe)
samego siebie.Count_numbers_of_incinging_edge_of_a_node [miejsce docelowe] += 1
deftopologicsortalgorytm (ja):
dla węzłów (jaźń.węzły):
ifelf.Count_numbers_of_incinging_edge_of_a_node [węzeł] == 0:
samego siebie.Węzły_Have_Zero_Incoming_Edges.Dodatek (węzeł)
WHILESHE.Węzły_Have_Zero_Incoming_Edges:
samego siebie.Węzły_Have_Zero_Incoming_Edges.sortować()
Źródło = ja.Węzły_Have_Zero_Incoming_Edges.Pop (0)
# sąsiedni iteracja listy
Jeśli źródło inself.adjlistDetails:
dla inself węzłów.adjlistDetails [Źródło]:
samego siebie.Count_numbers_of_incinging_edge_of_a_node [węzeł] -= 1
ifelf.Count_numbers_of_incinging_edge_of_a_node [węzeł] == 0:
samego siebie.Węzły_Have_Zero_Incoming_Edges.Dodatek (węzeł)
samego siebie.topological_sorted_order.Dodatek (źródło)
Drukuj („Topologiczna kolejność sortowania:”+str (jaźń.topological_sorted_order))
defmain ():
numer_of_nodes = 7
Graph = buildGraph (numer_of_nodes)
wykres.count_numbers_of_incings_edge_of_a_node = [0] *Number_of_nodes
wykres.AddGrafedge (0,2)
wykres.AddGrafedge (0,5)
wykres.AddGrafedge (1,3)
wykres.AddGrafedge (1,6)
wykres.AddGrafedge (2,4)
wykres.AddGrafedge (3,5)
wykres.AddGrafedge (5,2)
wykres.AddGrafedge (5,4)
wykres.AddGrafedge (6,2)
wykres.Topologicalsortalgorytm ()
Jeśli __name__ == "__ main__":
główny()

Wyjście:

Kolejność sortowania topologicznego: [0, 1, 3, 5, 6, 2, 4]

Złożoność czasu sortowania topologicznego Sortowanie:

Całkowity czas przetwarzania algorytmu wynosi O (E + N), gdzie E reprezentuje liczbę krawędzi, a N reprezentuje liczbę węzłów na wykresie. Następnie, w poniższym etapie, musimy obliczyć każdy stopień każdego węzła, który na ogół zajmuje czas O (e), a następnie umieścić wszystkie te węzły na posortowanej liście, w której ich stopień wynosi zero, co wymaga O (n) czasy. Tak więc całkowita złożoność czasu algorytmu sortowania topologicznego wynosi O (E+N).

Ale złożoność przestrzeni algorytmu sortowania topologicznego wynosi O (N), czyli całkowita liczba węzłów na wykresie.

Aplikacja :

1. Topologiczny jest bardzo przydatny do znalezienia cyklu wykresu.

2. Algorytm sortowania topologicznego służy do określenia warunków impasu w systemie operacyjnym.

3. Algorytm sortowania topologicznego służy do znalezienia najkrótszej ścieżki na ważonym wykresie acyklicznym.

Wniosek:

W tym artykule dowiedział się o jednym ważniejszym algorytmie, sortowaniu topologicznym. Widzieliśmy, że ten algorytm działa tylko z wykresami acyklicznymi. Algorytm sortowania topologicznego pomaga również określić kolejność kompilacji zadań. Algorytm sortowania topologicznego ma wiele zalet w czasie rzeczywistym, takich jak znalezienie najkrótszej ścieżki. Ponieważ rodzaj topologiczny jest niezwykle przydatny, każdy programista i uczeń muszą dokładnie zrozumieć ten algorytm.