Насколько я понимаю, вы задаете два вопроса: (1) есть ли, например, алгоритмы SAT, которые более умны, чем грубая грубая сила, и (2) есть алгоритмы, которые просто дают ответ ДА / НЕТ при решении задачи, полной NP фактически не найдя решения. Я отвечу на оба вопроса в таком порядке.
(1) Совершенно возможно решить проблему без грубой силы, то есть без наивного опробования всех возможностей. Например, современные полные решатели SAT могут применять умные алгоритмы, которые выводят или доказывают, что определенные (частичные) назначения не могут привести к решению, поэтому они даже не рассматривают эту часть.
В более общем смысле даже NP-сложные задачи часто обнаруживают своего рода алгоритмическую опору, которая позволяет нам разрабатывать алгоритм быстрее, чем грубая сила. Область исследования - точные (экспоненциальные) алгоритмы . Такие алгоритмы занимают экспоненциальное время, но все же быстрее, чем наивные алгоритмы. Например, вы можете решить TSP примерно завремя, где - количество городов для посещения. Этот метод не будет масштабироваться до даже умеренных значений , но существует классический алгоритм динамического программирования благодаря Held & Karp . Для общих методов, см., Например, ветвь и граница .n n O ( 2 n n 2 )н !NNO ( 2NN2)
(2) Существуют «алгоритмы оракула» для NP-полных задач, которые просто выводят ДА / НЕТ без явного сертификата. Например, рассмотрим проблему -path:К
(Проблема ).К Учитывая граф и целое число , существует ли простой путь в на вершинах?k G kгКгК
Вышеуказанная проблема легко видна как NP-полная. алгоритм для задачи приведен в [1]. Сам алгоритм дает только ДА / НЕТ ответ на проблему, но мы можем использовать дополнительные приемы для построения самого фактического . В более общем смысле, при наличии такого «алгоритма оракула» можно использовать инструменты комбинаторного группового тестирования для извлечения самого свидетеля.kО*( 2К)К
[1] Уильямс, Райан. «Поиск путей длины за времени». Письма обработки информации 109,6 (2009): 315-318. ссылка для издателя , PDFO ∗ ( 2 k )КО*( 2К)