【发布时间】:2016-11-22 11:29:57
【问题描述】:
我有一个函数可以计算两个给定字符串的方差。有没有更快的方法(或算法)来做这样的事情?
请记住,我的琴弦的每个字母都装有 DNA,这意味着它们是 A 或 T 或 C 或 G 之一:
unsigned __int8 dis(char* FirstString, char* SecondString)
{
unsigned __int8 distanceIndex = 0;
for (unsigned __int8 i = 0; i < l; i++)
{
if (FirstString[i] != SecondString[i])
distanceIndex++;
}
return distanceIndex;
}
【问题讨论】:
-
Levenshtein Distance en.wikipedia.org/wiki/Levenshtein_distance 怎么样?
-
您可能想像拼写检查器一样使用Levenshtein distance。
-
Levenshtein 是否提供更好的时间复杂度?任何人都可以像我在上面那样实现这样的方法吗?
-
如果每个元素只有 4 个可能的值,则可以使用更紧凑的序列表示。您只能使用 2 位而不是 8 位。然后您可以计算汉明距离。 en.wikipedia.org/wiki/Hamming_distance
-
根据编译器和/或目标平台,我可以设想在循环中使用显式 8 位 int 可能比使用自然大小的 int 慢.
标签: c++ algorithm processing-efficiency cpu-speed