¿Cuáles son algunas aplicaciones del mundo real de tipo topológico?

Aquí hay una aplicación desde el principio de mi mente:

Construir sistemas

Considere una estructura de código fuente en la que está creando varias bibliotecas (DLL) y tienen dependencias entre sí. Por ejemplo, para compilar dll A, debe haber creado las DLL B, C y D (tal vez tenga una referencia de B, C y D en el proyecto que compila A).

Marquemos un borde de dependencia de cada uno de B, C y D a A, lo que implica que A depende de los otros tres y solo puede construirse una vez que cada uno de los tres está construido. Técnicamente hablando, (u, v) => Un borde de u a v implica que v.dll se puede construir solo cuando u.dll ya está construido.

Después de construir un gráfico de estos dlls y bordes de dependencia, puede concluir que una compilación exitosa es posible si el gráfico resultante es acíclico (ignorando formas avanzadas de resolver dependencias cíclicas como archivos asmmeta [1]). ¿Cómo decide el sistema de compilación en qué orden construir estos dlls? Los clasifica topológicamente.

Por lo tanto, en un orden como X-> Z-> T-> B-> D-> C-> A, puede comenzar a construir X (que solo puede depender de ensamblajes externos ya construidos), luego siga la lista ordenada topológicamente de asambleas.

Nota : Esta es una “aplicación artificial del mundo real”. Puede que no sea así como los ensamblados son construidos por msbuild u otros compiladores.

[1] http://stackoverflow.com/questio…

apt-get utiliza la ordenación topológica para obtener la mejor secuencia posible en la que se puede instalar / eliminar un conjunto de paquetes de Debian.

Herramienta de embalaje avanzada

Una aplicación más en tiempo real que se me ocurre es el uso de un tipo topológico para la resolución de dependencia de Maven .
En el sistema de compilación maven, proporcionamos dependencias de diferentes módulos en pom.xml. Al resolver estas dependencias, también realiza automáticamente la resolución de dependencia transitiva.
Digamos ,
Tienes un módulo A. En su pom, especifique la dependencia de B y C.
El módulo B tiene dependencia de D.
Entonces se vería como A-> b, A-> c, b-> d .

Puede visualizar cada módulo como un nodo en el gráfico y su dependencia como un borde dirigido .
Mientras compila, Maven debe estar usando la clasificación topológica en estos módulos para resolver correctamente las dependencias.

Estas son algunas de las aplicaciones en el mundo real que encontré mencionadas en Wikipedia [1] … programación de instrucciones, ordenación de la evaluación de celda de fórmula al volver a calcular valores de fórmula en hojas de cálculo, síntesis lógica, determinación del orden de las tareas de compilación para realizar en archivos MAKE, datos serialización y resolución de dependencias de símbolos en enlazadores. También se usa para decidir en qué orden cargar tablas con claves foráneas en bases de datos.

[1] Clasificación topológica

Considere el problema de programar tareas que son interdependientes, es decir. Digamos que la tarea A solo se puede hacer después de que la tarea B y C se hayan completado. Podemos modelar tales dependencias usando un gráfico acíclico dirigido que contendría un borde B-> A y C-> A en el ejemplo anterior. Un tipo topológico de tal gráfico nos daría un orden (‘an’, no ‘el’) en el que estas tareas podrían completarse.

  1. Resolviendo dependencias.
  2. Gráfica de algoritmos de dibujo.

En spring applicationContext.xml, el orden de creación del bean se determina a partir del orden ordenado topológico.

Workflow management-Project management-Estoy bastante seguro de que Microsoft Project tendrá una versión de esto