Вы используете строки.
Как объяснено здесь
Охота за самой быстрой реализацией Hamming Distance C
если вы можете использовать char *, то мои эксперименты заключают, что для Gcc 4.7.2 на Intel Xeon X5650 самая быстрая функция вычисления расстояния Хэмминга общего назначения для маленьких строк ( массив символов):
// 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;
}
Если ваша проблема позволяет вам установить верхний предел расстояния, так что вам не нужны большие расстояния, и этот предел всегда меньше, чем длина строк, приведенный выше пример может быть дополнительно оптимизирован для:
// na = length of both strings, dist must always be < na
unsigned int HammingDistance(const char* const a, const unsigned int na, const char* const b, const unsigned int dist) {
unsigned int i = 0, num_mismatches = 0;
while(i <= dist)
{
if (a[i] != b[i])
++num_mismatches;
++i;
}
while(num_mismatches <= dist && i < na)
{
if (a[i] != b[i])
++num_mismatches;
++i;
}
return num_mismatches;
}
Я не уверен, что const что-то делает со скоростью, но я все равно использую это ...