Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 许多字符串中的相似字符串_C++_C_String_Algorithm - Fatal编程技术网

C++ 许多字符串中的相似字符串

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

我有大量字符串,比如N,我必须从中找出类似字符串的集合。
例如:

输入:
可编程
堆叠

堆栈溢出
trie
节目
古怪的

输出:

set 1:
可编程
程序

set 2:
堆栈溢出
堆叠

set 3:

trie

set 4:
oddoneout

那么,什么是高效的
算法
(在空间和时间上)

1) 使用levenshtein距离是一个很好的方法,但我们仍然必须为每个字符串搜索所有n-1字符串

2) 使用trie可能很好(就前缀而言),但不是最好的方法,因为它不能比较像al
g
orithm和al
q
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算法可能会有一些变化?