DEV//UNIT

Перестановки (backtracking)

Дерево выбора: n! порядков без повторов и пропусков.

время O(n!·n)память O(n)уровень: начальный
Что происходит сейчас0/0
Нажмите Play, чтобы запустить сценарий
TypeScript — активная строка подсвечена шагом
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 return
8 }
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 result
19}

Проблема

Дерево выбора: n! порядков без повторов и пропусков.

Что вы видите

Каждый уровень дерева — выбор следующего элемента; листья — готовые перестановки.

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

Выбираем элемент → рекурсия по остатку → откат. n! листьев, каждый посещён один раз. Тот же скелет генерирует подмножества и сочетания — брутфорс-основа переборных задач.

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

  1. 01

    Выбор

    Один элемент уходит в путь.

  2. 02

    Рекурсия

    Переставляем остаток.

  3. 03

    Откат

    Возвращаем элемент назад.

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

time
O(n!·n)
space
O(n)

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

Edge cases

  • Пустой вход

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

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

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

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

TSP-брутфорс

Полный перебор маршрутов для малых задач коммивояжёра.

Тестирование

Генерация всех порядков входов.

Классика

Перебор перестановок в шифрах.

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

Shorts

«Все 6 порядков трёх чисел — за одно дерево»

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

Shorts 9:16

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

Все 6 порядков трёх чисел — за одно дерево
Нажмите Play
Бит 1/6 · 0–2 с
Hook
script-setup.ru/algorithms/permutations