Complejidad Computacional Flashcards
Cuatro tipos de problemas fundamentales
- Búsqueda
- Decisión
- Evaluación
- Optimización
Problema de decisión
Problemas con respuesta binaria
Formalización de un problema de decisión
Determinar si una instancia de un lenguaje (I) se encuentra o no en un subconjunto (L) de ese lenguaje.
Formalización de si un algoritmo resuelve un problema de decisión
Si es que responde SI para cada input cuando este pertenece al subconjunto y NO cuando este no pertenece al subconjunto.
Meta-clase de complejidad de tiempo deterministica
DTIME(T(n))
Conjunto de problemas donde existe un alg. con complejidad O(T(n))
Clase de complejidad polinomial
PTIME
la unión de DTIME(nᵏ) para todo k > 0
Los problema en la clase PTIME suelen llamarse…
tratables (tractables)
Definición de verificador para NP
Dada una instancia I de un problema Π, debe existir un certificado c(I) de tamaño polinomial con respecto a I tal que existe un algoritmo que usando c(I) puede verificar si la respuesta es SI o NO.
¿Cómo probar que un problema X es NP-completo?
- Probar que X está en NP
- Reducir un problema conocido NP-completo Y a X
Reducción
Encontrar un algoritmo de tiempo polinomial que puede mapear los inputs de un problema X de forma equivalente a un problema Y
¿Cómo probar que un problema es NP?
- Encontrar un algoritmo polinomial deterministico que resuelva el problema
- Encontrar un certificado y un algoritmo verificador para verificar una solución al problema
Si un algoritmo X es reducible a Y, esto significa que
Y es al menos tan díficil como X