DEV//UNIT

TSP: битовое DP (Held-Karp)

Коммивояжёр за 2ⁿ·n²: подмножества городов в битах маски.

время O(2ⁿ · n²)память O(2ⁿ · n)уровень: продвинутый
Что происходит сейчас0/0
Нажмите Play, чтобы запустить сценарий
TypeScript — активная строка подсвечена шагом
1function tspHeldKarp(dist: number[][]): number {
2 const n = dist.length
3 const FULL = 1 << n
4
5 // d[mask][i] = минимальный путь из 0, обошли mask, стоим в i
6 const d: number[][] = Array.from({ length: FULL }, () =>
7 new Array(n).fill(Infinity))
8 d[1][0] = 0 // только старт, mask = {0}
9
10 for (let mask = 1; mask < FULL; mask++) {
11 if (!(mask & 1)) continue
12 for (let last = 0; last < n; last++) {
13 if (!(mask & (1 << last))) continue
14 const cur = d[mask][last]!
15 if (cur === Infinity) continue
16 for (let next = 0; next < n; next++) {
17 if (mask & (1 << next)) continue
18 const nm = mask | (1 << next)
19 const cost = cur + dist[last]![next]!
20 if (cost < d[nm][next]!) d[nm][next]! = cost
21 }
22 }
23 }
24
25 let best = Infinity
26 for (let last = 1; last < n; last++) {
27 best = Math.min(best, d[FULL - 1]![last]! + dist[last]![0]!)
28 }
29 return best // O(2ⁿ·n²) вместо n!
30}

Проблема

Коммивояжёр за 2ⁿ·n²: подмножества городов в битах маски.

Что вы видите

d[mask][город] — кратчайший путь по mask с финишем в городе.

Как это работает

Экспонента вместо факториала: 20 городов за миллионы операций вместо 10¹⁸. Точная карта маршрутизации; больше 25 — только эвристики.

Пошаговый разбор

  1. 01

    Маска

    Посещённые в битах.

  2. 02

    Переход

    +город в маску.

  3. 03

    Замыкание

    Финал + возврат.

Complexity и ограничения

time
O(2ⁿ · n²)
space
O(2ⁿ · n)

Сложность см. в шапке страницы.

Edge cases

  • Пустой вход

    Корректная тривиальная обработка.

  • Вырожденный случай

    Минимум работы — сразу ответ.

Где встречается в реальности

Логистика

Точные маршруты ≤25 точек.

Печатные платы

Порядок сверловки.

DP-стандарт

Канон bitmask-DP.

Связанные алгоритмы

Shorts

«Точный TSP: 2ⁿ вместо n!»

Тот же сценарий StepSequence в вертикальной композиции — с safe zones и записью WebM ниже на странице.

Shorts 9:16

Вертикальная композиция строится той же последовательностью шагов, что и страница: safe zones отмечены пунктиром (там живёт UI платформ), биты сценария подсвечиваются по прогрессу. Кнопка записи сохраняет WebM — детерминированная StepSequence даёт воспроизводимый ролик без монтажа.

Точный TSP: 2ⁿ вместо n!
Нажмите Play
Бит 1/6 · 0–2 с
Hook
script-setup.ru/algorithms/tsp-bitmask