📜  使用迭代的字符串的所有置换

📅  最后修改于: 2021-05-04 17:59:17             🧑  作者: Mango

排列(也称为“排列编号”或“顺序”)是将有序列表S的元素重新排列为与S本身一一对应的关系。长度为n的字符串为n!排列(来源:Mathword)

以下是字符串ABC的排列。
ABC ACB BAC BCA CBA CAB

我们在这里和这里讨论了不同的递归方法来打印排列。

如何迭代打印所有排列?
一个简单的解决方案,使用n-1个元素的置换来生成n个元素的置换。

例如,让我们看看如何使用大小为2的排列来生成大小为3的排列。

两个元素的排列是1 2和2 1。
可以通过在大小为2的所有排列的不同位置插入3来获得三个元素的排列。
将3插入1 2的不同位置会导致1 2 3、1 3 2和3 1 2。
将3插入2 1的不同位置会导致2 1 3、2 3 1和3 2 1。

为了生成大小为4的排列,我们考虑大小为3的所有六个以上排列,并在每个排列的不同位置插入4。

一个有效的解决方案是使用Johnson和Trotter算法来迭代生成所有排列。

Johnson和Trotter算法