给定某个整数 x ,我希望计算下一个 更高整数 y 哪个有一定的汉明重量 w 。请注意x的汉明重量 不 也必须是w。
因此,例如x = 10(1010)且w = 4,结果应为y = 15(1111)。
显然,我可以通过增加x来实现这一点,但对于高数字来说这将是一个非常缓慢的解决方案。我可以通过某种方式通过位移来实现这一目标吗?
答案 0 :(得分:2)
有三种情况:汉明重量(按比例人口计数)减少,不变或增加。
设置足够的连续低位0位以达到所需的权重。
这是有效的,因为每个连续的低位是你可以添加的最小值,它们的总和是足以增加汉明重量的最小差值。
这是有效的,因为最低设置位的值是导致进位发生的最低值。添加任何较低的位值只会设置该位,并增加汉明重量。
只要添加"携带一个,"位将被清除。产生的重量必须相等或减少。如果由于一系列进位而清除了几个位,则需要通过设置低位来增加补偿权重。
这是有效的,因为清除低位1位通过减去最小可行量来找到具有所需权重的前面数字。从前面的正确重量数量,按照"未改变的重量"算法达到下一个数字。