C++ 许多字符串中的相似字符串
我有大量字符串,比如N,我必须从中找出类似字符串的集合。C++ 许多字符串中的相似字符串,c++,c,string,algorithm,C++,C,String,Algorithm,我有大量字符串,比如N,我必须从中找出类似字符串的集合。 例如: 输入: 可编程 堆叠 树 堆栈溢出 trie 节目 古怪的 输出: set 1: 可编程 程序 set 2: 堆栈溢出 堆叠 set 3: 树 trie set 4: oddoneout 那么,什么是高效的算法(在空间和时间上) 1) 使用levenshtein距离是一个很好的方法,但我们仍然必须为每个字符串搜索所有n-1字符串 2) 使用trie可能很好(就前缀而言),但不是最好的方法,因为它不能比较像algorithm和al
例如: 输入:
可编程
堆叠
树
堆栈溢出
trie
节目
古怪的
输出:
set 1:
可编程
程序
set 2:
堆栈溢出
堆叠
set 3:
树
trie
set 4:
oddoneout
那么,什么是高效的算法
(在空间和时间上)
1) 使用levenshtein距离是一个很好的方法,但我们仍然必须为每个字符串搜索所有n-1字符串
2) 使用trie可能很好(就前缀而言),但不是最好的方法,因为它不能比较像alg
orithm和alq
kefgjwfkvvjs这样的字符串,它们根本不相似
两个字符串的相似性:1) 两者中不同字符的数量越少,它们就越相似
2) 只需在一个或两个字符串中添加一些字符,即可将一个字符串转换为另一个字符串
请分享你的观点
请不要发表关于外部软件等的文章。你能做一个基于点的系统吗?比如说,每个匹配的字符都得1分,其他发音相似的字母(或键盘上接近它的字母或接近音标的字母得0.5分或其他什么),而其他不匹配的字母得0分 因此,您有
树
,希望找到类似的单词
程序
得1分,因为只有r匹配在正确的位置
trie
得到3
例如,trwe
get 3.5
但是,你要以宽容的态度看待分数。这个公差决定了你希望它离你有多近
但这确实取决于你在寻找什么
这是一个完全没有空气的东西,所以不知道它会有多好的工作。这只是一个想法。您对两个字符串相似性的限制听起来像是编辑距离问题: 您可以通过O(NxM)中的动态规划算法获得两个字符串之间的最小编辑距离,其中N和M是每个字符串的长度 您可以设置一个阈值数字,上面写着“字符串的相似程度如何”,设置该数字后,您可以尝试一种“全对全”算法,以检查所有字符串之间的每个可能的最小编辑距离。我想你可以用这些信息来制作布景 如果您知道问题中的字符串很短(比如长度<100),那么这种方法可能是一个很好的解决方案 编辑: 设K为要在集合中分类的字符串数,N为字符串的平均长度。我提出的算法的复杂度是O((K^2)x(N^2))
(这就是为什么我们希望N是一个小数字)字符串相似性的定义是什么?那么,单词
聪明
和聪明
相似吗?你必须定义字符串的相似性
@Rndm@rondogianis Aristophanes增加了相似性的含义不平凡:如果天气不好,是否会考虑是否感觉良好。Soundex算法可能会有一些变化?