Недавно, когда я разговаривал с физиком, я утверждал, что в моем опыте, когда проблема, которая наивно кажется такой, что она требует экспоненциального времени, нетривиально оказывается в P или BPP, обычно можно определить «общую причину», почему происходит сокращение --- и почти всегда эта причина принадлежит списку из дюжины или меньше «обычных подозреваемых» (например: динамическое программирование, линейная алгебра ...). Однако это заставило меня задуматься: можем ли мы записать достойный список таких причин? Вот первая, неполная попытка одного:
(0) Математическая характеристика. Задача имеет неочевидную «чисто математическую» характеристику, которая, как только она станет известна, сразу делает возможным полный поиск по списку поли (n) возможностей. Пример: планарность графа, для которой алгоритм O (n 6 ) следует из теоремы Куратовского.
(Как указывает «планарная» ниже, это был плохой пример: даже если вы знаете комбинаторную характеристику планарности, дать алгоритм для ее полиномиального времени все еще довольно нетривиально. Итак, позвольте мне привести лучший пример здесь: как насчет скажем, «учитывая входные данные n, записанные в двоичном виде, вычислите, сколько цветов необходимо для окраски произвольной карты, встроенной в поверхность с n отверстиями». Априори не очевидно, что это вообще вычислимо (или даже конечно!). Но есть известная формула, дающая ответ, и как только вы узнаете формулу, ее вычислить за полиномиальное время тривиально. Между тем, «сводится к исключенным несовершеннолетним / теория Робертсона-Сеймура», вероятно, следует добавить в качестве отдельной всеобъемлющей причины, по которой что-то может быть в п.)
Во всяком случае, это не та ситуация, которая меня больше всего интересует.
(1) Динамическое программирование. Проблема может быть разбита таким образом, чтобы обеспечить рекурсивное решение без экспоненциального увеличения - часто потому, что выполняемые ограничения расположены в линейном или другом простом порядке. «Чисто комбинаторный»; Алгебраическая структура не требуется. Возможно, достижимость графа (и, следовательно, 2SAT) являются частными случаями.
(2) Матроиды. Задача имеет матроидную структуру, позволяющую работать жадному алгоритму. Примеры: соответствие, минимальное остовное дерево.
(3) Линейная алгебра. Задача может быть сведена к решению линейной системы, вычислению детерминанта, вычислению собственных значений и т. Д. Возможно, большинство проблем, связанных с «чудесными отменами», в том числе теми, которые решаются с помощью формализма спичечных ворот Валианта, также попадают под линейно-алгебраический зонт.
(4) Выпуклость. Проблема может быть выражена как некая выпуклая оптимизация. Полуконечное программирование, линейное программирование и игры с нулевой суммой являются частыми (все более и более) частными случаями.
(5) Проверка полиномиальной идентичности. Задача может быть сведена к проверке полиномиального тождества, так что основная теорема об алгебре приводит к эффективному рандомизированному алгоритму, а в некоторых случаях, например, к простоте, даже доказуемо-детерминированному алгоритму.
(6) Марковская цепь Монте-Карло. Проблема может быть сведена к выборке из результата быстро смешанного хождения. (Пример: примерный подсчет идеальных совпадений.)
(7) Евклидов алгоритм. GCD, продолжение дроби ...
Разное / Непонятно, как именно классифицировать: стабильный брак, полиномиальный факторинг, проблема принадлежности для групп перестановок, различные другие проблемы в теории чисел и теории групп, задачи о низкоразмерных решетках ...
Мой вопрос: какие самые важные вещи я не учел?
Чтобы уточнить:
Я понимаю, что ни один список не может быть полным: независимо от конечного числа причин, которые вы приводите, кто- то сможет найти экзотическую проблему, которая есть в P, но не по любой из этих причин. Отчасти по этой причине меня больше интересуют идеи, которые ставят множество разных, казалось бы, не связанных проблем в P или BPP, чем идеи, которые работают только для одной проблемы.
Я также понимаю, что это субъективно, как разделить вещи. Например, должны ли матроиды быть особым случаем динамического программирования? Является ли разрешимость поиска в глубину достаточно важной, чтобы быть его собственной причиной, отдельной от динамического программирования? Кроме того, часто одна и та же проблема может быть в P по нескольким причинам, в зависимости от того, как вы на это смотрите: например, поиск главного собственного значения находится в P из-за линейной алгебры, а также потому, что это проблема выпуклой оптимизации.
Короче говоря, я не надеюсь на «теорему классификации» - просто на список, который с пользой отражает то, что мы в настоящее время знаем об эффективных алгоритмах. И именно поэтому меня больше всего интересуют методы размещения вещей в P или BPP, которые имеют широкую применимость, но которые не вписываются в приведенный выше список, или другие идеи по улучшению моей грубой первой попытки, чтобы преуспеть в своем хвастовстве перед физик.