Cubierta de vertices, busqueda ávida y exhaustiva
-
Upload
luis-alfredo-moctezuma -
Category
Science
-
view
249 -
download
2
Transcript of Cubierta de vertices, busqueda ávida y exhaustiva
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
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 𝐶′ ⫃ 𝑉 𝐶′𝑒𝑠 𝑢𝑛 𝑐𝑙𝑖𝑞𝑢é 𝑒𝑛 𝐺}
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.
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ú
sq
ue
da
ávid
a 2
3
4
5
6
7
8 1
4
5
6
7
8
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ú
sq
ue
da
ávid
a
4
5
4
5
6
7
8
4
5
Algoritmo: CIMax(grafo)
Mientras grafo[nodo]!= null para nodo en grafo aux=min(count(vertices[nodo])) fin lista.add(nodo.equal(aux)) grafo.delete(vecinos[nodo.equal(aux)])// Eliminar vecinos fin
Regresar lista
Bú
sq
ue
da
ávid
a
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
8 1
Bú
sq
ue
da
ávid
a
Bú
sq
ue
da
ex
ha
us
tiva
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
8 1
2
3 5
6
7
8
Bú
sq
ue
da
ex
ha
us
tiva
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
Bú
sq
ue
da
ex
ha
us
tiva
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
Bú
sq
ue
da
ex
ha
us
tiva
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
Bú
sq
ue
da
ex
ha
us
tiva
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
Bú
sq
ue
da
ex
ha
us
tiva
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
Bú
sq
ue
da
ex
ha
us
tiva
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
Bú
sq
ue
da
ex
ha
us
tiva
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
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ú
sq
ue
da
ex
ha
us
tiva