【发布时间】:2012-11-13 08:00:18
【问题描述】:
假设我们有字典整数3,5,6,9,10,12 or 0011,0101,0110,1001,1010,1100 每个都设置了两个位。
我想要的是使用尽可能少的操作找到3 和 5 之间的距离(它们之间有多少字典排列,而不进行实际排列)。
距离表如下
3->5 = 1 or 0011->0101 = 0001
3->6 = 2 or 0011->0110 = 0010
3->9 = 3 or 0011->1001 = 0011
3->10 = 4 or 0011->1010 = 0100
3->12 = 5 or 0011->1100 = 0101
所以函数 f(3,5) 会返回 1;
该函数将始终采用相同的汉明权重(相同数量的设置位)的参数。
不应使用数组。
任何想法都会很棒。
编辑
忘了提一下,对于任何设置的位大小(汉明权重),我将始终使用第一个字典排列 (base) 作为第一个参数。
例如
hamming weight 1 base = 1
hamming weight 2 base = 3
hamming weight 3 base = 7
...
编辑 2
该解决方案应该适用于任何汉明重量,抱歉我不够具体。
【问题讨论】:
-
不,字典上 5 在 3 之后,并设置了两个位。
-
你忘记了数字 10 (1010)。
-
@ks6g10 Hamming 有 2 毫秒我无法编辑您的帖子,所以请修复它,谢谢!
-
算法可以假设位长度(在您的示例中为 4)修复(这将使设置位计数算法更快)? f(5,3) 的期望结果是什么?
-
@Lewyx 位大小将从 20->30 变为 20->30,但如果在编译时可以优化某些东西,它可以更改为静态,并且 f(5,3) 也会返回 1,但我将始终如我的编辑所示使用第一个字典排列作为第一个参数。