位置: 编程技术 - 正文

KMP算法精解及其Python版的代码示例(kmp算法理解)

编辑:rootadmin

推荐整理分享KMP算法精解及其Python版的代码示例(kmp算法理解),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:kmp算法理解,kmp算法 partial match table,kmp算法的概念,kmp算法 csdn,kmp算法简单例题,kmp算法 partial match table,kmp算法的概念,kmp算法 csdn,内容如对您有帮助,希望把文章链接给更多的朋友!

KMP算法是经典的字符串匹配算法,解决从字符串S,查找模式字符串M的问题。算法名称来源于发明者Knuth,Morris,Pratt。假定从字符串S中查找M,S的长度ls,M的长度lm,且(ls > lm)。

朴素的字符串查找方法从字符串S的第一个字符开始与M进行比较,如果匹配失败。从下一字符开始,重新比较。指导第 (ls - lm) 个字符。这种方法容易想到并且容易理解,效率不高。问题在于每次匹配失败后,移动的步伐固定为 1,其实步子可以迈得再大一些。

KMP算法精解及其Python版的代码示例(kmp算法理解)

KMP的字符串查找方法假定在模式串的连续字串M[0, i] 且 i < lm,已经成功匹配字符串S。但是不巧第 i+1 个字符失败了,怎么办?移动一个字符,重头再来?当然不好,那就是朴素路线了。我们能否从跌倒的地方继续走呢?既然字串M[0 - i]已经匹配成功,那就从这个子串上做文章。举个栗子 S序号 j j + 1 j + 2 j + 3 j + 4 j + 5 j+6 j + 7 。。。 S串 a b c a b c d e 。。。 M串 a b c a b d

M序号

0 1 2 3 4 5 此时匹配失败在M串的第5个字符,前4个字符已经匹配成功。如果从跌倒的地方出发,则需要存在M[0, 4]的子串M[0, k] == S[j+4-k , j+4]。由于M[0, 4] == S[j , j+4] 则有 字串S[j+4-k, j+4] == M[4-k, 4]。综上有M[0, k] == M[4-k, 4]如果这样的k不存在,那就老老实实的朴素了。从上面的表格可以直观的看出,下一次匹配只要把M串移动到 j + 3 位置,从 j+5 开始匹配就可以。很容易看出来 在已经匹配成功的字串M[0 , 4]中有最长的子串 (M[0 , 1] == M[3 , 4]),这个就是问题的关键。因此KMP的核心部分就是计算模式串的各个子串的 k。

实例首先我们来看一下字符串的朴素匹配.可以想象成把文本串s固定住,模式串p从s最左边开始对齐,如果对齐的部分完全一样,则匹配成功,失败则将模式串p整体往右移1位,继续检查对齐部分,如此反复.

关于kmp算法,讲的最好的当属阮一峰的<字符串匹配的KMP算法>.一路读下来,豁然开朗.其实就是,对模式串p进行预处理,得到前后缀的部分匹配表,使得我们可以借助已知信息,算出可以右移多少位.即 kmp = 朴素匹配 + 移动多位.更多细节请看阮一峰的文章,这里就不展开了.下面给出python的代码实现.

Python实现优先级队列结构的方法详解 最简单的实现一个队列至少满足2个方法,put和get.借助最小堆来实现.这里按"值越大优先级越高"的顺序.#coding=utf-8fromheapqimportheappush,heappopclassPriorityQueue:def_

详解Python中的__new__、__init__、__call__三个特殊方法 __new__:对象的创建,是一个静态方法,第一个参数是cls。(想想也是,不可能是self,对象还没创建,哪来的self)__init__:对象的初始化,是一个实例方法

实例解析Python中的__new__特殊方法 __new__方法是什么?如果将类比喻为工厂,那么__init__()方法则是该工厂的生产工人,__init__()方法接受的初始化参数则是生产所需原料,__init__()方法会按

标签: kmp算法理解

本文链接地址:https://www.jiuchutong.com/biancheng/386939.html 转载请保留说明!

上一篇:Python缩进和冒号详解(python 代码缩进)

下一篇:Python实现优先级队列结构的方法详解(python优先级顺序)

  • 从香港向境外汇款怎么汇
  • 简易计税会计分录举例
  • 企业的其他业务收入包括哪些
  • 申报无票收入次月红冲有没有风险
  • 房租押金不退还怎么处理
  • 企业中征码全称
  • 公司现金支票取现用途怎么填写
  • 结转周转材料成本差异会计分录
  • 增值税是先交税还是先开票
  • 买一送一的增值税如何计算例题
  • 定额发票领用日期
  • 免税品销售有增值税吗
  • 房产税计税依据房产原值怎么算
  • 折价退回的会计处理
  • 外商企业需要交企业所得税吗
  • 债权投资属于其他非流动金融资产嘛
  • 盈亏平衡点定价法例题及答案
  • 个人租赁汽车给公司怎么开发票
  • 吸收合并企业的情形
  • 购房房产税如何支付
  • 劳务派遣公司差额征税怎么申报
  • 公司自用产品 抵税吗?
  • 总账建账科目顺序
  • mac怎么airdrop给ipad
  • linux系统参数调优
  • win10系统损坏开不了机
  • 交通运输业成本构成比例
  • 巴伐利亚州地图
  • cuda版本更新
  • 符合条件的小型微利企业,减按
  • 自己搭建网站怎么赚钱
  • tensorflow安装教程pycharm
  • 应交增值税减免税额在借方
  • 应纳税为什么是0
  • php设置title
  • 货币资金包括哪些方面
  • 在建工程业务核算
  • 同业代付业务会计核算
  • 织梦系统
  • 企业开办期间费用需要开发票吗
  • 资产管理业务是表外业务吗
  • 如何查看sqlserver实例名称
  • 全资子公司注销的账务处理
  • 将自产产品用于公益事业
  • 怎么才能不开发票
  • 企业银行贷款报表模板
  • 电子承兑背书一般多久到账
  • 递延所得税当前试用25%,以后15%
  • 员工意外险税前扣除比例
  • 事业单位服务收费标准
  • 工伤医疗补助可以申请吗
  • 首先要知道什么英语
  • 固定资产不能使用了怎么处理
  • 让渡是什么
  • 新公司现金日记账怎么记账的
  • 注册表已被管理员禁用怎么处理
  • win10开始按钮点不动
  • centos6.2安装教程
  • window10怎么启用net 3.5
  • 笔记本摄像头摄像
  • win10红石版
  • win7系统搜索不到自己家wi-fi
  • 恶意软件清理
  • perl语言基本命令
  • vue前端后端
  • 第一章初见第二章决定
  • javascript+
  • jQuery插件是什么
  • js如何实现类的继承
  • android:ViewPager与FragmentPagerAdapter
  • 微博评论系统
  • 国税局发票查验平台查询不到
  • 深圳市国家税务局电子税务局官网
  • 云南省电子税务
  • 小米之家可以
  • 02112366电子税务局
  • 表彰税务工作者们的活动策划
  • 国家电子税务登录入口
  • 中山税务如何预约
  • 新车购置税是在4s店交吗
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设