我希望找到两个等长字符串中有多少不同的字符。我发现异或算法被认为是最快的,但它们返回以位为单位表示的距离。我希望结果以字符表示。假设 "pet" 和 "pit" 的距离为 1,但 'e' 和 'i' 可能有两个不同的位,因此异或返回 2。
我写的函数是:
我写的函数是:
// na = length of both strings
unsigned int HammingDistance(const char* a, unsigned int na, const char* b) {
unsigned int num_mismatches = 0;
while (na) {
if (*a != *b)
++num_mismatches;
--na;
++a;
++b;
}
return num_mismatches;
}
能不能让它变得更快一些呢?也许可以使用一些底层命令或实现不同的算法?
系统信息:Intel Xeon X5650上的Gcc 4.7.2
谢谢。
0
。但是,如果可以设计出更短的无分支指令序列,则可能不是最优的 - 查找无分支条件或无分支代码。 - didierc