С точки зрения того, кто пишет код для жизни, хорошее знакомство с NP-полнотой важно для:
1. Распознавание, когда вы лаете не на то дерево
Проблемы с NP-полными являются простейшими из NP-сложных проблем, и, тем не менее, насколько мы можем судить, для решения такой задачи требуется время, экспоненциальное по отношению к размеру входных данных. Таким образом, на практике, если вы можете показать, что проблема, которую вы пытаетесь решить, сложна с точки зрения NP (как правило, показывая, что ее эффективное решение также даст эффективное решение некоторой NP-полной проблемы), вы знаете, что Вы можете прекратить поиск эффективного алгоритма, чтобы решить его в целом. Вместо этого вы можете выбрать один из известных алгоритмов, которые обещают хорошие приближения для задач оптимизации NP-hard, и продолжить работу над остальной частью вашего проекта.
2. Нахождение правильного дерева
Поскольку компьютеры часто используются для атаки на NP-сложные задачи, были разработаны специализированные решатели, которые могут эффективно решать некоторые NP-сложные задачи. Признание того, что ваша проблема является NP-полной, является первым шагом к поиску существующего инструмента (SAT, ILP, SMT, CSP и т. Д.), Который может помочь вам найти точные решения в некоторых случаях, когда вам в противном случае пришлось бы согласиться на приближение.