Algorithm 计算置换的算法

Algorithm 计算置换的算法,algorithm,language-agnostic,Algorithm,Language Agnostic,我知道Heap计算给定序列排列的算法,但是如果我想计算给定序列N的k元素子集的排列呢 我这次想到的解决方案是回溯,但每次删除一个元素并递归调用置换函数时,它都需要生成一个新的子元素序列。这听起来很昂贵,我想知道是否有更好的解决方案 使用算法从N的集合生成大小K的组合。 (从SO问题中选择任何一个:) 使用结果,应用以创建此k元素子集(或另一个)的所有置换 生成大小K的下一个子集并重复(步骤1和2),直到已枚举大小K的所有子集 n和k有多大?不管怎样,你都需要(n!-k!)答案,所以这个问题会变得

我知道Heap计算给定序列排列的算法,但是如果我想计算给定序列N的k元素子集的排列呢

我这次想到的解决方案是回溯,但每次删除一个元素并递归调用置换函数时,它都需要生成一个新的子元素序列。这听起来很昂贵,我想知道是否有更好的解决方案

  • 使用算法从N的集合生成大小K的组合。 (从SO问题中选择任何一个:)
  • 使用结果,应用以创建此k元素子集(或另一个)的所有置换
  • 生成大小K的下一个子集并重复(步骤1和2),直到已枚举大小K的所有子集

  • n和k有多大?不管怎样,你都需要(n!-k!)答案,所以这个问题会变得非常非常迅速。你是对的,它的复杂性会令人望而生畏,但是在每个递归中分配空间也是非常昂贵的。我只是想知道是否有一个递归的标准算法来生成置换(N,k)@Albert有一个迭代算法来生成给定集合的置换。你在找那个吗?@Vesper那可能不错。它是否处理k个子集?对结果使用后跟Heap的算法,生成下一个大小的k个子集并重复。