Объяснение теории вычислительной сложности - PullRequest
22 голосов
/ 21 ноября 2008

Если вы немного разберетесь в математике, как бы вы дали наивный общий обзор теории вычислительной сложности?

Я ищу объяснение вопроса P = NP. Что такое П? Что такое НП? Что такое NP-Hard?

Иногда Википедия написана так, как будто читатель уже понимает все вовлеченные понятия.

Ответы [ 10 ]

61 голосов
/ 21 ноября 2008

Ууууу, докторский комп флешбек. Хорошо, здесь идет.

Мы начнем с идеи решения проблемы, задачи, для которой алгоритм всегда может ответить «да» или «нет». Нам также нужна идея двух моделей компьютера (на самом деле, машины Тьюринга): детерминированной и недетерминированной. Детерминированный компьютер - это обычный компьютер, о котором мы всегда думаем; недетерминированный компьютер - это тот компьютер, к которому мы привыкли, за исключением того, что он имеет неограниченный параллелизм, так что каждый раз, когда вы приходите на ветку, вы запускаете новый «процесс» и исследуете обе стороны. Как сказал Йоги Берра, когда вы приходите к развилке на дороге, вы должны взять ее.

Решение проблемы в P, если существует известный алгоритм за полиномиальное время, чтобы получить этот ответ. Решение проблемы в NP, если для недетерминированного автомата, чтобы получить ответ, существует известный алгоритм полиномиального времени.

Проблемы, о которых известно, что они есть в P, тривиальны в NP - недетерминированная машина просто никогда не беспокоится о том, чтобы внедрить другой процесс, и действует точно так же, как детерминистская. Есть проблемы, о которых известно, что их нет ни в P, ни в NP; простой пример - перечислить все битовые векторы длины n. Независимо от того, что это занимает 2 n шагов.

(Строго говоря, проблема решения в NP, если нодерминистская машина может прийти к ответу за многократное время, а детерминированная машина может проверить , что решение является правильным за много времени.)

Но есть некоторые проблемы, о которых известно, что они есть в NP, для которых не известен детерминистический алгоритм с многократным временем; Другими словами, мы знаем, что они в NP, но не знаем, есть ли они в P. Традиционным примером является версия задачи о решении задачи коммивояжера (TSP): учитывая города и расстояния, есть ли маршрут, который охватывает все города, возвращаясь к начальной точке, на расстоянии менее x ? Легко в недетерминированной машине, потому что каждый раз, когда недетерминированный коммивояжер приходит на развилку дороги, он берет его: его клоны направляются в следующий город, который они не посетили, и в конце они сравнивают записи и смотрят любой из клонов занимал расстояние менее x .

(Тогда экспоненциально много клонов сражаются за него, за что должны быть убиты.)

Неизвестно, находится ли TSP для принятия решения в P: не существует известного решения с разным временем, но нет никаких доказательств того, что такого решения не существует.

Теперь еще одна концепция: учитывая задачи решения P и Q, если алгоритм может преобразовать решение для P в решение для Q за полиномиальное время, говорят, что Q является многократным приводимым ( или просто сводится) к П.

Проблема является NP-полной, если вы можете доказать, что (1) она находится в NP, и (2) показать, что она за многократное время сводится к задаче, уже известной как NP-полная. (Самая сложная часть этого - обеспечить первый пример NP-полной проблемы: это было сделано Стивом Куком в Теорема Кука .)

На самом деле, это говорит о том, что если кто-то когда-нибудь найдет решение по одному разу с полным временем выполнения, он автоматически получит его для всех проблем с NP-завершением; это также будет означать, что P = NP.

Проблема NP-сложна тогда и только тогда, когда она "по крайней мере такая же", как NP-полная проблема. Более обычный коммивояжёр Задача поиска кратчайшего маршрута - NP-сложная, а не строго NP-полная.

5 голосов
/ 15 апреля 2009

Это комментарий к сообщению Чарли.

Проблема является NP-полной, если вы можете доказать, что (1) она в NP, и (2) показать, что оно сводится по времени к проблеме, уже известной быть NP-завершенным.

Со вторым условием есть небольшая ошибка. На самом деле, вам нужно доказать, что известная NP-полная задача (скажем, Y ) сводится к этой задаче за полиномиальное время (назовем ее проблемой X ).

Причиной такого способа доказательства является то, что если вы могли бы уменьшить NP -полную проблему до этой проблемы и каким-то образом решить эту проблему за многократное время, то вам также удалось найти многократное решение проблемы неполной NP , которая была бы замечательной (если не невозможной) вещью, поскольку с тех пор вам удастся решить давнюю P = NP проблема.

Еще один способ взглянуть на это доказательство состоит в том, что он использует метод контра-положительного доказательства, который по существу утверждает, что если Y -> X , то ~ X -> ~ Y . Другими словами, невозможность решить Y за полиномиальное время невозможна, значит, не разрешить X также и за многократное время. С другой стороны, если вы можете решить X в поли-времени, то вы также можете решить Y в поли-времени. Кроме того, вы можете решить все проблемы, которые сводятся к Y в поли-времени, а также транзитивности.

Я надеюсь, что мое объяснение выше достаточно ясно. Хорошим источником является Глава 8 Разработка алгоритма Клейнберга и Тардоса или Глава 34 Кормена и др.

5 голосов
/ 21 ноября 2008

Майкл Сипсер * Введение в теорию вычислений - отличная книга, и она очень читабельна. Еще один замечательный ресурс - это курс Скотта Ааронсона "1007 * Великие идеи в теоретической информатике ".

Формализм, который используется, состоит в том, чтобы рассматривать проблемы решения (проблемы с ответом Да / Нет, например, "имеет ли этот граф гамильтонов цикл") как "языки" - наборы строк - входные данные, для которых ответ Да. Существует формальное представление о том, что такое «компьютер» (машина Тьюринга), и проблема в P, если существует алгоритм полиномиального времени для решения этой проблемы (с учетом входной строки, скажем, да или нет) на машине Тьюринга.

Проблема в NP, если она проверяется за полиномиальное время, т. Е. Если для входных данных, где ответ Да, существует сертификат (полиномиального размера), который вы можете проверить, что ответ Да в полиномиальное время. [Например. учитывая гамильтонов цикл в качестве сертификата, вы, очевидно, можете проверить, что он один.]

Это ничего не говорит о том, как найти этот сертификат. Очевидно, вы можете попробовать «все возможные сертификаты», но это может занять экспоненциальное время; неясно, будет ли у вас всегда потратить больше, чем полиномиальное время, чтобы решить, да или нет; это вопрос P против NP.

Проблема NP-сложна, если ее решение означает возможность решить все проблемы в NP.

Также посмотрите этот вопрос: Что такое NP-полный в информатике?

Но на самом деле, все это, вероятно, только неопределенно для вас; стоит потратить время на прочтение, например Книга Сипсера. Это прекрасная теория.

4 голосов
/ 21 ноября 2008

К сожалению, две лучшие из известных мне книг ( Гэри и Джонсон и Хопкрофт и Ульман ) обе начинаются с уровня доказательной математики выпускников. Это почти наверняка необходимо, так как весь вопрос очень легко неправильно понять или исказить. Джефф едва не откусил уши , когда попытался подойти к делу слишком глупо / шутливо.

Возможно, лучший способ - это просто выполнить много практической работы с нотацией big-O , используя множество примеров и упражнений . Смотри также этот ответ . Однако обратите внимание, что это не совсем одно и то же: отдельные алгоритмы могут быть описаны асимптотами, но утверждение, что проблема 1014 * имеет определенную сложность, является утверждением о каждом возможном алгоритме для этого. Вот почему доказательства так сложны!

2 голосов
/ 21 ноября 2008

Я помню «Вычислительную сложность» от Пападимитриу (надеюсь, я правильно написал имя) как хорошую книгу

1 голос
/ 21 ноября 2008

Вот несколько ссылок по теме:

Если вы знакомы с идеей кардинальности набора, то есть количества элементов в наборе, то можно было бы рассмотреть вопрос, например, P, представляющий количество целых чисел, в то время как NP - загадка. это больше, как кардинальность всех вещественных чисел?

1 голос
/ 21 ноября 2008

очень упрощенно: проблема NP-трудна, если единственный способ ее решить - перечислить все возможные ответы и проверить каждый из них

0 голосов
/ 21 ноября 2008

В зависимости от того, сколько у вас есть времени, может быть, лучше начать с DFA, NDFA, а затем показать, что они эквивалентны. Тогда они поймут, что ND vs. D, и будут лучше понимать регулярные выражения как хороший побочный эффект.

0 голосов
/ 21 ноября 2008

В информатике недостаточно уметь решить проблему. Это должно быть решаемо в разумные сроки. Таким образом, в то время как в чистой математике вы придумываете уравнение, в CS вы должны уточнить это уравнение, чтобы вы могли решить задачу в разумные сроки.

Это самый простой способ, который я могу представить, это может быть слишком просто для ваших целей.

0 голосов
/ 21 ноября 2008

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

В этом предложении слово «сложнее» намеренно расплывчато, поскольку оно может относиться либо ко времени обработки, либо к использованию памяти.

...