Проблемы, которые нелогично решаются на практике?

21

Недавно я прошел через мучительный забавный опыт неформального объяснения концепции вычислительной сложности молодому талантливому программисту-самоучке, который никогда раньше не проходил формальный курс по алгоритмам или сложности. Неудивительно, что многие понятия поначалу казались странными, но они имели смысл на некоторых примерах (PTIME, труднопреодолимость, невычислимость) , в то время как другие кажутся более естественными (классификация проблем с помощью сокращений, времени и пространства как ресурсов, асимптотический анализ) . Все шло отлично, пока я случайно не признался, что САТможет быть эффективно решено * на практике ... И просто так я их потерял. Это не имеет значения , насколько убедительно я пытался спорить теории, ребенок был убежден , что все это было искусственное дерьмо математики , что он не должен заботиться. Что ж...

¯ \ _ (ツ) _ / ¯

Нет, у меня не было разбитого сердца, и мне не было дела до того, что он думал, это не главное в этом вопросе. Наш разговор заставил меня задуматься над другим вопросом,

Насколько я действительно знаю о задачах, которые теоретически неразрешимы (суперполиномиальная сложность времени), но практически решаемы (с помощью эвристики, приближений, SAT-решателей и т. Д.)?

Я понял, не так много. Я знаю, что есть несколько очень эффективных SAT-решателей, которые эффективно решают огромные случаи, что Simplex прекрасно работает на практике, и, возможно, еще несколько проблем или алгоритмов. Можете ли вы помочь мне нарисовать более полную картину? Какие известные проблемы или даже классы проблем находятся в этой категории?

TL; DR: Какие проблемы на практике интуитивно разрешимы? Есть ли (обновленный) ресурс, чтобы читать больше? У нас есть характеристика для них? И, наконец, как вопрос общего обсуждения, не так ли?

РЕДАКТИРОВАТЬ # 1: пытаясь ответить на мой последний вопрос о такой характеристике , я познакомился с сглаженным анализом алгоритмов, концепцией, введенной Даниэлем Спилманом и Шанг-Хуа Тенгом в [1], которая непрерывно интерполирует между наихудшим и среднестатистический анализ алгоритмов. Это не совсем та характеристика, которая обсуждалась выше, но она отражает ту же концепцию, и я нашел ее интересной.

[1] Спилман, Даниэль А. и Шан-Хуа Тенг. «Сглаженный анализ алгоритмов: почему симплексный алгоритм обычно занимает полиномиальное время». Журнал ACM (JACM) 51, нет. 3 (2004): 385-463.

Константинос Койлинис
источник
6
Что вы имели в виду, говоря, что SAT может быть эффективно решен на практике? Почему ваш друг полагается на безопасность в Интернете? Предположительно нет трудных проблем на практике? Надежность - одно из главных преимуществ многократной / эффективной разрешимости.
Чандра Чекури
6
Изоморфизм графов - естественный кандидат.
DW
2
Эй, @ChandraChekuri, я имел в виду, что практически SAT-решатели могут отвечать на экземпляры SAT с миллионами переменных и предложений. Или, по крайней мере, я так думал. Я не уверен, что понимаю, что вы имеете в виду под "безопасностью в Интернете"? Я не спорю с формализмом, меня интересуют проблемы, которые в теории неразрешимы, но для всех практических целей (возможно, из-за приличного приближения, может быть из-за особой структуры реальных примеров и т. Д.) Рассматриваются " сговорчивым».
Константинос Койлинис
1
@KonstantinosKoiliaris Я думаю, что дело в том, что безопасность всех видов криптографических протоколов зависит от (обычно даже чего-то гораздо более сильного), и поэтому предоставляет множество примеров проблем из рутинной практики, которые чрезвычайно трудны для SAT-решателей ( или мы очень надеемся, что так или иначе). пNп
Эмиль Йержабек поддерживает Монику
2
В этом ключе было бы неплохо проверить общую сложность. Фактически, оказывается, что проблема остановки почти всегда разрешима за полиномиальное время, как, например, SAT (фактически, SAT имеет более сильную гарантию). Под «почти всегда» подразумевается, что проблема допускает такой алгоритм, что доля входных данных, для которых алгоритм останавливает (и, конечно, выводит правильный ответ) за полиномиальное время, становится равной 1 по мере увеличения длины входных данных.
Гильермо Ангерис

Ответы:

17
  • Сильно структурированные экземпляры SAT (даже по миллионам переменных) часто могут быть решены на практике. Однако случайные экземпляры SAT, близкие к порогу выполнимости даже с несколькими сотнями переменных, все еще открыты (то есть даже на практике, если вы генерируете такую ​​вещь, вы можете никогда не узнать за время существования вселенной, является ли созданная вами вещь выполнимой или нет используя текущие SAT решатели). Возможно, вас заинтересует этот связанный вопрос и его ответы.

  • Клик-искатели также потрясающе хороши "на практике"

  • Целочисленное программирование и смешанное целочисленное линейное программирование (с некоторыми рациональными и некоторыми целочисленными переменными) находятся в центре внимания целых отделов исследования операций и часто (но не всегда) могут быть решены на практике.

  • Из того, что я понимаю, многие -полные проблемы, возникающие при проверке, часто могут быть решены на практике, но «на практике» обычно подразумевает «в высоко структурированных случаях». (В отличии от этого , мы еще не знаем , кто победит на довольно небольшие экземпляры игры Го, который является еще P S P C E -полной проблемой.)пSпAСЕпSпAСЕ

  • ЕИкспSпAСЕ

  • Как уже указывалось в комментариях DW, изоморфизм графов в значительной степени можно решить на практике. Очень сложно поставить в тупик современное программное обеспечение GI, такое как красавица, блаженство, дерзость и т. Д.

Джошуа Грохов
источник
Спасибо, Джошуа, я даю его вам за самые интересные / широкие предложенные проблемы.
Константинос Койлинис
1
Клик-искатели не всегда хороши на практике. Это действительно зависит от графика. И ваша ссылка, кажется, говорит только о случайных графах.
Питер Шор
Немного подробнее о GI: AFAIK большинство современных решателей GI, таких как упомянутые, используют оптимизированный подход индивидуализации-уточнения (где уточнение - это уточнение цвета, которое уже работает как квазилинейный тест GI почти для всех графиков) , но Нойен и Швейцер недавно показали экспоненциальные нижние оценки для этого метода и построили (практически) сложные случаи.
Водяной Кристалл
1
@JoshuaGrochow: Да, я согласен с вами в этом. Я просто хотел бы остановиться на «нелогичной» части вопроса, так как OP особо упомянул, что Simplex работает очень хорошо на практике, хотя экспоненциальные нижние оценки известны, и у нас такая же ситуация.
Watercrystal
1
У меня просто есть опыт с гипотезой Келлера , где (по общему признанию) графы поставили в тупик многие алгоритмы поиска кликов.
Питер Шор
14

Система типов Хиндли-Милнера используется в функциональных языках программирования (Haskell, SML, OCaml). Алгоритм вывода типов на практике практически линейный и работает на удивление хорошо, но известно, что он является DEXPTIME-полным!

Общий комментарий: неудивительно, что сложность наихудшего времени не обязательно является очень хорошим показателем практической эффективности алгоритма. Однако говорить о том, что несоответствие между теорией и практикой делает теорию сложности бесполезной, все равно, что говорить, что натуральные числа - это пустая трата, потому что мы используем только минимальное количество всех доступных чисел. Известный философ однажды сказал, что «опыт без теории слеп, а теория без опыта - просто интеллектуальная игра».

Андрей Бауэр
источник
FпL
6

Еще примеры, в основном из языков программирования:

  1. k-CFA (k-Control Flow Analysis) является EXPTIME-полным (Van Horn & Mairson 2008), но оптимизаторы всей программы, такие как MLton, выполняют его в любом случае. Время компиляции длинное, но редко катастрофическое.
  2. Разрешающая (динамическая) перегрузка обычно является NP-полной (Palsberg 2012). Но тогда это реальная проблема в реальном мире.
  3. К
  4. SMT-решение обычно является NP-полным, но коммерческие SMT-решения (такие как Z3 и CVC4) обычно довольно эффективны. Я не работаю напрямую с SMT-решателями, но я косвенно использовал Z3 от Liquid Haskell и Dafny, и время проверки кажется нормальным.
  5. Проблема решения для арифметики Пресбургера действительно сложна (Fischer & Rabin 1974), но алгоритм решения Билла Пью, тест Омеги (Pugh 1991), обычно работает в течение полиномиального времени низкого порядка.

ОNN


Ссылки:

[1] Дэвид Ван Хорн и Гарри Дж. Марсон. 2008. Решение kCFA завершено для EXPTIME. В материалах 13-й Международной конференции ACM SIGPLAN по функциональному программированию (ICFP '08). ACM, Нью-Йорк, Нью-Йорк, США, 275-282.

[2] http://web.cs.ucla.edu/~palsberg/paper/dedicated-to-kozen12.pdf

[3] М. Дж. Фишер и М. О. Рабин. 1974. СУПЕР-ЭКСПОНЕНЦИАЛЬНАЯ СЛОЖНОСТЬ ПРЕСБУРГЕРСКОЙ АРИФМЕТИКИ. Технический отчет. Массачусетский технологический институт, Кембридж, Массачусетс, США.

[4] Уильям Пью. 1991. Тест Omega: быстрый и практичный алгоритм целочисленного программирования для анализа зависимостей. В материалах конференции ACM / IEEE 1991 года по суперкомпьютингу (Supercomputing '91). ACM, Нью-Йорк, Нью-Йорк, США, 4-13.

xrq
источник
1

Тренировка нейронных сетей с использованием методов градиентного спуска также оказалась очень сложной задачей. https://www.cs.utexas.edu/~klivans/crypto-hs.pdf, но, как правило, разрешима на практике.

riemann77
источник