Lógica matemática
Unilibre - Pereira
Risaralda - Pereira
2018
Grafos aciclicos
Lógica matematica
Unilibre - Pereira
Risaralda - Pereira
2018
Tabla de contenido
INTRODUCCIÓN .............................................................................................................................. 4
Antecedentes del algoritmo ........................................................................................................ 4
Autores.............................................................................................................................................. 6
Eric W. Weisstein ....................................................................................................................... 6
MathWorld, ScienceWorld y Wolfram Research ............................................................ 6
Paul Erdős .................................................................................................................................... 7
Alfréd Rényi ................................................................................................................................. 7
Descripción del algoritmo ............................................................................................................ 8
Terminología................................................................................................................................ 8
Técnicas del algoritmo.............................................................................................................. 8
Algoritmo de aciclicidad......................................................................................................... 10
Los métodos Erdös-Rĕny ...................................................................................................... 11
Ramas de estudio................................................................................................................. 12
Teorema 1 ............................................................................................................................... 12
Teorema 2 ............................................................................................................................... 12
Algoritmo de Dijkstra .................................................................................................................. 12
Teoría del camino mas corto................................................................................................. 13
Algoritmo .................................................................................................................................... 13
Complejidad ............................................................................................................................... 13
Pseudocódigo ........................................................................................................................... 14
Implementación en Java ........................................................................................................... 14
Otra versión en C++ del algoritmo de Dijkstra ...................................................................... 15
Aplicación de los DAGs en el problema de la planificación de tareas en los SCHD . 18
Bibliografía ........................................................................................................................................ 19
INTRODUCCIÓN
Los grafos son estructuras que representan las relaciones, las interdependencias y las
características entre los objetos, y son utilizados en diferentes áreas de la investigación
científica .En el área de la computación paralela y distribuida, se utilizan para desagregar
las distintas tareas que conforman la solución de un problema, y la forma en que se
distribuyen estas tareas entre los procesadores mediante los algoritmos de planificación y
asignación de tareas ; los grafos también permiten mostrar las dependencias, las
restricciones de precedencia, los enlaces de comunicación, los costos de cálculo y los
costos de comunicación de las tareas que constituyen la aplicación a ser ejecutada dentro
del sistema de cómputo .
Eric W. Weisstein
Eric W. Weisstein (Bloomington, Indiana, 18 de marzo de 1969) es
un enciclopedista estadounidense, creador y mantenedor de la enciclopedia en
línea MathWorld, así como de Eric Weisstein's World of Science (ScienceWorld).
Actualmente trabaja para Wolfram Research, Inc.
Los números de dígrafos acíclicos etiquetados en 2, ... nodos son 1, 3, 25, 543,
29281, ... (OEIS A003024 ). La conjetura de Weisstein propuso que las matrices
de valores propios positivos estaban en correspondencia uno a uno con dígrafos acíclicos
marcados en los nodos, y esto fue comprobado posteriormente por McKay et
al. (2004). Los recuentos de ambos están, por lo tanto, dados por la hermosa ecuación de
recurrencia.
con (Harary y Palmer 1973, p. 19; Robinson 1973, pp. 239-273).
Paul Erdős
Paul Erdős, nacido Pául Erdős (IPA: ˈɛrdøːʃ; Budapest, 26 de marzo de 1913-Varsovia, 20
de septiembre de 1996), fue un matemático húngaroinmensamente prolífico y famoso por
su excentricidad que, con cientos de colaboradores, trabajó en problemas
sobre combinatoria, teoría de grafos, teoría de números, análisis clásico, teoría de
aproximación, teoría de conjuntos y probabilidad.
Su vida fue documentada en la película N es un número: El retrato de Paul Erdős, hecha
mientras él todavía estaba vivo, y el libro El hombre que solo amaba a los números (1998).
Murió de un ataque al corazón el 20 de septiembre de 1996, a la edad de 83 años, mientras
asistía a una conferencia en Varsovia (Polonia).
Alfréd Rényi
Rényi nació en Budapest de padres Artur Rényi y Barbara Alexander, su padre era un
ingeniero mecánico, mientras que su madre era hija de un filósofo y crítico literario, Bernát
Alexander. El maestro de la escuela le impidió matricularse en la universidad en el año 1939
debido a las leyes anti-judías vigentes en ese momento, pero logró matricularse en
la Universidad de Budapest en 1940 y terminó sus estudios en 1944. En este punto fue
encarcelado en un campamento de trabajo, escapó, y concluyó su Ph.D. en 1947 en
la University of Szeged, bajo la asesoría de Frigyes Riesz.3 Se casó con Katalin Schulhof,
ella misma matemática, en 1946; Zsuzsa, su hija, nació en 1948. Después de un breve
puesto de asistente de cátedra en Budapest, fue nombrado Profesor Extraordinario en
la Universidad de Debrecen en 1949.
Rényi probó, empleando algunos métodos, que existe un número tal que cada número
es la suma de un número primo y un número escrito como producto de los números primos
Terminología
Una fuente es un vértice sin flujos (relaciones) de entrada, mientras que
un sifón o sumidero 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 todos los sifones.
Algoritmo de aciclicidad
El algoritmo se basa en los siguientes resultados:
· Si eliminamos un hoja y la arista incidente en ella, el subgrafo que nos queda sigue
teniendo los
mismos ciclos que antes (una hoja no puede formar parte de un ciclo).
·Si el grafo es conexo, y elimínanos una hoja el subgrafo resultante sigue siendo conexo.
Luego sobre un grafo conexo, el método del algoritmo es el siguiente:
-Si tiene más de un vértice y no tiene una hoja, no es cíclico. Si tiene una hoja, la eliminamos
del grafo.
-Si el subgrupo resultante tiene más de un vértice y no tiene hojas, no es cíclico y tampoco
lo es el inicial. Si tiene una hoja, la eliminamos.
Sucesivamente, hasta que nos quede un solo vértice de grado 0, en cuyo caso es cíclico,
o
hasta obtener un subgrupo de más de un vértice y sin hojas, en cuyo caso tiene ciclos.
Teorema 1
Dado un G(n, p) con un valor p constante e independiente de n, entonces el grafo seguro
que posee casi seguro un diámetro igual a 2.
Teorema 2
Para un grafo G(n, p) aleatorio se establece que . Si c > 1 entonces casi todos los
grafos no poseen vértices aislados y si c < 1 casi todos los grafos tienen al menos un vértice
aislado.
Pero la forma mas directa de poder basarnos en los grafos acíclicos es basándonos por
medio de otros como va a ser el siguiente :
Algoritmo de Dijkstra
El algoritmo de Dijkstra, también llamado algoritmo de caminos mínimos, es
un algoritmo para la determinación del camino más corto, dado un vérticeorigen, hacia el
resto de los vértices en un grafo que tiene pesos en cada arista. Su nombre alude a Edsger
Dijkstra, científico de la computación de los Países Bajos que lo describió por primera vez
en 1959.[cita requerida]
La idea subyacente en este algoritmo consiste en ir explorando todos los caminos más
cortos que parten del vértice origen y que llevan a todos los demás vértices; cuando se
obtiene el camino más corto desde el vértice origen hasta el resto de los vértices que
componen el grafo, el algoritmo se detiene. Se trata de una especialización de la búsqueda
de costo uniforme y, como tal, no funciona en grafos con aristas de coste negativo (al elegir
siempre el nodo con distancia menor, pueden quedar excluidos de la búsqueda nodos que
en próximas iteraciones bajarían el costo general del camino al pasar por una arista con
costo negativo).
Una de sus aplicaciones más importantes reside en el campo de la telemática. Gracias a
él, es posible resolver grafos con muchos nodos, lo que sería muy complicado resolver sin
dicho algoritmo, encontrando así las rutas más cortas entre un origen y todos los destinos
en una red
Teoría del camino mas corto
En la teoría de grafos, el problema del camino más corto es el problema que consiste en
encontrar un camino entre dos vértices (o nodos) de tal manera que la suma de los pesos
de las aristas que lo constituyen es mínima. Un ejemplo de esto es encontrar el camino más
rápido para ir de una ciudad a otra en un mapa. En este caso, los vértices representarían
las ciudades y las aristas las carreteras que las unen, cuya ponderación viene dada por el
tiempo que se emplea en atravesarlas.
Algoritmo
Teniendo un grafo dirigido ponderado de N nodos no aislados, sea x el nodo inicial. Un
vector D de tamaño N guardará al final del algoritmo las distancias desde x hasta el resto
de los nodos.
1. Inicializar todas las distancias en D con un valor infinito relativo, ya que son
desconocidas al principio, exceptuando la de x, que se debe colocar en 0, debido a
que la distancia de x a x sería 0.
2. Sea a = x (Se toma a como nodo actual.)
3. Se recorren todos los nodos adyacentes de a, excepto los nodos marcados. Se les
llamará nodos no marcados vi.
4. Para el nodo actual, se calcula la distancia tentativa desde dicho nodo hasta sus
vecinos con la siguiente fórmula: dt(vi) = Da + d(a,vi). Es decir, la distancia tentativa
del nodo ‘vi’ es la distancia que actualmente tiene el nodo en el vector D más la
distancia desde dicho nodo ‘a’ (el actual) hasta el nodo vi. Si la distancia tentativa
es menor que la distancia almacenada en el vector, se actualiza entonces el vector
con esta distancia tentativa. Es decir, si dt(vi) < Dvi → Dvi = dt(vi)
5. Se marca como completo el nodo a.
6. Se toma como próximo nodo actual el de menor valor en D (puede hacerse
almacenando los valores en una cola de prioridad) y se regresa al paso 3, mientras
existan nodos no marcados.
Una vez terminado al algoritmo, D estará completamente lleno.
Complejidad
Orden de complejidad del algoritmo:
O(|V|2+|A|) = O(|V|2), sin utilizar cola de prioridad, :O((|A|+|V|) log |V|) = O(|A| log |V|)
utilizando cola de prioridad (por ejemplo, un montículo de Fibonacci). Por otro lado, si se
utiliza un montículo de Fibonacci, sería O(|V| log |V|+|A|).
La complejidad computacional del algoritmo de Dijkstra se puede calcular contando las
operaciones realizadas:
El algoritmo consiste en n-1 iteraciones, como máximo. En cada iteración, se añade
un vértice al conjunto distinguido.
En cada iteración, se identifica el vértice con la menor etiqueta entre los que no
están en Sk. El número de estas operaciones está acotado por n-1.
Además, se realizan una suma y una comparación para actualizar la etiqueta de
cada uno de los vértices que no están en Sk.
Luego, en cada iteración se realizan a lo sumo 2(n-1) operaciones.
Entonces:
Teorema: El algoritmo de Dijkstra realiza O(n2) operaciones (sumas y comparaciones) para
determinar la longitud del camino más corto entre dos vértices de un grafo ponderado
simple, conexo y no dirigido con n vértices.
En general:
Tiempo de ejecución = O(|A|.𝑻_𝒅𝒌+|v|.𝑻_𝒅𝒎)
|A|: Número de aristas
𝑻_𝒅𝒌: Complejidad de disminuir clave
|V|: Numero de vértices
𝑻_𝒅𝒎: Complejidad de extraer mínimo
Pseudocódigo
Implementación en Java
0 /**
1 * Realizar el algoritmo de Dijkstra sobre el grafo
2 * @param origen nodo inicial
3 * @param destino nodo destino
4 * @return camino ArrayList con el camino a seguir.
5 */
6 public ArrayList<Integer> dijkstra(int origen, int destino) {
7 ArrayList<Integer> camino= new ArrayList<Integer>();
8 int distancia=Grafo.INFINITO;
9 int nodo=origen;
10 boolean fin=true;
11 camino.add(nodo);
12 while(fin) {
13 if(this.floydC[nodo][destino]<distancia) {
14 /*El metodo siguiente(nodo, destino), nos
devuelve
15 el siguiente nodo a visitar*/
16 nodo=this.siguiente(nodo, destino);
17 camino.add(nodo);
18 }
19
20 if(nodo==destino) {
21 fin=false;
22 }
23 }
24
25 return camino;
26 }
//Declarando variables
#define MAX_NODOS 1024 /* número máximo de nodos */
#define INFINITO 1000000000 /* un número mayor que cualquier ruta máxima
*/
int n,i,k,minimo, dist[MAX_NODOS][MAX_NODOS]; /* dist[i][j] es la
distancia de i a j */
void inicializacion(){
for (p = &nodo[0]; p < &nodo[n]; p++) { /* estado de
inicialización*/
p->predecesor = -1;
p->longitud = INFINITO;
p->etiqueta = false;
}
}
void relajar(){
for (int i = 0; i <n; i++){ /* este grafo tiene n nodos
*/
if (dist[k][i] != 0 && nodo[i].etiqueta == false) {
if (nodo[k].longitud + dist[k][i] <
nodo[i].longitud) {
nodo[i].predecesor = k;
nodo[i].longitud = nodo[k].longitud +
dist[k][i];
}
}
}
}
void extraer_minimo(){ /* Encuentra los nodo etiquetados
tentativamente y determina el menor entre estos nodos tentativos. */
k = 0;
minimo = INFINITO;
for (i = 0; i < n; i++){
if (nodo[i].etiqueta == false && nodo[i].longitud <
minimo) {
minimo = nodo[i].longitud;
k = i;
}
}
}
https://es.wikipedia.org/wiki/%C3%81rbol_(teor%C3%ADa_de_grafos)
https://es.wikipedia.org/wiki/Eric_W._Weisstein
http://mathworld.wolfram.com/AcyclicDigraph.html
http://www.redalyc.org/jatsRepo/944/94455712004/html/index.html
http://www.ma.uva.es/~antonio/Industriales/Apuntes_05-06/LabM/A_Grafos2006-2(1).pdf
https://esistemasoperativos.mforos.com/2087245/11047186-ejemplo-de-grafo-aciclico/
http://www.eumed.net/tesis-doctorales/2007/cavl/Grafos%20aciclicos%20dirigidos.htm
http://personales.unican.es/gomezd/teaching/algs/ciclos.pdf
https://es.wikipedia.org/wiki/Problema_del_camino_m%C3%A1s_corto#Grafos_ac%C3%ADclicos
_dirigidos
https://slideplayer.es/slide/4188034/
https://es.wikipedia.org/wiki/Modelo_Erd%C3%B6s%E2%80%93R%C3%A9nyi
https://es.wikipedia.org/wiki/Paul_Erd%C5%91s
https://es.wikipedia.org/wiki/Alfr%C3%A9d_R%C3%A9nyi
https://es.wikipedia.org/wiki/Grafo_aleatorio
https://es.wikipedia.org/wiki/Algoritmo_de_Dijkstra
https://es.wikipedia.org/wiki/Problema_del_camino_m%C3%A1s_corto#Grafos_ac%C3%ADclicos
_dirigidos