java高性能计算两个二进制串之间的汉明距离 5C

我需要计算两个二进制字符串之间的汉明距离,但是利用类似

 int i = int1 ^ int2;
 int hamming = 0 ;
 while(i != 0){
            if () {
                    hamming ++;
                    i = i & (i-1);
            }
 }

之类的方法计算时,效率太慢,假如我5千万条记录,要求2s内计算完毕,应该使用什么方法,java有没有什么高效的方法直接计算汉明距离。

0

2个回答

这里有很详细的讨论

https://stackoverflow.com/questions/109023/how-to-count-the-number-of-set-bits-in-a-32-bit-integer

建议你试试 java的BitSet

可以把字符串或二进制流转成bitset

 private static BitSet fromString(String binary) {
    BitSet bitset = new BitSet(binary.length());
    int len = binary.length();
    for (int i = len-1; i >= 0; i--) {
        if (binary.charAt(i) == '1') {
            bitset.set(len-i-1);
        }
    }
    return bitset;
}

然后调用bitset.count()

0

楼主写的伪代码是int类型,,题目文字又是string串。。。

0
Fan_Xuan
夜的那种黑丶 回复ipple1986: 我的需求是128位的,但是java中没有int128类型,我看了下,对于128位字符串之间计算的话,大都需要遍历判断,速度太差,所以我才把128位字符串切割成2个long或者4个int,用的就是我上面帖的方法,但是这种方法速度也偏慢,还没有我在数据库中直接用BITCOUNT计算快。。。
一年多之前 回复
avenccssddnn
ipple1986 回复夜的那种黑丶: 确定两个数都是int类型,32比特位?如果这样的话,假设两个数是a,b,可以使用(a&0xffff)^(a>>>16) ^(b>>>16)&0xffff ^ (b&0xffff) &0xffff 来运算。
一年多之前 回复
Fan_Xuan
夜的那种黑丶 在Java中计算汉明距离我只找到了转换为int在计算的方法,有那种可以直接计算串的汉明距离的方法码
一年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!