python
algorithm
全排列(Permutation)
排列 (Permutation)是将相异物件或符号根据确定的顺序重排。每个顺序都称作一个排列。
例如,从一到六的数字有720种排列,对应于由这些数字组成的所有不重复亦不阙漏的序列,例如4, 5, 6, 1, 2, 3 与1, 3, 5, 2, 4, 6。 – From Wikipedia
从 n n n个相异元素中取出 k k k个元素, k k k个元素的排列数量为:
P k n = n ! ( n − k ) ! {P_{k}^{n}={\frac {n!}{(n-k)!}}} Pkn=(n−k)!n!
其中 P P P意为Permutation(排列), ! ! !表示阶乘运算。全排列而取 k k k为 n n n,则结果为 n ! n! n!。
全排列生成算法
-
字典序法
字典序,就是将元素按照字典的顺序(a-z, 1-9)实际上是ASCII编码值进行排列。以字典的顺序作为比较的依据,可以比较出两个串的大小。
比如 “1” < “13”<“14”<“153”, 就是按每个数字位逐个比较的结果。对于一个串 “ 123456789 ” “123456789” “123456789”, 可以知道最小的串是 “ 123456789 ” “123456789” “123456789”,而最大的串 “ 987654321 ” “987654321” “987654321”。这样针对这个串以字典序法生成全排列生成全排列,就是依次生成
“ 123456789 ” − > “ 123456798 ” − > . . . . . . − > " 987654312 " − > " 987654321 " “123456789”->“123456798”->......->"987654312"->"987654321" “123456789”−>“12345