我在Visual Studio 2010上实现C++二进制数组的Fast Popcount指令或汉明距离?
我有两个二进制数组。例如,
array1[100] = {1,0,1,0,0,1,1, .... }
array2[100] = {0,0,1,1,1,0,1, .... }
为了计算和的array1
和array2
的xor
结果Hamming distance之间array1
array2
, array3[100]
商店。
然后我必须计算array3
中的1
位的数量。要做到这一点,我知道我可以使用__popcnt
指令。
现在,我在做类似如下:
popcnt_result = 0;
for (i=0; i<100; i++) {
popcnt_result = popcnt_result + __popcnt(array3[i]);
}
它显示了一个很好的结果,但速度很慢。我怎样才能让它更快?
是int'的'这些阵列?它们只包含的值'0'或'1'? – Blastfurnace
是否可以用1位(而不是字节)表示每个“数组条目”? – reuben
@Blastfurnace是的,我有二进制整数数组,所以只有0或1 – user1498253