Проблема коммивояжера, по-видимому, доступна ... по крайней мере там, где я нахожусь, это, кажется, самая популярная проблема CS среди людей, не относящихся к CS. Я также нашел следующую иллюстрацию Vertex Cover довольно привлекательной, представленной моим инструктором по алгоритмам:
У вас есть дорожная сеть, и вы хотите, чтобы в случае, если в автомобиле не осталось топлива, на одном конце дороги была заправка.
Как планировщик города, вы хотите минимизировать расходы, построив наименьшее количество заправочных станций. По сути, это проблема покрытия вершин, и я нашел некоторый успех в указании на то, что, хотя вы не ожидаете найти оптимальное покрытие вершин за полиномиальное время, вы можете найти что-то, что находится за два раза за полиномиальное время, просто подбирая обе конечные точки максимального соответствия (ну, эта последняя деталь может быть опущена в зависимости от того, насколько интересна ваша аудитория - тем более, что алгоритм MM не совсем двухстрочный).
Что касается примера «скачка сложности» с небольшим изменением характера проблемы, я думаю, что разница между проверкой 2-цветности и 3-цветности является хорошим примером. При всей гласности, связанной с теоремой о четырех цветах, можно также указать, что проверить, можно ли правильно раскрасить карту только тремя цветами вместо четырех, хотя мы знаем, что она всегда может быть окрашена четырьмя цветами. Довольно много людей находят это довольно поразительным.
Еще одна довольно естественная ситуация - проблема тупикового восстановления в операционных системах. Это моделируется NP-полной проблемой набора вершин обратной связи - наименьшего числа вершин, удаление которых делает граф ациклическим - и я нахожу это также замечательным примером (и объясняется далее в той статье в Википедии).