Предположим, у вас есть проблема решения A, и вы хотите доказать, что она NP-Complete, тогда способ сделать это - взять существующую задачу NP-Complete и уменьшить ее до A.
Под сокращением я подразумеваю сокращение полиномиального времени.
Итак, предположим, что вы хотите показать, что 3-SAT является NP-Complete, тогда вы можете показать уменьшение проблемы SAT.
Здесь важно отметить, что сокращение должно быть многократным. Не имеет значения, вызываете ли вы метод решайте несколько раз. Вы можете вызывать solve_A () несколько раз, если выполняете полиномиальное количество вызовов функции solve_A ().
Почему это работает? Вы можете доказать это противоречием.
Предположим, у вас был алгоритм поли-времени для 3SAT. Тогда вы можете решить SAT также в поли-времени. Поскольку полиномиальное количество обращений к полиномиальной функции все еще является полиномиальным.
Таким образом, если P = NP, это будет означать, что SAT также может быть решена за полиномиальное время с использованием недавно открытого алгоритма поли-времени для 3SAT. Но мы знаем, что SAT является NP-Complete, следовательно, 3SAT также должен быть NP-Complete.
Короче говоря, чтобы показать NP-полноту, требуются две вещи.
Наличие сертификата.
Сокращение от существующей проблемы NP-Complete.