算法探索:Johnson - Trotter 与蜘蛛旋转算法解析
1. Johnson - Trotter 算法介绍
Johnson - Trotter 算法是一种用于生成给定列表所有排列的方法,其特点是从一个排列到下一个排列的转换通过相邻元素的单次换位来实现。我们的目标是计算该算法的无循环版本,主要思路是利用广义蛇形积 boxall 的无循环程序。
2. 递归公式
对于长度大于 1 的列表,其转换是根据长度为 n - 1 的列表的转换递归定义的。给列表元素从 0 到 n - 1 标记位置,列表表示为 xs ++ [x] 。首先进行向下运行 [n - 1, n - 2, ..., 1] ,其中转换 i 表示“交换位置 i 和位置 i - 1 的元素”,这会将 x 从最后位置移动到第一个位置。例如,对字符串 “abcd” 应用转换 [3, 2, 1] 会得到三个排列 “abdc”、“adbc” 和 “dabc”。
接下来,假设生成 xs 排列的转换为 [j1, j2, ...] ,对当前排列 [x] ++ xs 应用转换 j1 + 1 (因为 xs 现在相对于 x 向右移动了一个位置),
超级会员免费看
订阅专栏 解锁全文
5307

被折叠的 条评论
为什么被折叠?



