找到具有特定汉明重量的下一个数字

时间:2015-07-11 12:20:15

标签: permutation bit-shift bitset hammingweight

给定某个整数 x ,我希望计算下一个 更高整数 y 哪个有一定的汉明重量 w 。请注意x的汉明重量 也必须是w。

因此,例如x = 10(1010)且w = 4,结果应为y = 15(1111)。

显然,我可以通过增加x来实现这一点,但对于高数字来说这将是一个非常缓慢的解决方案。我可以通过某种方式通过位移来实现这一目标吗?

1 个答案:

答案 0 :(得分:2)

有三种情况:汉明重量(按比例人口计数)减少,不变或增加。

增加汉明重量

设置足够的连续低位0位以达到所需的权重。

这是有效的,因为每个连续的低位是你可以添加的最小值,它们的总和是足以增加汉明重量的最小差值。

汉明重量不变

  1. 添加最低位1位的值。
  2. 如有必要,增加上面的汉明重量。
  3. 这是有效的,因为最低设置位的值是导致进位发生的最低值。添加任何较低的位值只会设置该位,并增加汉明重量。

    只要添加"携带一个,"位将被清除。产生的重量必须相等或减少。如果由于一系列进位而清除了几个位,则需要通过设置低位来增加补偿权重。

    降低汉明重量

    1. 清除足够的低位1位以达到新的理想重量。
    2. 按照上述流程保持体重不变。
    3. 这是有效的,因为清除低位1位通过减去最小可行量来找到具有所需权重的前面数字。从前面的正确重量数量,按照"未改变的重量"算法达到下一个数字。