El problema del vendedor ambulante es aparentemente accesible ... al menos donde estoy, este parece ser el problema de CS más popular entre las personas que no son CS con diferencia. También encontré la siguiente ilustración de Vertex Cover bastante atractiva, tal como la presentó mi instructor de algoritmos:
Tiene una red de carreteras y desea asegurarse de que si un automóvil se queda sin combustible, hay una estación de servicio en al menos un extremo de la carretera.
Como planificador de la ciudad, desea minimizar los costos construyendo la menor cantidad posible de estaciones de servicio. Este es esencialmente el problema de la cubierta del vértice, y he encontrado algo de éxito al señalar que, aunque no espera encontrar la cubierta del vértice óptima en el tiempo polinomial, puede encontrar algo que está a solo un factor de dos en el tiempo polinómico, simplemente recogiendo ambos puntos finales de una coincidencia máxima (bueno, ese último detalle podría omitirse dependiendo de cuán entusiasta sea su audiencia, especialmente porque el algoritmo MM no es exactamente una línea doble).
En cuanto a un ejemplo de un "salto en la complejidad" con un pequeño cambio en la naturaleza del problema, creo que la diferencia entre verificar la colorabilidad 2 y la colorabilidad 3 es un buen ejemplo. Con toda la publicidad que rodea el teorema de los cuatro colores, también se podría señalar que verificar si un mapa puede ser coloreado adecuadamente con solo tres colores en lugar de cuatro es difícil, aunque sabemos que siempre se puede colorear con cuatro colores. Un buen número de personas encuentra esto bastante sorprendente.
Otra situación bastante natural es el problema de recuperación de punto muerto en los sistemas operativos. Esto está modelado por el problema NP-completo del conjunto de vértices de retroalimentación, el número más pequeño de vértices cuya eliminación hace que el gráfico sea acíclico, y también encuentro que este es un ejemplo notable (y se explica más adelante en ese artículo de Wikipedia).