Недавно я прошел через мучительный забавный опыт неформального объяснения концепции вычислительной сложности молодому талантливому программисту-самоучке, который никогда раньше не проходил формальный курс по алгоритмам или сложности. Неудивительно, что многие понятия поначалу казались странными, но они имели смысл на некоторых примерах (PTIME, труднопреодолимость, невычислимость) , в то время как другие кажутся более естественными (классификация проблем с помощью сокращений, времени и пространства как ресурсов, асимптотический анализ) . Все шло отлично, пока я случайно не признался, что САТможет быть эффективно решено * на практике ... И просто так я их потерял. Это не имеет значения , насколько убедительно я пытался спорить теории, ребенок был убежден , что все это было искусственное дерьмо математики , что он не должен заботиться. Что ж...
¯ \ _ (ツ) _ / ¯
Нет, у меня не было разбитого сердца, и мне не было дела до того, что он думал, это не главное в этом вопросе. Наш разговор заставил меня задуматься над другим вопросом,
Насколько я действительно знаю о задачах, которые теоретически неразрешимы (суперполиномиальная сложность времени), но практически решаемы (с помощью эвристики, приближений, SAT-решателей и т. Д.)?
Я понял, не так много. Я знаю, что есть несколько очень эффективных SAT-решателей, которые эффективно решают огромные случаи, что Simplex прекрасно работает на практике, и, возможно, еще несколько проблем или алгоритмов. Можете ли вы помочь мне нарисовать более полную картину? Какие известные проблемы или даже классы проблем находятся в этой категории?
TL; DR: Какие проблемы на практике интуитивно разрешимы? Есть ли (обновленный) ресурс, чтобы читать больше? У нас есть характеристика для них? И, наконец, как вопрос общего обсуждения, не так ли?
РЕДАКТИРОВАТЬ # 1: пытаясь ответить на мой последний вопрос о такой характеристике , я познакомился с сглаженным анализом алгоритмов, концепцией, введенной Даниэлем Спилманом и Шанг-Хуа Тенгом в [1], которая непрерывно интерполирует между наихудшим и среднестатистический анализ алгоритмов. Это не совсем та характеристика, которая обсуждалась выше, но она отражает ту же концепцию, и я нашел ее интересной.
[1] Спилман, Даниэль А. и Шан-Хуа Тенг. «Сглаженный анализ алгоритмов: почему симплексный алгоритм обычно занимает полиномиальное время». Журнал ACM (JACM) 51, нет. 3 (2004): 385-463.