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

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

1、KMP算法解决问题:对BF(Brute Force)算法优化,避免对主串进行回溯匹配(匹配不成功主串指针向后移1位,子串指针重置开始位置,两串继续匹配),效率底。

2、KMP算法原则/目的:主串不回溯即匹配指针就指在失配位置,由子串/模式串移动,由这样模式完成字符串匹配。

3、KMP算法怎样实现目的:通过子串/模式前后缀是否存在匹配情况,来决定子串/模式是否需要在失配位置前移子串/模式。

注意:子串/模式前后缀要取最长匹配,这样才能保证不会错过主串中任何一个拥有与子串开头相同的位置。

3.1、子串/模式前后缀为零,子串/模式指针指向开始位置,主串与子串从失配位置开始匹配。

为什么可以这样?因为失配之前主串与子串的字符都是一样的,而且前后缀为零表示子串没有相同的字符。

这样的话假如主串回溯回去匹配能匹配上吗? 肯定匹配不上的。

第一次匹配不上后,第二次匹配直接从失配位置开始匹 配。为什么可以这样?因为abc已经匹配上,而且子串abc各字母又不相同,

如果继续主串错一位与子串匹配,这样浪费时间。

 

转载地址:http://tzpia.baihongyu.com/

你可能感兴趣的文章
[LeetCode] Find K Pairs with Smallest Sums 找和最小的K对数字
查看>>
VC6.0 C++ 如何调用微软windows系统SDK 语音API
查看>>
Python 3.5 RuntimeError: can't start new thread
查看>>
POJ 1659 Frogs' Neighborhood(可图性判定—Havel-Hakimi定理)【超详解】
查看>>
数字统计问题
查看>>
Windows下Redis缓存服务器的使用 .NET StackExchange.Redis Redis Desktop Manager
查看>>
SharpMap简析
查看>>
使用类加载器加载配置文件/getClassLoader().getResourceAsStream()
查看>>
配置 linux-bridge mechanism driver - 每天5分钟玩转 OpenStack(77)
查看>>
matplotlib绑定到PyQt5(有菜单)
查看>>
iOS - QRCode 二维码
查看>>
记录第一次纯手打爬虫经历
查看>>
PyCharm 开发Django ,错误汇总
查看>>
插入排序
查看>>
一个完整的C++程序SpreadSheet - 1) 类的声明和定义
查看>>
iOS6.1爆严重安全漏洞 解锁不用密码
查看>>
SupportGenius for PDMS
查看>>
Cloudera融资1.6亿美元推动大数据发展
查看>>
建造大型数据中心前期的浩瀚工程
查看>>
VMware助力中国企业加速数字化业务转型
查看>>