假设我们有lexicographicaly整数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
Run Code Online (Sandbox Code Playgroud)
因此函数f(3,5)将返回1;
该函数将始终采用相同汉明权重(相同的设定位数)的参数.
不应该使用任何数组.
任何想法都会很棒.
编辑
忘记提及,对于任何设定的比特大小(汉明重量),我将始终使用第一个词典排列(base)作为第一个参数.
例如
hamming weight 1 base = 1
hamming weight 2 base = 3
hamming weight 3 base = 7
...
Run Code Online (Sandbox Code Playgroud)
编辑2
解决方案适用于任何汉明重量,抱歉我不够具体.
具有数
x = 2 k 1 + 2 k 2 + ... + 2 k m
其中k 1 <k 2 <... <k m
可以声称数字x的位置在按字典顺序排列的所有数字序列中相同的汉明权重是
lex_order(X)= C(K 1,1)+ C(K 2,2)+ ... + C(K 米,米)
其中,C(N,M)= N!/米! /(纳米)!如果m> n,则为0或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