比较两个元素数组并有效查找最相似对的算法

问题描述

我有两个分别为长度mn的字符串数组,其中所有字符串的长度均为x,我想找到包含以下内容的最佳匹配对:尽可能多的普通字母:

一个简单的情况下,只需考虑这两个字符串

Sm = [AAAA,BBBB]
Sn = [ABBA,AAAA,CCCC]

预期结果(匹配2对,剩下2个字符串):

对1:由于得分4,AAAA-> AAAA

对2:由于得分2,BBBB-> ABBA

Sn中单独保留的字符串:

  1. AAAA,因为Sm中的相同字符串已经被匹配
  2. CCCC,因为无法匹配任何

得分矩阵:

Score matrix

我当前的方法(慢):

  1. 获取字符串长度x,这是最高分(所有字母均相同的情况)-在这种情况下为4
  2. 蛮力比较m x n次会生成上述得分矩阵-在这种情况下,是2*4
  3. x1的循环:(在这种情况下,它从41循环)
    • 遍历分数矩阵并弹出分数为x的字符串对
  4. 将其余未配对的字符串或得分为0的字符串标记为单独

问题:

生成分数矩阵时,我当前的方法在O(mn)上很慢(x不会很大,所以我在这里假设const)。 有没有比O(mn)复杂度更高的算法?

解决方法

对不起,我没有足够的代表来提供评论,但是很久以前我在一个项目中写了一个Levenshtien Distance算法。具体请参见this项目,以获取一些有用的见识。

,

据我所知,您正在做最有效的事情。为了完全彻底,您需要将Sn中的每个字符串与Sn中的每个字符串进行比较,因此最好的算法是O(mn)。少了就不会将每个元素都与每个元素进行比较。

一种优化可能是删除所有重复项,但这在大多数情况下会导致性能下降,在几乎所有情况下,危害都可能大于弊端。