Перестановки (backtracking)
Дерево выбора: n! порядков без повторов и пропусков.
1function permutations<T>(items: T[]): T[][] {2 const result: T[][] = []3 4 function backtrack(current: T[], rest: T[]): void {5 if (rest.length === 0) {6 result.push([...current])7 return8 }9 for (let i = 0; i < rest.length; i++) {10 const next = rest[i]!11 current.push(next) // выбираем12 backtrack(current, rest.filter((_, j) => j !== i))13 current.pop() // откатываем14 }15 }16 17 backtrack([], items)18 return result19}Проблема
Дерево выбора: n! порядков без повторов и пропусков.
Что вы видите
Каждый уровень дерева — выбор следующего элемента; листья — готовые перестановки.
Как это работает
Выбираем элемент → рекурсия по остатку → откат. n! листьев, каждый посещён один раз. Тот же скелет генерирует подмножества и сочетания — брутфорс-основа переборных задач.
Пошаговый разбор
- 01
Выбор
Один элемент уходит в путь.
- 02
Рекурсия
Переставляем остаток.
- 03
Откат
Возвращаем элемент назад.
Complexity и ограничения
Сложность см. в шапке страницы.
Edge cases
- Пустой вход
Корректная тривиальная обработка.
- Вырожденный случай
Минимум работы — сразу ответ.
Где встречается в реальности
TSP-брутфорс
Полный перебор маршрутов для малых задач коммивояжёра.
Тестирование
Генерация всех порядков входов.
Классика
Перебор перестановок в шифрах.
Связанные алгоритмы
«Все 6 порядков трёх чисел — за одно дерево»
Тот же сценарий StepSequence в вертикальной композиции — с safe zones и записью WebM ниже на странице.
Shorts 9:16
Вертикальная композиция строится той же последовательностью шагов, что и страница: safe zones отмечены пунктиром (там живёт UI платформ), биты сценария подсвечиваются по прогрессу. Кнопка записи сохраняет WebM — детерминированная StepSequence даёт воспроизводимый ролик без монтажа.