一尘不染

确定两个整数之间的字典距离

algorithm

假设我们有字典字典整数,3,5,6,9,10,12 or 0011,0101,0110,1001,1010,1100每个整数都有两位设置。

我想要的是找出说出35使用尽可能少的运算之间的距离(它们之间有多少个字典排列,而不进行实际排列)。

距离表如下

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;

该函数将始终接受相同汉明权重(相同数量的设置位)的参数。

不应使用任何数组。

任何想法都很棒。

编辑

忘了提及,对于任何设置的位大小(汉明权重),我将始终使用第一个字典编排permutation(base)作为第一个参数。

例如

hamming weight 1 base = 1
hamming weight 2 base = 3
hamming weight 3 base = 7
...

编辑2

该解决方案应该可以解决任何麻烦的问题,抱歉,我还不够具体。


阅读 267

收藏
2020-07-28

共1个答案

一尘不染

具有数字
x = 2 k 1 +2 k 2 + … + 2 k m
,其中k 1 <k 2 <… 则可以说数字x在所有数字的字典顺序中的位置为相同的汉明权重是
lex_order(X)= C(K 1,1)+ C(K 2,2)+ ... + C(K 米,米)
其中,C(N,M)= N!/米! /(nm)!如果m> n则为0

例:

3 = 2 0 + 2 1
lex_order(3)= C(0,1)+ C(1,2)= 0 + 0 = 0

5 = 2 0 + 2 2
lex_order(5)= C(0,1)+ C(2,2)= 0 + 1 = 1

6 = 2 1 + 2 2
lex_order(6)= C(1,1)+ C(2,2)= 1 + 1 = 2

9 = 2 0 + 2 3
lex_order(9)= C(0,1)+ C(3,2)= 0 + 3 = 3

2020-07-28