Для (пошукових версій) проблем, що не стосуються НП , перевірити рішення явно простіше, ніж знайти його, оскільки перевірка може бути здійснена в поліноміальний час, тоді як пошук свідка займає (ймовірно) експоненціальний час.
Однак у Р рішення також може бути знайдена в поліноміальний час, тому не здається очевидним, коли перевірка швидша, ніж пошук рішення. Насправді різні проблеми, схоже, поводяться по-різному з цієї точки зору. Деякі приклади:
3SUM: задано вхідних чисел, знайдіть серед них 3, які дорівнюють 0. Наскільки мені відомо, найшвидший відомий алгоритм працює за час O (n ^ {2-o (1)}) , і цей порядок вважається оптимальним. З іншого боку, перевірка рішення відбувається набагато швидше, оскільки все, що нам потрібно зробити, - це лише перевірити, чи знайдені 3 числа дійсно дорівнюють 0.
Найбільш короткі шляхи для всіх пар: задавши графік з вагою ребер, обчисліть його найменшу матрицю відстані в шляху. Після надання такої матриці, чи можна швидше перевірити, чи справді це правильна відстань матриці, ніж її повторне обчислення? Я здогадуюсь, що відповідь, можливо, так, але це, очевидно, менш очевидно, ніж для 3SUM.
Лінійне програмування. Якщо подано заявлене оптимальне рішення, перевірити його простіше, ніж повторно обчислити його, коли також надається допоміжна інформація (оптимальне подвійне рішення). З іншого боку, якщо доступно лише первинне рішення, не ясно, чи можна перевірити його швидше, ніж насправді вирішити LP.
Питання: що відомо про цю тему? Тобто, коли легше перевірити рішення проблеми в P , ніж знайти рішення?