社区
数据结构与算法
帖子详情
请教生成所有排列的算法,大家谁能证明一下
ksharp2008
2008-04-09 07:39:10
就是离散数学及其应用里的那种按字典序生成排列,谁能证明一下啊。
具体描述是,对A1,A2,...AN 寻找第一个Aj<A(j+1) 和A(j+1)>A(j+2)>A(j+3)>....A(n).寻找J+1到N中最小的大于Aj的元素,然后交换后对A(j+1)....An按升序排序。
请教大侠一个证明
...全文
216
4
打赏
收藏
请教生成所有排列的算法,大家谁能证明一下
就是离散数学及其应用里的那种按字典序生成排列,谁能证明一下啊。 具体描述是,对A1,A2,...AN 寻找第一个AjA(j+2)>A(j+3)>....A(n).寻找J+1到N中最小的大于Aj的元素,然后交换后对A(j+1)....An按升序排序。 请教大侠一个证明
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
4 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
ksharp2008
2008-04-10
打赏
举报
回复
思维很紧密
ksharp2008
2008-04-10
打赏
举报
回复
又见大王,大王哪儿高就啊。真的很强啊
大王派我去巡山
2008-04-10
打赏
举报
回复
假设n个元素a(1)<a(2)<……<a(n),
最开始的序列一定是从a(1)a(2)……a(n)这个最小序列开始的(一定注意这一点,否则不能保证算法的正确性),
到最后一个序列也是最大的a(n)a(n-1)……a(2)a(1)结束。
按照你说的算法执行过程,任取中间两个相邻序列S[i]和S[i+1]
需要证明两点才能保证这个过程是升序排列同时有没有遗漏:
1.后面这个序列大于前面的相邻序列,即S[i+1]>S[i];
2.后面的这个序列S[i+1]是“刚刚好大于”S[i]的序列。换句话说,S[i+1]是所有大于S[i]的序列中最小的那个。
关于命题1:
和整数类似,我们把序列看成从左往右由高位到低位,高位上被换上了一个更大的数字,显然新序列更大一些。
关于命题2:
假设还存在一个序列S[k]使得S[i]<S[k]<S[i+1],由于S[i]和S[i+1]中的1~j-1位完全相同,
所以S[k]的前1~j-1位必定也是和S[i]中相同的,只需研究j~n这些低位数字就可以比较出三个序列的大小。
将S[i]中的第j位数字记作a[i,j],S[i+1]中的第j位数字记作a[i+1,j],S[k]中的第j位数字记作a[k,j],
由于1~j-1位完全相同,且S[i]<S[k]<S[i+1],显然有a[i,j]<=a[k,j]<=a[i+1,j]。
又因为a[i+1,j]是“J+1到N中最小的大于Aj的元素”,那显然只能有a[k,j]=a[i+1,j]。
于是比较S[k]与S[i+1]两个序列大小的问题,又转换成比较j+1~n这些低位数字的大小问题。
S[k]与S[i+1]前1~j位都相同,由于S[i+1]后面的元素全都升序排列,所以只能有S[i+1]<=S[k]。
这就得出了矛盾,因而前面的假设不可能成立,命题得证。
medie2005
2008-04-10
打赏
举报
回复
应该是很显然的事实啊,不需要证明吧。
实质上就是进位规则,只是我们平时用10进制用惯了,不太容易看出来而已。
数的进位规则:
1):找最低的可增大的位k,增加之。
2):将比k位低的位全清零。
比如:
0
99,显然,红色的0是最低的可增加的位,增加之,变为
1
99;然后,将十位和个位清零,得到了100.
#
算法
证明
#
证明
字典序全
排列
生成
算法
及实现
本文详细解析了一个用于
生成
字典序全
排列
的
算法
,并通过数学方法进行了有效性
证明
。文章分为四个步骤,逐步推导出如何从当前
排列
生成
下一个更大的字典序
排列
。
全
排列
生成
算法
:解析与
证明
本文介绍了全
排列
生成
算法
,重点讲解了字典序
算法
的原理和实现步骤,包括找到最大不变前缀、交换最小元素、翻转后缀等过程,并
证明
了
算法
的正确性。
字典序法
生成
全
排列
算法
的
证明
介绍了一种基于字典序的全
排列
算法
,该
算法
通过找到当前
排列
中的关键位置并进行相应的交换与反转操作来获得下一个
排列
。适用于需要
生成
所有可能
排列
的场景。
数据结构与算法
33,025
社区成员
35,336
社区内容
发帖
与我相关
我的任务
数据结构与算法
数据结构与算法相关内容讨论专区
复制链接
扫一扫
分享
社区描述
数据结构与算法相关内容讨论专区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章