• No se han encontrado resultados

Algoritmos sobre Grafos

N/A
N/A
Protected

Academic year: 2021

Share "Algoritmos sobre Grafos"

Copied!
23
0
0

Texto completo

(1)

Algoritmos sobre Grafos

Sexta Sesión Hugo Franco, PhD

(2)

Deniciones Algoritmos básicos de búsqueda Algoritmos de ruta más corta Algoritmos basados en árboles

Contenido

1 Deniciones

2 Algoritmos básicos de búsqueda 3 Algoritmos de ruta más corta 4 Algoritmos basados en árboles

(3)
(4)

Deniciones Algoritmos básicos de búsqueda Algoritmos de ruta más corta Algoritmos basados en árboles

Deniciones sobre Grafos

Par de una lista de nodos y una lista de enlaces, denidos a su vez como pares del conjunto de nodos.

G ≡ {V,E}

V ≡ {v1,v2, . . . ,vn}

E ≡ {. . . ,{vi,vj}, . . .}, i,j ∈[1,n], i6=j

Si el orden de los elementos vi y vj en cada par del conjunto de

enlace es relevante, se tiene un grafo dirigido Representaciones en algoritmos:

Lista de Adyacencia: ai n, cada ai es la lista de nodos enlazados con

el nodo i−ésimo

Matriz de Adyacencia: A≡aij m×n, aij =1 sí y sólo sí vi está

conectado con vj, 0 en caso contrario. Se puede extender asignando

a los aij un valor asociado a la intensidad del enlace (matriz de

proximidad) o la propia distancia geodésica de un nodo a otro (matriz geodésica)

(5)

Ciclo, Grafos Acíclicos

Ciclo: secuencia de enlaces adyacentes en un grafo, recorridos sin repetir enlaces y cuyo nodo de partida es el mismo nodo de llegada .

Ciclo Hamiltoniano: aquel que recorre todos sus nodos

exactamente una vez (excepto el de partida/llegada).

Ciclo Euleriano: ciclo que contiene todos los enlaces de un grafo, cada uno de ellos una única vez.

(6)

Deniciones Algoritmos básicos de búsqueda Algoritmos de ruta más corta Algoritmos basados en árboles

Grafo Dirigido Acíclico

Grafo dirigido que no tiene ciclos

para cada nodo, no hay un camino directo que empiece y termine en éste.

Fuente: nodo sin enlaces de entrada, Sumidero: nodo sin enlaces de salida. Un GDA (DAG) nito tiene por lo menos una fuente y un sumidero.

La profundidad de un nodo es la longitud del camino más largo desde una fuente a éste La altura de un nodo es la mayor longitud del camino más largo entre éste y un sumidero. La longitud de una DAG nito es la longitud (número de arcos) del camino más largo.

máxima altura de todas las fuentes, máxima profundidad de todos los sumideros.

(7)

Etiquetado

Los recorridos sobre grafos exigen usualmente almacenar de forma accesible el Estado de cada nodo (y en ocasiones, enlace) del grafo según haya sido recorrido / analizado durante el proceso de análisis / búsqueda

La forma de almacenar ese estado se puede implementar a través de atributos asignados a los nodos que representen el estado en el que se encuentra el nodo con un valor asociado a cada estado,

El estado de un nodo puede constar de uno o más parámetros, simbólicos o numéricos. En casos de representaciones simbólicas, se suelen emplear enumeraciones descriptivas, que determinan la implementación de las reglas de evolución de los nodos del grafo

(8)

Deniciones Algoritmos básicos de búsqueda Algoritmos de ruta más corta Algoritmos basados en árboles

Etiquetado

Los recorridos sobre grafos exigen usualmente almacenar de forma accesible el Estado de cada nodo (y en ocasiones, enlace) del grafo según haya sido recorrido / analizado durante el proceso de análisis / búsqueda

La forma de almacenar ese estado se puede implementar a través de atributos asignados a los nodos que representen el estado en el que se encuentra el nodo con un valor asociado a cada estado,

El estado de un nodo puede constar de uno o más parámetros, simbólicos o numéricos. En casos de representaciones simbólicas, se suelen emplear enumeraciones descriptivas, que determinan la implementación de las reglas de evolución de los nodos del grafo

(9)

Etiquetado

Los recorridos sobre grafos exigen usualmente almacenar de forma accesible el Estado de cada nodo (y en ocasiones, enlace) del grafo según haya sido recorrido / analizado durante el proceso de análisis / búsqueda

La forma de almacenar ese estado se puede implementar a través de atributos asignados a los nodos que representen el estado en el que se encuentra el nodo con un valor asociado a cada estado,

El estado de un nodo puede constar de uno o más parámetros, simbólicos o numéricos. En casos de representaciones simbólicas, se suelen emplear enumeraciones descriptivas, que determinan la implementación de las reglas de evolución de los nodos del grafo

(10)
(11)

Problema del Ordenamiento Topológico

Dado un Grafo Dirigido Acíclico, el problema del ordenamiento topológico consiste en

Encontrar un ordenamiento de los vértices tal que todos ellos se listen hacia adelante (nodo inicial, nodo nal) de acuerdo a sus enlaces

Utilidad: Asignar una prioridad a una lista de tareas con restricciones de precedencia (hacer primero la tarea A porque la B dependende del resultado de A, etc...)

Se asume que el grafo está representado como una lista de adyacencias

(12)

Deniciones Algoritmos básicos de búsqueda Algoritmos de ruta más corta Algoritmos basados en árboles

Búsqueda en Profundidad

Dada una lista de vértices V y una lista de enlaces E, hacer Para i =1 hasta n

Si vi no está marcado como visitado,

RecorrerProfundidad(i)

Fin

Función RecorrerProfundidad(índice i) Marcar vi como visitado

Agregar i a la lista de recorrido

Usando la lista de enlaces e, para cada vecino vj de vi Si vj no está marcado como visitado

RecorrerProfundidad(j)

Agregar el enlace que une a vi con vjal árbol de recorrido Regresar

(13)

Búsqueda en Anchura

Dada una lista de vértices V y una lista de enlaces E, deniendo una cola de prioridad Q, hacer

Marcar el nodo inicial vi como visitado

Añadir i a la lista de recorrido encolar vi en Q

Mientras Q 6=Ø extraer ui desde Q

Para cada vecino uj de ui

Si uj no esta marcado como visitado

agregar uja Q

marcar ujcomo visitado

(14)
(15)

Algoritmo de BellmanFord

Algoritmo de programación dinámica

Encontrar la ruta más corta desde todos los nodos a un nodo sumidero t. Se suele calcular las longitudes de los caminos más cortos así que posteriormente se pueden recontruir las rutas fácilmente. Laidea de algoritmo es

1 Para cada nodo v, encontrar la longitud de la ruta más corta a t que usa al menos una arista o etiquetar∞si no hay tal ruta.

2 Supóngase para todo v se tienen las longitudes de la ruta más corta hasta t que usa i−1 o menos enlaces. La ruta más corta desde v a t que usa i o

menos enlaces primero irá a algún vecino xj de v y tomar la ruta más corta

desde xj hasta t que usa i−1 o menos enlaces (paso 1). Así, se necesita

tomar únicamente los mínimos de la distancia entre todos los vecinos xjde

(16)

Deniciones Algoritmos básicos de búsqueda Algoritmos de ruta más corta Algoritmos basados en árboles

Pseudocódigo BellmanFord

1 inicializar d[v][0] =for v6=t. d[t][i]=0∀i.

2 Para i =1 hasta n1 1 Para cada v 6=t

1 d[v][i] = min

(v,xj)∈E(len(v,x) + d[x][i-1])

3 Para cada v, escribir d[v][n-1].

(17)

Todas las distancias mínimas: FloydWarshall

Sea A[i][j] la matriz de proximidad del grafo

En vez de incrementar el número de enlaces en la rtua, se recorrerá el grafo por vértices

Se incrementará el contador sobre el conunto de vértices que se admiten como intermedios en la ruta estimada

Pseudocódigo: usando la matriz de i, después de cada iteración del bucle exterior, A[i][j] será igual a la longitud del camino más corto de vi a vj que puede usar los vértices en la secuencia{1,2, . . . ,k}:

Para k = 1 hasta n

Para cada i,j

A[i][j] = min( A[i][j], (A[i][k] + A[k][j]); .

Aunque el algoritmo tarda del orden de n3, donde n es el número de

(18)

Deniciones Algoritmos básicos de búsqueda Algoritmos de ruta más corta Algoritmos basados en árboles

Todas las distancias mínimas: Dijkstra

Sea un grafo dirigido conectado de N nodos, sea x el nodo origen y Dn

un vector (array) de distancias a los diferentes nodos indexados por n

1 Inicializar el array de todas las distancias en Dn con un valor innito relativo (valor inicial desconocido), exceptuando la de x que se debe colocar en 0 (la distancia de x a sí mismo es 0).

2 Sea k=x (k es el nodo actual).

3 Recorrer todos los nodos adyacentes de k (denominados vi), excepto los marcados como evaluados

4 Si la distancia desde x hasta vi guardada en Di es mayor que la distancia desde x hasta k sumada a la distancia desde a hasta vi, ésta se sustituye

con la segunda nombrada, esto es:

si (Di >Dk+d(k,vi)) entoncesDi =Dk+d(k,vi)

5 Marcar como evaluadoa k.

6 El siguiente nodo actual es el de menor valor en Di (puede hacerse almacenando los valores en una cola de prioridad); volver a 3 mientras existan nodos no evaluados.

(19)

Algoritmo de Dijkstra: Ejemplo

3 3 1 2 1 3 2 3 3 2 2 A B C D E F G Mientras Q 6=Ø

Se escoge v ∈Q con menor

D y se marca como visitado (sale de Q)

Se añaden a Q los vecinos no marcados de v, denominados x Se actualiza D de cada x si la distancia que atraviesa a v es menor que la de la iteración anterior

(20)
(21)

Árbol de Expansión

Spanning tree

Un árbol de expansión de un grafo es una estructura de datos en árbol que toca todos los vértices del grafo

Sólo tienen sentido en grafos de un sólo componente (conexos)

Un árbol de expansión mínimo es un árbol de expansión cuya suma de longitudes de los enlaces es tan pequeña como sea posible en un grafo dado (puede haber más de uno)

Se llama tamaño del árbol de expansión a la suma de las longitudes de los enlaces.

(22)

Deniciones Algoritmos básicos de búsqueda Algoritmos de ruta más corta Algoritmos basados en árboles

Algoritmo de Prim

El algoritmo de Prim sobre un grafo permite construir el árbol de expansión mínimo (MST) del mismo. Puede verse como una versión simplicada del algoritmo de Dijkstra

1 Seleccionar un nodo arbitrario de inicio s. Inicializar el árbol T =s. 2 Repetidamente agregar el enlace más corto incidente a T en cada

nodo (el enlace más corto que tiene un vértice dentro de los enlaces de T y el otro no hasta que el árbol contenga todos los nodos

(23)

Algoritmo de Kruskal

Otra forma de encontrar el árbol de expansión mínimo de un grafo muy conocida es el Algoritmo de Kruskal.

La idea es la de ordenar los enlaces por longitud y examinar cada uno de ellos del más corto al más largo. Se debe poner cada enlace en un conjunto de subárboles si no forma un ciclo con los enlaces escogidos con anterioridad

Referencias

Documento similar

Dado que el régimen de los poderes de emergencia afecta a la democracia, a los derechos fundamentales y humanos, así como al Estado de derecho, el control de

Cedulario se inicia a mediados del siglo XVIL, por sus propias cédulas puede advertirse que no estaba totalmente conquistada la Nueva Gali- cia, ya que a fines del siglo xvn y en

truye un grafo sustituyendo de forma iterativa cada nodo en un grafo original por un grafo. Es decir, empezado por un sustrato conexo inicial, cada nodo de este sus- trato

Señalamos al principio del trabajo que el español permite una cierta li- bertad de colócación de los distintos elementos oracionales, y que en ello se distingue de lenguas en que

Actualmente existen algunas herramientas online enfocadas a la teoría de grafos, como por ejemplo Graph Online [1] centrada en los algoritmos de búsqueda de camino más corto; Rhumbl

Vértice Adyacente: Si tenemos un par de vértices de un grafo (U, V) y si tenemos una arista que los une, entonces son vértices adyacentes.. En pocas palabras un vértice

Para cumplir esta función el Estado ha de gozar de una de- terminada autonomía capaz de enfrentarse no sólo a las reivin- dicaciones de la clase trabajadora,

[r]