1.介绍

在本教程中,我们将检查定义,复杂性和生成阵列排列的算法

2.排列

我们要讨论的排列是雷竞技app官网网站如何安排<一世mg loading="lazy" src="//www.sunglassguys.com/wp-content/ql-cache/quicklatex.com-b170995d512c659d8668b4e42e1fef6b_l3.png" class="ql-img-inline-formula quicklatex-auto-format" alt="N" title="Rendered by QuickLaTeX.com" height="8" width="11" style="vertical-align: 0px;">对象<一世mg loading="lazy" src="//www.sunglassguys.com/wp-content/ql-cache/quicklatex.com-b170995d512c659d8668b4e42e1fef6b_l3.png" class="ql-img-inline-formula quicklatex-auto-format" alt="N" title="Rendered by QuickLaTeX.com" height="8" width="11" style="vertical-align: 0px;">的位置。

例如,假设我们正在玩一个游戏,在那里我们必须在以下三个字母中找到一个单词:a,b和c。所以我们尝试所有的置换才能说出一个单词:

Abc acb bac bca cba cab

从这六种排列中,我们可以看到确实有一个词:<一世mg loading="lazy" src="//www.sunglassguys.com/wp-content/ql-cache/quicklatex.com-efb0a25f468cb7ac01d329abb9dc92b4_l3.png" class="ql-img-inline-formula quicklatex-auto-format" alt="出租车" title="Rendered by QuickLaTeX.com" height="13" width="41" style="vertical-align: 0px;">。

然而,我们在这个单词问题中有一个轻微的语义问题。我们通常会说,“我们可以做多少个3个字母的组合?”问题是,组合和排列可以互换吗?数学上的答案是否定的。

简单的说,折放必须处理有序的数字集,完全喜欢设置单词。组合处理无序集。拍一对骰子。当我们滚动它们时,我们只对这笔款项感兴趣。我们没有标记它们。3和4的组合与4和3的组合相同。

2.1。有多少个排列?

置换的数量<一世mg loading="lazy" src="//www.sunglassguys.com/wp-content/ql-cache/quicklatex.com-b170995d512c659d8668b4e42e1fef6b_l3.png" class="ql-img-inline-formula quicklatex-auto-format" alt="N" title="Rendered by QuickLaTeX.com" height="8" width="11" style="vertical-align: 0px;">数字是<一世mg loading="lazy" src="//www.sunglassguys.com/wp-content/ql-cache/quicklatex.com-da0ef996f36e1b32a0f26f6e896e1771_l3.png" class="ql-img-inline-formula quicklatex-auto-format" alt="n !" title="Rendered by QuickLaTeX.com" height="13" width="15" style="vertical-align: 0px;">(N阶乘)。所以对于三个对象,排列的数量是<一世mg loading="lazy" src="//www.sunglassguys.com/wp-content/ql-cache/quicklatex.com-aeb28bbc29c2bd3e3e1c0177e2af2467_l3.png" class="ql-img-inline-formula quicklatex-auto-format" alt="3!= 6." title="Rendered by QuickLaTeX.com" height="13" width="46" style="vertical-align: 0px;">:

ABC的排列

直观地说,我们可以把生成排列的过程看作是一个递归的过程。第一个位置,我们有<一世mg loading="lazy" src="//www.sunglassguys.com/wp-content/ql-cache/quicklatex.com-b170995d512c659d8668b4e42e1fef6b_l3.png" class="ql-img-inline-formula quicklatex-auto-format" alt="N" title="Rendered by QuickLaTeX.com" height="8" width="11" style="vertical-align: 0px;">可能性(图中3种)。对于第二个位置,我们只有<一世mg loading="lazy" src="//www.sunglassguys.com/wp-content/ql-cache/quicklatex.com-8c10e83257454bc711811cc71f964a7e_l3.png" class="ql-img-inline-formula quicklatex-auto-format" alt="(n-1)" title="Rendered by QuickLaTeX.com" height="19" width="53" style="vertical-align: -5px;">从(图中的2)中选择的可能性。当我们填补了每个职位,我们就失去了另一个可能性。因此,我们有<一世mg loading="lazy" src="//www.sunglassguys.com/wp-content/ql-cache/quicklatex.com-99b68bec0ad4faa48de3caab1c8776cb_l3.png" class="ql-img-inline-formula quicklatex-auto-format" alt="n * (n - 1) *(2) *……* 3 * 2 * 1" title="Rendered by QuickLaTeX.com" height="19" width="262" style="vertical-align: -5px;">可能性。这是定义N阶乘,书面<一世mg loading="lazy" src="//www.sunglassguys.com/wp-content/ql-cache/quicklatex.com-da0ef996f36e1b32a0f26f6e896e1771_l3.png" class="ql-img-inline-formula quicklatex-auto-format" alt="n !" title="Rendered by QuickLaTeX.com" height="13" width="15" style="vertical-align: 0px;">。

2.2。快速增长的排列

正如我们在最后一个例子中看到的,三个对象有六种可能性。这是可管理的,B.但是随着物体数量的增加,排列的数量呈指数增长

QuickLatex.com呈现

我们可以看到,如果我们有一个4,5甚至6个字母,我们将拥有24,120甚至720个筛选到筛选。排列的数量迅速增长。

为了说明这些数字有多大,假设我们从一块卡片开始。组合数量是68位数字(我们没有自己计算出来,别人做的):

80658175170943878571660636856403766975289505440883277824000000000000。

宇宙的年龄是10.13.813岁了。这等于2。05160945 × 1021.秒或2.05160945×1030.纳秒。即使我们能在Las Vegas找到一个经销商,他们可以每一个纳米末都洗牌,他仍然甚至不会接近宇宙结束前的所有可能的组合。

此外,生成所有排列所需的时间并不是我们唯一的限制。例如,如果我们要编写一个程序来递归地生成这些排列(见下文),那么很快就会耗尽内存空间。

虽然这对我们想要产生所有可能的排列的人来说是坏消息,但这是一个很好的新闻加密。例如,标准256加密密钥具有1.1 x 1077.零和零的组合。它将需要我们几个宇宙才能试图弄清楚钥匙。我们必须依赖于寻找密码的其他方法,例如猜测所有者的狗的名字或“qwerty”。

2.3。数学符号

普通的单一排列的数学符号是双线表示法。在这里,我们代表第一行上的原始数组,以及如何在第二行转换元素:

QuickLatex.com呈现

这代表了置换:

QuickLatex.com呈现

但是,如果我们按照规范顺序排列元素,那么我们可以将排列写成一行。在我们的例子中,元素的标准顺序是自然数<一世mg loading="lazy" src="//www.sunglassguys.com/wp-content/ql-cache/quicklatex.com-559bd515c74fc6942895a0f95525b76e_l3.png" class="ql-img-inline-formula quicklatex-auto-format" alt="1,2,3,4,5" title="Rendered by QuickLaTeX.com" height="17" width="74" style="vertical-align: -4px;">。

所以我们可以写下排列<一世mg loading="lazy" src="//www.sunglassguys.com/wp-content/ql-cache/quicklatex.com-543caa72ba24abfac7b28388139fb3e1_l3.png" class="ql-img-inline-formula quicklatex-auto-format" alt="2,5,4,3,2" title="Rendered by QuickLaTeX.com" height="17" width="75" style="vertical-align: -4px;">。

另一种符号,我们经常使用脱掉脱落的缩小。这种表示法称为循环符号。通过这种表示法,我们可以看到置换在“周期”一组中表示。一个循环是一系列循环回到自身的排列。对于我们的排列,我们可以看到有两个周期。第一个周期是:

QuickLatex.com呈现

请注意,1允许2,2替换为5,但然后5次换回1。我们有一个循环:

(1 2 5)

其余排列也是一个循环,其中3个置换为4,然后4替换为3:

(3 4)

将这些周期放在一起,我们获得等效的一行循环表示法:

(1 2 5)(3 4)

我们可以把所有排列用这种符号表示。然而,一个问题是这种表示法不是唯一的:

(1 2 4) =(2 5 1)(3 4 4) =(5 1 2)(3 4) =……

我们可以先将最大的元素提出最大的元素来纠正这种情况:

(5 1 2)(4 3)

这被称为规范循环符号。

3.简单的递归算法

正如我们在最后一节的图片和解释中所看到的,可以以简单的递归算法配制生成排列。在每个递归步骤中,我们具有我们生成的置换远程以及剩余物体的集合来置换。

一旦没有剩下的对象可以排列(剩下的对象列表是空的),我们就完成了。答案就是迄今为止产生的排列。我们只需要将这个置换添加到累计生成的置换列表中,然后在递归中返回。

如果有剩余对象才能释放,则我们循环所有剩余对象。在循环中,我们将所选择的对象添加到给定排列的末尾。我们从剩余的列表中取出所选对象,并递归调用新的排列和新的剩余列表:

QuickLatex.com呈现

对这个例程的初始调用使用生成的排列的空列表(<一世mg loading="lazy" src="//www.sunglassguys.com/wp-content/ql-cache/quicklatex.com-674201c94ec6549166981e996fb4af6c_l3.png" class="ql-img-inline-formula quicklatex-auto-format" alt="生成的人" title="Rendered by QuickLaTeX.com" height="12" width="194" style="vertical-align: 0px;">),空排放(<一世mg loading="lazy" src="//www.sunglassguys.com/wp-content/ql-cache/quicklatex.com-1dd58510059709191f8ba78e28ed9be8_l3.png" class="ql-img-inline-formula quicklatex-auto-format" alt="普查" title="Rendered by QuickLaTeX.com" height="12" width="170" style="vertical-align: 0px;">)和对象列表(<一世mg loading="lazy" src="//www.sunglassguys.com/wp-content/ql-cache/quicklatex.com-3342786312f6190a3b151e814a277a0c_l3.png" class="ql-img-inline-formula quicklatex-auto-format" alt="ElementStopmute." title="Rendered by QuickLaTeX.com" height="12" width="169" style="vertical-align: 0px;">)。作为检查,我们可以看到递归终止,因为每次递归调用时,剩余列表会变小。

生成的置换(<一世mg loading="lazy" src="//www.sunglassguys.com/wp-content/ql-cache/quicklatex.com-674201c94ec6549166981e996fb4af6c_l3.png" class="ql-img-inline-formula quicklatex-auto-format" alt="生成的人" title="Rendered by QuickLaTeX.com" height="12" width="194" style="vertical-align: 0px;">)及剩余物件(<一世mg loading="lazy" src="//www.sunglassguys.com/wp-content/ql-cache/quicklatex.com-3342786312f6190a3b151e814a277a0c_l3.png" class="ql-img-inline-formula quicklatex-auto-format" alt="ElementStopmute." title="Rendered by QuickLaTeX.com" height="12" width="169" style="vertical-align: 0px;">)结构可以是列表、集合或数组。其中的对象不需要排序。另一方面,顺序对排列(<一世mg loading="lazy" src="//www.sunglassguys.com/wp-content/ql-cache/quicklatex.com-1dd58510059709191f8ba78e28ed9be8_l3.png" class="ql-img-inline-formula quicklatex-auto-format" alt="普查" title="Rendered by QuickLaTeX.com" height="12" width="170" style="vertical-align: 0px;">),所以它应该是一个数组。

4.堆的算法

用于生成排列的更传统和有效的算法之一是开发的方法b . r .堆。该算法基于交换元素来生成排列。它完全产生了一旦产生了这些元素的所有可能排列。

该方法是一种系统的算法,在每一步中选择一对元素进行交换以生成新的排列。我们可以看到,与前一个算法相比,这个算法的优点是使用更少的内存。

堆算法的原理是减少和征服该算法基本上生成以最后一个元素结尾的所有排列。然后(n - 1) !前n-1个元素的排列与最后一个元素相连。当循环遍历n-1个元素时,算法中有一个(神秘的)步骤取决于是否<一世mg loading="lazy" src="//www.sunglassguys.com/wp-content/ql-cache/quicklatex.com-b170995d512c659d8668b4e42e1fef6b_l3.png" class="ql-img-inline-formula quicklatex-auto-format" alt="N" title="Rendered by QuickLaTeX.com" height="8" width="11" style="vertical-align: 0px;">是奇数还是偶数。

  1. 如果<一世mg loading="lazy" src="//www.sunglassguys.com/wp-content/ql-cache/quicklatex.com-b170995d512c659d8668b4e42e1fef6b_l3.png" class="ql-img-inline-formula quicklatex-auto-format" alt="N" title="Rendered by QuickLaTeX.com" height="8" width="11" style="vertical-align: 0px;">是奇数,交换第一个和最后一个元素。
  2. 如果<一世mg loading="lazy" src="//www.sunglassguys.com/wp-content/ql-cache/quicklatex.com-b170995d512c659d8668b4e42e1fef6b_l3.png" class="ql-img-inline-formula quicklatex-auto-format" alt="N" title="Rendered by QuickLaTeX.com" height="8" width="11" style="vertical-align: 0px;">是偶数,然后交换<一世mg loading="lazy" src="//www.sunglassguys.com/wp-content/ql-cache/quicklatex.com-695d9d59bd04859c6c99e7feb11daab6_l3.png" class="ql-img-inline-formula quicklatex-auto-format" alt="一世" title="Rendered by QuickLaTeX.com" height="12" width="6" style="vertical-align: 0px;">th元素(在循环中)。

在每次迭代中,算法将产生以当前最后一个元素结束的所有排列。

例如,对于四个元素,序列如下(从左到右列):

在A行中,我们看到了“最后一个元素”。在行B,C和D中,我们具有剩下的三个元素的排列。通过查看行B,我们可以看到最后两个元素被置换。

一个更完整的解释和例子,可以找到Ruslan.甚至约翰逊。对于更加数学上的倾斜,还有证明为什么希普的算法有效。在罗伯特的Sedgewick的1977年折叠算法审查,堆的算法被发现是最简单和最有效的算法之一。

虽然Heap最初的公式是非递归的,但是Heap的算法可以用递归或非递归的方式来表述。

4.1。递归堆的算法

我们可以编写堆算法的递归版本:

QuickLatex.com呈现

注意<一世mg loading="lazy" src="//www.sunglassguys.com/wp-content/ql-cache/quicklatex.com-6960af9dfbbe97a95e3249cc54678710_l3.png" class="ql-img-inline-formula quicklatex-auto-format" alt="Swapelements(I,J)" title="Rendered by QuickLaTeX.com" height="19" width="156" style="vertical-align: -5px;">绕过价值<一世mg loading="lazy" src="//www.sunglassguys.com/wp-content/ql-cache/quicklatex.com-8e9ca491ec01dba9fc5978b827d2f267_l3.png" class="ql-img-inline-formula quicklatex-auto-format" alt="数组(我)" title="Rendered by QuickLaTeX.com" height="19" width="68" style="vertical-align: -5px;">的值<一世mg loading="lazy" src="//www.sunglassguys.com/wp-content/ql-cache/quicklatex.com-fbbad5a845d9fd0adc56bf2d4c8521da_l3.png" class="ql-img-inline-formula quicklatex-auto-format" alt="阵列(j)" title="Rendered by QuickLaTeX.com" height="19" width="70" style="vertical-align: -5px;">。

一个重要的实施记录涉及阵列,<一世mg loading="lazy" src="//www.sunglassguys.com/wp-content/ql-cache/quicklatex.com-136e6915f71249a1611b21d7327b3ac8_l3.png" class="ql-img-inline-formula quicklatex-auto-format" alt="大批" title="Rendered by QuickLaTeX.com" height="17" width="48" style="vertical-align: -4px;">。在某种意义上,<一世mg loading="lazy" src="//www.sunglassguys.com/wp-content/ql-cache/quicklatex.com-136e6915f71249a1611b21d7327b3ac8_l3.png" class="ql-img-inline-formula quicklatex-auto-format" alt="大批" title="Rendered by QuickLaTeX.com" height="17" width="48" style="vertical-align: -4px;">是一个静态数组。这意味着在递归调用中,当从调用函数返回时,子调用中发生的对数组的更改仍然存在。

4.2。堆的非递归算法

我们还可以定义从递归的非递归堆算法。代码内的评论在通信中:

QuickLatex.com呈现

5. QuickPerm算法

虽然堆的算法传统上是选择的排列算法,但还有其他最近的算法Quickverm.,也是基于交换和受堆排序的启发,是最有效的。我们可以咨询QuickPerm网站对于变体和实现,但我们将在此呈现伪代码,用于其中一个版本(倒计时QuickPerm)。

上面的QuickPerm算法中的主要索引控制器阵列是P [n],它控制变量的迭代和上索引边界<一世mg loading="lazy" src="//www.sunglassguys.com/wp-content/ql-cache/quicklatex.com-695d9d59bd04859c6c99e7feb11daab6_l3.png" class="ql-img-inline-formula quicklatex-auto-format" alt="一世" title="Rendered by QuickLaTeX.com" height="12" width="6" style="vertical-align: 0px;">。每个<一世mg loading="lazy" src="//www.sunglassguys.com/wp-content/ql-cache/quicklatex.com-f2f2dff80e0f0ad79255b0bae327888d_l3.png" class="ql-img-inline-formula quicklatex-auto-format" alt="p [i]" title="Rendered by QuickLaTeX.com" height="18" width="24" style="vertical-align: -5px;">代表计数基础:<一世mg loading="lazy" src="//www.sunglassguys.com/wp-content/ql-cache/quicklatex.com-fe7a57266d6b7e94d22ff7834460a277_l3.png" class="ql-img-inline-formula quicklatex-auto-format" alt="p [0]" title="Rendered by QuickLaTeX.com" height="18" width="27" style="vertical-align: -5px;">也为零,<一世mg loading="lazy" src="//www.sunglassguys.com/wp-content/ql-cache/quicklatex.com-4ca51a6d4a6bdf32232a60fcb0e6f2fb_l3.png" class="ql-img-inline-formula quicklatex-auto-format" alt="p [1]" title="Rendered by QuickLaTeX.com" height="18" width="27" style="vertical-align: -5px;">是基地2,<一世mg loading="lazy" src="//www.sunglassguys.com/wp-content/ql-cache/quicklatex.com-a96e78408bd2c710cd06a2eb1d23f46a_l3.png" class="ql-img-inline-formula quicklatex-auto-format" alt="p [2]" title="Rendered by QuickLaTeX.com" height="18" width="27" style="vertical-align: -5px;">是基础3等。我们使用此阵列跟踪生成过程。所有排列由“下”元素形成,直到考虑下一个元素。

以下是具有置换的P矩阵的开发的示例:

QuickLatex.com呈现

在这里,我们可以看到较低(左侧)排列首先是如何发展的。对于我们的案子<一世mg loading="lazy" src="//www.sunglassguys.com/wp-content/ql-cache/quicklatex.com-b9fd90e821fd3d07dadf8f4b73265299_l3.png" class="ql-img-inline-formula quicklatex-auto-format" alt="n = 3." title="Rendered by QuickLaTeX.com" height="12" width="49" style="vertical-align: 0px;">当前三个P元素为零时,我们开发了所有排列。

完整算法如下:

QuickLatex.com呈现

QuickVerm算法有实现java.pythonC ++, 和, 例如。

6.按词典顺序排列

词条测定顺序是例如字母顺序的概括。建立词典顺序的关键是一组有序函数的定义(例如<一世mg loading="lazy" src="//www.sunglassguys.com/wp-content/ql-cache/quicklatex.com-51ec6ce74422604d963556a0dfed0d81_l3.png" class="ql-img-inline-formula quicklatex-auto-format" alt="比...更棒" title="Rendered by QuickLaTeX.com" height="16" width="94" style="vertical-align: -4px;">那<一世mg loading="lazy" src="//www.sunglassguys.com/wp-content/ql-cache/quicklatex.com-edb1e432ed099e2e90705d9bc8944190_l3.png" class="ql-img-inline-formula quicklatex-auto-format" alt="少于" title="Rendered by QuickLaTeX.com" height="12" width="66" style="vertical-align: 0px;">, 和<一世mg loading="lazy" src="//www.sunglassguys.com/wp-content/ql-cache/quicklatex.com-695478a0737d337f3474357336e54ade_l3.png" class="ql-img-inline-formula quicklatex-auto-format" alt="平等的" title="Rendered by QuickLaTeX.com" height="16" width="41" style="vertical-align: -4px;">)。我们可以以适合数据类型的方式定义这些功能。

如果给出了一组函数而不是通常的>,<,并且==运算符(或以面向对象语言覆盖),则该数组可以是任意对象。例如,假设我们有一系列代表人民名称的结构。将有两个字段,名字和姓氏。订购函数将首先查看姓氏。如果两个人有相同的姓氏,那么订购函数会查看名字。

词典顺序算法,由...配制edsger w.dijkstra在编程学科(1976年),可表示为:

  • 找到最大的索引<一世mg loading="lazy" src="//www.sunglassguys.com/wp-content/ql-cache/quicklatex.com-695d9d59bd04859c6c99e7feb11daab6_l3.png" class="ql-img-inline-formula quicklatex-auto-format" alt="一世" title="Rendered by QuickLaTeX.com" height="12" width="6" style="vertical-align: 0px;">这样<一世mg loading="lazy" src="//www.sunglassguys.com/wp-content/ql-cache/quicklatex.com-0bf98d81752e9fbc381dac0e458fc77a_l3.png" class="ql-img-inline-formula quicklatex-auto-format" alt="当前[I-1]" title="Rendered by QuickLaTeX.com" height="18" width="105" style="vertical-align: -5px;"><<一世mg loading="lazy" src="//www.sunglassguys.com/wp-content/ql-cache/quicklatex.com-f22cd344c86a158ff736da978ba289fd_l3.png" class="ql-img-inline-formula quicklatex-auto-format" alt="目前[i]" title="Rendered by QuickLaTeX.com" height="18" width="74" style="vertical-align: -5px;">(如果没有这样的话<一世mg loading="lazy" src="//www.sunglassguys.com/wp-content/ql-cache/quicklatex.com-695d9d59bd04859c6c99e7feb11daab6_l3.png" class="ql-img-inline-formula quicklatex-auto-format" alt="一世" title="Rendered by QuickLaTeX.com" height="12" width="6" style="vertical-align: 0px;">存在,那么这已经是最后一个排列)
  • 找到最大的索引<一世mg loading="lazy" src="//www.sunglassguys.com/wp-content/ql-cache/quicklatex.com-43c82d5bb00a7568d935a12e3bd969dd_l3.png" class="ql-img-inline-formula quicklatex-auto-format" alt="j" title="Rendered by QuickLaTeX.com" height="16" width="9" style="vertical-align: -4px;">这样<一世mg loading="lazy" src="//www.sunglassguys.com/wp-content/ql-cache/quicklatex.com-09c887732a3ca777305ec01b52226646_l3.png" class="ql-img-inline-formula quicklatex-auto-format" alt="j \ ge我" title="Rendered by QuickLaTeX.com" height="16" width="39" style="vertical-align: -4px;">和<一世mg loading="lazy" src="//www.sunglassguys.com/wp-content/ql-cache/quicklatex.com-407f4143de78734c6ece485798ff65d0_l3.png" class="ql-img-inline-formula quicklatex-auto-format" alt="当前[J-1] <=电流[{i - 1}]" title="Rendered by QuickLaTeX.com" height="18" width="229" style="vertical-align: -5px;">
  • 交换<一世mg loading="lazy" src="//www.sunglassguys.com/wp-content/ql-cache/quicklatex.com-ec3ef903bcd58c3e8c628286960ec2fb_l3.png" class="ql-img-inline-formula quicklatex-auto-format" alt="电流[J-1]" title="Rendered by QuickLaTeX.com" height="18" width="107" style="vertical-align: -5px;">和<一世mg loading="lazy" src="//www.sunglassguys.com/wp-content/ql-cache/quicklatex.com-764156ae3c892f3963c3de3698db0d76_l3.png" class="ql-img-inline-formula quicklatex-auto-format" alt="当前的(张{})" title="Rendered by QuickLaTeX.com" height="18" width="105" style="vertical-align: -5px;">
  • 将后缀从at开始反转<一世mg loading="lazy" src="//www.sunglassguys.com/wp-content/ql-cache/quicklatex.com-f22cd344c86a158ff736da978ba289fd_l3.png" class="ql-img-inline-formula quicklatex-auto-format" alt="目前[i]" title="Rendered by QuickLaTeX.com" height="18" width="74" style="vertical-align: -5px;">

QuickLatex.com呈现

该算法返回下一个字典排列。如果输入是最大的,则数组不变<一世mg loading="lazy" src="//www.sunglassguys.com/wp-content/ql-cache/quicklatex.com-9bc17dfa0089af1038a7d08fde8ea8d7_l3.png" class="ql-img-inline-formula quicklatex-auto-format" alt="假" title="Rendered by QuickLaTeX.com" height="17" width="42" style="vertical-align: -4px;">返回。有趣的是,如果我们有重复的元素,算法将跳过它们来寻找序列中的下一个。

7.结论

在本文中,我们审核了我们可以使用来计算它们的排列和算法。我们发现具有有效实现的重要性,因为排列数量随着元素的数量迅速上升。结果,我们更喜欢非递归方法,因为递归固有地使用大量的存储空间。

我们提出了两种这样的方法:Heap的排序算法和QuickPerm算法。虽然这些算法产生的排列没有特定的顺序,我们提出了另一类排列算法,以词典顺序给出排列。

评论在本文上关闭!