精确多模式匹配问题-关键词树、后缀树

一、多模式匹配问题

给定一组模式和一个文本,在文本中查找任一模式的全部出现信息。

输入:k个模式的集合p1,p2,...,pk,以及文本t=t1...tm

输出:所有位置i(1<=i<=m)的信息,使得与模式pj(1<=j<=k)相同的t的子字符串从位置i开始

二、使用关键词树

含有模式p1,p2,....,pk的集合的关键词树是一个根部标记的树,其满足如下条件:

1)树的每条边都被字母表的一个字母标记。

2)从同一顶点延伸出的任意2条边都有不同的标记。

3)模式集合中的每个模式pi(1<=i<=k)都是沿着某条路径从根到叶的顺序进行拼写的。

三、使用后缀树

文本t=t1...tm的后缀树是一个根部标记的且含有m片叶子的树

1)每条边由文本中的一个子字符串标记。

2)每个内部顶点(根节点除外)至少含有2个孩子。

3)从同一顶点出发的任意2条边起始于不同的字母。

4)文本t的每个后缀是依根部到某片叶子的路径拼写的。

将模式p穿过后缀树的线串定义为p沿着T中唯一路径的字符的匹配。如果这个匹配过程终止于P的所有字符都匹配上了,则称该字符串为完全线串;如果匹配半途终止,则称其为不完全线串。如果一个模式的线串是完全的,它会终止于T中的某个顶点或边。

算法:

SUFFIXTREEPATTERNMATCHING(p,t)

构建要匹配的文本t的后缀树

模式P在后缀树中的线串

if 线品是完全的

output 每个p匹配叶子在树的位置

else

output模式并未在文本中出现

你可能感兴趣的:(算法,J#)