1、厦门大学本科毕业论文1本科毕业论文(科研训练、毕业设计)题 目:多重集的全排列算法研究姓 名:学 院:软件学院系:专 业:软件工程年 级: 学 号:指导教师(校内): 职称: 年 月厦门大学本科毕业论文2多重集全排列算法研究摘要 排列产生算法的研究在计算机发明之前已被人们所研究,其历史甚至可以追溯到三百年之久。本文提出一种新的全排列产生算法 TWDRI。该算法能同时解决一般的无重复输入的单集问题和重复输入的多重集(multiset)问题。TWDRI 突破了以往只有采用换位思想才能达到最快速度的传统思想的束缚,以自身独特的数据结构设计为基石,充分利用递归方式的优势,取得远优于其他同类算法的速度和
2、内存损耗。此外,不同于大多数排列产生算法只能处理数值的特性,本算法适用于各种不同字符的输入情况,具有通用性。为了能客观评价现有各种排列算法的性能,本文提出了一种新的性能计算模型,可以精确的测出各类算法的平均运行时间。在此基础上,我们进行了大量的模拟,测试了从 10 位到 17 位的输入情况,与已知最快和最近的算法进行比较 12345678910,TWDRI 的速度处于领先水平。关键词 多重集 全排列 算法厦门大学本科毕业论文3A Research into Multiset Permutation Algorithm Abstract TWDRI algorithm, the fastest
3、new permutation technique for multiset permutations was proposed in this paper. A multiset is a set for which repeated elements are considered. We consider any character string of length N as a multiset, which has k different characters, each has count n0, n1, , nk-1, respectively. Clearly, N = n0 +
4、 n1 + nk-1. For the input string, the multiset permutation generates all possible permutations without redundancy. When N=k, it is a pure permutation since n0 = n1 = nk-1 = 1. In general, we randomly input a character string with length N to generate its multiset permutation. We evaluate our permuta
5、tion time and memory consumption by simulating strings with length N = 10, 11, 12, 13, 14, 15, 16, and 17, respectively. We calculate average multiset permutation time for all possible N N inputs with each fixed length N above. We compare our results with the eleven fastest known and/or well-known a
6、lgorithms 12345678910 in detail. The comparisons show our algorithm is three times faster than the fastest of them for multiset permutations and 1.3 times faster than the fastest of them for pure permutations. Our memory consumption is under 800Kb, which is very low for todays computers. We also int
7、roduce an evaluation method to calculate the average time of multiset permutations for all possible N N inputs with each fixed length N.Key words Multiset Permutation Algoirthm厦门大学本科毕业论文4目录第一章 引言 .5第二章 研究背景 62.1 问题定义 62.2 主要算法 62.2.1 字典序算法 .62.2.2 Heap 算法 72.2.3 Ives 算法 82.2.4 Johnson and Trotter 算法
8、 102.2.5 Constant Time 算法 122.3 应用 .13第三章 TWDRI.143.1 算法流程图 .143.2 算法思想 .143.3 例子 .153.4 时间复杂度分析 .15第四章 测试模型 18第五章 测试结果 205.1 TWDRI 算法和其它单集排列算法的速度和内存比较 205.2 多重集算法的时间和内存开销比较 .215.3 多重集算法在非重复输入的情况下的时间和内存开销比较 .225.4 TWDRI 算法与其它多重集排列算法的比较趋势分析 .23第六章 结论 .25致谢语 26参考文 献 27厦门大学本科毕业论文5ContentsChapter 1 Intr
9、oduction .5Chapter 2 Background 62.1 Definition62.2 Classic algorithms.62.2.1 Lexicographic Algorithm .62.2.2 Heap Algorithm72.2.3 Ives Algorithm .82.2.4 Johnson and Trotter Algorithm 102.2.5 Constant Time Algorithm 122.3 Implementation.13Chapter 3 TWDRI.143.1 Main Flowchart.143.2 Main Idea143.3 Exa
10、mple 153.4 Time Complexity Analysis.15Chapter 4 Testing Model 18Chapter 5 Test Result 205.1 Pureset Permutation Algorithms Comparisions .205.2 Multiset Permutation Algorithms Comparisions 215.3 Multiset Permutation Algorithms Comparisions with Distinct Inputs .225.4 Trends Analysis 23Chapter 6 Concl
11、usion.25Acknowledgements26References .27厦门大学本科毕业论文6第一章 引言万花筒般美丽繁华的万千世界之所以异彩纷呈,并不因其本质有何等的错综复杂。洗尽铅华后,人们发现纷繁的背后往往只是些看似平凡无奇的事物的排列组合,就好像简单几个小纸片和小镜片的巧妙搭配就能焕发出万花筒炫目的五光十色。在科学界,排列组合问题更是与科学家们如影相伴。爱迪生经过两千多次的各种材料的排列组合才找到发明电灯的方案;袁隆平也是经历了无数次的组合排列实验才找到了优质的杂交水稻。排列组合广泛的应用范围和重大的科学意义促成了研究者们数百年来孜孜不倦的追索和探求 1234567891011
12、1213141516171819202122232425262728293031323334353637383940414243444546474849505152535455。溯其根源,可以回到那遥远的十六世纪五十年代,教堂中的牧师计算几口大钟不同的撞击顺序来产生各式的音乐效果。早在 1960 年就有这一领域算法的总结性文章出现 13。Robert Sedgewick 在 1977 年对众多排列产生方法中的经典算法做了分析和比较 3,具有代表性的有 M. B. Wells 在 1960 年发表的 Recursive methods15,1965 年 J. Boothroyd 对其进行了改进
13、2628;1962 年 S. M. Johnson21和 H. F. Trotter20分别独立提出的 Adjacent exchanges 是一重大突破; Factorial counting 算法是 Johnson-Trotter 算法的另一种实现;同样是在Johnson-Trotter 算法的基础上 G. Ehrlich3334引进了减少内部循环的思想得到 “Loopless” algorithm,这一算法被 N. Dershowitz 进一步的优化;其它还有 F. M. Ives 的 iterative method 2; C. Tompkins 和 L. J. Paige 的 Nes
14、ted cycling12, Peck 和 Schrack 给出了这一算法的ALGOL 程序 17,还有许多研究人员对这一算法进行改进 13142432363739;比较有影响的算法还有 Lexicographic algorithms1116181922252930与 Random permutations1323242731。以上这些算法仅能解决无重复输入的问题。多重集(multiset)输入是一个相对较难的问题,不少研究者一直在寻求一个高性能的算法 45384054。在求解多重集排列问题时传统算法为防止重复输出而保存大量纪录信息,许多研究人员投入经历简化纪录信息的保存和判断验证过程,也产
15、生了许多精妙的算法。但这些算法都始终没有突破通过保存和判断信息来防止重复输出的思维枷锁。厦门大学本科毕业论文7第二章 研究背景2.1 问题定义定义 1 (单集) 对于一个长度为 N 的字符串来说,如果它有 k 个不同的字符,每个字符重复出现的次数均为 1,即 N=k, 我们称这样的输入为单集,其排列称为单集全排列。定义 2 (多重集) 对于一个长度为 N 的字符串来说,如果它有 k 个不同的字符,每个字符重复出现的次数分别为:n 0, n1, , nk-1(这些数不全为 1) 。我们称这样的输入为多重集, 它们的全排列问题也因此被称为多重集全排列问题。定理 1 (多重集长度特性) 对于一个长度
16、为 N 的多重集,它有 k 个不同的字符,每个字符重复出现的次数分别为:n 0, n1, , nk-1。N = n0 + n1 + nk-1。2.2 主要算法单集全排列问题在 1977 年 Sedgewick 的综述性论文 3后几乎很难有重大的突破,最为人们所熟知的字典序法,最优秀最经典的是迭代算法 Ives2。在递归算法领域中则以Heap1一支独秀。另外一篇具有奠基意义的是 Johnson and Trotter2021算法,曾引发了一场研究 Loopless 算法的热潮 9103346485154。相比单集,多重集的研究则有更大的发展空间。Constant Time 4算法是这方面的代表。
17、2.2.1字典序算法字典序是排列算法中最经典的算法,在各种排列场合下被广泛引用。字典序排列算法的优点是简单易懂,规律性强。但要实现从一个排列得到它的下一个排列通常需要较多的操作。以集合A、B、C为例,按字典序生成的全排列是:ABC,ACB,BAC,CAB,CBA。字典序法就是预先定义需要排列的 k 个元素的次序 n1,n2.nink。给出两个排列 P1 和 P2,如果P1 和 P2 的前 i1 个元素都相同,P 1 的第 i 个元素为 na,P 2 的第 i 个元素为 nb,a 2: i:=i-1 repeat;process;loopif ci 1;DoIF ci 1i = N; x = 0
18、;While ci = = i IF di = = false THEN x = x + 1; ENDIF厦门大学本科毕业论文12IF di = = true THEN di = false; ELSE di = true; ENDIFEND WhileIF di = = true THEN k = ci + x; ELSE k = i ci + x;ENDIFtem = Pk; Pk = Pk+1; Pk+1 = tem; ci = ci + 1; OutputPerm;END While2.2.5 Constant Time算法Constant Time4能产生多重集的全排列。算法思想是从
19、当前一个排列到下一个排列产生所需要的时间是常数。我们以多重集11223444为例,来说明其是如何产生多重集的全排列。图 2-6 1,1,2,2,3,4,4,4在 Constant Time 算法下的全排列首先,11223444 中最大的数 4 被看作是 1,其余的数均看作 0,则多重集变为00000111,此时可以借鉴 “优先移动最大数”思想,将 1 向左移动,当第一个 1 向左移动以后,产生排列 00001011,此时借鉴 “相同元素尽量靠拢”的思想,将第二个 1 向左移动,直到所有的 1 都靠拢到最左端,产生 11100000 排列,也即第(56)个排列:44411223。在这个过程中,0
20、 之间的相对位置保持不变,也即 11223 之间的相对位置保持不变。此时,我们再把集合中次大的元素 3 向左移动一个位置,得到排列 44411232,然后再将最大元素 4 看作 1,其它元素看作 0,得到 11100000。再将这几个 1 依照“相同元素尽量靠拢”的思想向右移动,直至移动到最右端 00000111,即得到第(112)个排列:厦门大学本科毕业论文1311232444。余下的排列过程和以上过程类似,这里就不再一一阐述。总之,Constant Time 算法运用“优先移动最大数”思想;同时把集合中最大数看作 1,其它数都看作 0,使之成为可以处理多重集全排列的执行效率很高的一种算法。
21、经过模拟我们证明了它的速度虽然不及TWDRI 算法,但与其它几种产生多重集排列的算法相比较仍不失为一种效率很高的算法。因此在本文中对其应该加以介绍。2.3 应用扑克牌的洗牌就是一个对 54 张不同的牌进行排列的过程。当今最前沿的 DNA 计算机中也有多重集排列的应用,Leonard M. Adelman 在解决“旅行售货员问题(Traveling Salesman Problem)”时,对城市编码的映射空间便是由四个碱基 ATCG 的组合排列构成 58。在密码学中排列有着更为广泛的应用。例如,当明文空间 P 等于密文空间 C 时,那么加密函数 E 就是集合 P 上的一个置换。也就是说,当明文空
22、间等于密文空间时,则每个加密函数仅仅是对明文空间的元素的一个重新排列(置换) 59。密码的破译中需要进行大量的组合排列工作。厦门大学本科毕业论文14第三章 TWDRI3.1 算法流程图图 3-1 TWDRI 算法主要流程图3.2 算法思想判断输入字符串总的字符个数 N 是否等于字符串中不同字符的个数 k。若相等则表明字符串中每个字符重复出现的次数均为 1 次,调用 Purepermutation (N-1,0) 这一函数;若不相等则表明字符串中有重复出现多次的字符,即是多重集,我们调用MultisetPermutation (N-1,0)。在调用 MultisetPermutation (N-
23、1,0)函数的过程中,我们也要随时检查总的字符个数 N 是否等于字符串中不同字符的个数 k,若相等则调用厦门大学本科毕业论文15Purepermutation (N-1,0),是一个嵌套调用的过程。3.3 例子算法的具体过程是一个深度优先遍历的过程,以下是对于输入1,2,3,3 采用TWDRI 算法深度优先遍历产生全排列的过程。12 3132101191411321333433 17 956833121323161523171812321132223242012 32826327229253233131302 13432图 3-2 1、2、3、3 的全排列产生过程3.4 时间复杂度分析排列问题
24、的一个特点就是输出规模受输入规模的影响极大。我们假设计算机进行一次运算就能给出一个排列(实际的算法不可能做到这点)。对于一台运算速度为百万次每秒的计算机,给出 10 个元素的集合的所有 10!= 3,628,800 个排列只需几秒钟的时间,而给出 18 个元素的集合的所有 18!= 6,402,373,705,728,000 个排列则需要几年。就算是当前最快的计算机,其运算速度达到万亿次每秒,要计算出大于 20 个元素的集合的所有排列在时间上也显得不太可能。在科学研究中确实可能遇到较大规模的排列需求,除了配置高性能的计算机外找到一个高性能的排列算法就显得非常必要。厦门大学本科毕业论文16表 3
25、-1 不同性能计算机在各种输入规模下进行排列所需时间N 排列的个数 百万/秒 十亿/秒 万亿/秒10 362880011 39916800 几秒12 479001600 几分钟13 6227020800 几小时 几秒14 87178291200 天 分钟15 1307674368000 几周 几分钟16 20922789888000 几个月 几小时 几秒17 355687428096000 几年 几天 几分钟18 6402373705728000 几个月 几小时19 121645100408832000 几年 几天20 2432902008176640000 月算法的计算时间 T(n)满足:(
26、3-1)123()(3)()nTCn输入规模为 n3 的问题可由 n 个输入规模为 n-1 的子问题构成。 是对子问题12Cn结果进行分解和合并的花费,其中 、 为常数。当 n=3 求解问题的花费为 , 为常1C2 3数。. . .12()Cn12()Cn12()n3. . . . . . . . . . .n b r a n c h e sn - 1 b r a n c h e s n - 1 b r a n c h e sn - 1 b r a n c h e s (1)4n(1)n.124124124. . . . . . . .3 3C54 b r a n c h e s 4 b r
27、a n c h e s4 b r a n c h e s图 3-3 的递归树2T从树的根结点开始,根有 n 个分支,第二层的每个节点有 n-1 个分支,一直到倒数第二层的每个节点有 2 个分支,共 n+1 层。树的第一层有 1 个节点,第二层有 n 个节点,以下微不足道的时间漫长的等待厦门大学本科毕业论文17各层依次节点数为 n(n-1)、n( n-1)(n-2),最后一层为 n! 个。接下来分析在每层的花销。新算法的最大特点在于随着递归层数的增加子问题的取值空间不断缩小,因此在每个节点上对子问题的分割和合并的花费也从第一层的 到12Cn最后一层的 不断下降。12C本文的算法无需到达树结构的最
28、后一层,而在倒数第三层时便能输出排列。因为在递归树中一层节点的数目与其以上所有祖先节点的数目之和相近,所以最低两层的排除能带来性能的提高。总的时间花费有: 121212()()()*(1).TnCnCnCn+54ni34i1 4()().)ni+251.niCn3iC1 11*!( . )!(2)!()!2!n+21!(. )!()!3!3Cnn 4iC+1 211*(2ni iC 6n+2113!()!6ni3+1 2(Cenn(4-2)2357()!C对于输入元素个数为 n 的全排列问题,其输出的规模为 n! 。因此时间复杂度中的n! 是由问题本身固有的内在特点所决定的。本文算法的时间复杂
29、度最终可以表示为Cn! (C 为常数 ),即从渐进意义上已达到排列问题时间复杂度的理论下界。厦门大学本科毕业论文18第四章 测试模型Takaoka 和 Violich 在其论文 10中仅仅利用了两个非常简单的多重集例子( 3,3,3,3,3 和 2,3,5,2,3)就拿他们的算法与 Korsh and LaFollette9的算法进行比较分析,显然,这种比较方法是相当没有说服力的。为了全面客观的比较各个算法的性能,我们需要对随机输入长度为 N 的字符串的所有情况进行测试。一个输入的产生可以看成是从 N 个字符中每次抽取 1 个字符填满 N 个有序格子。每个格子都有 N 种字符可选,所有共有 N
30、N 种输入情况。然而我们不必测试所有的 NN 种输入,因为其中有些输入的排列时间是相同的。以长度 4(N4) 为例,显然输入“AAAA”和“BBBB”进行排列时间相同,输入“AABB”,“CCDD”和 “BCBC”的排列时间也是一样的。这样我们就可以对所有的输入情况进行分类,把那些具有相同排列时间的输入划分到一类中。到时我们只需测试每类中的一个输入的排列时间 t,再将时间 t 乘以该类的输入个数 cd 就可以得到该类所有输入情况的排列时间 td。假定一个输入中有 k 个不同的字符,每个字符的个数分别为 n0, n1, , nk-1,显然,N = n0 + n1 + nk-1。不失一般性,我们假
31、定 D 为 n0, n1, , nk-1 的不同拆分数,其中n0n 1n k-1 并且 N = n0 + n1 + nk-1。此时,对于长度为 N 的字符串的所有可能 NN种输入,就分成了 D 种不同的类别。我们用 来表示 D 种分类中的,0,1,2,1.dddk不同组合,其中,d = 0, 1, , D-1.对于每一种分类,它们有相同的排列时间,即 td ,其中,d = 0, 1, , D-1。对于一个固定的 d 值,我们用 rd 来表示 中不同数字的个数,,0,1,2,1.dddknn用 来分别记录每个 rd 值的个数。表 4-1 显示了当 N=4 时分别带有,0,1,1.ddrm一个代表
32、性例子的 5 种分类。表 4-1 当 N=4 的 NN 种输入的 5 种分类d Representative kd ,0,1,1.ddknn,0,1,1.ddrmtd0 0000 1 4 1 t11 0001 2 3, 1 1, 1 t2厦门大学本科毕业论文192 0011 2 2, 2 2 t33 0012 3 2, 1, 1 1, 2 t44 0123 4 1, 1, 1, 1 4 t5对于 N N 种可能输入的平均排列时间为:10( )D ddprobailtyofgrupt111 , ,000(!/!)(/!)/d ddr kk NNj jddj jCmNnt111 ,0 00(!/)
33、()/!)(!)(!dd krD dkdN djdjd j jCnmt 例如,当 N = 4(参见表 4-1) ,随机输入长度为 4 的字符串的平均排列时间为:0 312 4,0,0,0,1,0,10,32,0,124,3!k kkk kNNNNCttCtCtCtmnnmnnmn 1 322440 4414! !3t tttt 01234966ttt厦门大学本科毕业论文20第五章 测试结果为了将 TWDRI 算法同 11 种已知最快或最新的算法 12345678910进行公平公正的模拟比较,所有的算法都用 C 语言实现,测试选择的字符串从字符 0-9 和 a-j 中选出,并且运行在相同配置环境
34、中(Pentium 4 CPU 2.93 GHz、1 GB 内存) 。测试主要从两个角度(速度和内存) ,两大分类(单集算法和多重集算法)进行。 Heap63: 递归交换算法 1 Heap63: 非递归交换算法 1 Ives 76:非递归交换算法 2 JT: Loopless的Johnson-Trotter 算法(算法3b) 3 JTLLC03: Jeeve Technologies LLC算法 7 KL97: Korsh和Lipschutz常数时间算法 4 KL04: Korsh和LaFollette 基于数组的少循环算法 9 Ruskey 03: Ruskey算法 53 Sedgewick
35、02: Sedgewick算法 6 Takaoka99: Takaoka 的O(1)算法 5 TV06: Takaoka和Violich的算法 105.1 TWDRI 算法和其它单集排列算法的速度和内存比较Ives76 是其它 6 种算法中最快的;而 TWDRI 算法的速度是 Ives76 算法的 1.3 倍。TWDRI 算法内存花销相对其它算法较少。 厦门大学本科毕业论文21表 5-1 TWDRI 和集合排列算法在集合输入下的时间比较 (单位:毫秒)N TWDRI Heap 63 Heap 63 Ives 76 JT JTLLC 03 Sedgewick0210 0 31 16 15 47
36、844 16 11 79 313 281 187 375 9,297 109 12 969 3,828 3,625 2,328 4,375 112,203 1,250 13 12,438 49,921 46,328 29,546 55,093 1,467,906 16,125 14 174,328 700,515 652,594 404,750 756,203 20,814,719 226,234 15 2,618,969 10,575,796 9,835,578 5,980,734 11,183,750 314,241,031 3,393,328 16 41,802,563 167,345,
37、218 157,324,766 94,283,398 175,450,984 Estimate:58d 54,275,531 17 713,381,937 925,327,4850.00E+002.00E+074.00E+076.00E+078.00E+071.00E+081.20E+081.40E+081.60E+081.80E+082.00E+0810 11 12 13 14 15 16 (N)(Time/ms)TWDRI Heap 63 Heap 63 Ives 76 JT Sedgewick 02图 5-1 输入无重复的单纯集排列算法时间比较表 5-2 集合全排列算法的峰值/平均内存比
38、较(单位:KB)N TWDRI Heap63 Heap63 Ives 76 JT JTLLC03 Sedgewick0210 736736 748748 736736 748748 736736 752752 74474411 740740 748748 736736 748748 736736 752752 74474412 740740 748748 736736 748748 736736 752752 74474413 740740 748748 736736 748748 736736 696368 74474414 740740 748748 736736 748748 73673
39、6 696368 74474415 740740 748748 736736 688368 736736 696368 74474416 740740 736736 736736 736736 736736 744744厦门大学本科毕业论文225.2 多重集算法的时间和内存开销比较TWDRI 算法在处理多重集问题中,速度至少是其它 5 种算法中任何一个的 3 倍。同时TWDRI 算法内存开销相对其它算法较少。表 5-3 多重集排列算法的平均时间对比 (单位:毫秒)N TWDRI KL97 KL04 Ruskey03 Takaoka 99 TV0611 17 139 220 52 440 149
40、 12 157 1,318 2,036 479 4,202 1,369 13 1,488 12,695 20,389 4,779 42,175 13,729 14 15,402 141,908 218,824 51,654 457,865 146,359 15 171,967 1,568,173 2,532,981 595,249 5,234,257 1,684,183 16 2,041,640 7,411,5640.00E+005.50E+051.10E+061.65E+062.20E+062.75E+063.30E+063.85E+064.40E+064.95E+065.50E+0611
41、12 13 14 15 (N)(Time/ms)TWDRI KL97 KL04 Ruskey 03 Takaoka 99 TV06图 5-2 多重集全排列算法的平均时间对比表 5-4 多重集全排列算法峰值/平均内存比较 (单位:KB)N TWDRI KL97 KL04 Ruskey03 Takaoka 99 TV0611 768768 813813 780780 728728 788788 86486412 772772 832832 788788 732732 792792 86886813 776776 859859 792792 736736 800800 87687614 772772
42、 897897 796796 740740 812812 88888815 784784 941941 804804 748748 824824 89689616 800800 752752厦门大学本科毕业论文235.3 多重集算法在非重复输入的情况下的时间和内存开销比较在非重复输入的情况下,TWDRI 算法的速度是其它 5 种多重集算法中最快算法的 9 倍。表 5-5 多重集全排列算法在单集输入下的时间比较 (单位:毫秒)N TWDRI KL97 KL04 Ruskey 03 Takaoka 99 TV0610 0 172 234 63 547 20311 79 1,984 2,719 76
43、6 6,016 2,12512 969 23,422 34,375 8,565 72,234 25,98513 12,438 290,375 459,907 118,229 965,765 337,25014 174,328 4,026,578 6,447,203 1,540,519 13,477,719 4,756,98515 2,618,969 59,588,187 96,547,110 24,239,643 203,435,625 71,755,54716 41,802,563 945,043,046 Estimate:18d 373,710,218 Estimate:32d 1,162
44、,022,9060.00E+001.50E+083.00E+084.50E+086.00E+087.50E+089.00E+081.05E+091.20E+091.35E+0910 11 12 13 14 15 16 (N)(Time/ms)TWDRI KL97 KL04 Ruskey 03 Takaoka 99 TV06图 5-3 输入无重复的多重集全排列算法时间比较5.4 TWDRI 算法与其它多重集排列算法的比较趋势分析随着问题规模的不断增大,TWDRI 算法速度相对其它算法逐渐提高。表 5-6 其它多重集全排列算法时间与 TWDRI 时间倍数比N KL97 KL04 Ruskey 03
45、 Takaoka 99 TV0611 8.176 12.941 3.059 25.882 8.765 12 8.395 12.968 3.051 26.764 8.720 13 8.532 13.702 3.212 28.343 9.226 厦门大学本科毕业论文2414 9.214 14.208 3.354 29.728 9.503 15 9.119 14.729 3.461 30.438 9.794 0246810121416182022242628303211 12 13 14 15 NMultipleKL97 KL04 Ruskey 03 Takaoka 99 TV06图 5-4 其它多
46、重集全排列算法时间与 TWDRI 时间倍数比厦门大学本科毕业论文25第六章 结论通过对五十六篇英文论文的研究,总结出排列算法的一个规律:N 个字符排列问题的时间复杂度为庞大的 C*N!。其中 C 为常数。由于输出规模之大,对 C 的略微的减小就会对算法的运行速度产生极大的提高。不断的使 C 逼近于 1,正是无数研究者们不断奋斗的目标。TWDRI 算法突破了以往只有用换位法才能达到最快速度的思想,以递归处理方式使时间复杂度中的常数 C 趋向于极小值,获得了极佳的性能。另外,由于以往对排列算法的性能测算没有一个较合理客观的模型,如 Takaoka 和Violich 在其论文 10中仅以两个简单实例
47、就得出关于运行速度方面的结论,实在令人难以信服。因此,我们推出了新的计算算法性能的新模型,该模型可以较客观准确的测算出排列算法的性能,为研究者们提供了一种新的参考标准。基于排列算法庞大的输出结果,我们计划在将来以并行计算的方式将排列算法在多台计算机上分布输出,这将使运行时间大大缩减。厦门大学本科毕业论文26致谢语感谢我的导师教授,使我有机会参与到这样一个对本科生来讲近乎千载难逢的学术研究中来。陈老师作为我科研领域里的启蒙老师,为了培养我们倾注了很大的心血。在他的悉心指导下,我从一个茫然无知的青年慢慢开始寻得一丝科研探索的足迹。栽培之恩,学生已然铭记于心。陈老师渊博的学识,丰富的研究经验,严谨的治学态度,更是我在以后治学道路上的榜样。感谢厦门大学软件学院为此次课题研究提供了一流的软硬件设施;感谢学院的各位领导对我们这次毕业设计的鼎力支持。正是有了大家的帮助,才使得课题获得了成功。感谢小组成员:陈燕虹、王流斌、王楠和魏洁同学。在这段毕业设计期间大家彼此无私的帮助,相互的学习,为我这大学本科的最后时光留下了一段难以忘怀的美好回忆。厦门大学本科毕业论文27参考文献1Heap, B. R. Permutations by interchangesJ. Com