intro grafos

56
Definiciones y estructuras Camino m´ ınimo ´ Arbol generador m´ ınimo Problemas Problemas y algoritmos sobre Grafos Problemas, Algoritmos y Programaci´ on 14 de Septiembre de 2011 PAP Grafos

Upload: gilmar-chavarria

Post on 24-Jul-2015

64 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Intro Grafos

Definiciones y estructurasCamino mınimo

Arbol generador mınimoProblemas

Problemas y algoritmos sobre Grafos

Problemas, Algoritmos y Programacion

14 de Septiembre de 2011

PAP Grafos

Page 2: Intro Grafos

Definiciones y estructurasCamino mınimo

Arbol generador mınimoProblemas

Menu del dıa1 Definiciones y estructuras

GrafosArboles

2 Camino mınimoBreadth-first search (BFS)DijkstraBellman-FordFloyd-Warshall

3 Arbol generador mınimoPrimKruskal

4 ProblemasCantidad de caminosProblemas en grafos implıcitosProblemas

PAP Grafos

Page 3: Intro Grafos

Definiciones y estructurasCamino mınimo

Arbol generador mınimoProblemas

GrafosArboles

Estructura de datos

Repaso de estructuras de datos:

Grafo

Arbol

PAP Grafos

Page 4: Intro Grafos

Definiciones y estructurasCamino mınimo

Arbol generador mınimoProblemas

GrafosArboles

Grafos

Un grafo se define como la pareja (V ,E ), de vertices (o nodos, opuntitos) y ejes (o aristas, o rayitas, o flechitas), dondeE ⊆ V × V .Se usan para modelar muchos problemas que involucran puntitos yrayitas.Se describen de alguna(s) de estas formas:

Por las adyacencias de cada vertice

Por la definicion: el conjunto de vertices y el conjunto de ejes.

Implıcitamente, por otra estructura.

En adelante, n es la cantidad de vertices (|V |) y m es la cantidadde aristas (|E |).

PAP Grafos

Page 5: Intro Grafos

Definiciones y estructurasCamino mınimo

Arbol generador mınimoProblemas

GrafosArboles

Grafos - tipos

Hay muchas variantes de grafos:

Dirigidos: (u, v) y (v , u) son aristas distintas.

No dirigidos: (u, v) y (v , u) son la misma arista.

Multi-grafos: Puede haber varias aristas entre la misma parejaordenada.

Hay muchas propiedades sobre grafos:

Con o sin ciclos (dirigidos o no dirigidos)

Conexos o no conexos.

Completos, vacıos, triviales.

Hamiltonianos, euclideanos, cactus, etc.

PAP Grafos

Page 6: Intro Grafos

Definiciones y estructurasCamino mınimo

Arbol generador mınimoProblemas

GrafosArboles

Grafos - definiciones

El vecindario de un vertice u, N(u), es el conjunto de verticesx tales que (u, x) es una arista del grafo.

El grado de un vertice u, d(u), es el cardinal de su vecindario.En un digrafo esto es el grado de salida de u.

Un camino en un grafo es una secuencia de aristas donde elextremo final de una arista es el inicial de la siguiente arista.

Un ciclo en un grafo es un camino que empieza y termina enel mismo vertice.

PAP Grafos

Page 7: Intro Grafos

Definiciones y estructurasCamino mınimo

Arbol generador mınimoProblemas

GrafosArboles

Grafos - por adyacencia

De cada vertice se describe su conjunto de vecinos:

Como una lista de vecinos (lista de adyacencia).

Como un conjunto, arreglo u otro contenedor.

Como un conjunto sobre bits (matriz de adyacencia).

Recorrer los vecinos de un vertices es recorrer los elementos delcontenedor.Recorrer todas las aristas es recorrer todos los vecinos de todos losvertices.

PAP Grafos

Page 8: Intro Grafos

Definiciones y estructurasCamino mınimo

Arbol generador mınimoProblemas

GrafosArboles

Grafos - por adyacencia

Costo de las operaciones segun la representacion:Operacion Lista de adyacencia Matriz de adyacencia

¿(u, v) ∈ E? O(min(d(u), d(v))) O(1)Recorrer N(u) O(d(u)) O(n)

Recorrer E O(n + m) O(n2)Memoria n + 2m n2

PAP Grafos

Page 9: Intro Grafos

Definiciones y estructurasCamino mınimo

Arbol generador mınimoProblemas

GrafosArboles

Grafos - por adyacencia

Por lista de adyacencia se puede almacenar de la siguiente forma:

vvint lady(n, vint());

#define agregar(u, v) \

{ lady[u].push_back(v); lady[v].push_back(u); }

Por matriz de adyacencia se puede almacenar de la siguiente forma:

vvint mady(n, vint(n, 0));

#define agregar(u, v) \

{ mady[u][v]++; mady[v][u]++; }

PAP Grafos

Page 10: Intro Grafos

Definiciones y estructurasCamino mınimo

Arbol generador mınimoProblemas

GrafosArboles

Grafos - por definicion

Se describe el conjunto de aristas (E ) involucradas en el grafo.

Se describe el conjunto de vertices (V ). A veces alcanza conun numero (n).

Ejemplo:

struct eje { int a, b; };

vector<eje> g;

int n;

#define agregar(u, v) \

{ g.push_back( (eje){ a: (u), b: (v) } ); }

Algunas representaciones son mas apropiadas para ciertosalgoritmos.

PAP Grafos

Page 11: Intro Grafos

Definiciones y estructurasCamino mınimo

Arbol generador mınimoProblemas

GrafosArboles

Arboles

Arbol

Un arbol es un grafo conexo y sin ciclos.

La definicion solo sirve para demostrar propiedades teoricas.

Un arbol se puede representar igual que un grafo (casoparticular).

Un vertice con solo un vecino se llama hoja.

Algunas propiedades:

Hay un unico camino entre todo par de vertices.

m = n − 1

PAP Grafos

Page 12: Intro Grafos

Definiciones y estructurasCamino mınimo

Arbol generador mınimoProblemas

GrafosArboles

Arboles

Arbol

Un arbol es un grafo conexo y sin ciclos.

La definicion solo sirve para demostrar propiedades teoricas.

Un arbol se puede representar igual que un grafo (casoparticular).

Un vertice con solo un vecino se llama hoja.

Algunas propiedades:

Hay un unico camino entre todo par de vertices.

m = n − 1

PAP Grafos

Page 13: Intro Grafos

Definiciones y estructurasCamino mınimo

Arbol generador mınimoProblemas

GrafosArboles

Arboles con raız (rooted trees)

Arbol con raız

Un arbol con raız es un arbol con un vertice distinguido, llamadoraız.

Tambien se puede representar como un grafo (y un verticedistinguido).

Tienen la nocion de padre e hijo, de acuerdo a la cercanıa a laraız.

Admiten una representacion recursiva: Un arbol es

una raızun conjunto de sub-arboles, hijos de esa raız

PAP Grafos

Page 14: Intro Grafos

Definiciones y estructurasCamino mınimo

Arbol generador mınimoProblemas

Breadth-first search (BFS)DijkstraBellman-FordFloyd-Warshall

Camino mınimo

Problema de Camino mınimo

Dado un grafo G con pesos en las aristas, el problema de caminomınimo entre dos nodos u y v consiste en encontrar un caminoentre esos nodos cuyo peso sea menor o igual que el peso decualquier otro camino entre u y v .

Hay variantes:

Se puede calcular el camino mınimo entre todo par de nodos.

El peso de un camino puede ser la suma de los pesosindividuales, el producto, el mayor, etc.

El grafo puede ser dirigido o no dirigido.

PAP Grafos

Page 15: Intro Grafos

Definiciones y estructurasCamino mınimo

Arbol generador mınimoProblemas

Breadth-first search (BFS)DijkstraBellman-FordFloyd-Warshall

Lımites del problema

El camino mınimo se define como un camino simple.

En muchos casos, mınimo implica simple.

Si hay un ciclo de peso negativo alcanzable, el problema seindefine (no acotado).

Camino maximo simple es muy difıcil (NP-Completo).

PAP Grafos

Page 16: Intro Grafos

Definiciones y estructurasCamino mınimo

Arbol generador mınimoProblemas

Breadth-first search (BFS)DijkstraBellman-FordFloyd-Warshall

Algoritmo

BFS

Breadth-first search (BFS) o busqueda en ancho es un algoritmopara recorrer los nodos de un grafo en un orden especıfico.

Comienza por un vertice distinguido

Por cada vertice visitado, marca en una cola todos sus vecinosno marcados.

Visita los vertices en el orden determinado por la cola.

En total, recorre a lo sumo una vez cada vertice.

En total, recorre a lo sumo dos veces cada arista.

Complejidad: O(n + m).

PAP Grafos

Page 17: Intro Grafos

Definiciones y estructurasCamino mınimo

Arbol generador mınimoProblemas

Breadth-first search (BFS)DijkstraBellman-FordFloyd-Warshall

Algorithm 2.1: bfs(Grafo g ,Nodo v)

marcadosp ← FALSE ∀p ∈ V (g)cola← nueva colamarcar(v)while ¬cola.empty()

do

p ← cola.pop()for each q ∈ g .vecinos(p)

do

{if ¬marcadosq

then marcar(q)

Algorithm 2.2: marcar(Nodo v)

marcadosv ← TRUEcola.push(v)

PAP Grafos

Page 18: Intro Grafos

Definiciones y estructurasCamino mınimo

Arbol generador mınimoProblemas

Breadth-first search (BFS)DijkstraBellman-FordFloyd-Warshall

Arbol de BFS

El recorrido BFS determina un arbol con raız.

Cada vez que se marca un vecino se usa esa arista para elarbol.

1

2 3 4

5 6 7

8

PAP Grafos

Page 19: Intro Grafos

Definiciones y estructurasCamino mınimo

Arbol generador mınimoProblemas

Breadth-first search (BFS)DijkstraBellman-FordFloyd-Warshall

Extendiendo BFS

BFS guarda un bit de informacion por cada nodo.

Se puede extender y guardar mas informacion.

Distancia desde la raız (en el arbol de BFS)Cualquier dato asociado al recorrido (ej: “vengo de”)

PAP Grafos

Page 20: Intro Grafos

Definiciones y estructurasCamino mınimo

Arbol generador mınimoProblemas

Breadth-first search (BFS)DijkstraBellman-FordFloyd-Warshall

Algorithm 2.3: bfs-dist(Grafo g ,Nodo v)

distp ←∞ ∀p ∈ V (g)cola← nueva colamarcar(v , 0)while ¬cola.empty()

do

p ← cola.pop()d ← distpfor each q ∈ g .vecinos(p)

do

{if distq =∞

then marcar(q, d + 1)

Algorithm 2.4: marcar(Nodo v ,Dist d)

distv ← dcola.push(v)

PAP Grafos

Page 21: Intro Grafos

Definiciones y estructurasCamino mınimo

Arbol generador mınimoProblemas

Breadth-first search (BFS)DijkstraBellman-FordFloyd-Warshall

Problema - Is it a tree

Problema SPOJ: 1436 - Is it a tree -http://www.spoj.pl/problems/PT07Y/.

Dado un grafo, determinar si es ademas un arbol.

Por definicion, un arbol es un grafo:

Conexo

Sin ciclos

PAP Grafos

Page 22: Intro Grafos

Definiciones y estructurasCamino mınimo

Arbol generador mınimoProblemas

Breadth-first search (BFS)DijkstraBellman-FordFloyd-Warshall

BFS - Camino mınimo

Hecho: Distancia entre adyacentes

Sea distv la distancia calculada por BFS en un grafo G desde elvertice inicial v0 hasta el vertice v . Si (u, v) ∈ E (G ) entonces|distu − distv | 6 1.

Teorema: Camino mınimo

En un grafo conexo el arbol de BFS es un arbol de caminosmınimos desde el vertice inicial del BFS.

PAP Grafos

Page 23: Intro Grafos

Definiciones y estructurasCamino mınimo

Arbol generador mınimoProblemas

Breadth-first search (BFS)DijkstraBellman-FordFloyd-Warshall

BFS - Invariante

Invariantes y propiedades del algoritmo:

Hay tres estados disjuntos para los vertices:

No marcadoMarcado, pero no visitadoMarcado y visitado

Solo los vertices marcados pero no visitados estan en la cola

Todos los vecinos de los vertices visitados estan marcados

De todos los vertices marcados ya se conoce con certeza ladistancia mınima al inicio.

La distancia para los vertices en la cola es d o d + 1 (delanteestan todos los de d y luego los de d + 1), para algun valor d .

PAP Grafos

Page 24: Intro Grafos

Definiciones y estructurasCamino mınimo

Arbol generador mınimoProblemas

Breadth-first search (BFS)DijkstraBellman-FordFloyd-Warshall

BFS - Grafos no conexos

BFS recorre todos los vertices alcanzables desde el verticeincial (componente conexa).

Recorrer todas las componentes conexas requiere correr unBFS en cada componente.

Hay O(n) componentes y BFS tarda O(n + m).

¿Recorrer todas las componentes podrıa tardar O(n · (n+m))?

PAP Grafos

Page 25: Intro Grafos

Definiciones y estructurasCamino mınimo

Arbol generador mınimoProblemas

Breadth-first search (BFS)DijkstraBellman-FordFloyd-Warshall

Algorithm 2.5: bfs-all(Grafo g)

marcadosp ← FALSE ∀p ∈ V (g)cola← nueva colafor each v ∈ g .nodos

do if ¬marcadosv

then

marcar(v)while ¬cola.empty()

do

p ← cola.pop()for each q ∈ g .vecinos(p)

do

{if ¬marcadosq

then marcar(q)

Algorithm 2.6: marcar(Nodo v)

marcadosv ← TRUEcola.push(v)

PAP Grafos

Page 26: Intro Grafos

Definiciones y estructurasCamino mınimo

Arbol generador mınimoProblemas

Breadth-first search (BFS)DijkstraBellman-FordFloyd-Warshall

BFS - Camino mınimo - Resumen

Condiciones particulares:

Grafo dirigido

Todos los pesos iguales y positivos

Camino mınimo

El camino mınimo de un nodo u a todos los demas se puederesolver con un BFS desde u.

Complejidad: O(n + m)

PAP Grafos

Page 27: Intro Grafos

Definiciones y estructurasCamino mınimo

Arbol generador mınimoProblemas

Breadth-first search (BFS)DijkstraBellman-FordFloyd-Warshall

Dijkstra

Condiciones particulares:

Grafo dirigido

Los pesos pueden ser distintos pero deben ser no negativos.

Algoritmo:

Al igual que en BFS, Dijkstra recorre los nodos en el orden dedistancia al origen.

El siguiente nodo a visitar lo elige como el mas cernano alorigen (no visitado anteriormente).

Al visitar un nodo actualiza (marca) sus vecinos.

PAP Grafos

Page 28: Intro Grafos

Definiciones y estructurasCamino mınimo

Arbol generador mınimoProblemas

Breadth-first search (BFS)DijkstraBellman-FordFloyd-Warshall

Dijkstra

Hay dos clases de implementaciones:

Guardando la lista de distancias en un array

Mınimo: O(n)Actualizacion: O(1)

Guardando la lista de distancias en un heap o arbol binario debusqueda (ej: conjunto)

Mınimo: O(log(n))Actualizacion: O(log(n))

Hay n consultas de mınimo y m actualizaciones.Complejidad: O(n2) o O((n + m) log(n)).

PAP Grafos

Page 29: Intro Grafos

Definiciones y estructurasCamino mınimo

Arbol generador mınimoProblemas

Breadth-first search (BFS)DijkstraBellman-FordFloyd-Warshall

Algorithm 2.7: dijkstra(Grafo g ,Nodo v)

distp ←∞ ∀p ∈ V (g)vistop ← FALSE ∀p ∈ V (g)distv ← 0while ∃j ,¬vistoj

do

p ← argmin¬vistoj {distj}vistop ← TRUEfor each q ∈ g .vecinos(p)

do

{if distq > distp + costop,q

then distq ← distp + costop,q

distp puede ser un array (busqueda lineal), o un set<dist,nodo>

(busqueda binaria).

PAP Grafos

Page 30: Intro Grafos

Definiciones y estructurasCamino mınimo

Arbol generador mınimoProblemas

Breadth-first search (BFS)DijkstraBellman-FordFloyd-Warshall

Dijkstra - Invariante

Invariantes y propiedades del algoritmo:

Hay tres estados disjuntos para los vertices:no marcado No se conoce ningun camino.

marcado Se conoce algun camino tentativo.visitado Se conoce un camino mınimo con certeza.

Nota: El primer grupo se puede incorporar al segundo grupo como si

tuvieran un camino de longitud ∞.

De todos los vecinos de los vertices visitados se conoce alguncamino.

De todos los vertices visitados ya se conoce con certeza ladistancia mınima al inicio.

La distancia para los vertices de los que no se tiene certezaque la distancia conocida es optima es mayor que para los quesı se tiene esa certeza.

PAP Grafos

Page 31: Intro Grafos

Definiciones y estructurasCamino mınimo

Arbol generador mınimoProblemas

Breadth-first search (BFS)DijkstraBellman-FordFloyd-Warshall

Dijkstra - Explicacion

Argumento principal de la demostracion:

Argumento

El vertice con distancia tentativa menor no puede ser mejorado porninguno de los demas vertices no visitados.

Ese argumento usa fuertemente que las aristas son no negativas.

PAP Grafos

Page 32: Intro Grafos

Definiciones y estructurasCamino mınimo

Arbol generador mınimoProblemas

Breadth-first search (BFS)DijkstraBellman-FordFloyd-Warshall

Bellman-Ford

Condiciones particulares:

Grafo dirigido

Los pesos pueden ser negativos

No puede haber ciclos negativos, aunque los detecta

Complejidad: O(n ·m).Calcula la distancia de un vertice hacia todos los demas vertices.

PAP Grafos

Page 33: Intro Grafos

Definiciones y estructurasCamino mınimo

Arbol generador mınimoProblemas

Breadth-first search (BFS)DijkstraBellman-FordFloyd-Warshall

Algorithm 2.8: bellman-ford(Grafo g ,Nodo v)

distp ←∞ ∀p ∈ V (g)distv ← 0for i = 1 to n

do

dist ′ ← distfor each (p, q) ∈ g .aristas()

do{distq ← min(distq, dist

′p + costop,q)

Si en una iteracion de i no se actualiza ningun valor de dist,entonces se puede detener el algoritmo.

Si en vez de dist ′p se usa siempre distp el algoritmo evolucionapotencialmente mas rapido.

PAP Grafos

Page 34: Intro Grafos

Definiciones y estructurasCamino mınimo

Arbol generador mınimoProblemas

Breadth-first search (BFS)DijkstraBellman-FordFloyd-Warshall

Bellman-Ford - Invariante

Al finalizar la itearcion i :

distu tiene la distancia del camino mas corto de v hasta u queusa i o menos aristas.

Propiedades

Al finalizar, distu tiene la distancia mınima entre v y u queusa n o menos aristas.

Si se itera n + 1 veces y se mejora dist aun en la ultimaiteracion, entonces hay un ciclo negativo.

PAP Grafos

Page 35: Intro Grafos

Definiciones y estructurasCamino mınimo

Arbol generador mınimoProblemas

Breadth-first search (BFS)DijkstraBellman-FordFloyd-Warshall

Floyd-Warshall

Condiciones particulares:

Grafo dirigido

Los pesos pueden ser negativos

Puede haber ciclos negativos (alcanzables o no).

Complejidad: O(n3).Calcula la distancia de todos los vertices hacia todos los vertices.

PAP Grafos

Page 36: Intro Grafos

Definiciones y estructurasCamino mınimo

Arbol generador mınimoProblemas

Breadth-first search (BFS)DijkstraBellman-FordFloyd-Warshall

Floyd-Warshall - Codigo

La implementacion del algoritmo es muy simple.

vvint dist(n, vint(n, INF)); /* Matriz de distancia */

... /* cargo la matriz de distancias */

forn(k, n) forn(i, n) forn(j, n) {

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

}

min es la operacion de minimizacion del problema.

+ es la operacion asociativa del peso entre dos aristas.

PAP Grafos

Page 37: Intro Grafos

Definiciones y estructurasCamino mınimo

Arbol generador mınimoProblemas

Breadth-first search (BFS)DijkstraBellman-FordFloyd-Warshall

Floyd-Warshall - Invariante

Al finalizar la iteracion k del ciclo exterior:

La matriz disti ,j tiene la mınima distancia del camino de i a jque usa vertices intermedios en el conjunto {1, . . . , k}

Propiedades:

El camino mınimo (si existe y es acotado) entre i y j noutiliza dos veces el mismo vertice.

Al finalizar, v esta en un ciclo negativo si y solo si distv ,v < 0.

PAP Grafos

Page 38: Intro Grafos

Definiciones y estructurasCamino mınimo

Arbol generador mınimoProblemas

Breadth-first search (BFS)DijkstraBellman-FordFloyd-Warshall

Floyd-Warshall - Problemas

Algunuos problemas

ACM-ICPC UVA - 4299 - FRandomly-priced Tickets -http://acmicpc-live-archive.uva.es/nuevoportal/

data/problem.php?p=4299

Calcular la clausura transitiva de una relacion.

PAP Grafos

Page 39: Intro Grafos

Definiciones y estructurasCamino mınimo

Arbol generador mınimoProblemas

Breadth-first search (BFS)DijkstraBellman-FordFloyd-Warshall

BFS con muchas colas

BFS no funciona cuando hay distintos pesos.

¿Por que? El orden BFS no es el mismo que el orden de distanciaal origen.

Solucion:Generar el mismo orden de distancia al origen usando varias colas.

PAP Grafos

Page 40: Intro Grafos

Definiciones y estructurasCamino mınimo

Arbol generador mınimoProblemas

Breadth-first search (BFS)DijkstraBellman-FordFloyd-Warshall

BFS con muchas colas

Condiciones particulares:

Grafo dirigido

Los pesos deben ser enteros no negativos y acotados por W .

Algoritmo:

Se tienen max(distp) + 1 colas, una para cada distancia.

Marcar un nodo con distancia d implica colocarlo en la cola d .

Las colas se van vaciando en orden creciente.

Si los pesos estan acotados por W , solo habra a lo sumoW + 1 colas no vacıas.

Complejidad: O(n + m + max(distp)).

PAP Grafos

Page 41: Intro Grafos

Definiciones y estructurasCamino mınimo

Arbol generador mınimoProblemas

PrimKruskal

Arbol generador mınimo

Definicion

Dado un grafo G conexo con pesos en las aristas, un arbolgenerador mınimo es un subgrafo de G que es un arbol de |V (G )|vertices, cuya suma de pesos es la menor posible.

PAP Grafos

Page 42: Intro Grafos

Definiciones y estructurasCamino mınimo

Arbol generador mınimoProblemas

PrimKruskal

Algorithm 3.1: prim(Grafo g ,Nodo v)

T ← ∅distp ←∞ ∀p ∈ V (g)vistop ← FALSE ∀p ∈ V (g)distv ← 0while ∃j ,¬vistoj

do

p ← argmin¬vistoj {distj}vistop ← TRUET ← T ∪ {(desdep, p)} (salvo la primera vez)for each q ∈ g .vecinos(p)

do

if distq > costop,q

then

{distq ← costop,qdesdeq ← p

v es cualquier vertice inicial.PAP Grafos

Page 43: Intro Grafos

Definiciones y estructurasCamino mınimo

Arbol generador mınimoProblemas

PrimKruskal

Prim

Hay dos clases de implementaciones:

Guardando la lista de distancias en un array

Mınimo: O(n)Actualizacion: O(1)

Guardando la lista de distancias en un heap o arbol binario debusqueda (ej: conjunto)

Mınimo: O(log(n))Actualizacion: O(log(n))

Hay n consultas de mınimo y m actualizaciones.Complejidad: O(n2) o O((n + m) log(n)).

PAP Grafos

Page 44: Intro Grafos

Definiciones y estructurasCamino mınimo

Arbol generador mınimoProblemas

PrimKruskal

Kruskal

Algorithm 3.2: kruskal(Grafo g ,Nodo v)

T ← ∅ordenar g .aristas segun costop,q de menor a mayorfor each (p, q) ∈ g .aristas

do

{if T ∪ {(p, q)} es sin ciclo

then T ← T ∪ {(p, q)}return (T )

Es conveniente representar G por definicion (lista de aristas).

“T ∪ {(p, q)} es sin ciclo” puede ser costoso de implementar.

PAP Grafos

Page 45: Intro Grafos

Definiciones y estructurasCamino mınimo

Arbol generador mınimoProblemas

PrimKruskal

Union-find

Defincion

Union-find es una estructura de datos que representa una particionde un conjunto de n elementos, con las siguientes operaciones:

unir(u, v): Une el conjunto donde esta u con el de v .

id(u): Devuelve el identificador del conjunto donde esta u.

Hay varias implementaciones que difieren en la complejidad:

Lista de ids. Consulta en O(1), junta en O(n).

Lista de ids y lista de elementos por cada id (la inversa).Consulta en O(1), junta u y v enO(min(|conj(u)|, |conj(v)|)), o bien, O(log(n)) amortizado.

Lista de puntero al padre. Consulta en O(n), junta en O(1).

PAP Grafos

Page 46: Intro Grafos

Definiciones y estructurasCamino mınimo

Arbol generador mınimoProblemas

PrimKruskal

Kruskal - Union-find

Algorithm 3.3: kruskal(Grafo g ,Nodo v)

T ← ∅ordenar g .aristas segun costop,q de menor a mayorfor each (p, q) ∈ g .aristas

do

if id(p) 6= id(q)

then

{T ← T ∪ {(p, q)}unir(p, q)

return (T )

Complejidad total: O(m · log(m))

PAP Grafos

Page 47: Intro Grafos

Definiciones y estructurasCamino mınimo

Arbol generador mınimoProblemas

Cantidad de caminosProblemas en grafos implıcitosProblemas

Cantidad de caminos

Problema

Dado un grafo dirigido G , ¿De cuantas formas se puede ir de u a vusando k o menos aristas?

Caso particular:

¿De cuantas formas se puede ir de u a v usando una arista?

PAP Grafos

Page 48: Intro Grafos

Definiciones y estructurasCamino mınimo

Arbol generador mınimoProblemas

Cantidad de caminosProblemas en grafos implıcitosProblemas

Cantidad de caminos

Problema

Dado un grafo dirigido G , ¿De cuantas formas se puede ir de u a vusando k o menos aristas?

Caso particular:

¿De cuantas formas se puede ir de u a v usando una arista?

PAP Grafos

Page 49: Intro Grafos

Definiciones y estructurasCamino mınimo

Arbol generador mınimoProblemas

Cantidad de caminosProblemas en grafos implıcitosProblemas

Cantidad de caminos

Sea A la matriz de adyacencia de G ,

Ak dice de cuantas forma se puede ir de i a j usandoexactamente k aristas.∑k

i=1 Ai resuelve el problema.

Prop:∑2k−1

i=0 Ai = (Ak + I ) ·∑k−1

i=0 Ai

Se puede resolver con Divide & Conquer o programacion dinamica.

PAP Grafos

Page 50: Intro Grafos

Definiciones y estructurasCamino mınimo

Arbol generador mınimoProblemas

Cantidad de caminosProblemas en grafos implıcitosProblemas

Cantidad de caminos

Sea A la matriz de adyacencia de G ,

Ak dice de cuantas forma se puede ir de i a j usandoexactamente k aristas.∑k

i=1 Ai resuelve el problema.

Prop:∑2k−1

i=0 Ai = (Ak + I ) ·∑k−1

i=0 Ai

Se puede resolver con Divide & Conquer o programacion dinamica.

PAP Grafos

Page 51: Intro Grafos

Definiciones y estructurasCamino mınimo

Arbol generador mınimoProblemas

Cantidad de caminosProblemas en grafos implıcitosProblemas

Problema - Laberinto

Fausto se encuentra atrapado en un laberinto(como el de la Figura 1). Se pide calcular lamenor cantidad de movimientos (Norte, Sur,Este u Oeste) necesarios para que Faustoalcance la salida (marcada con “o”) dado queinicialmente se encuentra en el punto marcadocon “*”.

#######

#....o#

#.#####

#.#...#

#...#*#

#######

(Figura 1)

Descripcion: “#” es una pared, “.” es un espacio libre, “o” es lasalida y “*” es el punto donde estamos parados.

PAP Grafos

Page 52: Intro Grafos

Definiciones y estructurasCamino mınimo

Arbol generador mınimoProblemas

Cantidad de caminosProblemas en grafos implıcitosProblemas

Problema - Laberinto

Fausto puede estar en cualquiera de las casillas (estado).

Estando en algunas casillas es posible alcanzar otras con unmovimiento (transicion de estados).

Estos dos conceptos definen un grafo.

La cantidad mınima de movimientos para escapar se traduce aun camino mınimo en el grafo.

PAP Grafos

Page 53: Intro Grafos

Definiciones y estructurasCamino mınimo

Arbol generador mınimoProblemas

Cantidad de caminosProblemas en grafos implıcitosProblemas

Problema - Laberinto

Representacion del grafo, en un tablero de r × c .

V (G ) = [0, r)× [0, c)

(u, v) ∈ E (G )⇔ libre(u) ∧ libre(v) ∧ dist(u, v) == 1

Un nodo v se representa con dos enteros “i , j”.

El grafo se representa con dos enteros (r y c) y un mapa decasillas libres.

int r, c;

char mapa[MAX_R][MAX_C];

PAP Grafos

Page 54: Intro Grafos

Definiciones y estructurasCamino mınimo

Arbol generador mınimoProblemas

Cantidad de caminosProblemas en grafos implıcitosProblemas

Problema - Laberinto

Vecinos de un nodo “i , j”:

const int ddi[4] = {-1, 1, 0, 0};

const int ddj[4] = { 0, 0, -1, 1};

forn(d, 4) {

int ii=i+ddi[d];

int jj=j+ddj[d];

if (enrango(ii, jj) && mapa[ii][jj] != ’#’) {

/* ii,jj es vecino */

}

}

PAP Grafos

Page 55: Intro Grafos

Definiciones y estructurasCamino mınimo

Arbol generador mınimoProblemas

Cantidad de caminosProblemas en grafos implıcitosProblemas

Problema

Google Code Jam 2009 - Qualification Round - Problema B: http://code.google.com/codejam/contest/dashboard?c=90101

V (G ) = [0,H)× [0,W )

Un nodo v se representa con dos enteros “i , j”.

Cada nodo tiene a lo sumo un vecino donde vierte el agua(segun las reglas del problema).

Cada nodo tiene a lo sumo cuatro vecinos que vierten agua enel.

Se desea identificar las componentes conexas de ese grafo.

PAP Grafos

Page 56: Intro Grafos

Definiciones y estructurasCamino mınimo

Arbol generador mınimoProblemas

Cantidad de caminosProblemas en grafos implıcitosProblemas

Problemas de hoy

SPOJ Brasil - 1759 - FFO Cubo -http://br.spoj.pl/problems/CUBO/ (Dijkstra)

ACM-ICPC UVA - 3985 - Board Games -http://acmicpc-live-archive.uva.es/nuevoportal/

data/problem.php?p=3985 (Floyd)

ACM-ICPC UVA - 4299 - Randomly-priced Tickets -http://acmicpc-live-archive.uva.es/nuevoportal/

data/problem.php?p=4299 (Floyd)

ACM-ICPC UVA - 3652 - Lazy Jumping Frog -http://acmicpc-live-archive.uva.es/nuevoportal/

data/problem.php?p=3652 (BFS por pisos)

PAP Grafos