O(n!) — факторіальна складність

← O(n!) — факторіальна складність

Ashterix

docs: English JsonRpcBundle docs, REST and MCP Bundle sections, package cards

uk/articles/from-tg/series/algorithm-complexity/o-n-factorial.md новий файл +39 −0

1 + # O(n!) — факторіальна складність
2 +
3 + Це — вершина обчислювального кошмару. Факторіальна складність означає, що кількість операцій зростає як добуток усіх цілих чисел до n. Для n = 10 — це вже 3 628 800 варіантів. І так, усе це треба обробити.
4 +
5 + ```text
6 + 10! = 10 × 9 × 8 × 7 × 6 × 5 × 4 × 3 × 2 × 1 = 3 628 800
7 + ```
8 +
9 + ## Приклад: генерація всіх можливих перестановок елементів
10 +
11 + ```php
12 + function permutations(array $items): array {
13 + if (count($items) <= 1) return [$items];
14 +
15 + $result = [];
16 + foreach ($items as $key => $item) {
17 + $remaining = $items;
18 + unset($remaining[$key]);
19 + foreach (permutations(array_values($remaining)) as $perm) {
20 + $result[] = array_merge([$item], $perm);
21 + }
22 + }
23 + return $result;
24 + }
25 + ```
26 +
27 + Цей код генерує всі можливі перестановки елементів масиву. І якщо їх 8 — то вже 40 320 варіантів. Це може виглядати невинно, поки не впаде прод у Black Friday.
28 +
29 + :::tip
30 + Факторіальна складність — це завжди крайній захід. Якщо задача передбачає перебір усіх варіантів, спершу шукайте апроксимацію, жадібний алгоритм або евристику.
31 + :::
32 +
33 + На цьому серія завершується.
34 +
35 + ← [Попередня: O(2ⁿ) — експоненціальна складність](/articles/from-tg/series/algorithm-complexity/o-2n) · [Уся серія](/articles/from-tg/series/algorithm-complexity)
36 +
37 + ---
38 +
39 + *Вперше опубліковано в Telegram-каналі [«Створений щоб помирати»](https://t.me/php_while_true/51) 27.06.2025.*