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