ЛАБ-214образовательнаяNP-полныеревизия 2026-05-09

Лаборатория комбинаторной оптимизации

Интерактивная лаборатория двух классических задач: 0/1 Knapsack (задача о рюкзаке, DP за O(n·W)) и Travelling Salesman Problem (TSP, Held–Karp DP за O(n²·2ⁿ) + Nearest Neighbor эвристика). Визуализация городов на плоскости, сравнение точного и приближённого решений.

⏱ ~1 сек на расчёт · 2 задачи · точное + эвристика
Лаборатория · ЛАБ-214|образовательная
calcal.ru / laboratoriya-kombinatornoj-optimizatsii
Загрузка лаборатории…
2
Задачи
O(n·W)
Knapsack DP
O(n²·2ⁿ)
TSP Held-Karp
~25%
Ошибка NN

Зачем эти задачи

Две задачи — рюкзак и коммивояжёр — это «hello world» комбинаторной оптимизации. Они появляются как отдельные задачи и как подзадачи в множестве реальных приложений: логистика, планирование, инвестиции, маршрутизация. Понимание их алгоритмов помогает строить решения для целых классов задач.

0/1 Knapsack — задача о рюкзаке

Постановка: дан набор предметов, каждый с весом w и ценностью v; рюкзак вместимостью W. Выбрать подмножество предметов с максимальной суммарной ценностью при ограничении суммарного веса ≤ W. Каждый предмет можно взять или не взять (0/1) — отличие от Fractional Knapsack, где можно брать дроби.

Решение через динамическое программирование: dp[i][w] = максимальная ценность из первых i предметов при доступной вместимости w. Переход: либо не берём i-й предмет (dp[i-1][w]), либо берём (dp[i-1][w-w_i] + v_i). Сложность O(n·W). Восстановление взятых предметов — обратным проходом.

Задача коммивояжёра (TSP)

Постановка: дано множество городов и расстояния между ними. Найти кратчайший маршрут, посещающий каждый город ровно один раз и возвращающийся в исходный.

В лаборатории два решателя:

  • Held–Karp DP (1962) — точное решение через bitmask DP. dp[mask][v] = мин. стоимость покрыть города из mask, оканчиваясь в v. Сложность O(n²·2ⁿ). Для n=15 — около 30 миллионов состояний.
  • Nearest Neighbor — простая эвристика: всегда идти в ближайший непосещённый город. Сложность O(n²). Среднее отклонение от оптимума — около 25%.

NP-полнота — почему сложно

Обе задачи NP-полные. Для n городов TSP имеет (n-1)!/2 различных маршрутов — для 20 городов это уже 60 квадриллионов. Перебор невозможен. Best современный алгоритм для точного TSP — гибрид DP и Branch-and-Bound. Для практических задач (1000+ городов) используются эвристики: Lin-Kernighan, симуляция отжига, генетика, муравьиные алгоритмы.

Тем не менее малые экземпляры (до 50 городов) решаются точно за разумное время современными ILP-солверами (Gurobi, CPLEX) с использованием cutting planes. Кейсы с десятками тысяч городов — через приближённые решения с гарантированными границами (PTAS).

Реальные применения

  • Логистика: Яндекс Доставка, СДЭК, Boxberry — оптимизация маршрутов курьеров.
  • Производство: сверление плат, обработка деталей, сборка.
  • Планирование путешествий: tour planners.
  • Инвестиции: выбор активов в портфеле при ограниченном капитале (Knapsack).
  • Распределение ресурсов: upload/download throttling, кэши, очереди.
  • Расписания: авиационные маршруты, школьные расписания (NP-полно).
ИСТОЧНИКИ
  1. Introduction to Algorithms (CLRS), 4th ed.. Cormen, Leiserson, Rivest, Stein. MIT Press. 2022.
  2. A Dynamic Programming Approach to Sequencing Problems. Held, Karp. SIAM J. Appl. Math.. 1962.
  3. An Analysis of Several Heuristics for the Traveling Salesman Problem. Rosenkrantz, Stearns, Lewis II. SIAM J. Computing. 1977.
  4. Combinatorial Optimization: Algorithms and Complexity. Papadimitriou, Steiglitz. Dover. 1998.
ЧАСТЫЕ ВОПРОСЫ

Часто задаваемые вопросы

Задача класса NP-полных — это задача, для которой не известно алгоритма с полиномиальной сложностью (P), но решение можно проверить за полиномиальное время. Если бы был быстрый алгоритм для одной NP-полной задачи, он бы существовал и для всех остальных (P = NP, миллионная задача из списка Millennium Problems). Большинство практических задач оптимизации — NP-полные: TSP, рюкзак, графовая раскраска, SAT, расписания. Поэтому используются эвристики и приближённые алгоритмы.
Задача 0/1 Knapsack — слабо NP-полная (псевдополиномиальная). Алгоритм динамического программирования O(n·W), где W — вместимость, кажется полиномиальным. Но! W в общем случае имеет log(W) бит — то есть «полиномиально по значению, но экспоненциально по размеру входа». Для очень больших W (миллиарды) DP не работает. Реальные системы используют гибрид: DP для малых W, ветвление и границы (B&B) для больших, FPTAS-аппроксимации с гарантированной точностью.
Алгоритм Held-Karp (1962) использует bitmask DP: dp[mask][v] = минимальная стоимость пройти все города в mask, оканчиваясь в v. Базовый случай: dp[{0}][0] = 0. Переход: dp[mask | {v}][v] = min over u in mask: dp[mask][u] + dist(u, v). Сложность O(n²·2ⁿ). Для n=15 — около 14 миллиардов операций (на пределе ноутбука, в нашей лаборатории n≤12). Для большего количества городов нужны эвристики: Lin-Kernighan, симуляция отжига, генетика.
Алгоритм Nearest Neighbor работает за O(n²): на каждом шаге идём в ближайший непосещённый город. Простой и быстрый, но неоптимальный. Среднее отклонение от оптимума — около 25% (Rosenkrantz, Stearns, Lewis, 1977). В худшем случае может быть в log(n) раз хуже оптимума. Улучшение: 2-opt, 3-opt — переставлять рёбра парами/тройками. Lin-Kernighan — лучшая локальная эвристика, обычно даёт решения в пределах 2% от оптимума за разумное время.
TSP: маршрутизация транспорта (Логистические компании используют Lin-Kernighan), доставка курьерами (Яндекс Такси, СДЭК), производственные линии (порядок обработки деталей), планирование путешествий, сверление плат. Knapsack: распределение бюджета, инвестиционный портфель (если активы дискретные), upload/download throttling, ограничения памяти в кэшах. Эти задачи возникают каждый раз, когда нужно выбрать подмножество с ограничениями — а это везде.
Симплекс-метод (на calcal.ru есть отдельная лаборатория) решает задачи ЛИНЕЙНОГО программирования с непрерывными переменными — например, найти максимум линейной функции при линейных ограничениях. Симплекс работает за полиномиальное время в среднем. Здесь — комбинаторная (дискретная) оптимизация с целочисленными или булевыми переменными — в сущности другие алгоритмы. Линейное программирование — P. Целочисленное программирование (ILP, в т.ч. Knapsack и TSP) — NP-полное.
Лиана Арифметова
АВТОРverifiedред. calcal.ru

Лиана Арифметова

Создатель и главный редактор

Миссия: демократизировать сложные расчёты. Превратить страх перед числами в ясность и контроль. Девиз: «Любая повторяющаяся задача заслуживает своего калькулятора».

Mathematical Engineering · МФТИ · редактирует каталог с 2012 года

Был ли этот калькулятор полезен?

ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ

Инструмент справочный — не заменяет эксперта

Только для информационных целей. Все расчёты, результаты и данные, предоставляемые инструментом, носят исключительно ознакомительный и справочный характер. Они не являются профессиональной консультацией — медицинской, юридической, финансовой, инженерной или иной.

Точность результатов. Калькулятор основан на общепринятых формулах и методиках, однако фактические результаты могут отличаться в зависимости от индивидуальных условий, исходных данных и применяемых стандартов. Мы не гарантируем полноту, точность или актуальность приведённых расчётов.

Профессиональные решения — медицинские, финансовые, инженерные — должны приниматься только после консультации с квалифицированным специалистом. Не используйте автоматический расчёт как единственное основание для важных решений.

Ограничение ответственности. Авторы и разработчики сервиса не несут ответственности за прямой или косвенный ущерб, возникший из-за использования данных расчётов. Пользователь принимает на себя всю ответственность за интерпретацию результатов.

СМЕЖНЫЕ ИНСТРУМЕНТЫ

Похожие калькуляторы

15

Лаборатория теории игр (Нэш-равновесие)

Дилемма заключённого, ястреб-голубь, орлянка, координация, битва полов. Поиск чистых и смешанных равновесий Нэша.

/laboratoriya-teorii-igr-nash-ravnovesie

Лаборатория теории чисел (RSA, простота)

Тест Миллера–Рабина, расширенный алгоритм Евклида, обратное по модулю, демо RSA-шифрования. BigInt без ограничений.

/laboratoriya-teorii-chisel-rsa-ecdsa

Лаборатория квантовой механики (Шрёдингер 1D)

Численное решение стационарного уравнения Шрёдингера для 5 потенциалов: гармонический осциллятор, прямоугольная и двойная ямы, Морзе. Метод Numerov.

/laboratoriya-kvantovoj-mehaniki-shrodingera

Калькулятор тригонометрии

Вычисление sin, cos, tan, cot, sec, csc. Решение треугольников, радианы/градусы, тригонометрические уравнения.

/trigonometry-calculator

Калькулятор оптимизации: симплекс, рюкзак, генетика

Решение задач оптимизации: линейное программирование (симплекс-метод), задача о рюкзаке и генетические алгоритмы. Поиск минимума/максимума.

/optimization-calculator

Калькулятор дробей (смешанные и неправильные)

Конвертер дробей онлайн. Перевод смешанных чисел в неправильные дроби и наоборот с подробным решением.

/fraction-calculator

Калькулятор НОД и НОК

Быстрый расчет НОД и НОК для любых чисел. Разложение на простые множители (факторизация) онлайн.

/gcd-lcm-calculator

Калькулятор матриц

Вычисление определителя, обратной матрицы, ранга и собственных значений. Удобный интерфейс с решением.

/matrix-calculator

Калькулятор комбинаторики

Перестановки P(n), сочетания C(n,k), размещения A(n,k) и вариации с повторениями. Факториал, биномиальные коэффициенты.

/combinatorics-calculator

Калькулятор комплексных чисел

Сложение, вычитание, умножение, деление, модуль, аргумент, степень, корень комплексных чисел. Визуализация на плоскости.

/complex-number-calculator

Калькулятор производных и интегралов

Символьные и численные методы, пошаговые решения. Поддержка сложных функций и прикладных задач.

/derivative-integral-calculator

Калькулятор чисел Фибоначчи

Вычислите n-е число Фибоначчи, проверьте принадлежность числа ряду, найдите золотое сечение. Формула Бине.

/fibonacci-calculator

Калькулятор золотого сечения

Пропорции золотого сечения (phi = 1.618). Для дизайна, архитектуры, фотографии. Прямоугольник и спираль.

/golden-ratio-calculator

Калькулятор сумм рядов

Арифметическая и геометрическая прогрессии, степенные ряды, ряды Тейлора. N-й член, сходимость.

/series-sum-calculator

Калькулятор Монте-Карло симуляции: оценка рисков

Прогнозирование стоимости активов и оценка рисков методом Монте-Карло. Расчет распределения вероятностей, VaR и волатильности.

/monte-carlo-simulation