全排列的几种实现

1. 简单插入法

简单插入法原理比较简单,但是当队列中有重复元素时,简单插入法则无法输出正确结果(除非是对结果进行重复排列过滤)。其原理如下:

假设元素列表为{ A 1 {A_1} A1, A 2 {A_2} A2, A 3 {A_3} A3,…, A n {A_n} An},首先取出 A 1 {A_1} A1,当前排列结果 P e r m Perm Perm为空则直接插入 A 1 {A_1} A1,此时全排列结果记为 P e r m 1 {Perm_1} Perm1;其次取出元素 A 2 {A_2} A2, A 3 {A_3} A3,…, A n {A_n} An 并完成下面运算:

当第 i + 1 i+1 i+1次取出元素为 A i + 1 {A_{i+1}} Ai+1时, P e r m i {Perm_i} Permi中的一个排列结果已经插入了 i i i项元素,记其中一个排列为{ B 1 {B_1} B1, B 2 {B_2} B2, B 3 {B_3} B3,…, B i {B_i} Bi},对{ B 1 {B_1} B1, B 2 {B_2} B2, B 3 {B_3} B3,…, B i {B_i} Bi}的 i i i个元素形成的 i + 1 i+1 i+1个空位,每个空位插入元素 A i + 1 {A_{i+1}} Ai+1可以形成 i + 1 i+1 i+1个新排列即:
{ A i + 1 , B 1 , B 2 , B 3 , . . . , B i −

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值