Análisis de Algoritmos Problemas fundamentales Dra. Elisa Schaeffer [email protected] PISIS / FIME / UANL Problemas fundamentales– p. 1 Satisfiabilidad (S AT) Dada: una expresión booleana φ en C NF Pregunta: ¿ es φ satisfactible? Utilizando tablas de asignaciones: O (n2 · 2n ) Problemas fundamentales– p. 2 Demostración de S AT ∈ NP Una N TM que determina si φ es satisfactible: asignamos para cada xi ∈ X(φ) de una manera no determinista ⊤ o ⊥ si T |= φ, la respuesta es “sí” en el otro caso, la respuesta es “no” Problemas fundamentales– p. 3 Cláusula Horn = una disyunción con por máximo un literal positivo ⇒ todas menos una variable tienen que ser negadas Si contiene un literal positivo, se llama implicación porque (¬x1 ) ∨ (¬x2 ) ∨ . . . (¬xk ) ∨ xp es lógicamente equivalente a (x1 ∧ x2 ∧ . . . ∧ xk ) → xp Problemas fundamentales– p. 4 H ORNSAT Dada: φ que es una conjunción de cláusulas Horn Pregunta: ¿es φ satisfactible? Problemas fundamentales– p. 5 H ORNSAT∈ P 1. Inicializa T := ∅ y el conjunto S para contener las cláusulas. 2. Si hay una implicación φi = (x1 ∧ · · · ∧ xn ) → y ∈ S así que (X(φi ) \ {y}) ⊆ T pero y ∈ / T , haz T := T ∪ {y}. 3. Si T cambió, vuelve a repetir el paso 2. 4. Cuando T no cambia, verifica para las cláusulas φi en S que consisten de puros literales negados: Si existe un literal ¬xi tal que xi ∈ / T , φi es satisfactible. Si no existe tal literal, φi no es satisfactible; imprime “no”. 5. Si las cláusulas negativas son satisfactibles, imprime “sí”. Problemas fundamentales– p. 6 C IRCUITSAT y C IRCUITVALUE Dado: un circuito booleano C Pregunta: ¿ existe una asignación T : X(C) → {⊤, ⊥} así que la salida sea ⊤? Dado: un circuito booleano C que no contenga variables Pregunta: ¿es ⊤ la salida del circuito? C IRCUITSAT ∈ NP, pero C IRCUITVALUE ∈ P. Problemas fundamentales– p. 7 Problema de alcance R EACHABILITY Dado: un grafo G = (V, E) y dos vértices v, u ∈ V Pregunta: ¿existe un camino de v a u? R EACHABILITY Complement: ¿es verdad que no existe ningún camino de v a u? Problemas fundamentales– p. 8 Floyd-Warshall Un algoritmo básico para R EACHABILITY que además computa los caminos más cortos si G es ponderadoa El algoritmo construye de una manera incremental estimaciones a los caminos más cortos entre dos vértices hasta llegar a la solución óptima. Etiquetamos los vértices de G = (V, E) así que V = {1, 2, . . . , n}. a Los pesos tienen que ser no negativos para que funcione. Problemas fundamentales– p. 9 Subrutina cc(i, j, k) construye el camino más corto entre los vértices i y j pasando solamente por vértices con etiqueta ≤ k Para un camino de i a j con vértices intermedios con menores o iguales a k + 1, hay dos opciones: el camino más corto con etiquetas ≤ k + 1 utiliza solamente vértices con etiquetas ≤ k existe algún camino que primero va de i a k + 1 y después de k + 1 a j así que la combinación de estos dos caminos es más corto que cualquier camino que solamente utiliza vértices con etiquetas menores a k + 1 Problemas fundamentales– p. 10 Formulación recursiva cc(i, j, k) = mı́n {cc(i, j, k − 1), cc(i, k, k − 1) + cc(k, j, k − 1)} Condición inicial: cc(i, j, 0) = w(i, j) w(i, j) es el peso de (i, j) ∈ E grafos no ponderados: cc(i, j, 0) = 1 para cada arista donde no hay arista, cc(i, j, 0) = ∞ Problemas fundamentales– p. 11 Computación de cc iteramos primero con k = 1, después con k = 2, continuando hasta k = n la formulación recursiva para cada par {i, j} Problemas fundamentales– p. 12 Computación de cc iteramos primero con k = 1, después con k = 2, continuando hasta k = n la formulación recursiva para cada par {i, j} ⇒ la complejidad asintótica del algoritmo es O (n3 ) Problemas fundamentales– p. 12 Computación de cc iteramos primero con k = 1, después con k = 2, continuando hasta k = n la formulación recursiva para cada par {i, j} ⇒ la complejidad asintótica del algoritmo es O (n3 ) la información de la iteración k se puede reemplazar con la de la iteración k + 1 Problemas fundamentales– p. 12 Computación de cc iteramos primero con k = 1, después con k = 2, continuando hasta k = n la formulación recursiva para cada par {i, j} ⇒ la complejidad asintótica del algoritmo es O (n3 ) la información de la iteración k se puede reemplazar con la de la iteración k + 1 ⇒ el uso de memoria es cuadrático Problemas fundamentales– p. 12 Ciclos y caminos de Hamilton Dado: un grafo G = (V, E) H AMILTON PATH: ¿existe un camino C en G tal que C visite cada vértice exactamente una vez? H AMILTON C YCLE: ¿existe un ciclo C en G tal que C visite cada vértice exactamente una vez? Problemas fundamentales– p. 13 Problema del viajante (de comercio) Caso ponderado: ciclo de Hamilton de costo mínimo T SP D es la problema de decisión que corresponde: Dado: un grafo ponderado G = (V, E) con pesos en las aristas y un constante c Pregunta: ¿existe un ciclo C en G tal que C visite cada vértice exactamente una vez y que la suma de los pesos de las aristas de C sea ≤ c? Problemas fundamentales– p. 14 Camarilla y conjunto independiente Dado: un grafo no dirigido G = (V, E) y un entero k > 0 C LIQUE: ¿existe un subgrafo completo inducido por el conjunto C ⊆ V tal que |C| = k? I NDEPENDENT S ET: ¿existe un subgrafo inducido por el conjunto I ⊆ V tal que |I| = k y que no contenga arista ninguna? Observación: si C es una camarilla en G = (V, E), C es un conjunto independiente en Ḡ. Problemas fundamentales– p. 15 Acoplamiento = M ⊆ E de aristas no adyacentes v está acoplado: una arista incidente a v in M Problemas fundamentales– p. 16 Acoplamiento = M ⊆ E de aristas no adyacentes v está acoplado: una arista incidente a v in M si no, está libre Problemas fundamentales– p. 16 Acoplamiento = M ⊆ E de aristas no adyacentes v está acoplado: una arista incidente a v in M si no, está libre un acoplamiento máximo Mmáx contiene el número máximo posible de aristas (no es necesariamente único) Problemas fundamentales– p. 16 Acoplamiento = M ⊆ E de aristas no adyacentes v está acoplado: una arista incidente a v in M si no, está libre un acoplamiento máximo Mmáx contiene el número máximo posible de aristas (no es necesariamente único) un acoplamiento maximal: aristas ∈ / M están adyacentes a por lo menos una arista ∈ M Problemas fundamentales– p. 16 Acoplamiento = M ⊆ E de aristas no adyacentes v está acoplado: una arista incidente a v in M si no, está libre un acoplamiento máximo Mmáx contiene el número máximo posible de aristas (no es necesariamente único) un acoplamiento maximal: aristas ∈ / M están adyacentes a por lo menos una arista ∈ M máximo ⇒ maximal (pero no ⇔) Problemas fundamentales– p. 16 Acoplamiento perfecto el número de acoplamiento = |Mmáx | Problemas fundamentales– p. 17 Acoplamiento perfecto el número de acoplamiento = |Mmáx | el número de vértices libres = el déficit Problemas fundamentales– p. 17 Acoplamiento perfecto el número de acoplamiento = |Mmáx | el número de vértices libres = el déficit un acoplamiento perfecto = cero deficit Problemas fundamentales– p. 17 Acoplamiento perfecto el número de acoplamiento = |Mmáx | el número de vértices libres = el déficit un acoplamiento perfecto = cero deficit su número de acoplamiento = n 2 Problemas fundamentales– p. 17 Caminos aumentantes y alternativos un camino alternante: sus aristas alternativamente pertenecen y no pertenecen a M Problemas fundamentales– p. 18 Caminos aumentantes y alternativos un camino alternante: sus aristas alternativamente pertenecen y no pertenecen a M un camino aumentante A es un camino alternante de un vértice libre v a otro vértice libre u Problemas fundamentales– p. 18 Aumento del acoplamiento un acoplamiento M es máximo si y sólo si no contiene ningún camino aumentante Problemas fundamentales– p. 19 Aumento del acoplamiento un acoplamiento M es máximo si y sólo si no contiene ningún camino aumentante dado un A, podemos intercambiar las aristas en M para las no en M para construir M′ Problemas fundamentales– p. 19 Aumento del acoplamiento un acoplamiento M es máximo si y sólo si no contiene ningún camino aumentante dado un A, podemos intercambiar las aristas en M para las no en M para construir M′ |M′ | = |M| + 1 Problemas fundamentales– p. 19 Aumento del acoplamiento un acoplamiento M es máximo si y sólo si no contiene ningún camino aumentante dado un A, podemos intercambiar las aristas en M para las no en M para construir M′ |M′ | = |M| + 1 ′ M = M \ (M ∩ A) ∪ A \ (M ∩ A) Problemas fundamentales– p. 19 Cubiertas Una cubierta de aristas es un conjunto CE de aristas así que para cada vértice v ∈ V , C contiene una arista incidente a v. Problemas fundamentales– p. 20 Cubiertas Una cubierta de aristas es un conjunto CE de aristas así que para cada vértice v ∈ V , C contiene una arista incidente a v. Una cubierta de vérticesa es un conjunto CV de vértices así que para cada arista {v, w}, por lo menos uno de los vértices incidentes está incluido en CV . Problemas fundamentales– p. 20 Cubiertas Una cubierta de aristas es un conjunto CE de aristas así que para cada vértice v ∈ V , C contiene una arista incidente a v. Una cubierta de vérticesa es un conjunto CV de vértices así que para cada arista {v, w}, por lo menos uno de los vértices incidentes está incluido en CV . La meta de suele ser encontrar un conjunto de cardinalidad mínima. a I es un conjunto independiente en G si y sólo si V \ I es una cubierta de vértices G. Problemas fundamentales– p. 20 V ERTEX C OVER Dado: un grafo G = (V, E) no dirigido y un entero k > 0 Pregunta: ¿existe un conjunto de vértices C ⊆ V con |C| ≤ k tal que ∀{v, u} ∈ E, o v ∈ C o u ∈ C? Problemas fundamentales– p. 21 Flujos Grafos ponderados (y posiblemente dirigidos) a dirigido en en caso de grafos dirigidos Problemas fundamentales– p. 22 Flujos Grafos ponderados (y posiblemente dirigidos) Vértices especiales: fuente s y sumidero t a dirigido en en caso de grafos dirigidos Problemas fundamentales– p. 22 Flujos Grafos ponderados (y posiblemente dirigidos) Vértices especiales: fuente s y sumidero t Conexo en un sentido especial: ∀v ∈ V , existe un caminoa del fuente s al sumidero t que pasa por el vértice v a dirigido en en caso de grafos dirigidos Problemas fundamentales– p. 22 Flujos Grafos ponderados (y posiblemente dirigidos) Vértices especiales: fuente s y sumidero t Conexo en un sentido especial: ∀v ∈ V , existe un caminoa del fuente s al sumidero t que pasa por el vértice v Los valores de las aristas = capacidades c(v, w) ≤ 0 a dirigido en en caso de grafos dirigidos Problemas fundamentales– p. 22 Flujo positivo = una función f : V × V → R así que ∀u, v ∈ V : 0 ≤ f (u, v) ≤ c(u, v) ∀u ∈ V \ {s, t} : X v∈V f (v, u) = X f (u, v) v∈V Problemas fundamentales– p. 23 Cortes un corte C ⊆ V de G es una partición del conjunto de vértices V en dos conjuntos: C y V \ C Problemas fundamentales– p. 24 Cortes un corte C ⊆ V de G es una partición del conjunto de vértices V en dos conjuntos: C y V \ C al cortar un grafo de flujo, se exige que s ∈ C y t ∈ /C Problemas fundamentales– p. 24 Cortes un corte C ⊆ V de G es una partición del conjunto de vértices V en dos conjuntos: C y V \ C al cortar un grafo de flujo, se exige que s ∈ C y t ∈ /C X capacidad del corte: c(v, w) v∈C w∈C / Problemas fundamentales– p. 24 Cortes un corte C ⊆ V de G es una partición del conjunto de vértices V en dos conjuntos: C y V \ C al cortar un grafo de flujo, se exige que s ∈ C y t ∈ /C X capacidad del corte: c(v, w) v∈C w∈C / corte mı́nimo = un corte cuya capacidad es mínima Problemas fundamentales– p. 24 Cortes y flujos El problema de corte mínimo es polinomial. Problemas fundamentales– p. 25 Cortes y flujos El problema de corte mínimo es polinomial. Además, la capacidad del corte mínimo entre dos vértices s y t es igual al flujo máximo entre s y t. Problemas fundamentales– p. 25 Cortes y flujos El problema de corte mínimo es polinomial. Además, la capacidad del corte mínimo entre dos vértices s y t es igual al flujo máximo entre s y t. Cuando establecido un flujo en el grafo, la cantidad de flujo que cruza un corte es igual a cada corte del grafo. Problemas fundamentales– p. 25 Máxima bisección (M AX B ISECTION) En la mayoría de las aplicaciones de cortes de grafos, los tamaños de los dos “lados” del corte, |C| y |V \ C| no suelen ser arbitrarios. Dado: un grafo G = (V, E) (n es par) y un entero k > 0 Pregunta: ¿existe un corte C en G con capacidad ≥ k tal que |C| = |V \ C|? Problemas fundamentales– p. 26 k-C OLORING Dado: un grafo no dirigido G = (V, E) y un entero k > 0 Pregunta: ¿existe una asignación de colores a los vértices de V así que ningún par de vértices v, u ∈ V tal que {v, u} ∈ E tenga el mismo color? Problemas fundamentales– p. 27 Isomorfismo de subgrafos Dado: un grafo no dirigido G = (V, E) y otro grafo G′ Pregunta: ¿si G contiene un subgrafo isomórfico con G′ ? Problemas fundamentales– p. 28 Tarea para entregar el martes Escribe en pseudocódigo (prestando atención al orden de los bucles) el algoritmo de Floyd-Warshall y justifica su complejidad asintótica de tiempo O n3 y de 2 espacio O n analizando su código. ¿Cómo resolver R EACHABILITY en espacio lineal? Nota: uno aprende por pensar, no por buscarlo por Google. Si no saben cómo hacer algo, antes de buscar por Google o en un libro una respuesta ya hecha, mejor vengan a verme o consulten con otro estudiante. Problemas fundamentales– p. 29