【发布时间】:2009-03-13 16:26:22
【问题描述】:
给定一个长度为 N 的查询字符串 Q,和一个长度正好为 N 的 M 个序列的列表 L,找到 L 中与 Q 不匹配位置最少的字符串的最有效算法是什么?例如:
Q = "ABCDEFG";
L = ["ABCCEFG", "AAAAAAA", "TTAGGGT", "ZYXWVUT"];
answer = L.query(Q); # Returns "ABCCEFG"
answer2 = L.query("AAAATAA"); #Returns "AAAAAAA".
显而易见的方法是扫描 L 中的每个序列,使搜索花费 O(M * N)。有没有办法在亚线性时间内做到这一点?我不在乎将 L 组织到某个数据结构中是否有很大的前期成本,因为它会被查询很多次。此外,任意处理并列分数也可以。
编辑:澄清一下,我正在寻找汉明距离。
【问题讨论】:
标签: algorithm string language-agnostic