Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/image/5.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
Algorithm 检查一组字符串是否与输入文本匹配的算法?_Algorithm - Fatal编程技术网

Algorithm 检查一组字符串是否与输入文本匹配的算法?

Algorithm 检查一组字符串是否与输入文本匹配的算法?,algorithm,Algorithm,因此,我们有一组多个字符串,希望最优算法检查输入文本中是否可以找到这些字符串。重要的是,我们对查找所有匹配字符串不感兴趣,只需找到一个即可 我发现:它看起来真的很好,但它找到了所有匹配的模式。如果我们不需要额外的信息,有没有办法更快地获取信息 当然,我们可以在找到第一个匹配模式时终止Aho-Corasick算法,但也许还有另一种方法可以更快地解决这类问题?您无法将其降低很多,因为复杂度很高 算法的复杂度是线性的,模式的长度加上搜索文本的长度加上输出匹配的数量 显然,你必须仔细阅读每一个模式和文本

因此,我们有一组多个字符串,希望最优算法检查输入文本中是否可以找到这些字符串。重要的是,我们对查找所有匹配字符串不感兴趣,只需找到一个即可

我发现:它看起来真的很好,但它找到了所有匹配的模式。如果我们不需要额外的信息,有没有办法更快地获取信息

当然,我们可以在找到第一个匹配模式时终止Aho-Corasick算法,但也许还有另一种方法可以更快地解决这类问题?

您无法将其降低很多,因为复杂度很高

算法的复杂度是线性的,模式的长度加上搜索文本的长度加上输出匹配的数量

显然,你必须仔细阅读每一个模式和文本


唯一要减少的是输出匹配的数量。但这真的很简单。在原始算法中,一旦满足接受状态,它将输出与之匹配的所有字典项。对于您的变体,只需将接受状态标记为接受并输出一些“接受”符号,或者在构造FSM时任意选择一个字典项并输出。

只需构造一个正则表达式,让编程语言库为您进行艰苦的工作和优化。我最近在C#中写道:

字典搜索大约在O(N)运行,使内存总线饱和。或者,如果文件在磁盘上:I/O通道。因此,有效地说,这是无法改进的。