A类置换一个$n$-元素对象集是这些对象的线性顺序,即一些对象放在第一个位置,另一个放在第二个位置,等等。为了简单起见,我们将置换看作集合$[n]:=\{1,2,\ldots,n\}$上的双射。这样的双射$\pi:[n]\rightarrow[n]$可以用许多不同的方式表示。我们使用单行符号$\pi=(\pi(1),\pi。例如,$[3]=\{1,2,3\}$的所有排列都是$1231322132312321$。下图说明了此网站上运行的所有十一个算法的输出,用于生成$[4]=\{1,2,3,4\}$的所有排列,其中1=红色,2=黄色,3=绿色,4=蓝色。
莱克斯 | 科尔克斯 | 扎克 | 威尔斯 | 堆 | 嘴唇10 | 嘴唇16 | SJT公司 | 埃尔 | 德尔 | SiT公司 | SiTGC公司 | 软件 | Corb公司 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
前十二个算法是约尔格·阿恩特的FXT库的一部分。字典排序算法在Knuth的书中解释为算法L【第7.2.1.2节,Knu11】。Zaks[Zak84]发现了通过反转前缀生成排列的算法。在换位排序中,任何两个连续置换在置换的两个条目的交换中是不同的。Wells[Wel61]、Heap[Hea63]和Lipski[Lip79]以更一般的形式描述了这种通过转位的排序。FXT库中提供了一些Lipski的算法,其中两个算法正在该网站上运行(除了Wells和Heap的算法,这是Lipski算法的特例;参见[Arn10])。所有的Lipski排序,特别是Wells和Heap排序,都具有相同后缀的排列连续出现的性质。通过相邻换位生成置换的算法也称为Steinhaus-Johnson-Trotter算法[Ste64,Joh63,Tro62]或“普通变换”。在Knuth的书[Knu11]中,它被描述为算法P。使用星形转置的算法总是将置换的第一个元素与其他元素交换。它是由Gideon Ehrlich发现的,在Knuth的书[Knu11]中被描述为算法E。在错位顺序中,没有两个连续排列在同一位置有任何元素。Savage的调查[Sav97]中描述了该算法。在排列的单轨排序中,排列列表中的每一列都是第一列的循环移位。在单轨Gray码排序中,除了前面的属性外,任何两个连续排列最多只能有两个换位(奇数$n$只有一个换位)。这两种算法在Arndt的FXT库文档[Arn10]中进行了描述。通过循环排列排列,可以很好地看到这两种排序的单轨特性,从而产生一个轮子,其中任何两个圆形轨道的区别仅在于旋转(左:单轨排序,右:单轨格雷码排序)。
每个步骤中倒数第二个算法要么交换排列的前两个条目,要么将整个排列向左旋转。Knuth的书[第7.2.1.2节中的问题71,Knu11]中提出了是否存在针对所有$n$的此类列表,并且Sawada和Williams在论文中描述了解决方案[SW18]。每个步骤中的最后一个算法将置换的前缀向左旋转一个位置,Corbett[Cor92]在一篇论文中对此进行了描述。
置换由以下公式推广多集合置换和彩色排列,在这些部分中可以找到更多生成它们的算法。