kmp算法next计算方法_【数据结构——串】KMP算法——next数组Python的实现方式
用字符串
next数组本身也是一个记录下标的数组,所以会受到我们对于匹配项编码排序的影响,理论上不连续编码也是可以的,甚至不用数字编码都可行,但是为了编程方便,所以我们才采用了连续的整数进行编码
本文采用如下编码方式,这种编码可以避免出现负数,(可以认为0位置的值为和任意字符都可以匹配的值,所以如果当前位置为0,那就需要j和i都要往前移一位)
假如数组next中,第j个元素的值5,则代表当j位置发生不匹配时,要移动
由于字符串
元素个数刚好等于字符串
对于任意字符串
在计算next数组时,我们是逐步将编码变大的,这里将编码记为
在
只能是逐步增大的,但是是可以突然减小的,因为可能在
结合这特点,我们设计代码的思路就是:
计算第
- 相等则
- 不相等:则利用
往回溯,找到相等的元素或者当时直接令
注:
具体实现代码,主要要考虑的一点就是python中列表的第一个元素下标为0
def
改进后的KMP
可以看到上面的算法在计算next时其实是不考虑
在讲上面KMP算法时,我强调假如数组next中,第j个元素的值5,则代表当j位置发生不匹配时,要移动
,直到编码为5的元素对准发生不匹配的位置。(这个是整个算法的核心思想)
所以和
两值相等则该
不等,则该
注意:是nextval值指向nextval,因为当
两值相等则该
#改进kmp
确定号next数组之后就是匹配了
def
kmp算法next计算方法_【数据结构——串】KMP算法——next数组Python的实现方式相关推荐
- 数据结构 串 KMP 模式匹配详解 通俗易懂
KMP 模式匹配详解通俗易懂 KMP 模式匹配是解决字符串匹配的问题 一.原始的字符串暴力匹配 要点:子串的第一个字符匹配成功主串的字符后就依次匹配子串后面的字符,直到子串匹配结束 代码: publi ...
- 数据结构排序算法实验报告_[数据结构与算法系列]排序算法(二)
我的上一篇文章向大家介绍了排序算法中的冒泡排序.插入排序和选择排序.它们都是平均时间复杂度为 O(n^2) 的排序算法,同时还为大家讲解了什么是原地排序和什么是排序的稳定性.下图是这三种算法的比较,不 ...
- a*算法的时间复杂度_数据结构(1)——算法和时间复杂度
Data Structure 1 算法和时间复杂度 01.什么是数据结构? 程序设计 = 数据结构 + 算法 数据结构是关系,是数据元素相互之间存在的一种或多种特定关系的集合. 数据结构和算法凌驾于任 ...
- 名词解释 算法的有限性_数据结构复习之【数据结构和算法概念】
一.概念 数据结构就像是一个催化剂,如果没有原料是无用的,单是有了算法就能帮算法更快的实现任务: 数据结构:是指相互之间存在一种或多种特定关系的数据元素的集合,简单地说是数据之间的各种关系的集合. 程 ...
- 银行家算法是什么_什么是银行家算法?
银行家算法是什么 Banker's algorithm is a deadlock avoidance algorithm. It is named so because this algorithm ...
- 蚁群算法java实现_简单蚁群算法 + JAVA实现蚁群算法
一 引言 蚁群算法(ant colony optimization,ACO),又称蚂蚁算法,是一种用来在图中寻找优化路径的机率型技术.它由Marco Dorigo于1992年在他的博士论文中引入,其灵 ...
- labuladong的算法小抄_学会了回溯算法,我终于会做数独了
经常拿回溯算法来说事儿的,无非就是八皇后问题和数独问题了.那我们今天就通过实际且有趣的例子来讲一下如何用回溯算法来解决数独问题. 一.直观感受 说实话我小的时候也尝试过玩数独游戏,但从来都没有完成过一 ...
- python贝叶斯算法的论文_朴素贝叶斯算法从入门到Python实践
1,前言 很久不发文章,整理些干货,希望相互学习吧.进入主题,本文主要时说的为朴素贝叶斯分类算法.与逻辑回归,决策树一样,是较为广泛使用的有监督分类算法,简单且易于理解(号称十大数据挖掘算法中最简单的 ...
- 数据结构-串-KMP算法详解(Next数组计算)(简单易懂)
文章目录 KMP介绍 一.求Next数组 前后缀表 求最长公共前后缀 最长相等前后缀表转Next数组 二.使用Next数组来匹配字符串 总结 本文章就专讲kmp,暴力匹配就不讲了(我相信能搜索kmp的 ...
- 数据结构排序算法实验报告_数据结构与算法-堆排序
堆排序 堆排序是指利用堆这种数据结构所设计的一种排序算法.堆是一个近似完全二叉树的结构,并同时满足堆的性质:即子节点的键值或索引总是小于(或者大于)它的父节点,堆排序的时间复杂度为O(nlogn).( ...
最新文章
- 更换XP SN的vbs
- 什么是正确的JSON内容类型?
- HighNewTech之QAB:重新温读张首晟教授2018年8月演讲PPT《量子计算, 人工智能与区块链》
- 软件开发重要性_在软件开发中考虑时间的重要性
- ARM中ROM,RAM,FLASH区别
- mysql where非常规用法_MySQL where 条件的这个坑你碰到过没
- asp 文件上传 代码
- 如何使打印出手写字体
- DHTMLX-Grid
- Type-C PD充电简介
- 操作系统、体系结构和传奇船长的泰坦级超级旗舰
- 谁为「滑板底盘」买单
- MySQL中级优化教程(一)——SQL常用优化工具及explain语句的使用
- 牛津英语字典pdf下载_除了long time no see,你知道还有这些中式英语也进入了牛津字典吗...
- The container name XXX is already in use by container
- 2021 5G AIoT年度创新成果!发布!
- java毕业生设计校园易购二手交易平台计算机源码+系统+mysql+调试部署+lw
- 认识物联网,你可以从这个角度入手
- Raspberry Pi的Mjpg-streamer配置
- 如何使用mysql binlog 恢复数据
热门文章
- Linux内核线程(一)
- SylixOS armv8 任务切换
- php管理系统模板,自定义模块后台模板
- 【图论】Bellman_Ford算法求有步数限制的最短路(图文详解)
- java dao模式的优缺点_Java入门:浅谈DAO模式
- python version 3_VIM设置python3支持和检测python version
- endnotex9下载安装_endnote x9怎么和word关联?Word中用EndNote X9教程
- 可道云 docker 群晖_【curl】校园网群晖DS120j自动认证
- 电脑芯片和服务器芯片,王思聪的服务器和我们的电脑有什么区别?
- 125w短波通信距离_短波通信在消防应急救援通信中的应用探讨