有许多方法可以迭代 n位格雷码。其中一些比其他方法更有效率。然而,我实际上并不需要格雷码,而是想要迭代在格雷码列表中更改的位索引,而不是实际的格雷码。例如,取这个3位格雷码列表:
一种方法是按顺序计算格雷码,并对于每个连续的对(x, y)计算(x XOR y)以确定哪个位发生了变化,然后取(x XOR y)的以2为底的整数对数。
但是我需要迭代尽可能快,我的兴趣将集中在30-40位格雷码上。
我想输出3、2、3、1、3、2、3。这告诉我们我们需要更改第3位、第2位、第3位等等才能得到这个列表。这里我从左边开始从1开始索引。000, 001, 011, 010, 110, 111, 101, 100
一种方法是按顺序计算格雷码,并对于每个连续的对(x, y)计算(x XOR y)以确定哪个位发生了变化,然后取(x XOR y)的以2为底的整数对数。
但是我需要迭代尽可能快,我的兴趣将集中在30-40位格雷码上。
有没有一种有效的方法来做到这一点?