next_permutation

How to systematically generate all the permutations of a given sequence?

see http://en.wikipedia.org/wiki/Next_permutation

1, Find the largest index k such that a[k] < a[k + 1]. If no such index exists, the permutation is the last permutation.

2, Find the largest index l such that a[k] < a[l]. Since k+1 is such an index, l is well defined and satisfies k < l.

3, Swap a[k] with a[l].

4, Reverse the sequence from a[k+1] up to and including the last element a[n].

第一步以后,a[k]以后的是一个递减序列,已经是最大的了,再折腾也没用;

第二步,如果带上a[k],那么lexicographical order的下一个一定是以比a[k]大的一个数打头的,从后面找到刚好比a[k]大的那一个,假设是a[l];

第三步,将a[l]提到前面,与a[k]互换,这时候,a[k]后面的仍然是降序的。

第四步,把a[k]后面的逆转一下,从降序到升序,这样就得到了恰好比之前序列大一号的序列(打头的是刚好更大的那个,后面的是升序)。

  

posted @   qsort  阅读(1677)  评论(1编辑  收藏  举报
编辑推荐:
· Linux系统下SQL Server数据库镜像配置全流程详解
· 现代计算机视觉入门之:什么是视频
· 你所不知道的 C/C++ 宏知识
· 聊一聊 操作系统蓝屏 c0000102 的故障分析
· SQL Server 内存占用高分析
阅读排行:
· DeepSeek V3 两周使用总结
· 回顾我的软件开发经历(1)
· C#使用yield关键字提升迭代性能与效率
· 低成本高可用方案!Linux系统下SQL Server数据库镜像配置全流程详解
· 4. 使用sql查询excel内容
点击右上角即可分享
微信分享提示