如何解决比较两个元素数组并有效查找最相似对的算法
我有两个分别为长度m
和n
的字符串数组,其中所有字符串的长度均为x
,我想找到包含以下内容的最佳匹配对:尽可能多的普通字母:
在一个简单的情况下,只需考虑这两个字符串
Sm = [AAAA,BBBB]
Sn = [ABBA,AAAA,CCCC]
预期结果(匹配2对,剩下2个字符串):
对1:由于得分4,AAAA
-> AAAA
对2:由于得分2,BBBB
-> ABBA
Sn
中单独保留的字符串:
-
AAAA
,因为Sm
中的相同字符串已经被匹配 -
CCCC
,因为无法匹配任何
得分矩阵:
我当前的方法(慢):
- 获取字符串长度
x
,这是最高分(所有字母均相同的情况)-在这种情况下为4
- 蛮力比较
m
xn
次会生成上述得分矩阵-在这种情况下,是2*4
次 - 从
x
到1
的循环:(在这种情况下,它从4
到1
循环)- 遍历分数矩阵并弹出分数为
x
的字符串对
- 遍历分数矩阵并弹出分数为
- 将其余未配对的字符串或得分为
0
的字符串标记为单独
问题:
当生成分数矩阵时,我当前的方法在O(mn)上很慢(x
不会很大,所以我在这里假设const)。
有没有比O(mn)复杂度更高的算法?
解决方法
对不起,我没有足够的代表来提供评论,但是很久以前我在一个项目中写了一个Levenshtien Distance算法。具体请参见this项目,以获取一些有用的见识。
,据我所知,您正在做最有效的事情。为了完全彻底,您需要将Sn中的每个字符串与Sn中的每个字符串进行比较,因此最好的算法是O(mn)。少了就不会将每个元素都与每个元素进行比较。
一种优化可能是删除所有重复项,但这在大多数情况下会导致性能下降,在几乎所有情况下,危害都可能大于弊端。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。