В книге Сипсера «Введение в теорию вычислений» на стр. 286 приведено сокращение от 3SAT до задачи о гамильтоновом пути.
Есть ли более простое сокращение?
Проще говоря, я имею в виду сокращение, которое было бы легче понять (для студентов).
Есть ли сокращение, использующее линейное число переменных?
Сокращение в Sipser использует переменные, где - количество предложений, а - количество переменных. Другими словами, сокращение может увеличить размер от до . Существует ли простое сокращение, при котором размер вывода уменьшения является линейным по размеру его ввода?k n s O ( s 2 )
Если это невозможно, есть ли причина? Это подразумевало бы неизвестный результат в сложности / алгоритмах?
Ответы:
Число вершин в известном сокращении с 3SAT на направленный гамильтонов путь (dHAMPATH) может быть легко уменьшено до , где n - количество переменных, а k - количество предложений, поэтому размер Экземпляр построенного графа является линейным по отношению к размеру исходного экземпляра 3SAT.O(n+k) n k
В исходном сокращении у нас есть начальная и конечная вершины, вершин для предложений, n списков длиной 4 k для переменных. Идея состоит в том, что нам не нужно составлять список длиной 4 k для каждой переменной, мы можем построить список в соответствии с номером, который переменная появляется во всех пунктах. Поскольку общее количество появлений переменных в предложениях равно 3 k , оно равно O ( n + k ) .k n 4k 4k 3k O(n+k)
источник