next_permutation与prev_permutation

本文介绍了Python中的next_permutation和prev_permutation库函数,它们用于生成序列的全排列。这两个函数需配合排序使用,确保输入数组有序。通过算法分析,它们通过两两比较和交换元素实现全排列,并提及了DFS方法的等价应用。
摘要由CSDN通过智能技术生成

这两个库函数通常用于生成序列的全排列。 

next_permutation

如果当前排列已经达到最大字典序,比如下图中的4321,则函数返回false;

该函数第一个参数是区间的首地址,第二个参数为区间的尾地址的下一个地址,前闭后开。这样子的话,可以对指点区间进行全排列。

code:

结合sort使用: 

但是如果给定数组的字典序是乱的,直接用的话就不能得到完整的全排列。 

code:

所以要先给数组排序,确保数组为升序,通常要结合sort一起用。

code:

算法思路: 

该函数所利用的算法思路:从最右边开始,两两比较相邻的元素,直到找到右边比左边大的一对,左边那个就是将要被替换的,再从最右边开始找比这个元素大的第一个,交换他们两个;

交换之后,翻转交换元素的后面的所有元素;

例如:1 3 4 6 5 2=>1 3 5 6 4 2=>1 3 5 2 4 6

dfs的等效替代:

通常我们也可以利用dfs(深度优先搜索)的方式写列出全排列来达到同等的效果。

code:

prev_permutation

prev_permutation跟next_permutation相反,由原排列得到字典序中上一个最近排列。当调用排列已经到达最小字典序,则函数返回false;

结合sort使用:

如果给定的数组不是按降序排列,如果直接用prev_permutation的话,那么就会漏掉一些情况。

code:

如果数组字典序不是降序,那么就要先对数组进行排序,通常也是用sort;

code:

其他的跟next_permutation相反,就不一一描述了。

  • 16
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 11
    评论
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值