Python 非递归方法的全排列

本文介绍了Python中实现全排列的非递归算法——字典序法,并提供了详细的算法解释和代码示例,适用于对全排列有需求的场景。
摘要由CSDN通过智能技术生成

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=(nk)!n!

其中 P P P意为Permutation(排列), ! ! !表示阶乘运算。全排列而取 k k k n n n,则结果为 n ! n! n!

全排列生成算法

  1. 字典序法

    字典序,就是将元素按照字典的顺序(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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值