我正在寻找一种迭代n个元素集的所有k个元素子集的算法。我不想明确生成所有这些子集。
有一个简单的算法可以做到这一点,即以词典方式对相应的位向量进行排序,然后从当前子集转到下一个。
然而,我寻求一种算法,每步只能切换2位。我已经读过这样的代码是一个名为" grey code"但我没有找到解决问题的算法。
是否有直接的实施?
答案 0 :(得分:1)
这不是一个完整的答案,但它也不适合发表评论。
与灰色代码的关系是镜像。每当格雷码设置一个新位时,它下面的所有位都从该点开始向后(直到该位清零或高于该位反转逆转)。
要使用字典顺序重现这一点,您需要反转每次交换后迭代剩余位的顺序。
您可以将其实现为迭代变换,采用常规排序,并在每次遇到从1到0的转换时反复颠倒剩余位的顺序。