C++ 带最低频率字符的字符串查找Alg

C++ 带最低频率字符的字符串查找Alg,c++,algorithm,string-search,C++,Algorithm,String Search,我有3个文本文件。包含一组要搜索的文本的一个 (例如abcdeaabbcddabc) 其中一个包含许多要在文本中搜索的模式 (例如AB、EA、CC) 最后一个包含每个字符的频率 (例如 A 4 B 4 C4 D3 e1 ) 我正在尝试编写一个算法,为每个模式找到出现频率最低的字符,并在字符串中搜索这些出现的字符,然后检查周围的字母,看看字符串是否匹配。目前,我在各自的向量中有字符和频率。(其中,每个向量的i=0分别为4 有更好的方法吗?可能是更快的数据结构?还有,在找到最不频繁的字母后,有哪些有

我有3个文本文件。包含一组要搜索的文本的一个
(例如abcdeaabbcddabc)
其中一个包含许多要在文本中搜索的模式
(例如AB、EA、CC)
最后一个包含每个字符的频率
(例如
A 4
B 4
C4
D3
e1
)
我正在尝试编写一个算法,为每个模式找到出现频率最低的字符,并在字符串中搜索这些出现的字符,然后检查周围的字母,看看字符串是否匹配。目前,我在各自的向量中有字符和频率。(其中,每个向量的i=0分别为4


有更好的方法吗?可能是更快的数据结构?还有,在找到最不频繁的字母后,有哪些有效的方法可以对照文本字符串检查模式字符串?

您可以运行一个迭代循环,保存实例计数,并检查字符是否出现超过百分之一基于搜索的总字符数和字符串的总长度的时间。例如,如果您有100个字符和5种可能性,则任何出现超过百分之二十的字符都可以折扣,通过传递与该字符匹配的任何值来提高效率。

您可以运行该算法。它的复杂性(一旦预处理完成(其复杂性与文本无关),则为Θ(n+p),其中

  • n是文本的长度

  • p是找到的匹配项总数

这基本上是最优的。尝试跳过看似频繁的字母没有意义:

  • 如果字母不是匹配的一部分,则算法需要单位时间

  • 如果字母是匹配的一部分,则匹配包括所有字母,而与它们在文本中的频率无关

  • –Moore_字符串搜索算法