Dada una asignación entre elementos y elementos de los que dependen, una ordenación topológica ordena elementos para que ningún elemento preceda a un elemento del que depende.
La compilación de una biblioteca en el lenguaje VHDL tiene la restricción de que una biblioteca debe compilarse después de cualquier biblioteca de la que dependa.
Tarea:Escriba una función que devolverá un orden de compilación válido de las bibliotecas VHDL desde sus dependencias.
Supongamos que los nombres de las bibliotecas son palabras simples. Los elementos mencionados como solo dependientes no tienen dependientes propios, pero se debe dar su orden de compilación. Cualquier auto dependencia debe ser ignorada. Cualquier dependencia no ordenable debe ser ignorada.Usa los siguientes datos como ejemplo:
BIBLIOTECA DEPENDENCIAS DE LA BIBLIOTECA ======= ==================== des_system_lib std synopsys std_cell_lib des_system_lib dw02 dw01 ramlib ieee dw01 ieee dw01 dware gtech dw02 ieee dw02 dware dw03 std synopsys dware dw03 dw02 dw01 ieee gtech dw04 dw04 ieee dw01 dware gtech dw05 dw05 ieee dware dw06 dw06 ieee dware dw07 ieee dware dware ieee dware gtech ieee gtech ramlib std ieee std_cell_lib ieee std_cell_lib sinopsis
Nota: los datos anteriores no se podrían ordenar si, por ejemplo, se agrega dw04
a la lista de dependencias de dw01
.
<a href="http://rosettacode.org/wiki/Topological sort/Extracted top item" title="Topological sort/Extracted top item">Topological sort/Extracted top item</a>.
Hay dos algoritmos populares para la clasificación topológica:
El orden topológico de Kahn en 1962 y la búsqueda en profundidad: ordenamiento topológico
Jason Sachs: "Diez algoritmos pequeños, parte 4: ordenamiento topológico" .
topologicalSort
es una función.
testString: 'assert(typeof topologicalSort === "function", "topologicalSort
is a function.");'
- text: topologicalSort
debe devolver el orden correcto de la biblioteca ..
testString: 'assert.deepEqual(topologicalSort(libsSimple), ["bbb", "aaa"], "topologicalSort
must return correct library order..");'
- text: topologicalSort
debe devolver el orden correcto de la biblioteca ..
testString: 'assert.deepEqual(topologicalSort(libsVHDL), solutionVHDL, "topologicalSort
must return correct library order..");'
- text: topologicalSort
debe devolver el orden correcto de la biblioteca ..
testString: 'assert.deepEqual(topologicalSort(libsCustom), solutionCustom, "topologicalSort
must return correct library order..");'
- text: topologicalSort
debe ignorar dependencias desordenadas ..
testString: 'assert.deepEqual(topologicalSort(libsUnorderable), solutionUnorderable, "topologicalSort
must ignore unorderable dependencies..");'
```