通过汉明权重,模位移位枚举整数

时间:2018-09-20 20:06:18

标签: permutation bit-shift bitset hammingweight

我需要从如下所述的有序数组中采样整数。

k为正整数。

  • 所有条目都是[0,2^k)

  • 中的非负整数
  • 列表从0

  • 开始
  • 所有(递增的)汉明权重为1模移位(即乘以2)的整数。
  • 汉明权重为2模位的所有(递增)整数移位,跟随等。

k=5的数组如下:

        0 ( weight 0 )
        1 ( weight 1 )
       11 ( weight 2 )
      101
     1001
    10001
      111 ( weight 3 )
     1011
     1101
    10011
    10101
    11001 

特别是,给定列表中的一个条目,我想通过算法推断出下一个条目。

我知道这可以通过多种方式来完成(例如,参见this question)。为了完整起见,与上面的数组相反,这是其他数组的样子:

        0 ( weight 0 )
        1 ( weight 1 )
       10
      100
     1000
    10000 
       11 ( weight 2 )
      101
      110
  ... etc

1 个答案:

答案 0 :(得分:1)

我想出了答案,以防万一有人需要。

给出一个条目,加上第二个最低位并进位。如果要减少汉明重量,请从第二个最低有效位置开始输入必要的数字1。