博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
算法复习-生成全排列
阅读量:5260 次
发布时间:2019-06-14

本文共 576 字,大约阅读时间需要 1 分钟。

  • 对于排列a[1...n],找到所有满足a[k]<a[k+1](0<k<n-1)的k的最大值,如果这样的k不存在,则说明当前排列已经是a的所有排列中字典序最大者,所有排列输出完毕。
  • 在a[k+1...n]中,寻找满足这样条件的元素l,使得在所有a[l]>a[k]的元素中,a[l]取得最小值。也就是说a[l]>a[k],但是小于所有其他大于a[k]的元素。
  • 交换a[l]与a[k].
  • 对于a[k+1...n],反转该区间内元素的顺序。也就是说a[k+1]与a[n]交换,a[k+2]与a[n-1]交换,……,这样就得到了a[1...n]在字典序中的下一个排列。

这里我们以排列a[1...8]=13876542为例,来解释一下上述算法。首先我们发现,1(38)76542,括号位置是第一处满足a[k]<a[k+1]的位置,此时k=2。所以我们在a[3...8]的区间内寻找比a[2]=3大的最小元素,找到a[7]=4满足条件,交换a[2]和a[7]得到新排列14876532,对于此排列的3~8区间,反转该区间的元素,将a[3]-a[8],a[4]-a[7],a[5]-a[6]分别交换,就得到了13876542字典序的下一个元素14235678。

转载于:https://www.cnblogs.com/mdumpling/p/8194731.html

你可能感兴趣的文章
linux下的C语言开发(定时器)
查看>>
VLC 定义的颜色格式
查看>>
[支配树] Bzoj P2815 灾难
查看>>
Linux 共享内存使用
查看>>
ATL 获取flash信息
查看>>
Python多线程-Event(事件对象)
查看>>
js学习笔记一
查看>>
h5仿转转banner轮播效果
查看>>
node解析查询字符串
查看>>
Mad Libs
查看>>
Deepin Linux下的Metasploit安装及优化
查看>>
[jzoj 6101] [GDOI2019模拟2019.4.2] Path 解题报告 (期望)
查看>>
Mac远程本地文件管理工具
查看>>
鸣铃之契® 用户协议
查看>>
练习一
查看>>
Spring的配置文件applicationContext.xml
查看>>
HackerRank - "Building a Smart IDE: Identifying comments"
查看>>
mat类的使用总结
查看>>
20165204 我所期望的师生关系
查看>>
Unique Paths Leetcode
查看>>