PROBLEMA NP-COMPLETOS En teoría de la complejidad computacional, la clase de complejidad NP-completo es el subconjunto de los problemas de decisión en NP tal que todo problema en NP se puede reducir en cada uno de los problemas de NP-completo. Se puede decir que los problemas de NP-completo son los problemas más difíciles de NP y muy probablemente no formen parte de la clase de complejidad P. DEFINICION En complejidad computacional, el problema del clique (a veces también traducido desde el inglés como problema del clan o problema de la camarilla1 ), es un problema NP-completo según la Teoría de la complejidad computacional. El correspondiente problema de optimización, consiste en encontrar un clique de tamaño máximo en un grafo (un subgrafo completo de tamaño máximo). Este problema se puede enunciar como un problema de decisión si la pregunta que se hace es saber si existe un clique de tamaño k en el grafo. {\displaystyle k-CLIQUE=\{(G,k)|G{\text { tiene un clique de tamaño }}k\}} Dado un grafo G=(N,A), se dice que G tiene un clique de tamaño k si existe un subgrafo G' = (N',A') de G tal que N' es subconjunto de N, |N'|=k y A'=N'×N', vale decir, todos sus vértices están conectados entre ellos. El problema de clique es un problema de decisión para determinar cuándo un grafo contiene un clique de al menos un tamaño k. Una vez que tenemos k o más vértices que forman un clique, es trivial verificar que lo son, por eso es un problema NP. EJEMPLO ALGORTIMOS Un ejemplo de algoritmo de búsqueda de fuerza bruta para encontrar un clique en un grafo consiste en listar todos los subconjuntos de vértices V y verificar para cada uno de ellos si forma una clique. Ese algoritmo es polinómico si k es una constante pero no lo es cuando se hace depender a k de, por ejemplo, |V|/2. Un mejor algoritmo (Bron y Kerbosch) consiste en arrancar con cliques de un solo elemento (cualquier elemento sirve) e intentar mezclar cliques para obtener otras más grandes, hasta que no queden más mezclas por intentarse. Dos cliques pueden ser mezcladas si cada nodo del primero es adyacente a cada nodo del segundo. En este grafo de ejemplo, los vértices 1, 2 y 5 forman un clique porque cada uno tiene un arco que le une a los otros dos. En cambio, los vértices 2, 3 y 4 no, dado que 2 y 4 no son adyacentes.