Algoritmo de clasificación topológica

Algoritmo de clasificación topológica
El algoritmo de clasificación topológica funciona con el DAG (gráfico acíclico directo). El significado del tipo topológico es que si algún nodo apunta a otro nodo, entonces el nodo que apunta a otro nodo vendrá después de eso. Entonces, en este caso, si tenemos un gráfico cíclico, no podemos predecir qué nodo viene después de qué nodo. Esa es la razón por la cual el algoritmo de clasificación topológica solo funciona con el gráfico acíclico y no con el gráfico cíclico.

Cada gráfico tiene más de una secuencia de clasificación topológica porque depende del grano de los bordes de los nodos. El primer nodo inicial que elegimos con un número en grado de nodos es 0.

Comprendamos el algoritmo de clasificación topológica con un ejemplo.

Paso 1: Insertamos esos nodos cuyo recuento de borde entrante es igual a 0. Entonces, esos nodos son el nodo 1 y el nodo 4.

Paso 2:

a. Comenzamos con el nodo 1. Podemos elegir cualquier nodo entre el nodo 1 y el nodo 4.

b. Disminuimos cada borde del nodo en 1, que está conectado al nodo 1. Estamos disminuyendo el borde de los nodos (0, 2 y 3).

C. Movimos el nodo 1 de la lista a la lista ordenada topológicamente, como se muestra a continuación.

Paso 3:

a. Ahora procedemos de la lista, que es el nodo 4.

b. Disminuimos todos los bordes salientes de los nodos conectados al nodo 4, que son nodos (0 y 3).

C. Ahora, el nodo 3 no tiene bordes entrantes, por lo que lo empujamos a la lista, y el nodo 4 cambia a la lista topológicamente ordenada.

Etapa 4:

a. Ahora procedemos de la lista, que es el nodo 3.

b. Disminuimos todos los bordes salientes de los nodos conectados al nodo 3, que son nodos (0 y 2).

C. Ahora, los nodos 0 y el nodo 2 no tienen bordes entrantes, por lo que lo empujamos a la lista, y el nodo 3 cambia a la lista topológicamente ordenada.

Paso 5:

a. Ahora procedemos de la lista, que es el nodo 0.

b. Como no hay bordes salientes desde el nodo 0, simplemente los agregamos a la lista de clasificación topológica.

Paso 6:

a. Ahora procedemos de la lista, que es el nodo 2.

b. Como no hay bordes salientes desde el nodo 2, simplemente los agregamos a la lista de clasificación topológica.

Paso 7:

Finalmente, hemos ordenado la lista aquí.

Algoritmo de clasificación topológica

Los siguientes son los pasos para el algoritmo de clasificación topológica que tenemos que seguir.

Paso 0: Calcule el engráfico de cada nodo gráfico.

Paso 1: Primero tenemos que encontrar un nodo que tenga bordes entrantes de cero.

Paso 2: eliminamos ese nodo del gráfico y lo agregamos a la lista de órdenes de clasificación topológica.

Paso 3: retire los nodos que tienen bordes salientes.

Paso 4: Reduzca el grano por el número de bordes relacionados que se eliminaron.

Paso 5: Repita los pasos 1-4 hasta que no queden nodos con 0 en grados.

Paso 6: Verifique que todos los elementos estén en la secuencia correcta.

Paso 7: Ahora, hemos ordenado el pedido del paso 6.

Paso 8: Poner fin al algoritmo.

Código de Python: El siguiente es una implementación de Python del ejemplo anterior.

fromCollectionsImportDefaultdict
ClassBuildGraph:
def__init __ (self, nodos: int):
ser.nodos = nodos
# Ahora estamos almacenando el gráfico en formato de lista adyacente
ser.adjlistDetails = defaultDict (lista)
# Almacenará la información sobre un nodo particular entrante
# bordes en un gráfico
ser.count_numbers_of_incoming_edge_of_a_node = []
# Almacena los nodos ordenados en orden topológico
ser.topological_sorted_order = []
# Almacena la información de todos esos nodos que no
# tiene algún bordes entrantes en un gráfico
ser.nodos_have_zero_incoming_edges = []
# Ahora estamos creando una lista adyacente de todos los gráficos para clasificar
Defaddgraphedge (self, fuente: int, destino: int):
ser.adjlistdetails [fuente].anexar (destino)
ser.count_numbers_of_incoming_edge_of_a_node [destino] += 1
DeftopologicalSortalgorithm (yo):
para el nodo de rango (yo mismo.nodos):
en sí mismo.count_numbers_of_incoming_edge_of_a_node [nodo] == 0:
ser.nodos_have_zero_incoming_edges.Añadir (nodo)
sin duda.nodos_have_zero_incoming_edges:
ser.nodos_have_zero_incoming_edges.clasificar()
fuente = self.nodos_have_zero_incoming_edges.Pop (0)
# iteración de la lista adyacente
Si la fuente no.adjlistdetails:
para nodo inself.adjlistDetails [fuente]:
ser.count_numbers_of_incoming_edge_of_a_node [nodo] -= 1
en sí mismo.count_numbers_of_incoming_edge_of_a_node [nodo] == 0:
ser.nodos_have_zero_incoming_edges.Añadir (nodo)
ser.topological_sorted_order.agregar (fuente)
Imprimir ("Orden de clasificación topológica:"+STR (Self.topological_sorted_order))
defmain ():
número_of_nodes = 7
Graph = buildgraph (number_of_nodes)
grafico.count_numbers_of_incoming_edge_of_a_node = [0] *number_of_nodes
grafico.Addgraphedge (0,2)
grafico.Addgraphedge (0,5)
grafico.Addgraphedge (1,3)
grafico.Addgraphedge (1,6)
grafico.Addgraphedge (2,4)
grafico.Addgraphedge (3,5)
grafico.Addgraphedge (5,2)
grafico.Addgraphedge (5,4)
grafico.Addgraphedge (6,2)
grafico.TopologicalSortalgorithm ()
Si __name__ == "__ Main__":
principal()

Producción:

Orden de clasificación topológica: [0, 1, 3, 5, 6, 2, 4]

Algoritmo de clasificación topológica Complejidad del tiempo:

El tiempo total para procesar el algoritmo es O (e + n), donde E representa el número de bordes y N representa el número de nodos en el gráfico. Luego, en el siguiente paso, debemos calcular el grado de cada nodo, que generalmente toma O (e) veces, y luego colocar todos esos nodos en una lista ordenada donde su grano es cero, lo que toma o (n) veces. Entonces, la complejidad del tiempo total del algoritmo de clasificación topológica es O (e+n).

Pero la complejidad espacial del algoritmo de clasificación topológica es O (n), que es el número total de nodos en el gráfico.

Solicitud :

1. La clasificación topológica es muy útil para encontrar el ciclo del gráfico.

2. El algoritmo de clasificación topológica se utiliza para determinar las condiciones de punto muerto en un sistema operativo.

3. El algoritmo de clasificación topológica se usa para encontrar la ruta más corta en un gráfico acíclico ponderado.

Conclusión:

Este artículo ha aprendido sobre un algoritmo más importante, la clasificación topológica. Hemos visto que este algoritmo solo funciona con gráficos acíclicos. El algoritmo de clasificación topológica también ayuda a determinar el orden de compilación de tareas. El algoritmo de clasificación topológica tiene muchas ventajas en tiempo real, como encontrar el camino más corto. Debido a que el tipo topológico es extremadamente útil, cada programador y estudiante debe comprender a fondo este algoritmo.