Откуда мы знаем, что NP-полные задачи являются самыми сложными в NP?

Я понимаю, что если вы можете сделать полиномиальное сокращение времени из «каждой» проблемы, это доказывает, что проблема по крайней мере так же сложна, как и любая проблема в NP. Кроме того, как мы узнаем, что обнаружили все проблемы в NP? Не могут ли существовать проблемы, которые мы, возможно, не обнаружили или не доказали, существуют в NP, но НЕ МОЖЕТ быть сведена к какой-либо np-полной проблеме? Или это все еще открытый вопрос?


person rb612    schedule 31.05.2016    source источник


Ответы (3)


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

Не могут ли существовать проблемы, которые мы, возможно, не обнаружили или не доказали, существуют в NP, но НЕ МОЖЕТ быть сведена к какой-либо np-полной проблеме?

Ответ нет. По определению NP-полноты одно из двух необходимых условий для того, чтобы задача A была NP-полной, состоит в том, что каждая NP-задача должна быть сведена к A за полиномиальное время. Если вы хотите выяснить, как доказать, что каждая отдельная NP-задача может быть сведена за полиномиальное время к некоторой NP-полной задаче, взгляните на доказательство Теорема Кука-Левина, утверждающая, что задача 3-SAT является NP-полной. Это была первая доказанная NP-полная проблема, и позже было доказано, что многие другие NP-полные задачи являются NP-полными путем нахождения соответствующего сокращения от 3-SAT до этих задач.

person Miljen Mikic    schedule 01.06.2016
comment
Спасибо! Идея SAT делает ее полностью разумной. - person rb612; 02.06.2016

NP состоит из всех задач, которые можно (теоретически) решить, если иметь возможность делать удачные предположения, угадывать решение и проверять за полиномиальное время правильность решения. Например, задачу коммивояжера «могу ли я посетить столицы всех 50 штатов США, проехав менее 9 825 миль» можно решить, угадывая поездку и проверяя, не слишком ли она длительна.

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

Так что да, мы знаем все обо всех проблемах в NP.

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

person gnasher729    schedule 31.05.2016
comment
Спасибо за Ваш ответ. Почему же тогда невозможно найти алгоритм X, который находится в NP, и NP-полная задача не может быть сведена к X? - person rb612; 31.05.2016
comment
@ rb612 Если есть проблема X в NP, но не NP-Complete, то NP-Complete является правильным подмножеством NP. Но тогда P не может равняться NP, потому что каждая проблема в P сводится за полиномиальное время к любой другой проблеме в P. Таким образом, если P = NP, все проблемы в NP должны быть NP-полными (то есть в NP и полиномиально сводимыми к друг с другом). - person Patrick87; 23.06.2016

Кроме того, как мы узнаем, что обнаружили все проблемы в NP?

Мы не знаем. Множество всех проблем во Вселенной не только бесконечно, но и неисчислимо.

Не могут ли существовать проблемы, которые мы, возможно, не обнаружили или не доказали, существуют в NP, но НЕ МОЖЕТ быть сведена к какой-либо np-полной проблеме?

Мы этого не знаем. Мы подозреваем, что это так, но это еще не доказано. Если бы мы нашли NP-задачу, которая не находится в NP-Complete, это было бы доказательством того, что P =/= NP.

Это одна из самых больших нерешенных проблем в CS. Многие блестящие умы пробовали его, но этот орешек оказалось трудным расколоть.

person luis.espinal    schedule 31.05.2016
comment
Это так интересно. Не могли бы вы объяснить немного больше о том, что обнаружение проблемы NP, которая не является NP-полной, обязательно будет доказательством для P =/= NP? Потому что я думал, что единственный способ доказать, что P=/=NP, — это показать, что ни один алгоритм никогда не сможет решить NP-полную задачу за детерминированное полиномиальное время. - person rb612; 31.05.2016
comment
@ rb612 Если есть проблема X в NP, но не NP-Complete, то NP-Complete является правильным подмножеством NP. Но тогда P не может равняться NP, потому что каждая проблема в P сводится за полиномиальное время к любой другой проблеме в P. Таким образом, если P = NP, все проблемы в NP должны быть NP-полными (то есть в NP и полиномиально сводимыми к друг с другом). - person Patrick87; 23.06.2016
comment
@ Патрик87, спасибо! Однако принятый ответ гласит, что все проблемы в NP можно свести к NP-полной задаче. Так это уже доказано или до сих пор неизвестно? И не могли бы вы подробнее рассказать о том, что вы имеете в виду под «Тогда P не может равняться NP», потому что каждая проблема в P полиномиально сводится к любой другой проблеме в P. Я не понимаю, как каждая проблема в P, сводящаяся друг к другу, показывает, что P ≠ NP, если NP ⊂ NP-полный. - person rb612; 24.06.2016
comment
@ rb612 NP-C по определению является подмножеством NP. P также является подмножеством NP, опять же по определению. Если NP содержит x не из NP-C, то существует некоторая проблема y в NP такая, что y нельзя свести к x за полиномиальное время (иначе x был бы NP-C). Но если P = NP, x и y оба принадлежат P. Если x и y принадлежат P, то y можно свести к x за полиномиальное время, просто игнорируя x и используя наш полиномиальный алгоритм для y. Таким образом, мы не можем одновременно иметь NP-C =/= NP и P = NP. Если бы вы могли доказать, что первые верны, это доказательство доказало бы, что P =/= NP. - person Patrick87; 24.06.2016