博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
字典序算法
阅读量:6073 次
发布时间:2019-06-20

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

全排列的生成算法
 
对于给定的字符集,用有效的方法将所有可能的全排列无重复无遗漏地枚举出来。
 
字典序法
按照字典序求下一个排列的算法
 
/*
字符集
{1,2,3},
较小的数字较先
,
这样按字典序生成的全排列是
:123,132,213,231,312,321
注意
一个全排列可看做一个字符串,字符串可有前缀、后缀。
*/
生成给定全排列的下一个排列
所谓一个全排列的下一个排列就是这一个排列与下一个排列之间没有其他的排列。这就要求这一个排列与下一个排列有尽可能长的共同前缀,也即变化限制在尽可能短的后缀上。
/*
839647521
1
9
的排列。
1
9
的排列最前面的是
123456789
,最后面的是
987654321
,从右向左扫描若都是增的,就到了
987654321
,也就没有下一个了。否则找出第一次出现下降的位置。
算法: 由 P
1P
2…P
n 生成的下一个排列的算法如下:
1. 求 i=max{j| P
j-1<P
j}
2. 求
l=max{k| P
i-1<P
k }
3. 交换P
i-1 与P
l得到
P
1
P
2
P
i-1
(P i....Pn ) , 将红色部分顺序逆转,得到结果.
8396
4
7521
的下一个排列
1. 确定i,从左到右两两比较找出后一个数比前一个大的组合,在这里有39 47,然后i取这些组中最到的位置号(不是最大的数)在这两组数中7的位置号最大为6,所以i=6
2.确定
l, 找出在i(包括i)后面的所有比i前面那一位大的数的最大的位置号,在此例中7,5 都满足要求,则选5,5的位置号为7,所以
l=7
3. 先将4和5交换,然后将5后的四位数倒转得到结果
8396
5
7
4
21
à
8396
5
1247
 
详见:

转载地址:http://iwigx.baihongyu.com/

你可能感兴趣的文章
buffer和cache有什么本质区别
查看>>
dom的一些笔记
查看>>
Linux下查看/修改系统时区、时间
查看>>
C#使用HtmlAgilityPack快速爬虫
查看>>
Algs4-1.1.7分别给出以下代码段打印的值
查看>>
如何将数组初始化为全0?
查看>>
Python人工智能应用基于开源库
查看>>
java多线程编程模式
查看>>
ORACLE 11G导入数据报ORA-12154错误解析
查看>>
HTML标签
查看>>
Linux系统磁盘管理
查看>>
4.4 简单选择排序法
查看>>
hdu 2191 (多重背包+二进制优化)
查看>>
网络 基础 5
查看>>
再论一下in,exists,join
查看>>
Redis--初接触
查看>>
ethereum/EIPs-158 State clearing 被EIP-161取代
查看>>
np.mgrid的用法
查看>>
html 富文本编辑器相关--中文状态下输入@的问题
查看>>
在这里给大家安利一个好的免费的虚拟主机云服务器使用地址
查看>>