- 1、本文档共8页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
肖寒
Jonah.X.Bookman
163.com
Tsinghua University FIT 503
论题:全排列生成算法
论点其先,给出了全排列生成问题的定义、我们需要解决的全排列相关的问
题和一些必须的引理。
论点第一,给出一种朴素的全排列方法和证明,和这种方法的生成序数计算
函数与排列模式计算函数。
论点第二,给出了一种保持前缀的全排列方法和证明,和这种方法的生成序
数计算函数与排列模式计算函数。
论点第三,通过对完备全排列生成算法进行分析,得到了依据依据序数映射建立相关的
全排列算法的表示和转换,建立了所有的完备全排列算法的生成理论,给出了全排列算法的
自构成性质,也就是说任何一种全排列算法都可以由另一个序列({0...n!-1})的全排列表示。
当然我们设计和使用新的全排列算法并不需要依据这种自构成性质编程,只需要根据序数映
射的理论来编程即可。
论点第四,是在前面讨论的基础上,给出了一些有用的映射完成一些排列算
法的改造和生成。并且提出了找到我们需要的排列算法的若干种可行方案。
论点其先:问题的定义和我们要回答的问题。
我们的问题是针对一个字符集进行全排列,为了方便陈述且不失一般性,假
设为正整数 1 到N 的有限集合{1,2 ,3...N}记为A(1,N)进行排列;我们的问题
有三个:
1.如何生成这个有限集合上的所有全排列形式。给出一种完备的算法。
2.针对这种算法:某个排列处于这个算法的生成序数。
3.针对这种算法:在这种算法中某个生成序数是哪种排列。
全排列算法的完备性既是算法的合法性,可以理解为算法不遗漏任何一种全
排列,不重复任何一种全排列。
引理 1:A(1 ,N) 的全排列的总数是N !
证明:
使用乘法法则,在第一个位置上有N 种选择,第二个位置上有N-1 种选
择,依次类推:根据组合计数原理,我们得到 A(1,N) 的全排列的总数为
N*(N-1)*...1 = N!
■证毕
引理 2:如果某个全排列算法B ,对A(1 ,N)所生成的全排列数为 N!,且算
法 B 并不生成任何重复排列,那么这个算法既是合法的全排列算法,也是完备
的全排列算法。
证明:
既然算法B 不重复,那么如果他不是完备的,他一定遗漏了某种排列,
假如他遗漏了p 个排列,那么A(1 ,N)总的排列数为N! + p ,而通过引理1,
我么易知p = 0 。
算法不遗漏任何一种排列,也不重复任何一种排列,既算法完备。
■证毕
引理 3:全排列算法时间复杂度下界为O(N!)
证明:
如果全排列算法时间复杂度小于 O(N!) ,那么他所生成的排列一定少于
N! ,根据引理1,假设不成立,引理得证。
■证毕
论点其一:朴素形式的全排列生成算法。
分析第一:
假设,我们现在知道集合A(1,N-1)的全排列形式,我们只需要在A(1,N-1)其
上,加入第N 个元素即可完成全排列工作。对于任意排列P 属于A(1,N-1)的第Q
个排列;我们只需要将第N 个元素:(1)放置在P 的最前;(2)与P 中的任何元素
对调。
定理 1:朴素形式的全排列算法是完备的。
证明:
如下将使用数学归纳法证明此算法的完备性:
(1) 当N=1 时,此算法显然完
文档评论(0)