Tortosa et al. 2º Simposio Internacional Composta.pdf
Cubierta de vertices, busqueda ávida y exhaustiva
1. PROBLEMA
NP- COMPLETO
Búsqueda ávida y exhaustiva para encontrar el
conjunto independiente máximo y la cubierta mínima
de vértices.
BENEMÉRITA UNIVERSIDAD AUTÓNOMA DE PUEBLA
MCC 2015
Luis Alfredo Moctezuma Pascual
2. Usar técnicas para minimizar el tiempo de respuesta pero no es
optimo ya que no muestra el mejor resultado.
a) Encontrar el conjunto independiente 𝑆 ⫃ 𝑉 de longitud máxima
, esto es
S = max 𝑆 ⫃ 𝑉 𝑆 𝑒𝑠 𝑢𝑛 𝑐𝑜𝑛𝑗𝑢𝑛𝑡𝑜 𝑖𝑛𝑑𝑒𝑝𝑒𝑛𝑑𝑖𝑒𝑛𝑡𝑒 𝑒𝑛 𝐺}
b) Encontrar la cubierta de vertices 𝑉′ ⫃ 𝑉 de longitud mínima
V′ = min 𝑌 ⫃ 𝑉 𝑦 𝑒𝑠 𝑢𝑛𝑎 𝑐𝑢𝑏𝑖𝑒𝑟𝑡𝑎 𝑑𝑒 𝑣𝑒𝑟𝑡𝑖𝑐𝑒𝑠 𝑒𝑛 𝐺}
c) Encontrar el cliqué de longitud máxima en G
C = max 𝐶′ ⫃ 𝑉 𝐶′
𝑒𝑠 𝑢𝑛 𝑐𝑙𝑖𝑞𝑢é 𝑒𝑛 𝐺}
3. Estos 3 problemas están relacionados, bajo una reducción de
orden polinomial.
La unión del conjunto independiente máximo y la cubierta
mínima de vértices cubre todo V(G).
S + 𝑉′
= V G = n
Resolver uno de los dos problemas, permite resolver el otro, ya
que 𝑆 = 𝑉 − 𝑉′
𝑉′ = 𝑉 − 𝑆
Nota: Construir 𝐺 𝑐
(𝑔𝑟𝑎𝑓𝑜 𝑐𝑜𝑚𝑝𝑙𝑒𝑚𝑒𝑛𝑡𝑜) a partir de G, se realiza en
tiempo polinomial.
4. BUSQUEDA ÁVIDA
Una estrategia ávida para saber de manera directa el conjunto
independiente máximo es: seleccionar los nodos de menor grado y eliminar
a los nodos con los que está conectado:
Encontrar el conjunto independiente máximo:
Paso 1: Buscar y seleccionar el nodo de menor grado,{1,8}, en este ejemplo
seleccionaremos el nodo 1.
Paso 2: Agregarlo a la lista y eliminar a sus vecinos
Lista=[1]
Paso 3: Repetir paso 1 y 2,mientras exista un nodo.
Búsquedaávida
2
3
4
5
6
7
81
4
5
6
7
8
5. Pasos recursivos 1, 2 y 3
Paso 1:
Paso 2:
Lista=[1,8,]
Paso 3: como aun existen nodos, repetimos los pasos 1,2 y 3
Paso 1:
Paso 2: Lista=[1,8,4]
Paso 3: Ya no hay nodos, regresar lista[]
Búsquedaávida
4
5
4
5
6
7
8
4
5
7. Cubierta mínima de vertices
𝑆 = 𝑉 − 𝑉′
𝑉′ = 𝑉 − 𝑆
S=[1,8,4] V=[1,2,3,4,5,6,7,8]
𝑉′ = [1,2,3,4,5,6,7,8] − [1,8,4] = [2,3,5,6,7]
Donde v’ es la cubierta mínima de vértices.
2
3
4
5
6
7
81
Búsquedaávida
8. Búsquedaexhaustiva
BUSQUEDA EXHAUSTIVA
La búsqueda exhaustiva o por fuerza bruta consiste en enumerar (crear un
árbol) todos los posibles candidatos para la solución de un problema y
comprobar si el resultado esta entre todos los candidatos encontrados.
Encontrar el conjunto independiente máximo:
Validación: Si numVertices<=1, agregar nodos a la lista.
Sino hacer pasos 1 y 2.
Paso 1: Seleccionar el nodo de mayor grado, bifurcar el arbol a partir de ese
nodo.
Paso 2 - Caso 1: si el nodo pertenece, agregar el nodo a la lista y eliminar a
sus vecinos. Lista=[4]
Paso 2 - Caso 2: si el nodo no pertenece, eliminar el nodo y repetir el paso 1.
Regresar la lista
2
3
4
5
6
7
8
81
2
3 5
6
7
8
9. Búsquedaexhaustiva
Repetir el proceso para cada subgrafo
Subgrafo 1
Validación: Si numVertices<=1, agregar nodos a la lista.
Sino hacer pasos 1 y 2. Lista=[4,8]
Regresar la lista
8
10. Búsquedaexhaustiva
Repetir el proceso para cada subgrafo
Subgrafo 2
Validación: Si numVertices<=1, agregar nodos a la lista.
Sino hacer pasos 1 y 2.
Paso 1: Seleccionar el nodo de mayor grado, bifurcar el arbol a partir de ese
nodo.
Paso 2 - Caso 1: si el nodo pertenece, agregar el nodo a la lista y eliminar a
sus vecinos. Lista=[5]
Paso 2 - Caso 2: si el nodo no pertenece, eliminar el nodo y repetir el paso 1.
2
3 5
6
7
8
2
3 5
6
7
8
8
2
3
6
7
8
11. Búsquedaexhaustiva
Repetir el proceso para cada subgrafo
Subgrafo 2.1
Validación: Si numVertices<=1, agregar nodos a la lista.
De lo contrario hacer pasos 1 y 2. Lista=[5,8]
Regresar lista
8
12. Búsquedaexhaustiva
Repetir el proceso para cada subgrafo
Subgrafo 2.2
Validación: Si numVertices<=1, agregar nodos a la lista.
Sino hacer pasos 1 y 2.
Paso 1: Seleccionar el nodo de mayor grado, bifurcar el arbol a partir de ese
nodo.
Paso 2 - Caso 1: si el nodo pertenece, agregar el nodo a la lista y eliminar a
sus vecinos. Lista=[8]
Paso 2 - Caso 2: si el nodo no pertenece, eliminar el nodo y repetir el paso 1.
2
3
6
7
8
2
3
6
7
8
2
3
2
3
6
7
13. Búsquedaexhaustiva
Repetir el proceso para cada subgrafo
Subgrafo 2.2.1
Validación: Si numVertices<=1, agregar nodos a la lista.
Sino hacer pasos 1 y 2. Lista=[8,2,3]
Regresar lista
2
3
14. Búsquedaexhaustiva
Repetir el proceso para cada subgrafo
Subgrafo 2.2.2
Validación: Si numVertices<=1, agregar nodos a la lista.
Sino hacer pasos 1 y 2. Lista=[2,3,6,7]
Regresar lista
2
3
6
7
15. Búsquedaexhaustiva
Algoritmo
CIMax(grafo)
Si numVertices<=1
lista.add(nodos)
si grafo== null
resultado=max(coleccionLista[lista.lenght])
fin
Sino hacer caso 1 y 2
para nodo en grafo
aux=max(count(vertices[nodo]))
fin
caso 1:
lista.add(nodo.equal(aux))
grafo.delete(vecinos[nodo.equal(aux)])// Eliminar vecinos
CIMax(grafo)
fin
caso 2:
grafo.delete(nodo.equal(aux))// Eliminar nodo
CIMax(grafo)
fin
fin si
Regresar lista
16. Cubierta mínima de vertices
𝑆 = 𝑉 − 𝑉′
𝑉′ = 𝑉 − 𝑆
S=[2,3,6,7] V=[1,2,3,4,5,6,7,8]
𝑉′ = [1,2,3,4,5,6,7,8] − [2,3,6,7] = [4,5,8]
Donde v’ es la cubierta mínima de vertices.
2
3
4
5
6
7
8
Búsquedaexhaustiva