博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
KMP
阅读量:6265 次
发布时间:2019-06-22

本文共 565 字,大约阅读时间需要 1 分钟。

字符串匹配广泛用于各类工程、研究。朴素的字符串匹配像极了两条履带,小的履带先和大的履带对齐,逐个验证上下是否一致。如果不一致,小的履带右移一格,继续上下比对。最坏复杂度是O(nm),实在难以让人满意。
实际上,小履带没必要每次都从头开始和大履带匹配,假设小履带已经匹配了好多,失配后右移一位从头开始走,有一大半点都是和小履带自己在匹配。 这不坑爹么,根本没有用到大履带,为何要放到大履带的循环里呢?这部分完全可以做个预处理,下次直接跳到和大履带比对的点就行了。这就是KMP的getfail函数。
 
void getFail(string str){    f[0]=0;f[1]=0;    for(int i=1;i
getfail函数

getfail函数采用类似动态规划的思想,记录每次应该跳跃到的点。

int KMP(string obj,string ask,int pos){    getFail(ask);    int j=0;    int n=obj.size();    for(int i=pos;i
KMP函数

匹配的时候直接从f记录的点开始,省去不少麻烦。

@练习题

HDU 3336

POJ 1961

转载于:https://www.cnblogs.com/neopenx/p/4004401.html

你可能感兴趣的文章
PHP 杂谈《重构-改善既有代码的设计》之三 重新组织数据
查看>>
NSBundle介绍
查看>>
POJ1811_Prime Test【Miller Rabin素数測试】【Pollar Rho整数分解】
查看>>
ConnectString中enlist设置的含义
查看>>
潜移默化学会WPF(企业经验篇)--Log4Net(二)
查看>>
轻量级面向SQL的MySQL开源监控工具
查看>>
ubuntu 卸载 程序软件
查看>>
iOS 6,5支持 portrait,landscape (横竖屏的处理)
查看>>
FineUI v3.2.2发布了!(7 天后再出新版,给不给力?)
查看>>
Quartz在Spring中动态设置cronExpression (spring设置动态定时任务)------转帖
查看>>
vb webbrower 相对坐标
查看>>
原始的js代码和jquery对比
查看>>
.net和java和谐相处之安卓客户端+.net asp.net mvc webapi 2
查看>>
Dynamic CRM 2013学习笔记(十六)用JS控制Tab可见,可用
查看>>
jquery对象和javascript对象相互转换
查看>>
laravel开启调试模式
查看>>
Spring aop的实现原理
查看>>
ADO.NET一小记-select top 参数问题
查看>>
(转)jquery easyui treegrid使用小结 (主要讲的是如何编辑easyui中的行信息包括添加 下拉列表等)...
查看>>
iOS使用宏写单例
查看>>