我正在使用Levenshtein距离,这是一个字符串度量,用于测量两个序列之间的差异量,以找出两个字符串之间的差异百分比。我想使用一个更好的方法来声明字符串是相似的,使用字符串中的单词。
例如:假设我有一个包含2个段落的字符串,第二个字符串只包含第一个字符串的第二个段落。
我知道我可以比较每个字符串的第一个单词,然后是第二个单词等,但是如果像我上一个例子那样的情况发生的话就不会有效。
我在考虑将第一个字符串中的第一个单词与第二个字符串中的所有单词进行比较,但我担心这会使进程变慢。
答案 0 :(得分:1)
将第一个字符串中的每个单词与第二个字符串中的所有单词进行比较可以产生比Levenshtein距离略好的性能,但是会处于相同的数量级。 Levenstein距离是O(m * n),你的算法是O(m ^ 2)(其中m和n是字符串的长度)。
如果您只关心匹配单词(例如“颜色”和“颜色”将被视为两个完全不同的字符串)和忽略单词顺序(例如“红色“和”颜色红色“将被视为两个相同的字符串)并且您不关心算法的空间复杂性,您可以创建第一个字符串的单词索引(例如哈希表)然后比较每个对该索引的第二个字符串中的单词。如果您的索引使用具有恒定时间插入和删除的数据结构,则会产生复杂度为O(m + n)的算法。