我有3个文本文件。一个带有一组要搜索的文本
(例如ABCDEAABBCCDDAABC)
一个包含许多要在文本中搜索的模式
(例如AB,EA,CC)
最后一个包含每个字符的频率
(例如:
A 4
B 4
C 4
D 3
E 1
)
我正在尝试编写一个算法来查找每个模式中出现频率最低的字符,并在字符串中搜索这些事件,然后检查周围的字母以查看字符串是否匹配。目前,我分别在自己的向量中有字符和频率。 (其中每个向量的i = 0将分别为A 4。
有更好的方法吗?也许更快的数据结构?此外,一旦找到最不常见的字母,有哪些有效的方法可以检查模式字符串与文本字符串的一部分?
答案 0 :(得分:2)
您可以运行Aho-Corasick算法。它的复杂性(一旦预处理 - 其复杂性与文本无关 - 完成),是Θ(n + p),其中
n 是文本的长度
p 是找到的匹配总数
这基本上是最佳的。试图跳过看似频繁的字母是没有意义的:
如果字母不是匹配项的一部分,则算法需要单位时间。
如果该字母是匹配项的一部分,则该匹配包括所有字母,不论其在文本中的频率如何。
答案 1 :(得分:0)
您可以运行一个迭代循环来保持实例计数,并检查字符是否出现超过一定百分比的次数,基于搜索的总字符数和字符串的总长度。即如果你有100个字符和5种可能性,任何出现超过百分之二十的字符都可以打折,通过传递与该字符匹配的任何值来提高效率。