字典序算法产生全排列
来源:互联网 发布:其孰能讥之乎 其的意思 编辑:程序博客网 时间:2024/06/05 16:44
字典序法中,对于数字1、2、3......n的排列,不同排列的先后关系是从左到右逐个比较对应的数字的先后来决定的。
例如对于5个数字的排列12354和12345,排列12345在前,排列12354在后。
按照这样的规定,5个数字的所有的排列中最前面的是12345,最后面的是54321。
设P是1~n的一个全排列: p = p1p2 ..........................................pn = p1p2......pj-1pjpj+1......pk-1pkpk+1......pn
1)从排列的右端开始,找出第一个比右边数字小的数字的序号j(j从左端开始计算),即 j=max{i|pi<pi+1}
2)在pj的右边的数字中,找出所有比pj大的数中最小的数字pk,即 k=max{i|pi>pj}(右边的数从右至左是递增的,因此k是所有大于pj的数字中序号最大者)
3)对换pi,pk
4)再将pj+1......pk-1pkpk+1....pn倒转得到排列 p''=p1p2.....pj-1pjpn.....pk+1pkpk-1.....pj+1,这就是排列p的下一个下一个排列。
例如839647521是数字1~9的一个排列。从它生成下一个排列的步骤如下:
l自右至左找出排列中第一个比右边数字小的数字4 839647521
l在该数字后的数字中找出比4大的数中最小的一个5 839647521
l5与4交换 839657421
l将7421倒转 839651247
所以839647521的下一个排列是839651247。
注:本算法可以根据某个排列求出其下一个排列。稍作调整亦可求出前一个排列。算法的应用场合是求前后序列的问题。而不是求第n个排列的问题。
- 字典序算法产生全排列
- 字典序全排列算法
- 全排列算法的字典序排列
- 算法02:全排列字典序算法
- 字典序全排列生成算法
- 全排列算法之字典序法
- 字典序法生成全排列算法
- 全排列算法(字典序,递归实现)
- 字典序全排列算法研究
- 全排列生成算法之字典序
- 字典序法算法(全排列, Java)
- 全排列字典序生成算法
- 按字典序算法全排列
- 【算法题】全排列,字典序
- 算法练习 - 字符串的全排列(字典序排列)
- 全排列 字典序排列
- 字典序全排列
- 字典序全排列
- C++知识要点整理09:运算符重载
- T-SQL语言(一)
- T-SQL语言(二)
- C++知识要点整理10:类型转换
- 在Ubuntu下安装lispbox-0.7的一个error
- 字典序算法产生全排列
- POJ 3974 Palindrome ( Largest Palindrome substring )
- C#基本语法
- globalalloc、malloc和new的区别
- 有关结构体的一些东西(自己总结的书上的)1
- Ubuntu12.04/12.10的一个讨厌的bug:弹出窗口system problem detected.谁能解决?
- UML类图符号 各种关系说明以及举例
- 简单选择排序
- Android TextView中的文字自动生成链接