cap iv grafos unsaac (1)

Upload: garychoqueborda

Post on 11-Oct-2015

29 views

Category:

Documents


0 download

TRANSCRIPT

  • ALGORITMICA IIIGRAFOSUNIVERSIDAD NACIONAL DE SAN ANTONIO ABAD DEL CUSCOIVAN MEDRANO VALENCIADEPARTAMENTO ACADEMICO DE INFORMATICA

  • 4.1.0 ORIGENES DE LA TEORIA DE GRAFOSEs posible, comenzando en cualquier punto de la ciudad de Konisberg elegir un camino que nos permita pasar una nica vez pasar por cada uno de los siete puentes sobre el ro Pregel?

  • 4.1.0 ORIGENES DE LA TEORIA DE GRAFOSEs posible, comenzando en cualquier punto de la ciudad de Konisberg elegir un camino que nos permita pasar una nica vez pasar por cada uno de los siete puentes sobre el ro Pregel?

  • 4.1.0 ORIGENES DE LA TEORIA DE GRAFOSEs posible, comenzando en cualquier punto de la ciudad de Konisberg elegir un camino que nos permita pasar una nica vez pasar por cada uno de los siete puentes sobre el ro Pregel?

  • 4.1.0 ORIGENES DE LA TEORIA DE GRAFOSEs posible, comenzando en cualquier punto de la ciudad de Konisberg elegir un camino que nos permita pasar una nica vez pasar por cada uno de los siete puentes sobre el ro Pregel?

  • 4.1.0 ORIGENES DE LA TEORIA DE GRAFOS

  • 4.1.0 ORIGENES DE LA TEORIA DE GRAFOS

  • 4.1.0 ORIGENES DE LA TEORIA DE GRAFOS

  • 4.1.0 ORIGENES DE LA TEORIA DE GRAFOS

  • 4.1.0 ORIGENES DE LA TEORIA DE GRAFOS

  • 4.1.0 ORIGENES DE LA TEORIA DE GRAFOS

  • 4.1.0 APLICACIONES DE LA TEORIA DE GRAFOS

  • 4.1.0 APLICACIONES DE LA TEORIA DE GRAFOS

  • 4.1.1. Ejemplos de grafosEjemplo: Grafo de carreteras entre ciudades.

  • 4.1.1. Ejemplos de grafosEjemplo: grafo de carreteras entre ciudades.ProblemasCul es el camino ms corto de Murcia a Badajoz?Existen caminos entre todos los pares de ciudades?Cul es la ciudad ms lejana a Barcelona?Cul es la ciudad ms cntrica?Cuntos caminos distintos existen de Sevilla a Zaragoza?Cmo hacer un tour entre todas las ciudades en el menor tiempo posible?

  • 4.1.1. Ejemplos de grafosEjemplo: grafo de transiciones de un AFD.

  • 4.1.1. Ejemplos de grafosEjemplo: grafo de transiciones de un AFD.ProblemasLa expresin: a b b a b a b b b a, es una expresin vlida del lenguaje?Cul es la expresin vlida ms corta?Transformar el grafo en una expresin regular y viceversa.

  • 4.1.1. Ejemplos de grafosEjemplo: grafo de planificacin de tareas.

  • 4.1.1. Ejemplos de grafosEjemplo: grafo de planificacin de tareas.ProblemasEn cuanto tiempo, como mnimo, se puede construir la pirmide?Cundo debe empezar cada tarea en la planificacin ptima?Qu tareas son ms crticas (es decir, no pueden sufrir retrasos)?Cunta gente necesitamos para acabar las obras?

  • 4.1.1. Ejemplos de grafosEjemplo: grafo asociado a un dibujo de lneas.Escena

  • 4.1.1. Ejemplos de grafosEjemplo: grafo de asociado a un dibujo de lneas.ProblemasCuntos grupos hay en la escena?Qu objetos estn visibles en la escena y en qu posiciones?Qu correspondencia hay entre puntos del modelo y de la escena observada?Qu objetos son isomorfos?

  • 4.1.1. Ejemplos de grafos

  • Un grafo G es una tupla G= (V, A), donde V es un conjunto no vaco de vrtices o nodos y A es un conjunto de aristas o arcos.Cada arista es un par (v, w), donde v, w V.Tipos de grafosGrafo no dirigido. Las aristas no estn ordenadas: (v, w) = (w, v)Grafos dirigidos (o digrafos). Las aristas son pares ordenados: w = cabeza de la arista, v = cola.4.1. Introduccin y definiciones

  • Nodos adyacentes a un nodo v: todos los nodos unidos a v mediante una arista.En grafos dirigidos:Nodos adyacentes a v: todos los w con A.Nodos adyacentes de v: todos los u con A.

    Un grafo est etiquetado si cada arista tiene asociada una etiqueta o valor de cierto tipo.Grafo con pesos: grafo etiquetado con valores numricos.Grafo etiquetado: G= (V, A, W), con W: A TipoEtiq

    4.1.2. Terminologa de grafos

  • Camino de un vrtice w1 a wq: es una secuencia w1, w2, ..., wq V, tal que todas las aristas (w1, w2), (w2, w3), ..., (wq-1, wq) A.Longitud de un camino: nmero de aristas del camino = n de nodos -1.Camino simple: aquel en el que todos los vrtices son distintos (excepto el primero y el ltimo que pueden ser iguales).Ciclo: es un camino en el cual el primer y el ltimo vrtice son iguales. En grafos no dirigidos las aristas deben ser diferentes.Se llama ciclo simple si el camino es simple. 4.1.2. Terminologa de grafos

  • 4.1.2. Terminologa de grafosUn subgrafo de G=(V, A) es un grafo G=(V, A) tal que VV y AA.Dados dos vrtices v, w, se dice que estn conectados si existe un camino de v a w.Un grafo es conexo (o conectado) si hay un camino entre cualquier par de vrtices.Si es un grafo dirigido, se llama fuertemente conexo.Una componente (fuertemente) conexa de un grafo G es un subgrafo maximal (fuertemente) conexo.

  • 4.1.2. Terminologa de grafosUn grafo es completo si existe una arista entre cualquier par de vrtices.Para n nodos, cuntas aristas tendr un grafo completo (dirigido o no dirigido)?

    Grado de un vrtice v: nmero de arcos que inciden en l.Para grafos dirigidos:Grado de entrada de v: n de aristas con Grado de salida de v: n de aristas con

  • 4.1.3. Operaciones elementales con grafosCrear un grafo vaco (o con n vrtices).Insertar un nodo o una arista.Eliminar un nodo o arista.Consultar si existe una arista (obtener la etiqueta).Iteradores sobre las aristas de un nodo:para todo nodo w adyacente a v haceraccin sobre w

    para todo nodo w adyacente de v haceraccin sobre wMucho menos frecuente

  • 4.2. Representacin de grafosRepresentacin de grafos:Representacin del conjunto de nodos, V.Representacin del conjunto de aristas, A.

    Ojo: las aristas son relaciones muchos a muchos entre nodos...

  • 4.2. Representacin de grafosRepresentacin del conjunto de aristas, A.Mediante matrices de adyacencia.

    Mediante listas de adyacencia.

    M12345101100200101310011400000500010

    12345

    2

    3

    3

    5

    1

    4

    4

    5

  • 4.2.1. Matrices de adyacenciatipo GrafoNoEtiq= array [1..n, 1..n] de 0..1

    Sea M de tipo GrafoNoEtiq, G= (V, A).M[v, w] = cierto (v, w) AGrafo no dirigido matriz simtrica: M[i, j] = M[j, i].Resultado: se desperdicia la mitad de la memoria.

    M12345101010210101301010410101501010

  • 4.2.1. Matrices de adyacenciaGrafos etiquetados:tipo GrafoEtiq[E]= array [1..n, 1..n] de EEl tipo E tiene un valor infinito, para el caso de no existir arista.Cmo seran los iteradores: para todo adyacente a, y adyacente de? Y contar nmero de aristas?Cunto es el tiempo de ejecucin?

    M1234132230424

  • 4.2.1. Matrices de adyacenciaUso de memoriak2 bytes/etiquetaMemoria usada: k2n2

    VentajasRepresentacin y operaciones muy sencillas.Eficiente para el acceso a una arista dada.InconvenientesEl nmero de nodos del grafo no puede cambiar.Si hay muchos nodos y pocas aristas (a

  • 4.2.2. Listas de adyacenciatipo Nodo= entero (1..n)tipo GrafoNoEtiq= array [1..n] de Lista[Nodo]

    Sea R de tipo GrafoNoEtiq, G= (V, A).La lista R[v] contiene los w tal que (v, w) A.Grafo no dirigido las aristas estn repetidas.Resultado: tambin se desperdicia memoria.

    12345

    2

    1

    2

    2

    1

    4

    3

    4

    4

    3

    5

    5

  • 4.2.2. Listas de adyacenciaGrafos etiquetados:tipo GrafoEtiq[E]= array [1..n] de Lista[Nodo,E]Cmo seran los iteradores: para todo adyacente a, y adyacente de? Y contar nmero de aristas?Cunto es el orden de complejidad? Se suponen: n nodos y a aristas.

    1234

    2a

    4b

    1a

    2c

    4d

  • 4.2.2. Listas de adyacenciaUso de memoriak1 bytes/puntero, k2 bytes/etiqueta o nodoMemoria usada: k1(n+a) + 2k2aCon matrices de adyacencia: k2n2Cul usa menos memoria?

    VentajasMs adecuada cuando a

  • 4.3. Problemas y algoritmos sobre grafos4.3.1. Recorridos sobre grafos4.3.2. rboles de expansin mnimos4.3.3. Problemas de caminos mnimos4.3.4. Algoritmos sobre grafos dirigidos4.3.5. Algoritmos sobre grafos no dirigidos4.3.6. Otros problemas con grafos

  • 4.3.1. Recorridos sobre grafosIdea similar al recorrido en un rbol.Se parte de un nodo dado y se visitan los vrtices del grafo de manera ordenada y sistemtica, movindose por las aristas.

    Tipos de recorridos:Bsqueda primero en amplitud o anchura. Equivalente a recorrer un rbol por niveles.Bsqueda primero en profundidad. Equivalente a un recorrido en preorden de un rbol.

    Los recorridos son una herramienta til para resolver muchos problemas sobre grafos.

  • 4.3.1. Recorridos sobre grafosEl recorrido puede ser tanto para grafos dirigidos como no dirigidos.Es necesario llevar una cuenta de los nodos visitados y no visitados.

  • 4.3.1.1. Bsqueda primero en profundidadDepth First Search (DFS)Algoritmo DFS(G)Inicio para cada u in V hacer inicio color[u] blanco pred[u] null fin para cada u en V hacer inicio si color[u]== blanco entonces DFSVisit(u) finFinAlgoritmo DFSVisit(u)Inicio Color[u] gris para cada v en Adj(u) hacer inicio si color[v]= blanco entonces inicio pred[v] u DFSVisit(v) fin fin color[u] negroFin

  • 4.3.1.1. Bsqueda primero en profundidadEl recorrido no es nico: depende del nodo inicial y del orden de visita de los adyacentes.El orden de visita de unos nodos a partir de otros puede ser visto como un rbol: rbol de expansin en profundidad asociado al grafo.Si aparecen varios rboles: bosque de expansin en profundidad.

    Ejemplo. Grafo no dirigido.

  • Arco de cruceArco de avanceArco de retroceso

  • 4.3.1.1. Bsqueda primero en profundidadBosque de expansin en profundidad

  • 4.3.1.1. Bsqueda primero en profundidadCunto es el tiempo de ejecucin de la bpp?Imposible predecir las llamadas en cada ejecucin.Solucin: medir el trabajo total realizado.Bosque de expansin12435arco de avancearco de retrocesoarco de cruceEjemplo: grafo dirigido.abced

  • 4.3.1.2. Bsqueda primero en amplitud (o anchura )Breadth-first-search (BFS)Bsqueda en amplitud empezando en un nodo v:Primero se visita v.Luego se visitan todos sus adyacentes.Luego los adyacentes de estos y as sucesivamente.El algoritmo utiliza una cola de vrtices.Operaciones bsicas:Sacar un elemento de la cola.Aadir a la cola sus adyacentes no visitados.

  • 4.3.1.2. Bsqueda primero en amplitud (o anchura )Procedimiento BFS(G,s)Inicio int color[1.size(V)] cola Q para cada u en V hacer color[u] blanco color[s] gris encolar(Q,s) mientras Q vacio hacer inicio u desencolar(Q) para cada v en Adj(u) hacer inicio si color[v] == blanco entonces inicio color[v] gris encolar(q,v) fin fin color[u] negro finfin

  • 4.3.1.2. Bsqueda primero en amplitud (o anchura )2, 5, 75, 7, 67, 6, 3, 46, 3, 4, 13, 4, 14, 1

  • 4.3.1.2. Bsqueda primero en amplitud (o anchura )1BOSQUE DE EXPANSION

  • 4.3.1.2. Bsqueda primero en amplitud (o anchura )Ejemplo: grafo no dirigido.Bosque de expansin en amplitud123786495Arcos de cruce124365879

  • 4.3.1.2. Bsqueda primero en amplitud (o anchura )Cunto es el tiempo de ejecucin de la bpa?Cmo comprobar si un arco es de avance, cruce, etc.?Solucin: construir el bosque explcitamente.Bosque de expansinEjemplo: grafo dirigido.12435abced

  • 4.3.1. Recorridos sobre grafosConstruccin explcita del bosque de expansin: usamos una estructura de punteros al padre.marca: array [1, ..., n] de entero

    marca[v] vale: -1 si v no est visitado0 si est visitado y es raz de un rbolEn otro caso indicar cul es el padre de v

    Arco de avance : w es descendiente de v en uno de los rboles del bosque.Arco de retroceso : v es descendiente de w.Arco de cruce : si no se cumple ninguna de las anteriores.

  • 4.3.1.3. Ejemplos de aplicacin de los recorridosProblema 1: encontrar los componentes conexos de un grafo no dirigido.

    Problema 2: prueba de aciclicidad. Dado un grafo (dirigido o no dirigido) comprobar si tiene algn ciclo o no.

  • 4.3.1.3. Ejemplos de aplicacin de los recorridosPrueba de aciclicidadGrafo no dirigido. Hacer una bpp (o bpa). Existe algn ciclo si y slo si aparece algn arco que no es del rbol de expansin.Grafo dirigido. Hacer una bpp (o bpa). Existe un ciclo si y slo si aparece algn arco de retroceso.

    Orden de complejidad de la prueba de aciclicidad: igual que los recorridos.Con matrices de adyacencia: O(n2).Con listas de adyacencia: O(a+n).

  • 4.3.2. Problemas de caminos mnimosCoste de un camino: suma de los costes de las aristas por las que pasa.Problemas de caminos mnimos:Camino mnimo entre dos nodos, v y w.Caminos mnimos entre un nodo v y todos los dems.Caminos mnimos entre todos los pares de nodos.

  • 4.3.2.1. Caminos mnimos desde un origenAlgoritmo de DijkstraSupongamos un grafo G, con pesos positivos y un nodo origen v.

    El algoritmo trabaja con dos conjuntos de nodos:Escogidos: S. Nodos para los cuales se conoce ya el camino mnimo desde el origen.Candidatos: T = V-S. Nodos pendientes de calcular el camino mnimo, aunque conocemos los caminos mnimos desde el origen pasando por nodos de S.

  • 4.3.2.1. Caminos mnimos desde un origenCamino especial: camino desde el origen hasta un nodo, que pasa slo por nodos escogidos, S.123786495ST=V-SIdea: en cada paso, coger el nodo de T con menor distancia al origen. Aadirlo a S.Recalcular los caminos mnimos de los dems candidatos, pudiendo pasar por el nodo cogido.

  • 4.3.2.1. Caminos mnimos desde un origenAlgoritmo de DijkstraInicializacin: S= {1}, V-S=T= {2, ..., n}, caminos especiales mnimos = caminos directos.Repetir n-1 veces:Seleccionar un nodo w de T con el camino especial ms corto.Proposicin: el camino mnimo para este nodo w, coincide con su camino especial.Recalcular los caminos especiales para los nodos de T, pudiendo pasar por w.

  • 4.3.2.1. Caminos mnimos desde un origenImplementacin del algoritmo de DijkstraSuponemos que el origen es el nodo 1.D: array [2..n] de real. D[v] almacena el coste del camino especial mnimo para el nodo v.P: array [2..n] de entero. P[v] almacena el ltimo nodo en el camino especial mnimo de v. Inicializacin: D[v]:= C[1, v], P[v]:= 1Nodo seleccionado: nodo de T con mnimo D[v]Actualizacin: para todos los w de T hacer si D[w] + C[w,v] < D[w] entonces D[w]:= D[v] + C[v, w] P[w]:= v finsi

  • 4.3.2.1. Caminos mnimos desde un origenCamino especial para w:Sin pasar por v: D[w]Pasando por v: D[v] + C[v,w]Nos quedamos con el menor.Si el menor es pasando por v entonces: P[w]= v.Camino especial para w: 1 ... P[P[P[w]]] P[P[w]] P[w] w1vwSTC[v, w]D[w]D[v]

  • 4.3.2.1. Caminos mnimos desde un origenAlgoritmo de DijkstraEntrada: C: array [1..n, 1..n] de real Matriz de costesSalida:D: array [2..n] de real Costes de caminos mnimosP: array [2..n] de entero Nodos de pasoDatos para clculos intermedios: S: conjunto de vertices Nodos escogidos

    Inicializacin: para v:= 2, ..., n hacerD[v]:= C[1, v]P[v]:= 1S[v]:= FALSE finpara

  • s4.3.2.1. Caminos mnimos desde un origen1235410502060301010030100

    iteraswD[2]D[3]D[4]D[5]inicial{1}-101{1,2}21060301002{1,2,4}4105030903{1,2,4,3}3105030604{1,2,4,3,5}510503060

    vP[v]1121344153

  • 4.3.2.1. Caminos mnimos desde un origenAlgoritmo de Dijkstraprocedure Dijkstrainicio s {1} para 1 2 hasta n hacer D[ i ] C[ 1,i] para i 1 hasta n-1 hacer inicio elige un vertice w en V-s tal que D[w] se minimo agrega w a s para cada vertice v en V-s hacer inicio D[v] min (D[v], D[w]+ C[w, v]) Si D[w] + C[w,v]
  • 4.3.2.1. Caminos mnimos desde un origenEjemplo: mostrar la ejecucin del algoritmo de Dijkstra sobre el siguiente grafo.1237564A partir de las tablas, cmo calcular cul es el camino mnimo para un nodo v?141833122812

    NodoSDP2F113F14F15F16F17F41

  • 4.3.2.1. Caminos mnimos desde un origenEficiencia del algoritmo de DijkstraCon matrices de adyacencia:Inicializacin: O(n)Ejecutar n-1 veces:Buscar el nodo con mnimo D[v] y S[v] falso: O(n)Actualizar los valores de los candidatos: O(n)En total: O(n2)Con listas de adyacencia:Seguimos teniendo un O(n2)Podemos modificar la implementacin y conseguir un O(alog n). Ser adecuada cuando a
  • 4.3.2.2. Caminos mnimos entre todos los paresProblema: calcular los caminos mnimos entre todos los pares de nodos del grafo.

    PosibilidadesAplicar el algoritmo de Dijkstra n veces, una por cada posible nodo origen:Con matrices de adyacencia: O(n3)Con listas de adyacencia: O(anlog n)Aplicar el algoritmo de Floyd:Con listas o matrices: O(n3)Pero ms sencillo de programar...

  • 4.3.2.2. Caminos mnimos entre todos los paresEntrada:C: array [1..n, 1..n] de real Matriz de costesSalida:D: array [1..n, 1..n] de real Costes caminos mnimosAlgoritmo de FloydD:= Cpara k:= 1, ..., n hacer para i:= 1, ..., n hacerpara j:= 1, ..., n hacer D[i, j]:= min ( D[i, j] , D[i, k] + D[k, j] )

  • 4.3.2.2. Caminos mnimos entre todos los paresEn qu se basa el algoritmo de Floyd?

    En cada paso k, la matriz D almacena los caminos mnimos entre todos los pares pudiendo pasar por los k primeros nodos.Inicializacin: D almacena los caminos directos.Paso 1: caminos mnimos pudiendo pasar por el 1....Paso n: caminos mnimos pudiendo pasar por cualquier nodo Lo que buscamos.

    En el paso k, el nodo k acta de pivote.

  • 4.3.2.2. Caminos mnimos entre todos los paresCamino mnimo entre i y j, en el paso k:Sin pasar por k: D[i, j]Pasando por k: D[i, k] + D[k, j]Nos quedamos con el menor.Ojo: falta indicar cules son los caminos mnimos.P: array [1..n, 1..n] de entero. P[i, j] indica un nodo intermedio en el camino de i a j.i ... P[i, j] ... jijD[k, j]D[i, j]D[i, k]k

  • 4.3.2.2. Caminos mnimos entre todos los paresAlgoritmo de FloydD:= CP:= 0para k:= 1, ..., n hacer para i:= 1, ..., n hacerpara j:= 1, ..., n hacer si D[i, k] + D[k, j] < D[i, j] entoncesD[i, j]:= D[i, k] + D[k, j]P[i, j]:= k finsi

    Cul es el orden de complejidad del algoritmo?

  • 4.3.2.2. Caminos mnimos entre todos los paresEl algoritmo de Floyd se basa en una descomposicin recurrente del problema:

    Dk(i, j):=

    Como la fila y columna k no cambian en el paso k, se usa una sola matriz D.Cmo recuperar el camino?operacin camino (i, j: entero)k:= P[i, j]si k 0 entonces camino (i, k) escribe (k) camino (k, j)finsiC[i, j]Si k=0min(Dk-1(i, j), Dk-1(i, k) + Dk-1(k, j)) Si k>0escribe (i)camino (i, j)escribe (j)

  • 4.3.2.2. Caminos mnimos entre todos los paresEjemplo:Encontrar los caminos ms cortos entre todos los vrtices del siguiente grafo dirigido.

  • Algoritmos de Grafos Dirigidos Algoritmo de Floyd (cont.)*1 2 3 4 5D[i,j]P

  • Algoritmos de Grafos Dirigidos Algoritmo de Floyd (cont.)*1 2 3 4 5D2[i,j]PD1[i,j]1 2 3 4 5

  • Algoritmos de Grafos Dirigidos Algoritmo de Floyd (cont.)*D3[i,j]PD2[i,j]1 2 3 4 51 2 3 4 5

  • Algoritmos de Grafos Dirigidos Algoritmo de Floyd (cont.)*D4[i,j]PD3[i,j]1 2 3 4 51 2 3 4 5

  • Algoritmos de Grafos Dirigidos Algoritmo de Floyd (cont.)D5[i,j]PD4[i,j]1 2 3 4 51 2 3 4 5

  • Algoritmos de Grafos Dirigidos Algoritmo de Floyd (cont.)*PA4[i,j]1 2 3 4 51 2 3 4 5A5[i,j]

  • Algoritmos de Grafos Dirigidos Algoritmo de Floyd (cont.)*1 2 3 4 5DP

  • 4.3.2.2. Caminos mnimos entre todos los paresEjemplo: aplicar el algoritmo de Floyd al siguiente grafo dirigido.Calcular el camino mnimo entre 1 y 2.

    D12310822303620

    P123100020003000

  • 4.3.2.3. Cierre transitivo de un grafoProblema: dada una matriz de adyacencia M (de booleanos), encontrar otra matriz A, tal que A[i, j] es cierto si y slo si existe un camino entre i y j.Algoritmo de WarshallEs una simple adaptacin del algoritmo de Floyd a valores booleanos.A:= Mpara k:= 1, ..., n hacer para i:= 1, ..., n hacerpara j:= 1, ..., n hacer A[i, j]:= A[i, j] OR (A[i, k] AND A[k, j])

  • 4.3.2. Problemas de caminos mnimosConclusionesCaminos mnimos: problema fundamental en grafos. Diferentes problemas, con diversas aplicaciones.Desde un origen hasta todos los dems nodos algoritmo de Dijkstra.Idea: nodos escogidos y candidatos.

    Entre todos los pares algoritmo de Floyd.Idea: pivotar sobre cada nodo.

    Ambos algoritmos pueden modificarse para resolver otros problemas.

  • 4.3.3. rboles de expansin de coste mnimoDefinicin: un rbol de expansin de un grafo G=(V, A) no dirigido y conexo es un subgrafo G=(V, A) conexo y sin ciclos.Ejemplo: los rboles de expansin en profundidad y en amplitud de un grafo conexo.En grafos con pesos, el coste del rbol de expansin es la suma de los costes de las aristas.

    Problema del rbol de expansin de coste mnimo:dado un grafo no dirigido con pesos, encontrar el rbol de expansin de menor coste.

  • 4.3.3. rboles de expansin de coste mnimoProblema: conectar todos los ordenadores con el menor coste total.Solucin: algoritmos clsicos de Prim y Kruskal.3122435665

  • 4.3.3.1. Algoritmo de PrimEsquema:Empezar en un vrtice cualquiera v. El rbol consta inicialmente slo del nodo v.Del resto de vrtices, buscar el que est ms prximo a v (es decir, con la arista (v, w) de coste mnimo). Aadir w y la arista (v, w) al rbol.Buscar el vrtice ms prximo a cualquiera de estos dos. Aadir ese vrtice y la arista al rbol de expansin.Repetir sucesivamente hasta aadir los n vrtices.

  • 4.3.3.1. Algoritmo de PrimEjemplo de ejecucin del algoritmo.3122435665123456

  • 4.3.3.1. Algoritmo de PrimLa solucin se construye poco a poco, empezando con una solucin vaca.

    Implcitamente, el algoritmo maneja los conjuntos:V: Vrtices del grafo.U: Vrtices aadidos a la solucin.V-U: Vrtices que quedan por aadir.

    Cmo implementar eficientemente la bsqueda: encontrar el vrtice de V-U ms prximo a alguno de los de U?

  • 4.3.3.1. Algoritmo de Prim Se usan dos arrays:MAS_CERCANO: Para cada vrtice de V-U indica el vrtice de U que se encuentra ms prximo.MENOR_COSTE: Indica el coste de la arista ms cercana.

    Estructura del algoritmo de Prim: C[v, w] Matriz de costes1. Inicialmente U= {1}. MAS_CERCANO[v]= 1. MENOR_COSTE[v]= C[1, v], para v= 2..n2. Buscar el nodo v, con MENOR_COSTE mnimo. Asignarle un valor muy grande (para no volver a cogerlo).3. Recalcular MAS_CERCANO y MENOR_COSTE de los nodos de V-U. Para cada w de V-U, comprobar si C[v, w] es menor que MENOR_COSTE[w].4. Repetir los dos puntos anteriores hasta que se hayan aadido los n nodos.

  • 4.3.3.1. Algoritmo de PrimEjemplo: mostrar la ejecucin del algoritmo sobre el grafo.

    Dnde est almacenado el resultado del algoritmo?Cul es el orden de complejidad del algoritmo?

  • 4.3.3.2. Algoritmo de KruskalEsquema: G= (V, A)Empezar con un grafo sin aristas: G= (V, )Seleccionar la arista de menor coste de A.Si la arista seleccionada forma un ciclo en G, eliminarla. Si no, aadirla a G.Repetir los dos pasos anteriores hasta tener n-1 aristas.

    Cmo saber si una arista (v, w) provocar un ciclo en el grafo G?

  • 4.3.3.2. Algoritmo de KruskalEjemplo: mostrar la ejecucin del algoritmo en el siguiente grafo.3122435665123456

  • Trabaja agregando aristas a A en orden creciente de peso.Elige la arista ms econmica y si la misma no produce un ciclo entonces se agrega al AGM.La parte ms intrincada del algoritmo es detectar la formacin de ciclos. Para ello podramos aplicar DFS pero llevara mucho tiempo.Puede hacerse ms rpido empleando una estructura o TAD denominado Union-Find que soporta las siguientes operacionesCreate_Set (u) = Crea un conjunto conteniendo uFind_Set (u) = Encuentra el conjunto que contiene un elemento uUnion (u,v) = Realiza la unin de los conjuntos que contienen u,v en un nico conjunto.

    4.3.3.2. Algoritmo de Kruskal

  • 4.3.3.2. Algoritmo de KruskalImplementacin del algoritmoNecesitamos:Ordenar las aristas de A, de menor a mayor: O(a log a).Saber si una arista dada (v, w) provocar un ciclo.Cmo comprobar rpidamente si (v, w) forma un ciclo?Una arista (v, w) forma un ciclo si v y w estn en la misma componente conexa.La relacin estar en la misma componente conexa es una relacin de equivalencia.

  • 4.3.3.2. Algoritmo de KruskalKruskal(G,W)Inicio A {} para cada u en V hacer Create_Set (u) Sort E de acuerdo al peso w para cada (u,v) de la lista ordenada hacer Inicio si Find_Set(u) Find_set(v) entonces Inicio Add(u,v) to A Union(u,v) fin FinfinE (h,g)-(g,f)-(i,e)-(c,f)-(a,b)-(i,g)-(h,i) (c,d)-(b,c)-(a,h)-(d,e)-(e,f)-(b,h)-(d,f)21{a}{b}{c}{e}{d}{g}{f}{i}{h}A(h,g){h,g}(g,f){h,g,f}(i,c){i,c}(c,f){h,g,f,i,c}(a,b){a,b}(c,d){h,g,f,i,c,d}(b,c){h,g,f,i,c,d,a,b}(d,e){h,g,f,i,c,d,a,b,e}

  • 4.3.3. rboles de expansin mnimosConclusionesAmbos algoritmos (Prim y Kruskal) encuentran siempre la solucin ptima.La solucin obtenida ser la misma, o no...La estructura de los dos algoritmos es muy parecida:Empezar con una solucin vaca.Aadir en cada paso un elemento a la solucin (Prim: un nodo; Kruskal: una arista).Una vez aadido un elemento a la solucin, no se quita (no se deshacen las decisiones tomadas).

  • 4.3.4. Algoritmos sobre grafos dirigidos 4.3.4.1. Componentes fuertemente conexas 4.3.4.2. Grafos dirigidos acclicos

    Definicin:Una componente conexa de un grafo G es un subgrafo maximal y conexo de G.En grafos dirigidos: componente fuertemente conexa. Existen caminos entre todos los pares de nodos y en los dos sentidos.Problema: dado un grafo, calcular sus componentes (fuertemente) conexas.

  • 4.3.4.1. Componentes fuertemente conexasComponentes conexas en grafos no dirigidos.

    Solucin trivial: aplicar una bpp. Cada rbol es una componente conexa.Componentes fuertemente conexas en grafos dirigidos.Funciona una simple bpp?

  • 4.3.4.1. Componentes fuertemente conexasLa bpp no funciona, pero...Y si hubiramos empezado la bpp de mayor a menor nmero...?

    Idea: hacer dos bsquedas en profundidad.En la primera se calcula un orden para la segunda.En la segunda se recorre el grafo (invertido), segn ese orden.Orden posterior de un grafo: npost[v] = orden de terminacin de la llamada recursiva de v en la bpp.

  • 4.3.4.1. Componentes fuertemente conexasAlgoritmo para calcular las componentes fuertemente conexas de un grafo G = (V, A)1. Realizar una bpp de G, numerando los vrtices en orden posterior. npost: array [1..n] de entero.2. Construir el grafo invertido G = (V, A). Para toda arista A, tenemos A.3. Realizar una bpp en G empezando en el nodo con mayor npost. Si no se visitan todos los nodos, continuar con el nodo no visitado con mayor npost.4. Cada rbol del bosque resultante del paso 3 es una componente fuertemente conexa de G.

  • 4.3.4.1. Componentes fuertemente conexasEjemplo: encontrar las componentes fuertemente conexas del siguiente grafo.Cul es el orden de complejidad del algoritmo?

  • 4.3.4.1. Componentes fuertemente conexasA partir de las componentes fuertemente conexas, podemos representar todos los caminos existentes mediante un grafo reducido.Grafo reducido de un grafo dirigido G: GR.Cada nodo de GR representa un componente fuertemente conexo de G.Existe una arista entre dos nodos de GR si existe una arista entre algunos de los nodos de las componentes conexas de G correspondientes.

  • 4.3.4.2. Grafos dirigidos acclicosDefinicin: un grafo dirigido acclico (GDA) es un grafo dirigido sin ciclos.Ejemplos: grafo de planificacin de tareas, expresiones aritmticas (con subexpresiones comunes), grafo de prerrequisitos, etc.

  • 4.3.4.2. Grafos dirigidos acclicosLas propias caractersticas de la aplicacin implican que no pueden existir ciclos.Concepto matemtico subyacente: representacin de rdenes parciales.Definicin: un orden parcial en un conjunto C es una relacin binaria que cumple:Para cualquier elemento a C, (a R a) es falsoPara cualquier a, b, c C, (a R b) Y (b R c) (a R c)

    Ejemplo: La relacin de inclusin propia entre conjuntos, .

  • 4.3.4.2. Grafos dirigidos acclicosRecorrido en orden topolgico: es un tipo de recorrido aplicable solamente a gda.Idea: un vrtice slo se visita despus de haber sido visitados todos sus predecesores en el grafo.Numeracin en orden topolgico: ntop[v]. Si existe una arista entonces ntop[v] < ntop[w].Puede existir ms de un orden vlido.

    Cul es el significado del orden topolgico?Grafo de tareas: es un posible orden de ejecucin de las tareas, respetando las precedencias.Expresin aritmtica: orden para evaluar el resultado total de la expresin (de mayor a menor ntop).

  • 4.3.4.2. Grafos dirigidos acclicosEjemplo: ordenacin topolgica de las tareas para construir una pirmide.Licenciade obras6Aplanarterreno4Comprarpiedras2CincelarpiedrasHacercamino3Colocarpiedras9Pintarpirmide381234567Existen otras ordenaciones topolgicas vlidas.Disear un algoritmo para calcular una ordenacin topolgica.

  • SORT TOPOLOGICOTopSort(G)Inicio para cada u en V hacer Color[u] blanco L new (lista) para cada u en V hacer si color[u] = blanco entonces TopVisit(u)Fin

    TopVisit(u,G)Inicio Color[u] gris para cada v en Adj(u) hacer si color[v] = blanco entonces TopVisit(v)

    Append u a la cabeza de LFin

  • *******