lunes, 31 de mayo de 2010

Cobertura de vertices (puntos extra)

Tema del proyecto 5 no estoy muy seguro si alguien lo explico en clase pero aqui se los pongo en mi blog Cobertura de vertices.

En ciencias de la computación, el Problema de la cobertura de vértices es un problema NP-completo, que pertenece a los 21 problemas NP-completos de Karp. Es muy utilizado en teoría de complejidad computacional para probar la pertenencia a la clase NP-hard de otros problemas computacionales difíciles.

La cobertura de vértices de un grafo no dirigido G = (V,E) es un subconjunto S de V (el conjunto de vértices) tal que para cada arista ab del conjunto E, ya sea el vértice a o b pertenece a S.

Ejemplo:

En el siguiente grafo

{1,3,5,6} es una cobertura de vértices de tamaño 4. Sin embargo, esta no es la cobertura mínima, porque existen las coberturas de vértices {2,4,5} y {1,2,4}, ambas de tamaño 3.

El Problema de cobertura de vértices es un problema de optimización que consiste en encontrar una cobertura de vértices de tamaño k en un grafo dado.

ENTRADA: Grafo G.
SALIDA: El menor número k tal que exista una cobertura de vértices S para G de tamaño k.

Equivalentemente, el problema puede definirse como un problema de decisión:

ENTRADA: Grafo G y un entero positivo k.
PREGUNTA: ¿Existe una cobertura de vértices S para G de tamaño menor o igual a k?

La cobertura de vértices está estrechamente relacionada con el Problema del conjunto independiente. Un conjunto de vértices S es una cobertura de vértices si y sólo si su complemento \bar S = V \setminus S es un conjunto independiente. Así, un grafo con n vértices tiene una cobertura de vértices de tamaño k si y sólo si el grafo tiene un conjunto independiente de tamaño n-k. En este sentido, cada uno de estos problemas es dual al otro.


NOTA: deje los hipervinculos para mas referencias, maestra si cree que la entrada es muy pobre con gusto explicare este tema en asesorias.


http://es.wikipedia.org/wiki/Problema_de_la_cobertura_de_v%C3%A9rtices

RESPUESTA AL EXAMEN "GRAFOS" (puntos extra)

Hola buenas tarde mi nombre es Gustavo adolfo salas coronado y esta es una respuesta al examen ordinario que es del problema de grafos.

·Demuestre que el grafo simple no dirigido definido por las siguientes aristas en formato (inicial, final) es plano: (1,2), (1,3), (1,4), (2,4),(2,6),(3,5), (3,6), (4,5) (5,6).

El grafo es plano ya que ninguno de sus vertices se intersectan.

Diametro: 2
Grado: 3
impresion : 6,5,4,2,1,3

miércoles, 19 de mayo de 2010

PROYECTO #5

Algoritmo de Floyd-Warshall.

Hola a todos mi nombre es Gustavo Adolfo Salas Coronado de la clase de los jueves de v1 a v3 y este es mi proyecto y explicare cada uno de los puntos requeridos:

1- Problema que este algoritmo resuelve.

El algoritmo de Floyd-Warshall, descrito en 1959 por Bernard Roy, es un algoritmo de análisis sobre grafos para encontrar el camino minimo en grafos dirigidos ponderados. El algoritmo encuentra el camino entre todos los pares de vértices en una única ejecución. El algoritmo de Floyd-Warshall es un ejemplo de programacion dinamica.

2.- Definicion formal.

Pues el algoritmo de Floyd-Warshall compara todos los posibles caminos a través del grafo entre cada par de vértices. El algoritmo es capaz de hacer esto con sólo V3 comparaciones (esto es notable considerando que puede haber hasta V2 aristas en el grafo, y que cada combinación de aristas se prueba). Lo hace mejorando paulatinamente una estimación del camino más corto entre dos vértices, hasta que se sabe que la estimación es óptima, por lo tanto es un algoritmo de OPTIMIZACION.

3.-La complejidad computacional de este algoritmo es de tipo P determinista ya que puede ser resuelto por una maquina turing determinista en tiempo polinomico.

4.-Pseudocodigo.


Inicializar
D = A ' matriz de distancias = matriz de arcos

si i=j o Dij= infinito entonces Pi,j = nulo sino Pi,j=i 'matriz de caminos

for k = 1 to V
for i = 1 to V
for j = 1 to V
Di,j = min(Di,j , Di,k + Dk,j )
si min = Di,k + Dk,j entonces
Pi,j = Pk,j
fin




5.- Analisis asintotico.

Si utilizamos matrices booleanas, para encontrar todos los n2 de \mathcal{W}_k desde \mathcal{W}_{\mathit{k}-1} se necesita hacer 2n2 operaciones binarias. Debido a que empezamos con \mathcal{W}_0 = \mathcal{W}_\mathcal{R} y computamos la secuencia de n matrices booleanas \mathcal{W}_1, \mathcal{W}_2, ..., \mathcal{W}_\mathit{n} = \mathcal{M}_{\mathcal{R}^*}, el número total de operaciones binarias es de \mathit{n} \times 2\mathit{n}^2 = 2\mathit{n}^3. Por lo tanto, la complejidad del algoritmo es Θ(n3) y puede ser resuelto por una maquina determinista de turing en tiempo polinomico.

6.- EJEMPLO.

Hallar el camino mínimo desde el vértice 3 hasta 4 en el grafo con la siguiente matriz de distancias:

D = \begin{bmatrix} 0 & 3 & 5 & 1 & \infty & \infty\\ 3 & 0 & \infty & \infty & 9 & \infty\\ 5 & \infty & 0 & 7 & 7 & 1\\ 1 & \infty & 7 & 0 & \infty & 4\\ \infty & 9 & 7 & \infty & 0 & \infty\\ \infty & \infty & 1 & 4 & \infty & 0\end{bmatrix}


Aplicamos el algoritmo de Floyd-Warshall, y para ello en cada iteración fijamos un vértice intermedio.


1ª Iteración: nodo intermedio = 1

La matriz es simétrica, por lo que solamente hará falta calcular el triangulo superior de las distancias.

d23 = min(d23, d21 + d13) = 8

d24 = min(d24, d21 + d14) = 4

d25 = min(d25, d21 + d15) = 9

d26 = min(d26, d21 + d16) = \infty

d34 = min(d34, d31 + d14) = 6

d35 = min(d35, d31 + d15) = 7

d36 = min(d36, d31 + d16) = 1

d45 = min(d45, d41 + d15) = \infty

d46 = min(d46, d41 + d16) = 4

d56 = min(d56, d51 + d16) = \infty

La matriz de distancia después de esta iteración es:

\mathcal{W}_1 = \begin{bmatrix} 0 & 3 & 5 & 1 & \infty & \infty\\ 3 & 0 & 8 & 4 & 9 & \infty\\ 5 & 8 & 0 & 6 & 7 & 1\\ 1 & 4 & 6 & 0 & \infty & 4\\ \infty & 9 & 7 & \infty & 0 & \infty\\ \infty & \infty & 1 & 4 & \infty & 0\end{bmatrix}

2ª Iteración: nodo intermedio = 2

d13 = min(d13, d12 + d23) = 5

d14 = min(d14, d12 + d24) = 1

d15 = min(d15, d12 + d25) = 12

d16 = min(d16, d12 + d26) = \infty

d34 = min(d34, d32 + d24) = 6

d35 = min(d35, d32 + d25) = 7

d36 = min(d36, d32 + d26) = 1

d45 = min(d45, d42 + d25) = 13

d46 = min(d46, d42 + d26) = 4

d56 = min(d56, d52 + d26) = \infty

La matriz de distancia después de esta iteración es:

\mathcal{W}_2 = \begin{bmatrix} 0 & 3 & 5 & 1 & 12 & \infty\\ 3 & 0 & 8 & 4 & 9 & \infty\\ 5 & 8 & 0 & 6 & 7 & 1\\ 1 & 4 & 6 & 0 & 13 & 4\\ 12 & 9 & 7 & 13 & 0 & \infty\\ \infty & \infty & 1 & 4 & \infty & 0\end{bmatrix}

3ª Iteración: nodo intermedio = 3

d12 = min(d12, d13 + d32) = 3

d14 = min(d14, d13 + d34) = 1

d15 = min(d15, d13 + d35) = 12

d16 = min(d16, d13 + d36) = 6

d24 = min(d24, d23 + d34) = 4

d25 = min(d25, d23 + d35) = 9

d26 = min(d26, d23 + d36) = 9

d45 = min(d45, d43 + d35) = 13

d46 = min(d46, d43 + d36) = 4

d56 = min(d56, d53 + d36) = 8

La matriz de distancia después de esta iteración es:

\mathcal{W}_3 = \begin{bmatrix} 0 & 3 & 5 & 1 & 12 & 6\\ 3 & 0 & 8 & 4 & 9 & 9\\ 5 & 8 & 0 & 6 & 7 & 1\\ 1 & 4 & 6 & 0 & 13 & 4\\ 12 & 9 & 7 & 13 & 0 & 8\\ 6 & 9 & 1 & 4 & 8 & 0\end{bmatrix}

4ª Iteración: nodo intermedio = 4

d12 = min(d12, d14 + d42) = 3

d13 = min(d13, d14 + d43) = 5

d15 = min(d15, d14 + d45) = 12

d16 = min(d16, d14 + d46) = 5

d23 = min(d23, d24 + d43) = 8

d25 = min(d25, d24 + d45) = 9

d26 = min(d26, d24 + d46) = 8

d35 = min(d35, d34 + d45) = 7

d36 = min(d36, d34 + d46) = 1

d56 = min(d56, d54 + d46) = 8

La matriz de distancia después de esta iteración es:

\mathcal{W}_4 = \begin{bmatrix} 0 & 3 & 5 & 1 & 12 & 5\\ 3 & 0 & 8 & 4 & 9 & 8\\ 5 & 8 & 0 & 6 & 7 & 1\\ 1 & 4 & 6 & 0 & 13 & 4\\ 12 & 9 & 7 & 13 & 0 & 8\\ 5 & 8 & 1 & 4 & 8 & 0\end{bmatrix}

5ª Iteración: nodo intermedio = 5

d12 = min(d12, d15 + d52) = 3

d13 = min(d13, d15 + d53) = 5

d14 = min(d14, d15 + d54) = 1

d16 = min(d16, d15 + d56) = 5

d23 = min(d23, d25 + d53) = 8

d24 = min(d24, d25 + d54) = 4

d26 = min(d26, d25 + d56) = 8

d34 = min(d34, d35 + d54) = 6

d36 = min(d36, d35 + d56) = 1

d46 = min(d46, d45 + d56) = 4

La matriz de distancia después de esta iteración es:

\mathcal{W}_5 = \mathcal{W}_4 = \begin{bmatrix} 0 & 3 & 5 & 1 & 12 & 5\\ 3 & 0 & 8 & 4 & 9 & 8\\ 5 & 8 & 0 & 6 & 7 & 1\\ 1 & 4 & 6 & 0 & 13 & 4\\ 12 & 9 & 7 & 13 & 0 & 8\\ 5 & 8 & 1 & 4 & 8 & 0\end{bmatrix}

6ª Iteración: nodo intermedio = 6

d12 = min(d12, d16 + d62) = 3

d13 = min(d13, d16 + d63) = 5

d14 = min(d14, d16 + d64) = 1

d15 = min(d15, d16 + d65) = 12

d23 = min(d23, d26 + d63) = 8

d24 = min(d24, d26 + d64) = 4

d25 = min(d25, d26 + d65) = 9

d34 = min(d34, d36 + d64) = 5

d35 = min(d35, d36 + d65) = 7

d45 = min(d45, d46 + d65) = 12

La matriz de distancia después de esta iteración es:

\mathcal{W}_6 = \begin{bmatrix} 0 & 3 & 5 & 1 & 12 & 5\\ 3 & 0 & 8 & 4 & 9 & 8\\ 5 & 8 & 0 & 5 & 7 & 1\\ 1 & 4 & 5 & 0 & 12 & 4\\ 12 & 9 & 7 & 12 & 0 & 8\\ 5 & 8 & 1 & 4 & 8 & 0\end{bmatrix}

Ya se han hecho todas las iteraciones posibles. Por tanto, el camino mínimo entre 2 vértices cualesquiera del grafo será el obtenido en la matriz final. En este caso, el camino mínimo entre 3 y 4 vale 5.


7. APLICACIONES

El algoritmo de Floyd-Warshall puede ser utilizado para resolver los siguientes problemas, entre otros:

  • Camino mínimo en grafos dirigidos(algoritmo de Floyd).
  • Cierre transitivo en grafos dirigidos (algoritmo de Warshall). Es la formulación original del algoritmo de Warshall. El grafo es un grafo no ponderado y representado por una matriz booleana de adyacencia. Entonces la operación de adición es reemplazada por la conjunción lógica(AND) y la operación menor por la disyunción lógica (OR).
  • Encontrar una expresión regular dada por un lenguaje regular aceptado por un autómata finito (algoritmo de Kleene).
  • Inversión de matrices de números reales(algoritmo de Gauss-Jordan).
  • Ruta optima. En esta aplicación es interesante encontrar el camino del flujo máximo entre 2 vértices. Esto significa que en lugar de tomar los mínimos con el pseudocodigo anterior, se coge el máximo. Los pesos de las aristas representan las limitaciones del flujo. Los pesos de los caminos representan cuellos de botella; por ello, la operación de adición anterior es reemplazada por la operación mínimo.
  • Comprobar si un grafo no dirigido es bipartito.

BIBLIOGRAFIA.

http://personales.upv.es/arodrigu/grafos/FloydWarshall.htm
http://es.wikipedia.org/wiki/Algoritmo_de_Floyd-Warshall#Ejemplo