{1,...,n}的所有k元素子集的格雷码

时间:2015-05-06 19:11:13

标签: gray-code

我正在寻找一种迭代n个元素集的所有k个元素子集的算法。我不想明确生成所有这些子集。

有一个简单的算法可以做到这一点,即以词典方式对相应的位向量进行排序,然后从当前子集转到下一个。

然而,我寻求一种算法,每步只能切换2位。我已经读过这样的代码是一个名为" grey code"但我没有找到解决问题的算法。

是否有直接的实施?

1 个答案:

答案 0 :(得分:1)

这不是一个完整的答案,但它也不适合发表评论。

与灰色代码的关系是镜像。每当格雷码设置一个新位时,它下面的所有位都从该点开始向后(直到该位清零或高于该位反转逆转)。

要使用字典顺序重现这一点,您需要反转每次交换后迭代剩余位的顺序。

您可以将其实现为迭代变换,采用常规排序,并在每次遇到从1到0的转换时反复颠倒剩余位的顺序。