1、厦门大学本科毕业论文I本科毕业论文(科研训练、毕业设计)题 目:多重集全排列算法研究姓 名:学 院:软件学院系:软件工程系专 业:软件工程年 级:学 号:指导教师(校内): 职称: 年 月厦门大学本科毕业论文I多重集全排列算法研究摘要 全排列算法按处理输入的能力可分为集合(set)排列算法和多重集(multiset)排列算法。多重集中一个元素可多次出现,多重集排列算法不会产生重复的排列。本文介绍了一种新的全排列产生算法。该算法能同时解决集合排列问题和多重集排列问题;适用于各种不同字符的输入情况,具有通用性。与已有算法不同,新算法不采用交换产生排列而是先计算输入中不同元素(distinct el
2、ement)的出现次数(multiplicity),再将各个不同输入字符一对一映射到连续的自然数集合。排列过程中仅对自然数数组进行操作,递归求解时能不断缩小子问题的取值空间,实现无需进行大量判断自动排除重复输出。最后排列结果根据自然数到字符的逆映射得到。文章选取经典全排列算法进行分析和比较。我们进行了大量的模拟,测试了从 10位到 17 位的输入情况,与已知最新和最快的算法进行比较 12345678910,新算法速度是世界上已知最快多重集排列算法的 3 倍,同时也比已知最快集合排列算法快 30%。关键词 多重集 全排列 算法厦门大学本科毕业论文IIA Research into Multise
3、t Permutation Algorithm Abstract Permutation algorithms can be divided into two groups: set permutation algorithms and multiset permutation algorithms. Multiset differs from a set in that each member has a multiplicity. Multiset has repeated elements, such as a,a,b,b,b,c. We consider any character s
4、tring of length N as a multiset, which has k different characters, each has count n1, n2, , nk, respectively. Clearly, N = n1 + n2 + nk. For the input string, the multiset permutation generates all possible permutations without redundancy. When N=k, it is a pure permutation since n1 = n2 = nk = 1. N
5、umerous algorithms were proposed in publication since the research history of this problem is quite long. Unfortunately, multiset permutation is tougher problem with fewer outcomes. A new permutation algorithm is described. This algorithm can be applied in set and multiset. In both case, it has a hi
6、gh performance. The new algorithm first calculates the frequency of each distinct element in the input, and then maps the distinct elements to natural numbers. In the process of permutation, it only deals with natural numbers. The TWDRI algorithm eliminates unnecessary switches and reduces the loop
7、times in order to speed up the permutation and to reduce memory consumption. We also compare the new algorithm with several other algorithms. This paper analyses several classical algorithms in this field. We evaluate our permutation time and memory consumption by simulating strings with length N =
8、10, 11, 12, 13, 14, 15, 16, and 17, respectively. We calculate average multiset permutation time for all possible NN inputs with each fixed length N above. We compare our results with the eleven (11) fastest known and/or well-known algorithms12345678910 in detail. The comparisons show our algorithm
9、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.Key words Multiset Permutation Algorithm厦门大学本科毕业论文III目录第一章 引言 1第二章 典型全排列算法分析 32.1 Johnson and Trotter 算法 .32.2 Takaoka 算法 62.3 Ives 算法 .72.4 字典序法 9第三章 TWDRI 算法
10、 11第四章 平均时间测试模型 .14第五章 模拟和比较 .165.1 模拟环境和比较方法 .165.2 多重集算法的时间和内存花销比较 165.3 多重集算法在集合输入下的时间和内存花销比较 .175.4 TWDRI 算法和其它集合排列算法的时间和内存比较 .185.5 TWDRI 算法与其它多重集排列算法的比较趋势分析 20第六章 应用与总结 .21致谢语 .22参考文献 23厦门大学本科毕业论文IVContentsChapter 1 Introduction1Chapter 2 Classic Algorithms Analysis32.1 Johnson and Trotter Alg
11、orithm.32.2 Takaoka Algorithm .62.3 Ives Algorithm .72.4 Lexicographic Algorithm9Chatper 3 TWDRI Algorithm.11Chapter 4 Average Calculation Model.14Chapter 5 Simulation and Comparison .165.1 Simulation Environment and Comparison Method165.2 Average Time and Memory Consumption of Multiset Permutation
12、165.3 Time Comparison of Multiset Permutation for Inputs with Distinct Elements.175.4 Time and Memory Consumption of Pure Permutation Algorithm and TWDRI 185.5 Speed Ratios of TWDRI Algorithm to Other Multiset Permutation Algorithms 20Chapter 6 Application and Conclusion 21Acknowledgments22Reference
13、s 23厦门大学本科毕业论文1第一章 引言四个碱基手拉手创造了怒放的生命;七只音符的交织谱出美妙的乐章。我们身边很多美丽的事物都是由简单的元素组合排列而成,整个世界也可以看成是几种基本粒子排列组合的杰作。科学家一直在带领着我们认识这个神奇的世界,探寻她美丽背后的奥秘。而我们在深入认识事物时总是努力分析其基本构成要素,然后再研究这些要素是如何联系起来构成多种多样不同的整体。尤其是计算机科学家和数学家,在研究中需要列出所有的可能情况以获取一种渴望的特征时,列出排列组合是不可或缺的一步。DNA 分析、加密解密、电路设计、运筹研究、统计计算、化学,这些领域中你都可以看到排列与组合的应用。排列产生的历史
14、可以追溯到十六世纪五十年代,教堂中的牧师计算几口大钟不同的撞击顺序来产生各式的音乐效果。集合和多重集全排列算法有着三百多年的研究历史 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455。早在 1960 年就有这一领域算法的总结性文章出现 13。图灵奖获得者 Donald E. Knuth 在其经典著作计算机程序设计艺术一书中写道 50:“事实上,排列(permutations)问题在计算机领域非常重要。Vaughan Pratt 提议直接把它叫
15、做 perms。如果 Pratt 的建议得以实施,那么计算机教科书的厚度将变得薄一些(相应书的价格也会便宜一点)” 。虽然 Knuth 语带幽默,但由此可见排列在计算机领域出现的频率之高。正是因为排列问题如此重要,所以一直以来有众多的研究人员致力于该问题的解决。普林斯顿大学计算机系 Robert Sedgewick 在 1977 年对众多排列产生方法中的经典算法做了分析和比较 3。在众多算法中具有代表性的有 M. B. Wells 在 1961 年发表的 Recursive method15,1965 年 J. Boothroyd 对其进行了改进 2628;1962 年 S. M. Johns
16、on21和 H. F. Trotter20分别独立提出的Adjacent exchanges 是一重大突破;Factorial counting 算法是 Johnson-Trotter 算法的另一种实现; 同样是在 Johnson-Trotter 算法的基础上 G. Ehrlich3334引进了减少内部循环的思想得到 “Loopless”算法,这一算法被 N. Dershowitz 进一步的优化;其它还有 F. M. Ives 的 iterative method2; C. Tompkins 和 L. J. Paige 的 Nested cycling 12, Peck 和 Schrack 给
17、出了这一算法的 ALGOL 程序 17,还有许多研究人员对这一算法进行改进 13142432363739;比较有影响的算法还有 Lexicographic algorithms1116181922252930与 Random permutations1323242731。厦门大学本科毕业论文2以上这些算法仅能解决无重复输入的集合排列问题。多重集输入是一个相对较难的问题,不少研究者一直在寻求一个高性能的算法 45384054。多重集的排列一般是按字典序给出。另一种常见的排列顺序是 Gray code,在 Gray code 的排列中相邻的两个排列中仅有两个元素的位置不同。James F. Kor
18、sh 和 Paul S. Lipschutz 在 Johnson 算法的基础上结合 Lehmer 的思想得到第一个使用少循环的多重集排列产生算法 4。在求解多重集排列问题时传统算法为防止重复输出而保存大量纪录信息,许多研究人员投入精力简化信息的保存和判断验证过程,也产生了许多精妙的算法。但这些算法都始终没有突破通过保存和判断信息来防止重复输出的思维藩篱。排列问题的一大特点就是输出规模受输入规模的影响极大。我们假设计算机进行一次运算就能给出一个排列(实际的算法不可能做到这点)。如表 1-1 所示,对于一台运算速度为百万次每秒的计算机, 给出 11 个元素的集合的所有 11!= 399168 个排
19、列只需几秒钟的时间,而要得到 17 个元素的所有 17!= 355687428096000 个排列则需要几年。就算是当前最快的计算机,其运算速度达到万亿次每秒,要计算出大于 20 个元素的集合的所有排列在时间上也显得不太可能。在科学研究中确实可能遇到较大规模的排列需求,除了配置高性能的计算机外,找到一个高性能的排列算法就显得非常重要。表 1-1 不同性能计算机在各种输入规模下进行排列所需时间N 排列的个数 百万/秒 十亿/秒 万亿/秒10 362880011 39916800 几秒12 479001600 几分钟13 6227020800 几小时 几秒14 87178291200 天 分钟15
20、 1307674368000 几周 几分钟16 20922789888000 几个月 几小时 几秒17 355687428096000 几年 几天 几分钟18 6402373705728000 几个月 几小时19 121645100408832000 几年 几天20 2432902008176640000 月微不足道的时间漫长的等待厦门大学本科毕业论文3第二章 典型全排列算法分析 这章我们介绍几种典型的全排列算法,它们不仅性能高效而且其算法思想也很有启示意义。在详细介绍各种排列算法之前有必要明确集合排列问题与多重集排列问题的不同。集合排列算法只能解决输入是集合的问题,这就要求输入中的每个元素与
21、输入中的其它元素不同,元素间是互异的。我们知道多重集的 N 个元素中可以有相同的元素,不同元素的个数为 k,每个元素的重复次数为 n1,n 2,nk,显然 N = n1 + n2 + + nk。当 N = k 时,n 1 = n2 = = nk = 1,多重集退化为集合。因此多重集排列算法也可以解决集合排列问题。对于集合1 , 2,3 集合排列算法给出全部 6 个排列:(1)213 (2)231 (3)321 (4)312 (5)132 (6)123以多重集1 , 2,2 为例,集合排列算法给出该多重集的排列为:(1)212 (2)221 (3)221 (4)212 (5)122 (6)122
22、其中(1)和(4)是一样的,(2)和(3)、(5)和(6) 也是相同的。而我们一般并不希望得到的排列结果中有重复的情况,因此多重集排列算法更具一般性。但也正是因为多重集排列算法需要排除重复的输出,所以多重集排列算法很难达到像集合排列算法一样的性能。2.1 Johnson and Trotter 算法1962 年 S. M. Johnson21和 H. F. Trotter20分别独立提出的相邻换位方法是集合排列算法一个重大的突破。以后的很多算法都是在他们算法上的改进 333435。他们发现通过 N!-1 次相邻元素的交换可以产生 N 个元素的所有 N!个排列。其实算法的思想来源很自然,如果我们
23、已经知道 N-1 个元素的所有(N-1)!个排列;每次将新的第 N 个元素插到原来每个排列中所有可能的 N 个空隙中便可以得到所需的 N!个排列。图 2-1 是 5 个元素排列产生过程中最开始的 4 次交换。已知四个元素 BCDE 的排列,首先把新的第五个元素 A 插到 BCDE 的前面得到 ABCDE,然后通过 A 与其后元素的四次交换就得到 5 种所有可插入位置的排列。从B, C, D, E的 1 个排列得到了A, B, C, D, E的 5厦门大学本科毕业论文4个排列。ABCDEBACDEBCADEBCDAEBCDEA图 2-1 A 插入排列 BCDE 过程Algrithm 1 (Joh
24、nson and Trotter)1 i 12 for i 1 to N3 do i i + 14 ci 15 di true6 c1 07 for i8 while i 19 do i N10 x 011 while ci = i12 do if di = false13 then x x + 114 if di = true15 then di false16 if di = true17 then k ci + x18 else k j ci + x19 do swap pk pk+120 ci ci + 121 OuputPerm 厦门大学本科毕业论文5上一步我们从B, C, D, E
25、的 1 个排列得到了A, B, C, D, E的 5 个排列。为了产生过程继续进行,首先需要得到B, C, D, E的另一个排列,同样我们把 B 看成是新元素插入到CDE 的排列中得到 CBDE。现在就可以把 A 插到 CBDE 的空隙中得到另外 5 个排列了。图2-2 表现的就是上面的过程。ABCDEBCDEACBDAECBADECABDEACBDECBDEA图 2 -2 BCDE 换为 CBDE 后 A 向反方向移动从图 2-3 可以看出 N 个元素的排列网络中被框起来的部分构成了 N-1 个元素的排列网络。也可以看成是在 N-1 个元素的排列网络中插入第 N 个元素从左到右的移动或是从右
26、到左的移动便得到 N 个元素的交换网络。A BB AA B CB A CB C AC B AC A BA C BA B C DB A C DB C A DB C D AC B D AC B A DC A B DA C B DA C D BC A D BC D A BC D B AD C B AD C A BD A C BA D C BA D B CD A B CD B A CD B C AB D C AB D A CB A D C A B D CN = 3N = 2N = 4厦门大学本科毕业论文6图 2-3 Johnson-Trotter 算法在 N = 2,3,4 时产生排列的交换过程2.2
27、 Takaoka 算法Takaoka 在 1999 在 ISSAC 99 上提出了在 O(1)时间从一个排列到下一个排列的算法 5。O(1)时间产生多重集排列的主要思想是在一棵树上的往返移动。对于一个给定的多重集的生成树,多重集的所有排列已有一定顺序,从树的根节点到叶子节点的一条路径就对应多重集的一个排列。在树上的基本移动包括上移、下移和横越。上移这个动作是从树上的一个节点到达它的一个祖先节点的过程。横越是从一个节点到它的邻接兄弟节点,这将引起该层节点元素和相对叶子更近层节点元素的交换。下移是从节点移动到它的子孙节点,所移动到的子孙节点称为降落点。降落点没有兄弟节点,到达叶子也没有其它分支而是
28、一条直线。算法的核心集中在什么位置该进行上移或下移,而在什么位置又该进行交换。22123121312223321321232 1 2 2 3 ( 1 )1 2 3 2 ( 2 )1 3 2 2 ( 3 )2 3 1 2 ( 4 )2 3 2 1 ( 5 )2 1 2 3 ( 6 )2 1 3 2 ( 7 )2 2 3 1 ( 8 )2 2 1 3 ( 9 )3 2 1 2 ( 1 0 )3 2 2 1 ( 1 1 )3 1 2 2 ( 1 2 )231322321121234图 2-4 多重集1, 2, 2, 3全排列的产生树厦门大学本科毕业论文7如图 2-4 所示,从树根到叶子通过 4 步便
29、得到了多重集1, 2, 2, 3 的一个排列 1223。Algorithm 2 (Takaoka)1 a the first permutation on S2 for i 0 to N3 do upi i 4 downi i5 for i 1 to N 6 do nodesi ai7 i n - |tail(a)| + 18 do if nodesi-1 has not been updated by ai-1s children 9 then update it10 output(a)11 if ai is not a last child 12 then do swap ai asi a
30、ction cross13 update nodesi-114 if ai is not a last child 15 then upi upi-116 upi-1 i - 117 update supi18 update downupi19 if i = n - |tail(a)| + 1 ai,an form a straight line20 then i upi going up21 else i downi going down22 else i downi ai is not a last child going down23 untill i = 0 root level厦门大
31、学本科毕业论文82.3 Ives 算法在通过迭代结构产生全排列的算法中 Ives 被认为是最快的。在产生元素 1, 2, , n 的排列过程中,Ives 算法每次将第一个元素 1 向右移动一个位置。当 1 移动到最右端时再将 1 和最左端的元素对换。假设排列最开始的顺序是 1, 2, , n。经过 n 次移动后,元素 1 又回到了第一个位置。而原来在位置 2, , n 的元素进行了一次循环左移。我们把元素 1 从最左端移动到最右端再移回到最左端看成是 1 的一次旅行。在元素 1完成 n-1 次旅行后,原来位置在 2,n 的 n-1 个元素也完成了 n-1 次循环左移,这时它们各自都回到原来的位
32、置。这个排列就和最开始的第一个排列相同了,必须加以修改来消除重复的排列产生。接下来对在位置 2, , n-1 的元素 2, , n-1 重复上面的操作过程。现在“最左端”和“最右端”分别指位置 2 和位置 n-1,而元素 2 是移动的元素。如果这些元素的排列也产生了重复,那么上面的移动过程又在元素 3, , n-2 上继续进行。Algorithm 3 (Ives)1 i N2 while i 13 do i i-14 ci i5 Qi Pi 6 while i Pi8 do j j + 19 do swap Pi Pj厦门大学本科毕业论文1110 reverse(i-1)11 OutputPe
33、rm厦门大学本科毕业论文12第三章 TWDRI 算法算法的主要流程如图 3-1 所示。对于不同的输入情况调用不同的函数。当输入是集合时调用函数 PurePermuation();而函数 MultisetPermutation()用于解决多重集的输入。图 3-1 算法主要流程算法的计算时间 T(n)满足:(3-1)123()(3)()nTCn输入规模为 n3 的问题可由 n 个输入规模为 n-1 的子问题构成。 是对子问题12*Cn结果进行分解和合并的花费,其中 、 为常数。当 n=3 求解问题的花费为 , 为常数。1C2 3厦门大学本科毕业论文13. . .12()Cn12()Cn12()Cn
34、1212121212123C. . . . . . . . . . .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)n1.124124C124C. . . . . . . .3 354 b r a n c h e s 4 b r a n c h e s4 b r a n c h e s图 3-2 的递归树12()Tnn从树的根结点开始,根有 n 个分支,第二层的每个节点有 n-1 个分支,一直到倒数第二层的每个节点有 2 个分支,共 n+1 层。树的第一层有 1
35、 个节点,第二层有 n 个节点,以下各层依次节点数为 n(n-1)、 n(n-1)(n-2),最后一层为 n!个。接下来分析在每层的花销。新算法的最大特点在于随着递归层数的增加子问题的取值空间不断缩小,因此在每个节点上对子问题的分割和合并的花费也从第一层的 到最后12Cn一层的 不断下降。12C本文的算法无需到达树结构的最后一层,而在倒数第三层时便能输出排列。因为在递归树中一层节点的数目与其以上所有祖先节点的数目之和相近,所以最低两层的排除能带来性能的提高。总的时间花费有: 121212()()()(1).TnCnCnCn+54i34i1 4()().)ni+251.niCn3iC1 11!(
36、 . )!(2)!()!2!n厦门大学本科毕业论文14+21111!(. )!(2)!32!3Cnn 4niC+1 1()ni iC6+21213()!6ni3+1(Cen2357()!C对于输入元素个数为 n 的全排列问题,其输出的规模为 n!。因此时间复杂度中的 n!是由问题本身固有的内在特点所决定的。本文算法的时间复杂度最终可以表示为 C*n!(C为常数) ,即从渐进意义上已达到排列问题时间复杂度的理论下界。厦门大学本科毕业论文15第四章 平均时间测试模型 Tadao 和 Violich 在 2006 发表的论文 10中将自己的算法与 Korsh 和 LaFollette 在 2004
37、年发表的算法 9进行比较,仅仅用两个测试案例就声称自己算法比他人算法快 31-34%。这种比较方法难以证明一种算法比另一种算法具有更高的性能。为了全面客观的比较各个算法的性能,我们需要对随机输入长度为 N 的字符串的所有情况进行测试。一个输入的产生可以看成是从 N 个字符中每次抽取 1 个字符填满 N 个有序格子。每个格子都有 N 种字符可选,所以共有 NN 种输入情况。然而我们不必测试所有的 NN 种输入,因为其中有些输入产生排列的时间相同。以长度4(N4)为例,显然输入 “AAAA”和“BBBB ”进行排列时间相同,输入“AABB”,“CCDD”和 “BCBC”的排列时间也是一样的。这样我
38、们就可以对所有的输入情况进行分类,把那些具有相同排列产生时间的输入划分到一类中。到时我们只需测试每类中的一个输入的排列时间 t,再将时间 t 乘以该类的输入个数 cd 就可以得到该类所有输入情况的排列时间 td。下面将介绍分类的过程:分类的可以抽象为对正整数 N 的分拆。正整数 n 的一个分拆是 n 作为称作部分的一个或多个正整数的无序和的一种表示 57。由于部分的顺序是不重要的,因此我们总可以排列这些部分使得它们的顺序从最大到最小。1,2,3,4 和 5 对应的分拆为:1;2,1+1 ; 3,2+1 ,1+1+1;4,3+1,2+2 ,2+1+1,1+1+1+1 以及5,4+1 ,3+2,3
39、+1+1,2+2+1,2+1+1+1,1+1+1+1+1。n 的一个分拆有时候写成(4-1)21naa其中 ai 为非负整数,该数等于值为 i 的部分的个数(这个表达式是纯符号性的;它的项既不是指数式,表达式也不是一个乘积)。当被写成式(4-1)的形式时,若 ai0,则项 通常ia被省略,使用这个记号,4 的分拆为:41,3 111,2 2,2 112,1 4 的每种 形式对应一种分类。这 5 种分拆就对应长度为 4 的随机输入的 521naa种分类:厦门大学本科毕业论文16表 4-1 长度为 4 时的分类d One instance 1niiatd1 41 AAAA 1(A) t12 311
40、1 AAAB 2(AB) t23 22 DDCC 2(DC) t34 2112 AABC 3(ABC) t45 14 ABCD 4(ABCD) t5某类 中如果有 项,则该类有 ai 个重复出现 i 次的字符。显然各项 ai 的和2naa iak(其中 k= )就是构成一个输入字符串的不同字符的个数。1i我们还需要计算每种分类包含的输入情况的个数。还是以长度 4 为例,不失一般性假设组成输入字符串的字符集合为A, B, C, D。每种分类各项 ai 的和 k 代表组成该类一个输入情况的字符个数,而从字符集合中选取 k 个字符有 种选法。表 4-1 第 4 行 2112 的 k 为kNC1+2=
41、3,所以共有 =4 种选择 ABC,ABD,ACD ,BCD。对于一种选择如 ABC 我们还要34C考虑哪个字符重复出现 2 次,A 出现 2 次得到 AABC,B 出现 2 次得到 BBAC,C 出现 2 次得到 CCAB。所以要对每种选择的字符进行排列,有排列个数= =3。AABC,BAAC 和 BACA 也是不同的,个数为 =1!/Nika3!/(2) 1!/(!)aNijk=12。4(2)每个分类中输入情况的个数为:(4-2)11(!/)(!/(!)d aNNikdNi jkcCa至此我们可以得到平均时间的计算公式:(4-3)/NdTct厦门大学本科毕业论文17第五章 模拟和比较 5.
42、1 模拟环境和比较方法 借鉴以往大型模拟比较的经验 56我们和 11 种算法进行了比较,所比较的算法都用 C 语言实现。为了保证比较的结果科学、准确,所有的模拟都在相同环境下进行。模拟所用计算机配置:Pentium 4 CPU 2.93 GHz、1 GB 内存。使用第四章中介绍的平均测试模型保证了对所有算法进行全面和公平的比较。进行比较的算法如下: Heap63: recursive exchange algorithm from 1 Heap63: iterative exchange algorithm from 1 Ives 76: iterative exchange algorith
43、m from 2 JT: algorithm 3b (Loopless Johnson-Trotter) from 3 JTLLC03: algorithm from 7 KL97: constant time algorithm from 4 KL04: loopless array generation algorithm from 9 Ruskey 03: algorithm from 53 Sedgewick02: algorithm from 6 Takaoka99: O(1) algorithm from 5 TV06: algorithm from 105.2 多重集算法的时间和
44、内存花销比较表 5-1 和图 5-1 说明 TWDRI 算法是其它 5 种算法中最快算法速度的 3 倍。表 5-1 多重集排列算法的平均时间比较 (单位:毫秒)N TWDRI KL97 KL04 Ruskey03 Takaoka 99TV0611 17 139 220 52 440 149 12 157 1,318 2,036 479 4,202 1,369 13 1,488 12,695 20,389 4,779 42,175 13,729 厦门大学本科毕业论文1814 15,402 141,908 218,824 51,654 457,865 146,359 15 171,967 1,56
45、8,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 12 13 14 15(Time/ms)(N)TWDRI KL97 KL04 Ruskey 03 Takaoka 99 TV06图 5-1 多重集全排列算法的平均时间比较表 5-2 揭示 TWDRI 算法内存花销相对其它算法较少。表 5-2 多重集全排列算法峰值/平均内存比较 (单位:
46、KB)N TWDRI KL97 KL04 Ruskey03 Takaoka 99TV0611 768768 813813 780780 728728 788788 86486412 772772 832832 788788 732732 792792 86886813 776776 859859 792792 736736 800800 87687614 772772 897897 796796 740740 812812 88888815 784784 941941 804804 748748 824824 89689616 800800 7527525.3 多重集算法在集合输入下的时间和内
47、存花销比较厦门大学本科毕业论文19在输入为集合的情况下,TWDRI 算法的速度是其它 5 种多重集算法中最快算法的 9 倍。表 5-3 多重集全排列算法算法在集合输入下的时间比较 (单位:毫秒)N TWDRI KL97 KL04 Ruskey 03 Takaoka 99 TV0610 0 172 234 63 547 20311 79 1,984 2,719 766 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,02