python
algorithm
全排列(Permutation)
排列 (Permutation)是将相异物件或符号根据确定的顺序重排。每个顺序都称作一个排列。
例如,从一到六的数字有720种排列,对应于由这些数字组成的所有不重复亦不阙漏的序列,例如4, 5, 6, 1, 2, 3 与1, 3, 5, 2, 4, 6。 – From Wikipedia
从nnn个相异元素中取出 kkk个元素,kkk个元素的排列数量为:
Pkn=n!(n−k)! {P_{k}^{n}={\frac {n!}{(n-k)!}}} Pkn=(n−k)!n!
其中PPP意为Permutation(排列),!!!表示阶乘运算。全排列而取kkk为nnn,则结果为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”−>“123456798”−>......−>"98765431<