Что почитать о 10 задачах и какие инструменты помогут подниматься по лестнице. Начните с Википедии. Статьи и книги ниже — классические источники.
Основы: P, NP и NP-полнота
- Wikipedia: P versus NP problem, NP-completeness, Cook–Levin theorem.
- Clay Mathematics Institute, P vs NP, одна из семи задач тысячелетия.
- Stephen A. Cook, "The complexity of theorem-proving procedures", Proceedings of the Third Annual ACM Symposium on Theory of Computing (STOC '71), 1971, pp. 151–158. doi:10.1145/800157.805047
- Richard M. Karp, "Reducibility among combinatorial problems", in R. E. Miller and J. W. Thatcher (eds.), Complexity of Computer Computations, Plenum Press, 1972, pp. 85–103. doi:10.1007/978-1-4684-2001-2_9
- Michael R. Garey and David S. Johnson, Computers and Intractability: A Guide to the Theory of NP-Completeness, W. H. Freeman, 1979. ISBN 0-7167-1045-5. Стандартный каталог NP-полных задач.
- Michael Sipser, Introduction to the Theory of Computation, 3rd ed., Cengage Learning, 2013. ISBN 978-1-133-18779-0. Глава 7 знакомит с P, NP и NP-полнотой.
- Sanjeev Arora and Boaz Barak, Computational Complexity: A Modern Approach, Cambridge University Press, 2009. doi:10.1017/CBO9780511804090
Задача выполнимости булевых формул (SAT)
- Wikipedia: Boolean satisfiability problem, SAT solver.
- Классика: Cook 1971 (см. выше), первое доказательство NP-полноты. О том, как решать: Martin Davis and Hilary Putnam, "A computing procedure for quantification theory", Journal of the ACM 7(3), 1960, pp. 201–215, doi:10.1145/321033.321034; и Martin Davis, George Logemann and Donald Loveland, "A machine program for theorem-proving", Communications of the ACM 5(7), 1962, pp. 394–397, doi:10.1145/368273.368557 (DPLL — метод, на котором основан каждый современный решатель).
- Обзор: Armin Biere, Marijn Heule, Hans van Maaren and Toby Walsh (eds.), Handbook of Satisfiability, 2nd ed., IOS Press, 2021. doi:10.3233/FAIA336
3-SAT
- Wikipedia: 3-satisfiability (раздел статьи о SAT).
- Классика: Uwe Schöning, "A probabilistic algorithm for k-SAT and constraint satisfaction problems", 40th Annual Symposium on Foundations of Computer Science (FOCS), IEEE, 1999, pp. 410–414, doi:10.1109/SFFCS.1999.814612; журнальная версия: Algorithmica 32(4), 2002, pp. 615–623, doi:10.1007/s00453-001-0094-7. Простой метод, который делает случайные шаги. На 3-SAT он быстрее, чем перебор всех случаев.
- Учебник: Donald E. Knuth, The Art of Computer Programming, Volume 4B: Combinatorial Algorithms, Part 2, Addison-Wesley, 2023, section 7.2.2.2 (Satisfiability). ISBN 0-201-03806-4.
Независимое множество
- Wikipedia: Independent set (graph theory).
- Классика: Robert Endre Tarjan and Anthony E. Trojanowski, "Finding a maximum independent set", SIAM Journal on Computing 6(3), 1977, pp. 537–546. doi:10.1137/0206038
- Учебник: Fedor V. Fomin and Dieter Kratsch, Exact Exponential Algorithms, Springer, 2010. doi:10.1007/978-3-642-16533-7
Клика
- Wikipedia: Clique problem.
- Классика: Coen Bron and Joep Kerbosch, "Algorithm 457: finding all cliques of an undirected graph", Communications of the ACM 16(9), 1973, pp. 575–577. doi:10.1145/362342.362367
- Обзор: Qinghua Wu and Jin-Kao Hao, "A review on algorithms for maximum clique problems", European Journal of Operational Research 242(3), 2015, pp. 693–709. doi:10.1016/j.ejor.2014.09.064
Вершинное покрытие
- Wikipedia: Vertex cover.
- Классика: G. L. Nemhauser and L. E. Trotter, "Vertex packings: structural properties and algorithms", Mathematical Programming 8(1), 1975, pp. 232–248. doi:10.1007/BF01580444 Также: Jianer Chen, Iyad A. Kanj and Ge Xia, "Improved upper bounds for vertex cover", Theoretical Computer Science 411(40–42), 2010, pp. 3736–3756. doi:10.1016/j.tcs.2010.06.026
- Учебник: Marek Cygan, Fedor V. Fomin, Łukasz Kowalik, Daniel Lokshtanov, Dániel Marx, Marcin Pilipczuk, Michał Pilipczuk and Saket Saurabh, Parameterized Algorithms, Springer, 2015. doi:10.1007/978-3-319-21275-3
3-раскраска графа
- Wikipedia: Graph coloring.
- Классика: Daniel Brélaz, "New methods to color the vertices of a graph", Communications of the ACM 22(4), 1979, pp. 251–256 (метод DSatur). doi:10.1145/359094.359101 Также: Richard Beigel and David Eppstein, "3-coloring in time O(1.3289^n)", Journal of Algorithms 54(2), 2005, pp. 168–204. doi:10.1016/j.jalgor.2004.06.008
- Учебник: R. M. R. Lewis, Guide to Graph Colouring: Algorithms and Applications, 2nd ed., Springer, 2021. doi:10.1007/978-3-030-81054-2
Гамильтонов цикл
- Wikipedia: Hamiltonian path problem, Hamiltonian path.
- Классика: Michael Held and Richard M. Karp, "A dynamic programming approach to sequencing problems", Journal of the Society for Industrial and Applied Mathematics 10(1), 1962, pp. 196–210, doi:10.1137/0110015; и Richard Bellman, "Dynamic programming treatment of the travelling salesman problem", Journal of the ACM 9(1), 1962, pp. 61–63, doi:10.1145/321105.321111. Современная работа: Andreas Björklund, "Determinant sums for undirected Hamiltonicity", SIAM Journal on Computing 43(1), 2014, pp. 280–299. doi:10.1137/110839229
- Обзор: Ronald J. Gould, "Advances on the Hamiltonian problem – a survey", Graphs and Combinatorics 19(1), 2003, pp. 7–52. doi:10.1007/s00373-002-0492-x
- Трудные экземпляры: Joeri Sleegers and Daan van den Berg, "The hardest Hamiltonian cycle problem instances: the plateau of yes and the cliff of no", SN Computer Science 3, article 372, 2022. В открытом доступе. doi:10.1007/s42979-022-01256-0
Задача коммивояжёра (TSP)
- Wikipedia: Travelling salesman problem.
- Классика: G. Dantzig, R. Fulkerson and S. Johnson, "Solution of a large-scale traveling-salesman problem", Journal of the Operations Research Society of America 2(4), 1954, pp. 393–410, doi:10.1287/opre.2.4.393; и S. Lin and B. W. Kernighan, "An effective heuristic algorithm for the traveling-salesman problem", Operations Research 21(2), 1973, pp. 498–516, doi:10.1287/opre.21.2.498. Held and Karp 1962 (см. выше) — классический точный метод динамического программирования.
- Книга: David L. Applegate, Robert E. Bixby, Vašek Chvátal and William J. Cook, The Traveling Salesman Problem: A Computational Study, Princeton University Press, 2006. ISBN 978-0-691-12993-8.
Целочисленное программирование 0-1
- Wikipedia: Integer programming, Pseudo-Boolean function.
- Классика: Karp 1972 (см. выше) включает целочисленное программирование 0-1 в свой список NP-полных задач (всего их 21). О том, как решать: Ralph E. Gomory, "Outline of an algorithm for integer solutions to linear programs", Bulletin of the American Mathematical Society 64(5), 1958, pp. 275–278, doi:10.1090/S0002-9904-1958-10224-4 (отсечения); и Egon Balas, "An additive algorithm for solving linear programs with zero-one variables", Operations Research 13(4), 1965, pp. 517–546, doi:10.1287/opre.13.4.517 (метод ветвей и границ для переменных 0-1).
- Учебник: Laurence A. Wolsey, Integer Programming, 2nd ed., Wiley, 2020. doi:10.1002/9781119606475 Также: Michele Conforti, Gérard Cornuéjols and Giacomo Zambelli, Integer Programming, Springer, 2014. doi:10.1007/978-3-319-11008-0
- Формат файла: Olivier Roussel and Vasco Manquinho, Input/Output Format and Solver Requirements for the Competitions of Pseudo-Boolean Solvers (формат OPB), 2016. На сайте Pseudo-Boolean Competition 2024 есть результаты, решатели и наборы тестовых задач.
Точное покрытие 3-множествами (X3C)
- Wikipedia: Exact cover (точное покрытие 3-множествами — это случай, когда в каждом множестве три элемента), Knuth's Algorithm X, Dancing links.
- Классика: Donald E. Knuth, "Dancing links", in Millennial Perspectives in Computer Science, 2000, pp. 187–214. arXiv:cs/0011047 Эта задача приведена как [SP2] в Garey and Johnson 1979 (см. выше).
- Учебник: Donald E. Knuth, The Art of Computer Programming, Volume 4B, Addison-Wesley, 2023, section 7.2.2.1 (Dancing links). ISBN 0-201-03806-4.
Решатели и инструменты
Каждая лицензия указана так, как её указывает сам проект. «Академическое использование» означает, что для другого использования может понадобиться разрешение.
SAT
- Kissat (Armin Biere и другие; исходный код). MIT.
- CaDiCaL (Armin Biere и другие; исходный код). MIT.
- MiniSat (исходный код). MIT. Описан в работе: Niklas Eén and Niklas Sörensson, "An extensible SAT-solver", Theory and Applications of Satisfiability Testing (SAT 2003), LNCS 2919, Springer, 2004, pp. 502–518, doi:10.1007/978-3-540-24605-3_37.
- CryptoMiniSat (исходный код). MIT для всего, что нужно для сборки и запуска. Некоторые дополнительные файлы — под GPLv2.
- The International SAT Competition: ежегодные результаты, исходный код решателей и наборы тестовых задач.
- Handbook of Satisfiability (см. SAT).
Графы (независимое множество, клика, вершинное покрытие)
- KaMIS: максимальные независимые множества и вершинные покрытия больших разреженных графов. MIT.
- Cliquer (Patric Östergård и другие): точный поиск клики максимального размера и максимального веса. GNU GPL.
- PMC (Ryan A. Rossi): параллельный поиск максимальной клики. GNU GPL v3 или новее.
- NetworkX (исходный код): библиотека для графов на Python, для небольших экспериментов. BSD 3-clause.
Точное покрытие
- DLX1 — программа Donald E. Knuth, Algorithm 7.2.2.1X (точное покрытие методом dancing links), на CWEB. Ни в программе, ни на странице, где она указана, лицензия не названа.
Задача коммивояжёра и гамильтонов цикл
- Concorde (Applegate, Bixby, Chvátal, Cook): точный решатель для симметричной TSP. Использование в академических исследованиях разрешено. Для другого использования нужна лицензия от William Cook.
- LKH и LKH-3 (Keld Helsgaun): метод Lin–Kernighan–Helsgaun для поиска коротких маршрутов, не всегда самых коротких. LKH также напрямую решает задачи о гамильтоновом цикле. Только для академического и некоммерческого использования. Автор оставляет за собой все права.
Универсальные решатели для ограничений и целочисленного программирования
- RoundingSat (Jan Elffers, Jakob Nordström и другие): псевдобулев решатель, который читает файлы OPB. MIT. Описан в работе: Jan Elffers and Jakob Nordström, "Divide and conquer: towards faster pseudo-Boolean solving", Proceedings of the Twenty-Seventh International Joint Conference on Artificial Intelligence (IJCAI-18), 2018, pp. 1291–1299, doi:10.24963/ijcai.2018/180.
- OR-Tools CP-SAT (Google; исходный код). Apache 2.0.
- SCIP (исходный код): целочисленное программирование с ограничениями; читает файлы OPB. Apache 2.0.
- HiGHS (исходный код): линейное и смешанное целочисленное программирование. MIT.
Что ещё почитать
- Lance Fortnow, "The status of the P versus NP problem", Communications of the ACM 52(9), 2009, pp. 78–86. doi:10.1145/1562164.1562186
- Scott Aaronson, "NP-complete problems and physical reality", ACM SIGACT News 36(1), 2005, pp. 30–52. doi:10.1145/1052796.1052804, arXiv:quant-ph/0502072 Могут ли физические системы (квантовые компьютеры, аналоговые устройства и другие) эффективно решать NP-полные задачи.
- Lance Fortnow, The Golden Ticket: P, NP, and the Search for the Impossible, Princeton University Press, 2013. ISBN 978-0-691-15649-1. Для широкого круга читателей.
- William J. Cook, In Pursuit of the Traveling Salesman: Mathematics at the Limits of Computation, Princeton University Press, 2012. ISBN 978-0-691-15270-7.
- Cristopher Moore and Stephan Mertens, The Nature of Computation, Oxford University Press, 2011. doi:10.1093/acprof:oso/9780199233212.001.0001 Широкий охват, читается легко. См. сайт книги.
- Avi Wigderson, Mathematics and Computation, Princeton University Press, 2019. doi:10.2307/j.ctvckq7xb Автор выложил окончательный черновик для личного изучения.