[#] Как перебрать все перестановки и о факториальном разложении натуральных чисел
habrabot(difrex,1) — All
2017-01-17 09:30:04


Задачи о переборе всех возможных перестановок заданного множества сущностей возникают в программировании достаточно часто. Как известно из комбинаторики, число возможных перестановок n предметов равно попросту факториалу числа n

**n! = n \* (n — 1) \* (n – 2) \* … \* 3 \* 2 \* 1**

Факториал – достаточно быстро растущая функция, об этом говорит ее асимптотика (формула Стирлинга), хотя достаточно посмотреть на факториалы нескольких первых членов натурального ряда:

1! 1
2! 2
3! 6
4! 24
5! 120
6! 720
7! 5 040
8! 40 320
9! 362 880
10! 3 628 800
11! 39 916 800
12! 479 001 600
13! 6 227 020 800
14! 87 178 291 200
15! 1 307 674 368 000

Как видно, факториал 13-ти уже не умещается в тип данных long.

Если задаться целью найти однозначное соответствие между номером перестановки — числом в диапазоне от 1 до **n**! – и ее реализацией, можно натолкнуться на один очень интересный математический факт.
[Читать дальше →][1]

[1]: https://habrahabr.ru/post/319696/?utm_source=habrahabr&utm_medium=rss&utm_campaign=feed_posts#habracut