KMP算法
2016-10-06 08:38:21 0 举报
KMP算法,全称Knuth-Morris-Pratt算法,是一种高效的字符串匹配算法,主要用于在一个文本串S内查找一个模式串P的出现位置。它的主要特点是将模式串本身看作一个指针数组,利用已知的部分信息,避免在文本串中的多余比较,从而提高匹配效率。KMP算法的核心是计算模式串的next值,即当模式串中某个前缀与后缀相等时,该前缀对应的next值等于后缀长度加1。在匹配过程中,若主串与模式串的当前字符相等,则继续匹配下一个字符;若不相等,则根据模式串的next值进行跳转,跳过部分已匹配过的字符。KMP算法的时间复杂度为O(m+n),其中m和n分别为模式串和文本串的长度。
作者其他创作
大纲/内容
SNode结构体定义struct SNode { int location; struct node *p; } ;
调用CreateTable获取匹配表
匹配成功,记录匹配信息
调用缓存函数保存匹配结果
搜索结束,返回matchResult
函数CreateTable功能:建立部分匹配表输入:pattern模式串输出:Table数组
定义函数Cache输入:matchResult输出:无功能:将匹配结果写入文件调用关系:在DoKMP函数的匹配循环中调用
Y
函数DoKMP功能:执行KMP算法,返回匹配的结果输入:模式串Pattern,目标串Target输出:匹配结果matchResult调用关系:在MatchSubString函数进行错误检测及相关初始化后进行调用
结构体MatchResutint MatchCountint code(状态码)SNode* locationList作用:作为函数MatchSubString的返回值,代表匹配结果
N
初始化
搜索结束?
函数GetOffset输入:目标串匹配位置targetIndex目标串target模式串pattern部分匹配表table输出:目标串target调用一次GetOffset之后所需要的偏移调用关系:由DoKMP函数在处理匹配的循环中进行调用
调用函数 GetOffset获取此次匹配的偏移offset
函数CleanCache输入:无输出:无功能:在函数返回时清除缓存调用关系:在DoKMP函数结束之前调用
调用清除缓存函数,清除缓存
根据offset判断是否匹配成功
目标串位置偏移
函数DoKmp
0 条评论
下一页