ORDENACIÓN TOPOLOGICA MEDIANTE ALGORITMOS DE GRAFOS 1. INTRODUCCIÓN

Anuncio
ORDENACIÓN TOPOLOGICA MEDIANTE ALGORITMOS DE GRAFOS
1. INTRODUCCIÓN
1.1. Relación entre Topología y los grafos
2. CONCEPTOS PREVIOS
2.1. Grafos
2.2. Teoría de Grafos
2.3. Grafo Dirigido Acíclico
2.4. Topología ”
2.5. Espacios Topológicos
2.6. Orden Topológico
3. HISTORIA
3.1. Estudios iniciales
3.2. Problemas en Topología
4. ORDENACIÓN TOPOLÓGICA
4.1.
5. EJEMPLO CLARIFICADOR
5.1. Caso Práctico
6. ALGORITMOS
6.1. Algoritmo de Tarjan
7. APLICACIONES
7.1. Vida Cotidiana
7.2. Informática
7.3. Social
7.4. Ingeniería Civil
8. CÓDIGO C++
8.1. Librería de Ruby
9. APPLET
9.1. Applet n°1
10. INFORME
10.1.
Link
11. REFERENCIAS
11.1.
Web Links
11.2.
Libros
1 Introduccion
La ordenación topológica mediante algoritmos de grafos es una utilidad
que facilita la toma de decisiones.
Es uno de los algoritmos más conocidos de grafos, el cual se emplea para
hallar un orden en una lista de todos los nodos del grafo (dirigido
acíclico) de tal forma que sea visitado antes que sus predecesores
(padres) Hoy en día la toma de decisiones es muy importante ya sea en
la vida empresarial o en la doméstica,
por supuesto que en la
empresarial la complejidad es mucho mayor, ya que hay una gran
cantidad de tareas a llevar a cabo. Éstas tareas que hay que cumplir
tienen
un
orden
dado,
normalmente
dicho
orden
es
aplicado
automáticamente.
Que pasaría en el caso de una empresa que tiene muchas mas tareas, y
cada una de ellas con diferentes criterios a cumplir antes de ser
llevadas a cabo, dichos criterios solo podrían ser cumplidos si llevamos a
cabo otras tareas dicho de paso que para realizarlas también debemos
realizar otras. Este ambiente en el que hay muchos eventos, y no
tenemos un orden aparente, sino criterios de los cuales debemos
evaluar para conseguir llegar a culminar todo a tiempo, es donde encaja
perfectamente
la
Ordenación
topológica.
La
planificación
o
programación de algunas actividades o eventos es un problema que
puede ser resuelto aplicando la ordenación topológica. Para ello solo
tenemos que hacer uso de los grafos, cada evento un nodo, los criterios
a tomar en cuenta serían aristas dirigidas como una frase de "necesario
para", ésto crea una dependencia, claro que es de sobreentender
que hecho ya una actividad no podemos volver a realizarla, sería ilógico
pagar el recibo de luz luego pagar el de agua luego nuevamente el de la
luz. Esto quiere decir que hay una dirección y un inicio y un final.
2 Conceptos Previos:
Para poder entrar en el estudio de la ordenación Topológica mediante algoritmos de Grafos,
necesitamos conocer algunos conceptos previos, básicos y fundamentales para el entendimiento
del tema. Como lo son los grafos, las topologías, qué es un orden topológico, qué tipos de grafos
existen, y relacionar ambos...
2.1 Grafo:
En matemáticas y ciencias de la Computación un grafo (del griego grafos: dibujo, imagen) o
gráfica
es
el
principal
objeto
de
estudio
de
la
Teoría
de
Grafos
Informalmente, un grafo es un conjunto de objetos llamados Vértices o Nodos unidos por
enlaces llamados aristas o arcos que permiten representar relaciones Binarias entre elementos
de un Conjunto. Típicamente, un grafo se representa gráficamente como un conjunto de puntos
(vértices o nodos) unidos por líneas (aristas).
Desde un punto de vista práctico, los grafos permiten estudiar las interrelaciones entre
unidades que interactúan unas con otras. Por ejemplo, una red de computadoras puede
representarse y estudiarse mediante un grafo, en el cual los vértices representan Terminales
y las aristas representan conexiones (las cuales, a su vez, pueden ser Cables o conexión
inalámbrica).
Prácticamente cualquier problema puede representarse mediante un grafo, y su estudio
trasciende
a
las
diversas
áreas
de
las
ciencias
exactas
y
las
ciencias
sociales.
En la figura, V = { a, b, c, d, e, f }, y A = { ab, ac, ae, bc, bd, df, ef }.
Un grafo es una pareja de conjuntos G = (V,A), donde V es el conjunto de vértices,
y A es el conjunto de aristas, este último es un conjunto de pares de la forma ( u,v) tal
que
tal
que
Para
simplificar,
notaremos
la
arista
(a,b)
como ab.
2.2 Teoría de Grafos:
En teoría de grafos, sólo queda lo esencial del dibujo: la forma de las aristas no son
relevantes, sólo importa a qué vértices están unidas. La posición de los vértices
tampoco importa, y se puede variar para obtener un dibujo más claro.
Muchas redes de uso cotidiano pueden ser modeladas con un grafo: una red de
carreteras que conecta ciudades, una red eléctrica o la red de drenaje de una ciudad.
Aristas dirigidas y no dirigidas
En algunos casos es necesario asignar un sentido a las aristas, por ejemplo, si se
quiere representar la red de las calles de una ciudad con sus direcciones únicas. El
conjunto de aristas será ahora un subconjunto de todos los posibles pares
ordenados de vértices, con (a, b) ≠ (b, a). Los grafos que contienen aristas
dirigidas
se
denominan
grafos
orientados,
como
el
siguiente:
Las aristas no orientadas se consideran bidireccionales para efectos prácticos
(equivale a decir que existen dos aristas orientadas entre los nodos, cada una en
un sentido). En el grafo anterior se ha utilizado una arista que tiene sus dos
extremos idénticos: es un lazo (o bucle), y aparece también una arista
bidireccional, y corresponde a dos aristas orientadas.
Aquí V = { a, b, c, d, e }, y A = { (a, c), (d, a), (d, e), (a, e), (b, e), (c, a), (c, c), (d, b) .
Se considera la característica de "grado" (positivo o negativo) de un vértice v (y
se indica como (v)), como la cantidad de aristas que llegan o salen de él; para el
caso de grafos no orientados, el grado de un vértice es simplemente la cantidad de
aristas incidentes a este vértice. Por ejemplo, el grado positivo (salidas) de d es 3,
mientras que el grado negativo (llegadas) de d es 0.
2.3 Grafo acíclico dirigido:
En ciencias de la computación y matemáticas un grafo acíclico dirigido (o gráfico
dirigido acíclico) conocido como DAG por sus siglas en inglés, es un grafo dirigido que
no tiene ciclos; esto significa que para cada vértice v, no hay un camino directo que
empiece y termine en v. Los DAG aparecen en modelos donde no tiene sentido que un
vértice tenga un camino directo a él mismo; por ejemplo, si un arco u→v indica que v es
parte de u, crear un ciclo v→u indicaría que u es subconjunto de sí mismo y de v, lo
cual
Cada
es
imposible.
DAG
da
Informalmente
lugar
a
un
un
DAG
"fluye"
ordenamiento
en
solo
una
dirección.
parcial ≤ sobre
sus
vértices,
donde u ≤ v exactamente cuando existe un camino directo desde u a v. Muchos DAG
pueden generar el mismo ordenamiento parcial de los vértices siendo el de menor
número de arcos denominado la reducción transitiva y el que mayor número de arcos la
Clausura transitiva. En particular, la clausura transitiva es el orden de accesibilidad ≤.
Archivo:Directed acyclic graph.png
Terminología:
Una fuente es un vértice sin flujos (relaciones) de entrada, mientras que
un sifón es un vértice sin flujos (relaciones) de salida. Un DAG finito tiene por lo
menos una fuente y un sifón. La profundidad de un vértice, en un DAG finito, es la
longitud del camino más largo que existe desde una fuente a dicho vértice,
la altura de un vértice es la longitud más larga del camino que exista desde el
vértice a un sifón. La longitud de una DAG finito es la longitud (número de arcos)
del camino directo más largo. Dicha longitud es igual a la máxima altura de todas
las fuentes e igual a la máxima profundidad de todas los sifones.
2.4 Topología
Definición
Rama de la matemática que estudia las propiedades del espacio que son invariantes
por homeomorfismos. Se trata de propiedades no métricas, es decir, de
propiedades cualitativas, y no cuantitativas, lo que la distingue de
la geometría común. Se la suele denominar "geometría débil" o "geometría
del caucho". Por ejemplo, una circunferencia es topológicamente equivalente a un
cuadrado, por más que sus propiedades métricas sean diferentes.
La Topología es el estudio de aquellas propiedades de los cuerpos geométricos que
permanecen
inalteradas
por
transformaciones
continuas.
Es
una
disciplina matemática que estudia las propiedades de los espacios topológicos y
las funciones
continuas.
La
Topología
se
interesa
por
conceptos
como proximidad, número de agujeros, el tipo de consistencia (o textura) que
presenta un objeto, comparar objetos y clasificar, entre otros múltiples atributos
donde destacan conectividad, compacidad, metricidad o metrizabilidad, etcétera.
Ilustración del Teorema de los cuatro colores
Los matemáticos usan la palabra topología con dos sentidos: informalmente es el
sentido arriba especificado, y de manera formal se refieren a una cierta familia
de subconjuntos de un conjunto dado, familia que cumple unas reglas sobre la unión y
la intersección. Este segundo sentido puede verse desarrollado en el artículo espacio
topológico.
Un ejemplo
Plano del metro de Madrid.
Observemos un antiguo plano del metro de Madrid. En él están representadas las
estaciones y las líneas de metro que las unen, pero no es geométricamente exacto. La
curvatura de las líneas de metro no coincide, ni su longitud a escala, ni la posición
relativa de las estaciones... Pero aún así es un plano perfectamente útil. Sin embargo,
este plano es exacto en cierto sentido pues representa fielmente cierto tipo de
información, la única que necesitamos para decidir nuestro camino por la red de
metro: información topológica.
2.5 Espacios Topológicos:
Un espacio topológico es una estructura matemática que permite la definición
formal de conceptos como convergencia,conectividad, ycontinuidad. La rama
de las matemáticas que estudia los espacios topológicos se llama topología.
Un espacio topológico es un conjunto E de elementos junto con T, una
colección de subconjuntos de E que satisfacen las siguientes propiedades:
1. El conjunto vacío y E están en T.
quad varnothing in
T, E in T
2. La intersección de cualquier colección finita de conjuntos de T está
también en T.
quad (O_1 in T, O_2 in T) Rightarrow (O_1 cap O_2 in
T)
3. La unión de toda colección de conjuntos de T está también en T.
quad (forall i in I, O_i in T) Rightarrow (cup_{iin I}
O_i in T)
Esta condición también se puede escribir:
quad forall S subset
cup_{Oin S} O in T
T,
Los conjuntos en T son los conjuntos abiertos, y sus complementos en E son
llamados
conjuntos
cerrados.
La colección T es llamada "topología" en E. Los elementos de E suelen llamarse
puntos, aunque pueden ser cualquiera de los objetos matemáticos. Un espacio
topológico en el cual los puntos son funciones es llamado un espacio funcional.
Al conjunto E se le llama substrato del espacio topológico.
Archivo:Topological space examples.svg
2.6 Orden Topológico:
Un Orden Topológico es una secuencia lineal de eventos a realizarse, cuyo orden
depende jerarquicamente de su relevancia para poder llevar a cabo cada uno de los
eventos. Es así que un orden topológico es aplicado para buscar una viabilidad y
orden en la resolución o puesta en marcha de cualquier evento.
Suponga que S es un grafo tal que cada nodo vi de S representa una tarea y cada
arista ( u, v ) significa que la finalización de la tarea u es un pre-requisito para que
comience la tarea v. Suponga que tal grafo S contiene un ciclo tal que:
P=( u, v, w, u )
Esto significa que no podemos empezar v hasta completar u, no podemos
empezar w hasta terminar v y no podemos empezar u hasta completar w. Así no
podemos completar ninguna tarea del ciclo. Por tanto, un grafo S así, que representa
tareas y relaciones de precedencia, no puede tener ciclos.
Ahora suponga que S es un grafo sin ciclos, considere la relación < sobre S definida
como sigue:
u < v si existe un camino de u a v
Esta relación tiene las siguientes tres propiedades:
1. Para cada elemento u de S, tenemos que u < u. ( Irreflexivilidad )
2. Si u < v, entonces v < u. ( Asimetría )
3. Si u < v y v < w, entonces u < w. ( Transitividad )
Tal relación < sobre S se llama ordenación parcial de S, y S con tal ordenación
se llama conjunto parcialmente ordenado o conjuntopo. Así, un grafo Ssin
ciclos se puede considerar un conjunto parcialmente ordenado.
Por lo tanto, puede también suponer que si S es un conjunto parcialmente
ordenado con la ordenación parcial denotada por <,entonces S se puede
considerar un grafo cuyos nodos son los elementos de S y cuyas aristas están
definidas como sigue:
( u, v ) es una arista en S si u < v
más aun, se puede demostrar que un conjunto S parcialmente ordenado,
considerado como un grafo, no tiene ciclos.
Como ejemplo podemos plantear que: sea S el grafo de la figura, observe que S
no tiene ciclos. Así S se puede considerar un conjunto parcialmente ordenado.
Note que G < C, ya que existe un camino desde G hasta C. Similarmente, B <
F y B < C. Por otro lado B no es menor que A, ya que no existe camino
de B a A, al igual que A no es menor que B.
Por lo tanto; sea S un grafo dirigido sin ciclos (o conjunto parcialmente
ordenado). Una ordenación topológica T de S es una ordenación lineal de los
nodos de S que preserva la ordenación parcial de S original, o sea, que si u <
v en S (si hay un camino de ua v en S), entonces u va delante de la v el la
ordenación lineal T, este se muestra en la siguiente figura, donde se incluyen
las aristas para indicar que concuerdan con la dirección de la ordenación lineal.
3 HISTORIA DE LA TOPOLOGÍA
3.1 Estudios iniciales:
Históricamente, las primeras ideas topológicas conciernen al concepto
de límite y al de completitud de un espacio métrico, y se manifestaron
principalmente en la crisis de los inconmesurables descubiertos por
Pitágoras ante la aparición de números reales no racionales. El primer
acercamiento concreto al concepto de límite y también al
de integral aparece en el método de exhaución de Arquímedes. La
aparición del Análisis Matemático en el siglo XVII puso en evidencia la
necesidad de formalizar el concepto de proximidad y continuidad, y la
incapacidad de la Geometría para tratar este tema. Fue precisamente
la fundamentación del Cálculo Infinitesimal, así como los intentos de
formalizar el concepto de variedad en Geometría lo que llevó a la
aparición de la Topología, a finales del siglo XIX y principios del XX.
El término topología lo acuña por primera vez Johan Bennedict Listing,
en 1836 en una carta1 a su antiguo profesor Müller, y posteriormente
en su libro Vorstudien zur Topologie (Estudios previos a la Topología),
publicado en 1847. Anteriormente se la denominaba analysis situs.
Maurice Fréchet introdujo el concepto de espacio métrico en 1906.
El origen de la Topología como disciplina científica lo inagura la
resolución por parte de Euler del problema de los Puentes de
Königsberg, en 1735. Ciertamente, la resolución de Euler del problema
utiliza un planteamiento topológico. La característica de Euler, el
primer invariante de la Topología Algebraica. La situación es
exactamente análoga a la del cálculo del área de la elipse por
Arquímedes.
3.2 Problemas en Topología:
Problema de los Puentes de Koeniegsberg:
El primer ejemplo satisfactorio para establecer el punto de partida de la topología es
el famoso problema de los puentes de Koenigsberg, un problema que despertaba la
curiosidad de muchas personas de la época de cuya naturaleza topológica fue
apreciada más tarde. El problema planteaba que dado un sistema de puentes como en
la figura, si era posible que una persona cruzara cada uno de estos puentes una sola
vez. El matemático suizo Leonhard Euler encontró la solución en 1735. La idea para
resolverlo fue la simplificación de la representación del problema reemplazando las
“áreas” con puntos y los puentes con aristas. La pregunta que Euler se planteó fue si
podría describir esta figura sin levantar el lápiz del papel de manera que cruzáramos
una sola vez por cada vértice y arista. El mismo Euler formuló el siguiente problema
mucho más general:
“Dada una configuración cualquiera del río y de los brazos en los que pudiera dividirse,
así como un número cualquiera de puentes, determinar si es o no posible cruzar cada
puente exactamente una vez”.
Ofreció
una
solución
que
resolvía
el
problema
en
muchas
situaciones:
“Cuando el número de puentes es impar, lo aumento en uno y lo divido por dos, cuando
el número es par, lo divido simplemente por dos. Entonces, si la suma de los números
resultantes es igual a la suma de los puentes más uno, el camino puede realizarse, si
bien ha de comenzar en una región a la que conduzca un número impar de puentes pero
si la suma es una unidad menor que el número de puentes más uno, el camino es posible
si su punto inicial es una región a la que conduzca un número par de puentes, ya que en
este caso la suma se incrementa de nuevo en una unidad”. Podemos decir, por tanto,
que la solución de Euler convierte un problema geométrico en principio, en uno de
naturaleza combinatoria. El problema de los cuatro colores:Otro problema
interesante que se puede reducir a un problema de grafos, pero en este caso
mucho más complicado, es el Problema de los cuatro colores. En 1850. Francis
Guthrie, pregunto a su hermano Frederick, en aquel momento estudiante de
Augustus de Morgan, el porqué cuatro colores bastaban para colorear cualquier
mapa, esto es, sin que dos paises colindantes tuviesen el mismo color. Kenneth
Appel y Wolfgang Haken demostraron finalmente en 1976 que sí es posible,
reduciendo el problema a un número finito de casos que se resolvieron con la ayuda
de un ordenador, el cuál necesitó nada menos que 1200 horas de cálculos.
4 Ordenación Topológica
La ordenación topológica es un sistema de ordenamiento de un grafo acíclico,
es decir, que no tiene ciclos; el cual consiste, en organizar de forma lineal ó en
lista ascendente ó descendente, una serie de vértices en desorden, para lo cual
primero debe de empezar de un "vértice padre" osea, un vértice sin
predecesores, y después visitar a sus vecinos,después de que haya visitado a
tos sus vecinos, pasa a analizar otro vértice, y de igual forma identifica todos
sus vecinos, y así recursivamente, hasta que haya visitado a todos los vértices.
En pocas palabras no se visitara un vértice, hasta que todos sus predecesores
hayan sido visitados.
Después de que ya han sido visitados todos losvértices del grafo dirigido,
se acomodan en lista ya sea d forma ascendente o descendente, según se
requiera, y se acomodan en base a el coste de tiempo de los vértices.
� Para un digrafo acíclico (dag) G = (N, A) el orden lineal de todos los
nodos tal que si G contiene el arco (u, v), entonces u aparece antes de
v en el orden dado.
� Si G tiene ciclos el orden lineal no es posible.� Ordenamiento topológico de todos los nodos
de un digrafo
es una manera de visitar todos sus nodos, uno por uno, en
una secuencia que satisface una restricción dada.� Un orden topológico de los
nodos de un digrafo G={N, A} es una secuencia (n1, n2, …, nk) tal que N= {n1, n2, …, nk} y para
todo (ni, nj) en N, ni precede a nj en la secuencia. Teniendo
una gráfica acíclica
dirigida (DAG, por sus siglas en inglés), nos interesa encontrar una
forma en que podamos acomodar los vértices en línea recta de tal
forma que la dirección de los arcos siempre apunte hacia un mismo
lado. Un ejemplo de cuando se dan este tipo de gráficas, es en las
materias de estudios superiores. Se tienen que tomar algunas
materias antes que otras (materias seriadas), pero nunca se puede
formar un ciclo (o no se podrían estudiar estas materias).
Como no hay forma en que nos podamos regresar, podemos ver a este
tipo de gráfica en forma similar a un árbol. Podemos utilizar cualquier
forma de recorrer un árbol para encontrar el ordenamiento
topológico, pero es más conveniente utilizar una búsqueda en
profundidad ya que es más fácil de implementar.
El
orden
Topológico
Seria:
Ejemplo: Este es un ejemplo común aplicado a la vida diaria, tan simple de
como
vestirse.




Arriba de cada vértice se muestra el coste de tiempo.
Distancia / Finalización
El algoritmo nos devuelve una lista enlazada, con los nodos del grafo, en
orden decreciente en tiempo de finalización.
Una vez ya ordenado topologicamente se pueden ver las precedencias de
las
tareas:
1. Ponerse la camisa antes que el cinturón y el jersey.
2. Ponerse el pantalón antes que los zapatos y elcinturón.
3. Ponerse los calcetines antes que los zapatos.Un Orden Topológico ordena
los nodos de un grafo dirigido acíclico de forma que si hay una camino del nodo
A al nodo B entonces A aparece antes que B en la ordenación.
El sentido de las flechas indica las dependencias. A depende de B y C, B
depende de C, etc, etc.
La librería standard de Ruby tiene un módulo (TSort) que implementa el orden
topológico usando el algoritmo de Tarjan y nos ofrece una interfaz para
utilizarlo.El módulo TSort está diseñado para ser utilizado con cualquier objeto
que pueda ser modelado como un grafo dirígido.
5 Ejemplo Clarificador
5.1 Caso práctico Ordenamiento topológico de un
grafo
Problema:
Existen varios problemas en las cuales no es posible iniciar una actividad sin antes haber
terminado otra. Un problema que ya seguramente h podido apreciar es el de determinar el
orden en el cual usted podrá tomar cursos. Algunos tienen prerrequisitos. Otros más de un
prerrequisito. Y adicionalmente los prerrequisitos pueden tener a su vez prerrequisitos del
plan de estudios de la carrera de Ingeniería de Software de la universidad tecnológica del Perú
Los grafos que se muestran en la figura se conocen como grafos acíclicos dirigidos (DAG). Se
trata de grafos dirigidos que no contienen ciclos, de, modo que una vez que se pasa por un
vértice, no hay trayectoria de regreso a ese vértice
Ejemplo de grafo acíclico dirigido
Prerrequisitos del Plan de estudios
7 Aplicaciones:
Las imágenes 2-dimensionales son las mas ampliamente estudiadas,
aunque últimamente las 3-dimensionales están siendo muy utilizadas.
También se utilizan imágenes 4-dimensionales para representar
imágenes 3-dimensionales en movimiento.
De las estrategias planteadas, la primera y las más utilizada es la
introducida por Azriel Rosenfeld en 1970. Se basa en la noción de
adyacencia entre puntos de Zn (además de Zn también considera en
ocasiones los centros de una teselación del plano por hexágonos). Su
enfoque descansa principalmente en nociones de Teoría de Grafos.
Desde entonces la Topología Digital ha proporcionado los fundamentos
teóricos para importantes operaciones de procesamiento de imagen,
como recuento de objetos, adelgazamiento de imágenes, detección de
bordes y relleno de contornos. El adelgazamiento de imágenes es una
operación de preprocesamiento en reconocimiento de formas. Su
objetivo es reducir el conjunto de puntos de la imagen sin alterar la topología
de la misma.
� Modelado de actividades para resolver problemas de planificación o
programación de las mismas siguiendo un criterio de minimización o
maximización.
� Evaluación de expresiones aritméticas
(- b + sqrt( b * b - 4 * a * c)) / 2 * a
( - b - sqrt(b * b - 4 * a * c)) / 2 * a
8 Código:
Codigo java:
class Vertex {
public char label;
public Vertex(char lab) {
label = lab;
}
}
public class GraphTS {
private final int MAX_VERTS = 20;
private Vertex vertexList[]; list of vertices
private int matrix[][]; adjacency matrix
private int numVerts; current number of vertices
private char sortedArray[];
public GraphTS() {
vertexList = new Vertex[MAX_VERTS];
matrix = new int[MAX_VERTS][MAX_VERTS];
numVerts = 0;
for (int i = 0; i < MAX_VERTS; i++)
for (int k = 0; k < MAX_VERTS; k++)
matrix[i][k] = 0;
sortedArray = new char[MAX_VERTS]; sorted vert labels
}
public void addVertex(char lab) {
vertexList[numVerts++] = new Vertex(lab);
}
public void addEdge(int start, int end) {
matrix[start][end] = 1;
}
public void displayVertex(int v) {
System.out.print(vertexList[v].label);
}
public void topo() toplogical sort
{
int orig_nVerts = numVerts;
while (numVerts > 0) while vertices remain,
{
get a vertex with no successors, or -1
int currentVertex = noSuccessors();
if (currentVertex == -1) must be a cycle
{
System.out.println("ERROR: Graph has cycles");
return;
}
insert vertex label in sorted array (start at end)
sortedArray[numVerts - 1] = vertexList[currentVertex].label;
deleteVertex(currentVertex); delete vertex
}
vertices all gone; display sortedArray
System.out.print("Topologically sorted order: ");
for (int j = 0; j < orig_nVerts; j++)
System.out.print(sortedArray[j]);
System.out.println("");
}
public int noSuccessors() returns vert with no successors (or -1 if no such verts)
{
boolean isEdge; edge from row to column in adjMat
for (int row = 0; row < numVerts; row++) {
isEdge = false; check edges
for (int col = 0; col < numVerts; col++) {
if (matrix[row][col] > 0) if edge to another,
{
isEdge = true;
break; this vertex has a successor try another
}
}
if (!isEdge) if no edges, has no successors
return row;
}
return -1; no
}
public void deleteVertex(int delVert) {
if (delVert != numVerts - 1) if not last vertex, delete from vertexList
{
for (int j = delVert; j < numVerts - 1; j++)
vertexList[j] = vertexList[j + 1];
for (int row = delVert; row < numVerts - 1; row++)
moveRowUp(row, numVerts);
for (int col = delVert; col < numVerts - 1; col++)
moveColLeft(col, numVerts - 1);
}
numVerts--; one less vertex
}
private void moveRowUp(int row, int length) {
for (int col = 0; col < length; col++)
matrix[row][col] = matrix[row + 1][col];
}
private void moveColLeft(int col, int length) {
for (int row = 0; row < length; row++)
matrix[row][col] = matrix[row][col + 1];
}
public static void main(String[] args) {
GraphTS g = new GraphTS();
g.addVertex('A'); 0
g.addVertex('B'); 1
g.addVertex('C'); 2
g.addVertex('D'); 3
g.addVertex('E'); 4
g.addVertex('F'); 5
g.addVertex('G'); 6
g.addVertex('H'); 7
g.addEdge(0, 3); AD
g.addEdge(0, 4); AE
g.addEdge(1, 4); BE
g.addEdge(2, 5); CF
g.addEdge(3, 6); DG
g.addEdge(4, 6); EG
g.addEdge(5, 7); FH
g.addEdge(6, 7); GH
g.topo(); // do the sort
}
}
11 Referencias
Web-links:
Definición de topología http://www.topologia.org/historia_de_la_topologia.htm
Historia de
Topologiahttp://www.uam.es/personal_pdi/ciencias/ezuazua/informweb/trabajosdehi
storia/HISTORIADELATOPOLOGIA.pdf
Orden Topologico http://ldc.usb.ve/~carrasquel/Orden%20Topologico.pdf
Ordenación Topológica y
Algoritmos http://www.monografias.com/trabajos/grafos/grafos.shtml
Material sobre Algoritmos de grafos
Completo http://lcg.ciens.ucv.ve/~ernesto/nds/CotoND200302.pdf
Descargar