【发布时间】:2012-07-05 01:07:43
【问题描述】:
我在 Visual Studio 2010 C++ 上实现
我有两个二进制数组。例如,
array1[100] = {1,0,1,0,0,1,1, .... }
array2[100] = {0,0,1,1,1,0,1, .... }
要计算array1 和array2 之间的Hamming distance,
array3[100] 存储array1 和array2 的xor 结果。
然后我必须计算array3 中1 的位数。为此,我知道我可以使用__popcnt 指令。
现在,我正在做如下的事情:
popcnt_result = 0;
for (i=0; i<100; i++) {
popcnt_result = popcnt_result + __popcnt(array3[i]);
}
它显示了一个很好的结果,但速度很慢。我怎样才能让它更快?
【问题讨论】:
-
是
int的那些数组吗?它们只包含0或1的值吗? -
您是否可以仅用 1 位(而不是字节)来表示每个“数组条目”?
-
@Blastfurnace 是的,我有二进制整数数组,所以只有 0 或 1
-
@reuben 是的,我想这样做..
标签: c++ performance bit-manipulation hamming-distance