计算排列的算法
Algorithm to calculate permutations
我知道 Heap 的算法可以计算给定序列的排列,但是如果我想计算给定序列 N 的 k 个元素子集的排列怎么办?
我这次想到的方案是回溯法,但是每次删除一个子元素,递归调用置换函数,都需要生成一个新的子元素序列。这听起来很昂贵,我想知道是否有更好的解决方案
- 使用算法从 N 组中生成大小为 K 的组合。
(从 SO 问题中选择一个:Algorithm to return all combinations of k elements from n)。
- 使用结果,应用 Heap's Algorithm to create all permutations of this k-element subset (or another Algorithm to generate all possible permutations of a list)。
- 生成下一个大小为 K 的子集并重复(步骤 1 和 2),直到所有大小为 K 的子集都被枚举。
我知道 Heap 的算法可以计算给定序列的排列,但是如果我想计算给定序列 N 的 k 个元素子集的排列怎么办?
我这次想到的方案是回溯法,但是每次删除一个子元素,递归调用置换函数,都需要生成一个新的子元素序列。这听起来很昂贵,我想知道是否有更好的解决方案
- 使用算法从 N 组中生成大小为 K 的组合。 (从 SO 问题中选择一个:Algorithm to return all combinations of k elements from n)。
- 使用结果,应用 Heap's Algorithm to create all permutations of this k-element subset (or another Algorithm to generate all possible permutations of a list)。
- 生成下一个大小为 K 的子集并重复(步骤 1 和 2),直到所有大小为 K 的子集都被枚举。