位置: 编程技术 - 正文

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优先级顺序)

  • 购销合同印花税计税金额含税吗
  • 证券交易印花税税率是多少
  • 实缴注册资本交税吗
  • 注册公司工贸和商贸哪个更好一些
  • 小微企业所得税税率2.5% 10% 25%
  • 账本一般保存几年就可以销毁2004年的规定
  • 道路货物运输服务可以加计扣除吗
  • 非货币性交换需要确认主营业务收入吗
  • 固定资产投资转化为gdp比例
  • 接受税务稽查补缴所得税账务处理怎么做?
  • 固定资产报废废铁收入需要交税吗
  • 出口退税当期不得免征和抵扣的税额
  • 属于制造费用的有
  • 劳务票一般开几个点
  • 转让无形资产所有权计入什么科目
  • 建筑服务安装费发票需要备注什么
  • 对方不开票
  • 股东借款利息计入利润表哪个科目
  • 赠送算商业用途吗
  • 返利红字发票怎么开具
  • 文件夹如何更改图标
  • 网上纳税申报的基本流程是什么
  • 财务软件税率
  • 试乘试驾车入账分录
  • 贴现短期无息应付票据
  • php imagettftext
  • 企业安置残疾人如何残联备案
  • 赠送现金券是否违法
  • 合伙养殖需要注意什么
  • lean in桑德伯格
  • 以房产投资入股应当缴纳契税
  • 职工福利费的开支范围有哪些
  • 公司制作横幅计入什么科目?
  • 隐隐作痛怎么写
  • 定额发票丢失了怎么补办
  • 机关事业单位购买茶叶违反什么规定
  • c++好学
  • 图像超分辨率重建数据集
  • 工程师模式有什么用
  • 残保金是应交税金吗
  • 计提租金怎么做会计分录
  • 应纳税所得额100-300万税率
  • 应交所得税的科目是什么
  • 园林绿化工程公司简介
  • 其他应付款贷方表示什么意思
  • 营业税改增值税是什么意思
  • sqlserver服务请求失败或服务未及时响应
  • 员工福利费属于什么会计科目
  • 服务不动产和无形资产本期数,第19栏
  • 公司帐户可以转法人私人账户吗
  • 企业营改增税率是多少
  • 买车险怎么打折
  • 自产农产品加工成产品销售怎么抵扣
  • 向非金融企业借款会计分录
  • 公司日常费用支出表怎么做
  • 哪些企业执行新的租赁政策
  • 数据库聚簇索引和非聚簇索引
  • centos怎么看硬盘
  • 大白菜u盘启动按f几
  • 如何查看win7激活码能重复使用
  • Win10 TH2首个重要更新后应用商店依然存在问题
  • 在centos7中,一般用( )命令来查看网络接口的状态
  • windows7 dns
  • win8.1无法关机怎么回事
  • win7 64位旗舰版系统网页字体大小如何修改变动
  • Cocos2dx 3.2 + vs2012 + win7 改变面黑色背景的大小
  • Android OpenGL ES(七)----理解纹理与纹理过滤
  • unity基础包
  • 用批处理结束进程
  • 手机端apk反编译工具_android反编译工具
  • android 底部选择菜单
  • 是否一般纳税人怎么查
  • 国税周末有值班的吗
  • 陕西税务电子税务局官网安装
  • 上海税务局实名认证流程
  • 非居民企业所得税税率
  • 江苏省官网
  • 企业以自有物业为单位
  • 2021沈阳车船税
  • 个人所得税法全文完整版2023个人工薪规定
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设