Я хочу найти, сколько разных символов имеет две строки одинаковой длины. Я обнаружил, что алгоритмы xoring считаются самыми быстрыми, но они возвращают расстояние, выраженное в битах. Я хочу, чтобы результаты были выражены в символах. Предположим, что «животное» и «яма» есть расстояние 1 выражается в символах, а «е» и «я» может иметь два различных бита, так XORing возвращается 2.Охота на самую быструю реализацию Хэмминга С C
Функция я написал является:
// 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;
}
Может ли он стать быстрее? Возможно использование некоторых команд нижнего уровня или реализация другого алгоритма?
система: Gcc 4.7.2 на Intel Xeon X5650
Спасибо
У вас возникли проблемы с производительностью, чтобы вы попытались ее оптимизировать? – Andrey
xoring на отдельных персонажах может работать, так как вы хотите определить, есть ли разница между двумя символами, вы их или проверяете, что результат отличается от «0». Однако это может быть не оптимальным, если можно разработать более короткую разветвленную последовательность команд - искать ветвящиеся состояния или нераспределенный код. – didierc
@ Andrey 2 Это жизненно важная часть очень интенсивного процесса. Он работает 5 миллиардов раз в моей программе. –