Python 非递归方法的全排列

本文介绍了Python中实现全排列的非递归算法——字典序法,并提供了详细的算法解释和代码示例,适用于对全排列有需求的场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

其中PPP意为Permutation(排列),!!!表示阶乘运算。全排列而取kkknnn,则结果为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>123456798>......>"98765431<

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值