El problema de conjuntos independientes pertenece a la clase de problemas NP-completos en el campo de la teoría de grafos . Equivalente al problema de la camarilla .
Un conjunto de vértices en un gráfico se llama independiente si no hay dos vértices de este conjunto que estén conectados por una arista. En otras palabras, el subgrafo inducido por este conjunto consta de vértices aislados. También se dice a veces que cada arista de un gráfico incide como máximo en un vértice de un conjunto independiente. El problema de reconocimiento (problema de decidibilidad) se ve así: ¿un gráfico G dado tiene un conjunto independiente de tamaño k ? El problema de optimización que le corresponde, también conocido como problema de los conjuntos independientes , se formula de la siguiente manera: en un grafo G dado , se requiere encontrar un conjunto independiente de tamaño máximo. Este tamaño se denomina número de independencia , número de densidad interna o holgura y se denota como [1] [2] .
Este problema a veces se denomina encontrar el conjunto independiente más grande . Este concepto no debe confundirse con el conjunto máximo independiente , o el conjunto máximo independiente por inclusión , que se define como un conjunto de vértices tan independiente que cuando se le añade un vértice más (cualquiera) del grafo original, deja de serlo. ser independientes (por lo general, puede haber conjuntos de este tipo de varios y de diferentes tamaños). Un conjunto independiente de inclusión máxima no es siempre el más grande. Al mismo tiempo, todo conjunto independiente mayor es, por definición, también máximo por inclusión. Para encontrar (algún) conjunto independiente máximo con respecto a la inclusión, se puede usar un algoritmo codicioso que se ejecuta en tiempo polinomial, mientras que el problema del conjunto independiente más grande pertenece a la clase de problemas NP-completos.
Un conjunto independiente de máxima inclusión es un conjunto dominante . Cualquier gráfico contiene un máximo de 3 n /3 conjuntos independientes máximos de inclusión [3] , pero la mayoría de los gráficos tienen muchos menos.
El número de conjuntos independientes máximos de inclusión en ciclos de n vértices es números de Perrin , y el número de conjuntos independientes máximos de inclusión en caminos con n vértices viene dado por la secuencia de Padovan [4] . Por tanto, ambos números son proporcionales a la potencia de 1,324718, el número plástico .
El subconjunto independiente más pequeño en un gráfico es cualquier vértice de ese gráfico.
Un conjunto es independiente si y sólo si es un clique en el complemento del grafo , de manera que los dos conceptos se complementan. Los gráficos suficientemente grandes sin camarillas grandes tienen grandes conjuntos independientes, que es el tema de estudio en la teoría de Ramsey .
Un conjunto es independiente si y sólo si su complemento es una cubierta de vértices . La suma del número de independencia y el número de cobertura de vértices es igual al número de vértices en el gráfico (la primera identidad de Gallai ).
La coloración de los vértices de un grafo corresponde a la división de sus vértices en subconjuntos independientes. Por lo tanto, el número mínimo de colores necesarios para colorear los vértices, el número cromático , no es menor que el cociente del número de vértices y el número de independencia .
En gráficos bipartitos que no tienen vértices aislados, el número de vértices en el conjunto independiente más grande es igual al número de aristas en la cubierta de aristas más pequeña (una consecuencia del teorema de König ).
En informática , se estudian varios problemas computacionales relacionados con conjuntos independientes:
Los primeros tres problemas son importantes en aplicaciones prácticas, mientras que el último es importante para la teoría de la completitud NP para problemas relacionados con conjuntos independientes.
El problema de los conjuntos independientes y el problema de la camarilla son duales: una camarilla en G es un conjunto independiente en el complemento de G y viceversa. Por lo tanto, muchos resultados computacionales se pueden aplicar igualmente bien a ambos problemas. Por ejemplo, los resultados asociados con el problema de la camarilla tienen las siguientes consecuencias:
Este problema a veces se denomina " empaquetamiento de vértices ".
El problema del conjunto independiente más grande y el problema de la camarilla más grande son polinómicamente equivalentes: uno puede encontrar el conjunto independiente más grande encontrando la camarilla máxima en el complemento del gráfico, por lo que a muchos autores no les importa especialmente separar los dos problemas. Ambos problemas son NP-completos, por lo que es poco probable que se resuelvan en tiempo polinomial. Sin embargo, el problema del conjunto independiente más grande se puede resolver de manera más eficiente que en el tiempo O( n 2 2 n ), lo que produce una búsqueda exhaustiva que prueba todos los subconjuntos de vértices para ver si son conjuntos independientes. El algoritmo de Robson [6] resuelve el problema en O(2 0.276 n ) tiempo usando el espacio exponencial. Si hay un límite en el tamaño (espacio polinomial), hay un algoritmo para resolver en el tiempo O*(1.2127 n ) [7] .
A pesar de la estrecha relación entre la camarilla más grande y el conjunto independiente más grande en un gráfico arbitrario, los problemas de encontrar un conjunto independiente y una camarilla pueden diferir significativamente cuando se resuelven en una clase especial de gráficos. Por ejemplo, para gráficos dispersos (gráficos en los que el número de aristas en cualquier subgráfico no es mayor que el número de vértices multiplicado por alguna constante), la camarilla más grande tiene un tamaño limitado y se puede encontrar exactamente en tiempo lineal [8] . Sin embargo, para las mismas clases de grafos, o incluso para el caso de restricciones más estrictas para una clase de grafos con grado acotado, la búsqueda del conjunto independiente más grande es MAXSNP-completo , lo que significa que para alguna constante c (dependiendo en el grado) NP - es difícil encontrar una solución aproximada que difiera en un factor c de la óptima [9] . Sin embargo, se conocen algoritmos aproximados eficientes, pero su eficiencia garantizada es peor que este umbral. Por ejemplo, un algoritmo codicioso crea un conjunto independiente de máxima inclusión eligiendo un vértice con el grado mínimo en cada paso y eliminando a sus vecinos. Este algoritmo logra eficiencia garantizada (Δ+2)/3 en gráficos con grado máximo Δ [10] .
En algunas clases de gráficos (incluidos los gráficos sin garras [11] y los gráficos perfectos [12] ; los árboles también pertenecen a la última clase ), el conjunto independiente más grande se puede encontrar en tiempo polinomial. Para grafos planos , el mayor problema de conjunto independiente sigue siendo NP-completo para una solución exacta, pero se puede aproximar con cualquier eficiencia garantizada c < 1 en tiempo polinomial. Existen esquemas de tiempo polinomial aproximado similares en cualquier familia de grafos cerrados menores [13] [14] .
En gráficos bipartitos, todos los vértices que no están en la cubierta de vértice más pequeña se pueden incluir en el conjunto independiente más grande (ver el teorema de König ). Por lo tanto, el conjunto independiente más grande se puede encontrar utilizando el algoritmo para encontrar las coincidencias más grandes en gráficos bipartitos.
Todos los conjuntos independientes de máxima inclusión se pueden encontrar en tiempo O(3 n /3 ).
Nombre | Licencia | lenguaje API | Descripción |
---|---|---|---|
igrafo | GPL | C, Python, R, Rubí | solución exacta |
RedX | BSD | Pitón | solución aproximada, ver procedimiento conjunto_independiente_máximo |
opción abierta | BSD | Pitón | soluciones exactas y aproximadas, la capacidad de especificar los vértices que deben incluirse / excluirse. Consulte la clase STAB para obtener detalles y ejemplos. |
Si el gráfico dado es un árbol , entonces el problema de conjuntos independientes se resuelve efectivamente mediante programación dinámica .
La estructura del árbol en sí sugiere la solución al problema. Es decir, denotamos cualquier vértice como la raíz del árbol y lo llamamos . Denotemos el tamaño del mayor conjunto independiente de vértices del subárbol cuya raíz es el vértice . Entonces la respuesta al problema será .
Es fácil ver que si incluimos el vértice u en el conjunto independiente más grande, entonces su cardinalidad aumenta en 1, pero no podemos tomar sus hijos (ya que están conectados por una arista al vértice u ); si no incluimos este vértice, entonces la cardinalidad del conjunto independiente más grande será igual a la suma de los tamaños de los conjuntos independientes de los hijos de este vértice. Solo queda elegir el máximo de estas dos opciones para obtener una solución al problema:
donde nieto denota cualquier "nieto" del vértice, y niño denota cualquier descendiente del vértice.
Consideramos que en la parte superior se almacena u :
función get_independent_set(Nodo u) { si I(u) ya ha sido calculado, devuelva I(u) // cardinalidad del conjunto que se puede obtener si no tomamos el vértice u niños_suma = 0 // cardinalidad del conjunto que se puede obtener tomando el vértice u nietos_sum = 0 // recorrer todos los hijos for i := 1 to child_num hacer suma_hijos = suma_hijos + get_conjunto_independiente(hijos[i]) // recorrer todos los nietos para i:= 1 a nietos_num nietos_sum = nietos_sum + get_independent_set(nietos[i]) // recuerda, para no volver a calcular I(u) = max(1 + suma_nietos, suma_hijos) vuelvo yo(t) }Llamar a get_independent_set( r ) dará la respuesta al problema. El tiempo de ejecución del algoritmo es obviamente O (|V| + |E|).
Problemas NP-completos | |
---|---|
Problema de maximización del apilamiento (packing) |
|
teoría de grafos teoría de conjuntos | |
Problemas algorítmicos | |
Juegos de lógica y rompecabezas. | |