← O(n!) — факторіальна складність
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.*