Детерминированность против недетерминированности

Во многих случаях лишь тонкая грань отделяет детерминированные алгоритмы от недетерминированных. Но различие между ними достаточно очевидно и существенно. Детерминированный алгоритм не надеется на творческие способности механизма, выполняющего алгоритм, тогда как для недетерминированного «алгоритма» они могут быть достаточно важны. Например, сравните команды

Дойдите до следующего перекрестка и поверните направо или налево. и

Дойдите до следующего перекрестка и поверните направо или налево в зависимости от того, что скажет вам человек, стоящий на углу.

В обоих случаях действие, которое выполнит инструктируемый, не определено до начала выполнения команды. Однако первая команда требует от человека последовать направлению, выбранному им самостоятельно, то есть это недетерминированная инструкция. Вторая команда не предъявляет подобных требований к человеку — он получает инструкции на каждом шаге. Если первую команду выполнят несколько человек, то некоторые из них повернут направо, а другие — налево. Если несколько человек выполнят вторую команду и получат одинаковую информацию, то все повернут в одном направлении. В этом и заключается важное различие между детерминированными и недетерминированными «алгоритмами». Если детерминированный алгоритм выполнять несколько раз с одинаковыми входными данными, то выполненные действия всегда будут одинаковыми. В то же время недетерминированный алгоритм в одних и тех же условиях может привести к получению различных результатов.

Задача, которая может быть решена за полиномиальное время при помощи недетерминированного алгоритма, называется недетерминированной полиномиальной задачей (nondeterministic polynomial problem), или NP-задачей. Класс NP-задач обозначается NP. Обратите внимание, что все задачи из Р также принадлежат NP, так как к любому (детерминированному) алгоритму можно добавить недетерминированную комайду, не влияющую на работу алгоритма.

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

Усилия по поиску ответа на вопрос, совпадает ли класс NP с классом Р, привели к обнаружению в классе NP нового класса задач, известного как NP-полные задачи (NP-complete problem). У этих проблем есть общее свойство, которое заключается в том, что решение с полиномиальным временем любой из них обеспечило бы решение с полиномиальным временем для всех остальных NP-задач. То есть, если найдется (детерминированный) алгоритм для решения одной из NP-полных задач в полиномиальное время, то этот алгоритм можно было бы расширить для решения всех остальных задач из NP в полиномиальное время. Следовательно, было бы доказано, что класс NP совпадает с классом Р. Задача коммивояжера является одной из NP-полных задач.

Подведем итог. Мы обнаружили, что задачи могут быть разрешимыми (имеющими алгоритмическое решение) и неразрешимыми (для которых нет алгоритмического решения), что показано на рис. 11.7. Более того, в классе разрешимых задач есть два подкласса. Первый — это набор полиномиальных задач, то есть задач, имеющих практическое решение. Второй представляет собой не полиномиальные задачи, практическое решение для которых может быть найдено только для относительно небольших и тщательно отобранных входов. И в заключение, существуют загадочные NP-задачи, не поддающиеся точной классификации.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: