同じ長さの 2 つの文字列が何文字異なるかを調べたいと思います。xoring アルゴリズムが最も高速であると考えられていることがわかりましたが、それらはビットで表された距離を返します。結果を文字で表現したい。"pet" と "pit" の距離は 1 文字で表現されているが、'e' と 'i' は 2 つの異なるビットを持つ可能性があるため、xoring は 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
ありがとうございました