Emtix

NP-Completitud: Teoría de la Dureza Algorítmica

Publicado el 1 de diciembre de 2025

Explorando la Dureza Algorítmica: NP-Completitud

La teoría de la NP-Completitud es uno de los pilares fundamentales de la ciencia de la computación. Nos permite demostrar que ciertos problemas son inherentemente difíciles y que no existe un algoritmo eficiente para resolverlos.


1. Definición: Problemas Duros y Reducciones

NP-Completitud

Teoría fundamental que proporciona métodos para demostrar que NO puede existir un algoritmo eficiente (tiempo polinomial) para resolver ciertos problemas.

Herramienta principal: Las reducciones entre problemas.

¿Qué es una Reducción?

Reducción

Una reducción es un procedimiento o algoritmo que convierte un problema A en otro problema B.

Notación: ApBA \leq_p B (A se reduce a B en tiempo polinomial)

Significado: Si podemos resolver B eficientemente, entonces también podemos resolver A eficientemente.

Implicación: B es al menos tan difícil como A.

Problema vs Instancia

Terminología Crucial

Problema:

  • Pregunta general con parámetros
  • Ejemplo: “¿Existe un tour TSP de costo ≤ k?”
  • Definición abstracta

Instancia:

  • Problema con entrada específica
  • Ejemplo: “Grafo G con 10 ciudades y k=100”
  • Caso concreto del problema
AspectoProblemaInstancia
DefiniciónPregunta generalCaso específico
Ejemplo TSP”¿Existe tour ≤ k?”Grafo concreto con k=100
ParámetrosVariablesValores fijos
NúmeroUnoInfinitos

2. Propósito: ¿Por Qué Probar Imposibilidad?

Valor de Demostrar Dureza

Pregunta: ¿Por qué invertir tiempo probando que algo NO existe?

Respuesta: Para enfocar esfuerzos productivamente y evitar búsquedas inútiles.

Beneficios:

  1. ✅ Saber cuándo dejar de buscar algoritmo perfecto
  2. ✅ Identificar qué hace difícil un problema
  3. ✅ Orientar hacia aproximaciones o heurísticas
  4. ✅ Evitar meses/años de esfuerzo infructuoso

Estrategias al Enfrentar Problemas NP-Completos

Opciones cuando un problema es NP-completo

1. Algoritmos de Aproximación:

  • Garantizar solución cercana al óptimo
  • Ejemplo: TSP con 2-aproximación
  • Tiempo polinomial + calidad garantizada

2. Heurísticas:

  • Soluciones buenas (no óptimas) en la práctica
  • Simulated Annealing, Algoritmos Genéticos
  • Sin garantías, pero efectivas

3. Casos Especiales:

  • Explotar estructura del problema
  • Ejemplo: TSP métrico vs TSP general
  • Pueden ser polinomiales

4. Programación Dinámica Exponencial:

  • Mejor que búsqueda exhaustiva
  • O(2nn2)O(2^n \cdot n^2) vs O(n!)O(n!)
  • Viable para n2025n \leq 20-25

5. Instancias Pequeñas:

  • Si n1520n \leq 15-20, búsqueda exhaustiva puede funcionar
  • Branch and Bound con poda inteligente

6. Cambiar el Problema:

  • Relajar restricciones
  • Cambiar función objetivo
  • Buscar variante polinomial
Quiz

¿Cuál es el propósito principal de demostrar que un problema es NP-completo?


3. Contexto: Equivalencia de Problemas

Idea Central

La NP-Completitud demuestra que muchos problemas difíciles son esencialmente el MISMO problema.

Si tienes un algoritmo eficiente para UNO, automáticamente tienes algoritmo eficiente para TODOS.

Dirección de la Reducción

¡CRÍTICO! Dirección Correcta

Regla fundamental: Para probar que un problema X es difícil:

Problema NP-completo conocido p\leq_p X

CORRECTO: Bandersnatch (conocido NP-completo) → X (tu problema)

INCORRECTO: X → Bandersnatch (solo da algoritmo lento para X)

¿Por qué?

  • Si Bandersnatch → X, y X tiene algoritmo rápido
  • Entonces Bandersnatch también tiene algoritmo rápido
  • Contradicción (Bandersnatch es NP-completo)
  • Por tanto, X debe ser difícil también
Visualización de reducciones
CADENA DE DUREZA:

         SAT (Satisfacibilidad)

      reducción polinomial

      3-SAT (3-Satisfacibilidad)

  Vertex Cover (Cubierta de Vértices)

 Independent Set (Conjunto Independiente)

       Clique (Clique máximo)

  Graph Coloring (Coloración de grafos)

 Hamiltonian Cycle (Ciclo Hamiltoniano)

      TSP (Traveling Salesman)

           ... cientos más

Si SAT es difícil → TODOS son difíciles
Si ALGUNO es fácil → SAT es fácil → P = NP

4. Problemas de Decisión

Simplificación mediante Problemas de Decisión

La teoría de NP-Completitud trabaja con problemas de decisión:

Salida: Solo “SÍ” o “NO” (verdadero/falso)

¿Por qué?

  • Simplifica la teoría matemática
  • La mayoría de problemas de optimización se pueden reformular
  • Captura la esencia de la dificultad

Reformulación: Optimización → Decisión

Problema de OptimizaciónProblema de Decisión
”¿Cuál es el tour TSP más corto?""¿Existe tour TSP con costo ≤ k?"
"¿Cuál es la coloración mínima?""¿Se puede colorear con ≤ k colores?"
"¿Cuál es el conjunto independiente máximo?""¿Existe conjunto independiente de tamaño ≥ k?”

Equivalencia de Dificultad

Lema importante: Si el problema de decisión es difícil, el problema de optimización también lo es.

¿Por qué?

  • Si pudieras resolver optimización en tiempo polinomial
  • Podrías resolver decisión en tiempo polinomial
  • Simplemente: optimizar y comparar con k
  • Contradicción si decisión es NP-completo

5. Ejemplo: Reducción Clásica

Vertex Cover ↔ Independent Set

Demostración de equivalencia entre dos problemas NP-completos.

Definiciones

Dos problemas relacionados
"""
VERTEX COVER (Cubierta de Vértices):
Dado: Grafo G=(V,E) y entero k
Pregunta: ¿Existe subconjunto S ⊆ V con |S| ≤ k
          tal que toda arista e ∈ E tiene al menos
          un extremo en S?

Ejemplo:
    1 --- 2
    |     |
    3 --- 4

S = {2, 3} es vertex cover de tamaño 2
  - Arista 1-2: cubierta por 2 ✓
  - Arista 2-4: cubierta por 2 ✓
  - Arista 3-4: cubierta por 3 ✓
  - Arista 1-3: cubierta por 3 ✓

---

INDEPENDENT SET (Conjunto Independiente):
Dado: Grafo G=(V,E) y entero k
Pregunta: ¿Existe subconjunto I ⊆ V con |I| ≥ k
          tal que NO hay aristas entre vértices de I?

Ejemplo (mismo grafo):
    1 --- 2
    |     |
    3 --- 4

I = {1, 4} es independent set de tamaño 2
  - No hay arista entre 1 y 4 ✓
"""

La Reducción

Teorema: Equivalencia

Teorema: SS es vertex cover de GG si y solo si VSV - S es independent set de GG.

Demostración:

(Si S es vertex cover, entonces V-S es independent set):

  • Supón que S es vertex cover
  • Sea I = V - S (vértices NO en S)
  • Si existiera arista (u,v) con u,v ∈ I
  • Entonces (u,v) no tendría extremo en S
  • Contradicción (S es vertex cover)
  • Por tanto, I es independent set

(Si V-S es independent set, entonces S es vertex cover):

  • Supón que I = V-S es independent set
  • Sea S = V - I
  • Para cada arista (u,v):
    • Si u,v ∈ I, habría arista en I (contradicción)
    • Por tanto, al menos uno está en S
  • S es vertex cover

Implementación de la Reducción

Reducción Vertex Cover → Independent Set
def vertex_cover_to_independent_set(G, k):
    """
    Reducción de Vertex Cover a Independent Set
    
    Args:
        G: grafo
        k: tamaño máximo de vertex cover
    
    Returns:
        (G', k'): instancia equivalente de Independent Set
    """
    # El grafo es el mismo
    G_prime = G
    
    # El tamaño se complementa
    n = len(G.vertices)
    k_prime = n - k
    
    return G_prime, k_prime

def independent_set_to_vertex_cover(G, k):
"""
Reducción de Independent Set a Vertex Cover
(Dirección inversa)
"""
G_prime = G
n = len(G.vertices)
k_prime = n - k

    return G_prime, k_prime

# Ejemplo de uso

print("="*60)
print("REDUCCIÓN: VERTEX COVER ↔ INDEPENDENT SET")
print("="*60 + "\n")

# Grafo de ejemplo

class Graph:
def **init**(self, n):
self.vertices = list(range(1, n + 1))
self.edges = []

    def add_edge(self, u, v):
        self.edges.append((u, v))

    def __repr__(self):
        return f"Grafo: vértices={self.vertices}, aristas={self.edges}"

# Crear grafo

G = Graph(4)
G.add_edge(1, 2)
G.add_edge(2, 4)
G.add_edge(3, 4)
G.add_edge(1, 3)

print("Grafo original:")
print(G)
print()

print("Estructura:")
print(" 1 --- 2")
print(" | |")
print(" 3 --- 4")
print()

# Problema 1: Vertex Cover con k=2

k_vc = 2
print(f"VERTEX COVER: ¿Existe cubierta de tamaño ≤ {k_vc}?")

G_is, k_is = vertex_cover_to_independent_set(G, k_vc)

print(f"\nReducción a INDEPENDENT SET:")
print(f" Grafo: {G_is}")
print(f" k' = n - k = {len(G.vertices)} - {k_vc} = {k_is}")
print(f" Pregunta: ¿Existe independent set de tamaño ≥ {k_is}?")

print("\n" + "="*60)
print("SOLUCIONES:")
print("="*60)

print("\nVertex Cover de tamaño 2:")
print(" S = {2, 3}")
print(" Verifica:")
print(" Arista (1,2): 2 ∈ S ✓")
print(" Arista (2,4): 2 ∈ S ✓")
print(" Arista (3,4): 3 ∈ S ✓")
print(" Arista (1,3): 3 ∈ S ✓")

print("\nIndependent Set correspondiente:")
print(" I = V - S = {1, 4}")
print(" Tamaño: 2 = k'")
print(" Verifica:")
print(" No hay arista entre 1 y 4 ✓")

print("\n" + "="*60)
print("IMPLICACIÓN:")
print("="*60)
print("""
Si pudiéramos resolver Independent Set en tiempo polinomial:

1. Dada instancia de Vertex Cover (G, k)
2. Reducir a (G, n-k) en O(1)
3. Resolver Independent Set en tiempo poli
4. Retornar respuesta

Resultado: Vertex Cover también es polinomial

Por contraposición:

- Si Vertex Cover es difícil (NP-completo)
- Entonces Independent Set también es difícil
- Ambos son igualmente difíciles
  """)

Reducciones Fundamentales en NP-Completitud:

1. 3-SAT → Clique

  • Variable: conjunto de literales
  • Cláusula: vértice por literal
  • Aristas: entre literales compatibles
  • Clique de tamaño k = fórmula satisfacible

2. 3-SAT → Vertex Cover

  • Variable: arista por variable
  • Cláusula: triángulo por cláusula
  • Vertex cover debe cubrir todo

3. Vertex Cover → Hamiltonian Cycle

  • Gadgets complejos por vértice y arista
  • Hamiltonian cycle existe ↔ vertex cover existe

4. Hamiltonian Cycle → TSP

  • Aristas del grafo: peso 1
  • Aristas faltantes: peso 2
  • Tour de costo ≤ n ↔ Hamiltonian cycle

5. 3-SAT → Subset Sum

  • Cada variable y cláusula: número
  • Suma objetivo: satisfacibilidad

6. 3-SAT → Graph Coloring

  • Variable: 2 vértices conectados
  • Cláusula: gadget que fuerza colores
  • 3-coloreable ↔ satisfacible

6. Las Clases P y NP

Clases de Complejidad

Clase P (Polinomial):

  • Problemas resolubles en tiempo polinomial O(nk)O(n^k)
  • Algoritmo eficiente desde cero
  • Ejemplos: Ordenamiento, caminos más cortos, MST

Clase NP (No-deterministic Polynomial):

  • Problemas verificables en tiempo polinomial
  • Dada una solución, verificarla es rápido
  • Todos los de P están en NP
  • Ejemplos: SAT, TSP, Vertex Cover

Diagrama de Venn (Hipotético)

Relación entre P y NP
HIPÓTESIS MAYORITARIA: P ≠ NP

┌─────────────────────────────────────────┐
│ NP                                      │
│ (Verificables en tiempo polinomial)     │
│                                         │
│   ┌──────────────────────────────────┐  │
│   │ NP-Completos                     │  │
│   │ (Los más difíciles de NP)        │  │
│   │                                  │  │
│   │ SAT, 3-SAT, Vertex Cover,       │  │
│   │ Independent Set, Clique,         │  │
│   │ Graph Coloring, TSP, ...         │  │
│   │                                  │  │
│   └──────────────────────────────────┘  │
│                                         │
│   ┌──────────────────┐                  │
│   │ P                │                  │
│   │ (Resolubles en   │                  │
│   │ tiempo poli)     │                  │
│   │                  │                  │
│   │ Sorting, MST,    │                  │
│   │ Shortest Path    │                  │
│   └──────────────────┘                  │
│                                         │
└─────────────────────────────────────────┘

SI P = NP (poco probable):
  Los dos círculos serían idénticos
  Todos los problemas NP serían resolubles en tiempo poli
  Revolución en ciencia de la computación

Características de NP-Completitud

Definición Formal

Un problema es NP-Completo si:

  1. Está en NP: Solución verificable en tiempo polinomial
  2. Es NP-Hard: Al menos tan difícil como cualquier problema en NP

Implicación: Si encuentras algoritmo polinomial para UNO, los tienes para TODOS los problemas NP.

PropiedadPNPNP-Completo
ResolverTiempo poli?? (probablemente exponencial)
VerificarTiempo poliTiempo poliTiempo poli
EjemploSortingTodosSAT, TSP
Algoritmo conocido✓ SíAlgunos✗ No (para general)

7. El Problema P vs NP

La Gran Pregunta Abierta

P vs NP: El problema del millón de dólares

Pregunta: ¿P = NP?

Opciones:

  1. P = NP: Todo problema verificable es resoluble eficientemente
  2. P ≠ NP: Hay problemas verificables pero no resolubles eficientemente

Consenso: Mayoría cree que P ≠ NP

Premio: $1,000,000 (Clay Mathematics Institute)

Implicaciones si P = NP:

  • Revolución en ciencia, ingeniería, matemáticas
  • Criptografía actual se vuelve insegura
  • Optimización perfecta en logística, finanzas, etc.

Evidencia Informal

¿Por qué creemos que P ≠ NP?

1. Décadas de Intento:

  • Nadie ha encontrado algoritmo polinomial para SAT
  • Miles de investigadores durante 50+ años
  • Millones de dólares en investigación

2. Estructura Matemática:

  • Los problemas NP-completos “se sienten” diferentes
  • Técnicas para P no funcionan en NP-completos
  • Jerarquía de complejidad sugiere separación

3. Verificar vs Resolver:

  • Intuitivamente diferente
  • Ejemplo: Sudoku (fácil verificar, difícil resolver)
  • Factorización (fácil verificar, difícil encontrar)

4. Criptografía:

  • Seguridad moderna asume P ≠ NP
  • RSA, firma digital dependen de problemas duros
  • Si P = NP, colapso de seguridad

Nota: Aún no hay prueba matemática rigurosa. Es una conjetura (fuerte) no un teorema.

Quiz

¿Qué significa que un problema sea NP-completo?


8. Problemas NP-Completos Famosos

Lista de problemas NP-completos clásicos
"""
PROBLEMAS NP-COMPLETOS CLÁSICOS

LÓGICA:
  • SAT (Satisfacibilidad booleana)
  • 3-SAT (SAT con cláusulas de 3 literales)
  • Circuit SAT

GRAFOS:
  • Vertex Cover (Cubierta de vértices)
  • Independent Set (Conjunto independiente)
  • Clique (Clique máximo)
  • Graph Coloring (Coloración de grafos)
  • Hamiltonian Cycle (Ciclo hamiltoniano)
  • Hamiltonian Path (Camino hamiltoniano)

OPTIMIZACIÓN:
  • TSP (Traveling Salesman - decisión)
  • Knapsack (Mochila 0/1 - decisión)
  • Bin Packing (Empaquetado)
  • Job Scheduling (Calendarización)

NUMÉRICOS:
  • Subset Sum (Suma de subconjuntos)
  • Partition (Partición)
  • 3-Partition

JUEGOS Y PUZZLES:
  • Sudoku (versión generalizada)
  • Minesweeper (Buscaminas - consistencia)
  • Tetris (optimizar altura)

CADENAS:
  • Longest Common Subsequence (k secuencias)
  • Shortest Superstring

¡Y CIENTOS MÁS!

Todos son equivalentes en dificultad.
Si uno cae (algoritmo poli), todos caen.
"""

Ejemplo Práctico: TSP

TSP: De optimización a decisión
def tsp_optimization(distances):
    """
    PROBLEMA DE OPTIMIZACIÓN (difícil probar NP-completitud):
    Encontrar el tour de costo mínimo
    """
    # Este es el problema "natural" pero difícil de trabajar
    # en teoría de complejidad
    pass

def tsp_decision(distances, k):
"""
PROBLEMA DE DECISIÓN (NP-completo):
¿Existe tour con costo ≤ k?

    Args:
        distances: matriz de distancias
        k: límite superior de costo

    Returns:
        True si existe tour con costo ≤ k
        False en caso contrario
    """
    # Si pudiéramos resolver esto en tiempo polinomial,
    # podríamos resolver la versión de optimización:
    #   - Buscar k binariamente entre 0 y suma_total
    #   - Cada verificación es polinomial
    #   - O(log(suma_total)) llamadas
    #   - Total: polinomial
    pass

print("="*60)
print("TSP: OPTIMIZACIÓN VS DECISIÓN")
print("="*60 + "\n")

print("OPTIMIZACIÓN (natural):")
print(" Entrada: Grafo con distancias")
print(" Pregunta: ¿Cuál es el tour más corto?")
print(" Salida: Secuencia de ciudades y costo")
print()

print("DECISIÓN (teoría):")
print(" Entrada: Grafo con distancias + entero k")
print(" Pregunta: ¿Existe tour con costo ≤ k?")
print(" Salida: SÍ o NO")
print()

print("EQUIVALENCIA:")
print(" Si DECISIÓN es difícil → OPTIMIZACIÓN es difícil")
print(" Si OPTIMIZACIÓN es fácil → DECISIÓN es fácil")
print()

print("¿POR QUÉ DECISIÓN?")
print(" ✓ Simplifica teoría matemática")
print(" ✓ Output booleano (SÍ/NO) más simple")
print(" ✓ Composición de reducciones más clara")
print(" ✓ Captura la esencia de la dificultad")

9. Estrategia: Probar NP-Completitud

Receta para Probar NP-Completitud

Para probar que tu problema X es NP-completo:

Paso 1: Mostrar que X está en NP

  • Describir algoritmo de verificación polinomial
  • “Dado certificado (solución), verificar en tiempo poli”

Paso 2: Seleccionar problema NP-completo conocido Y

  • SAT, 3-SAT, Vertex Cover, etc.
  • Preferir uno “similar” a X

Paso 3: Construir reducción Y → X

  • Transformar CUALQUIER instancia de Y en instancia de X
  • Transformación debe ser polinomial
  • Y tiene solución ↔ X tiene solución

Paso 4: Demostrar corrección

  • Probar equivalencia de soluciones
  • Verificar que reducción es polinomial

Resultado: X es NP-completo

Template para demostración
PLANTILLA DE DEMOSTRACIÓN:

Teorema: El problema X es NP-completo.

Demostración:

1. X ∈ NP:
   Dado un certificado (solución candidata) para X,
   podemos verificar en tiempo polinomial que:
      [describir verificación]
   Por tanto, X ∈ NP.

2. X es NP-Hard:
   Reducimos de [problema NP-completo conocido Y].

   Dada una instancia I_Y de Y:

   a) Construcción (tiempo polinomial):
      [describir cómo construir instancia I_X de X]

   b) Correctitud (→):
      Si I_Y tiene solución S_Y, entonces:
         [mostrar que I_X tiene solución S_X]

   c) Correctitud (←):
      Si I_X tiene solución S_X, entonces:
         [mostrar que I_Y tiene solución S_Y]

   La reducción toma tiempo polinomial porque:
      [análisis de complejidad]

   Por tanto, Y ≤_p X, y X es NP-Hard.

Conclusión: X es NP-completo.

10. Advertencias y Limitaciones

Errores Comunes

ERROR 1: Reducción en dirección incorrecta

  • ❌ INCORRECTO: X → problema NP-completo
  • ✓ CORRECTO: Problema NP-completo → X

ERROR 2: Olvidar mostrar X ∈ NP

  • NP-Hard solo no basta
  • Necesitas AMBAS condiciones

ERROR 3: Reducción no polinomial

  • Si reducción toma tiempo exponencial, no prueba nada
  • Debe ser transformación polinomial

ERROR 4: Equivalencia incorrecta

  • La reducción debe preservar soluciones
  • Y-SÍ ↔ X-SÍ y Y-NO ↔ X-NO

Limitaciones de la Teoría

Lo que NP-Completitud NO dice:

  1. No dice que el problema es imposible
  • Solo que probablemente no hay algoritmo polinomial
  • Algoritmo exponencial puede existir
  1. No dice nada sobre la práctica
  • Instancias reales pueden ser más fáciles
  • Heurísticas pueden funcionar bien
  • Casos promedio vs peor caso
  1. No diferencia grados de dureza
  • O(n100)O(n^{100}) vs O(1.1n)O(1.1^n) ambos manejables
  • NP solo habla de crecimiento asintótico
  1. Asume P ≠ NP
  • Si P = NP, toda la teoría colapsa
  • (Pero es muy improbable)

11. Cierre: Implicaciones Prácticas

Lecciones para el Diseñador de Algoritmos

1. Reconocer Problemas NP-Completos

Familiarízate con problemas NP-completos clásicos. Si tu problema se parece, probablemente es NP-completo.

2. No Buscar el Algoritmo Perfecto

Si tu problema es NP-completo, deja de buscar algoritmo polinomial exacto. Enfócate en alternativas.

3. Identificar Estructura Especial

¿Tu problema tiene propiedades especiales? Grafos planares, árboles, intervalos pueden admitir soluciones polinomiales.

4. Usar Aproximaciones

Algoritmos de aproximación dan garantías de calidad en tiempo polinomial.

5. Probar Heurísticas

En la práctica, heurísticas bien diseñadas funcionan sorprendentemente bien.

6. Considerar Instancias Pequeñas

Si n20n \leq 20, algoritmos exponenciales pueden ser viables.

Quiz

Si tu problema se reduce a SAT en tiempo polinomial, ¿qué puedes concluir?


Resumen Final

Conceptos Dominados

✓ NP-Completitud:

  • Teoría para demostrar dureza algorítmica
  • Herramienta: reducciones polinomiales
  • No es sobre imposibilidad, es sobre impracticabilidad

✓ Reducciones:

  • Conversión de problema A a problema B
  • ApBA \leq_p B: B al menos tan difícil como A
  • Dirección crítica: conocido → desconocido

✓ Problemas de Decisión:

  • Salida: SÍ/NO
  • Simplifica teoría
  • Equivalente en dificultad a optimización

✓ Clases P y NP:

  • P: resolubles en tiempo polinomial
  • NP: verificables en tiempo polinomial
  • NP-Completo: los más difíciles de NP

✓ P vs NP:

  • Pregunta del millón de dólares
  • Consenso: P ≠ NP
  • Si P = NP: revolución científica

✓ Estrategia Práctica:

  • Reconocer problemas NP-completos
  • No buscar algoritmo perfecto
  • Considerar aproximaciones/heurísticas
  • Explotar estructura especial

Guía Rápida: NP-Completitud


┌──────────────────────────────────────────────────────────┐
│ DECISIONES RÁPIDAS │
├──────────────────────────────────────────────────────────┤
│ ¿Tu problema parece TSP/Vertex Cover/SAT? │
│ → Probablemente NP-completo │
│ │
│ ¿Necesitas probar que es difícil? │
│ 1. Mostrar X ∈ NP (verificación poli) │
│ 2. Reducir problema conocido → X │
│ │
│ ¿Es NP-completo, qué hacer? │
│ • n ≤ 20: Búsqueda exhaustiva optimizada │
│ • n ≤ 100: Programación dinámica exponencial │
│ • n grande: Aproximación o heurística │
│ • Explotar estructura especial │
│ │
│ ¿Algoritmo polinomial conocido? │
│ → NO es NP-completo (si P ≠ NP) │
│ │
│ ¿Verificación exponencial? │
│ → NO está en NP (probablemente más difícil) │
└──────────────────────────────────────────────────────────┘

¡Felicitaciones!

Has completado introducción a NP-Completitud. Ahora dominas:

  • Qué significa que un problema sea NP-completo
  • Cómo funcionan las reducciones polinomiales
  • La diferencia entre P, NP y NP-Completo
  • Por qué es útil probar que algo es difícil
  • Estrategias para enfrentar problemas NP-completos
  • La importancia de la dirección en reducciones
  • Problemas NP-completos clásicos
  • El problema P vs NP y sus implicaciones

Próximo paso: Estudiar reducciones específicas en detalle, explorar algoritmos de aproximación para problemas NP-completos, y técnicas avanzadas como parametrización y kernelización.