设目标串为t="abcaabbabcabaacbacba",模式串为p="abcabaa" 计算模式p的nexval的值;画出利用KMP算法进行模式匹配时每一趟的匹配过程

时间: 2023-12-30 16:06:39 浏览: 142
根据KMP算法,需要先计算出模式串p的next数组,其中next[i]表示前缀p[0:i-1]的最长相等前缀后缀长度。 计算nexval时,采用类似的思路,将p的next数组进行拓展,得到nexval数组。其中nexval[i]表示当p匹配到第i个字符时,如果下一位不匹配,应该跳到的位置。 计算nexval数组时,需要依次考虑所有可能的前缀后缀长度。具体而言,对于每个i,从i-1开始往前找一个最长的j,使得p[0:j-1]既是p[0:i-1]的后缀,也是p[1:i]的前缀。然后,nexval[i]就等于nexval[j],或者是j本身(如果不存在这样的j)。 根据上述算法,可以计算出p的nexval数组为[0, 0, 0, 1, 2, 0, 1]。 接下来,画出利用KMP算法进行模式匹配时每一趟的匹配过程。具体过程如下: 1. 将目标串t的第一个字符与模式串p的第一个字符进行比较,发现匹配。 t: abcaabbabcabaacbacba p: abcabaa ↑ 2. 将目标串t的第二个字符与模式串p的第二个字符进行比较,发现匹配。 t: abcaabbabcabaacbacba p: abcabaa ↑ 3. 将目标串t的第三个字符与模式串p的第三个字符进行比较,发现匹配。 t: abcaabbabcabaacbacba p: abcabaa ↑ 4. 将目标串t的第四个字符与模式串p的第四个字符进行比较,发现不匹配。此时,根据nexval[3]=1,将模式串p向右移动1位。 t: abcaabbabcabaacbacba p: abcabaa ↑ 5. 将目标串t的第四个字符(即上一步未匹配的字符)与模式串p的第二个字符进行比较,发现不匹配。此时,根据nexval[1]=0,将模式串p向右移动0位。 t: abcaabbabcabaacbacba p:abcabaa ↑ 6. 将目标串t的第四个字符(即上一步未匹配的字符)与模式串p的第一个字符进行比较,发现不匹配。此时,根据nexval[0]=0,将模式串p向右移动0位。 t: abcaabbabcabaacbacba p:abcabaa ↑ 7. 将目标串t的第四个字符(即上一步未匹配的字符)与模式串p的第一个字符进行比较,发现不匹配。此时,根据nexval[0]=0,将模式串p向右移动0位。 t: abcaabbabcabaacbacba p:abcabaa ↑ 8. 将目标串t的第五个字符与模式串p的第一个字符进行比较,发现匹配。 t: abcaabbabcabaacbacba p: abcabaa ↑ 9. 依次类推,直到找到所有匹配的位置。

相关推荐

最新推荐

recommend-type

重庆大学数据结构实验报告,串的操作与KMP模式匹配算法源码及结果截屏

这是重庆大学数据结构实验报告,题目是串的操作与KMP模式匹配算法。里面有完整的实验流程,包括源码及结果截屏
recommend-type

KMP串匹配算法,并行计算

串匹配(String Matching)问题是计算机科学中的一个基本问题,也是复杂性理论中研究的最广泛的问题之一。...所谓关键词匹配,是指给定一个长为n的文本串T[1,n]和长为m的模式串P[1,m],找出文本串T中与模式。
recommend-type

KMP 字符串模式匹配详解

KMP 字符串模式匹配详解 KMP算法是对传统模式匹配算法的较大改进,在传统的...而KMP算法的基本思路是在不回溯主串的指针,而只回溯子串的指针的情况下完成模式匹配,这样就省去了回溯主串指针进行比较的一部分时间^
recommend-type

一种新的模式匹配(模糊搜索)算法

本论文所研究的模式匹配算法是一种不同于传统的KMP算法和BM算法的前所未有的模式匹配算法——字符串拆分算法。本论文未在任何正式期刊上发表过,可以通过论文查重,大家可以下载拿去修改修改当做自己的毕业设计...
recommend-type

KMP字符串模式匹配详解及程序

这是数据结构中的经典算法——KMP字符串模式匹配的详解,并且有相关的程序,保证受益匪浅。
recommend-type

zigbee-cluster-library-specification

最新的zigbee-cluster-library-specification说明文档。
recommend-type

管理建模和仿真的文件

管理Boualem Benatallah引用此版本:布阿利姆·贝纳塔拉。管理建模和仿真。约瑟夫-傅立叶大学-格勒诺布尔第一大学,1996年。法语。NNT:电话:00345357HAL ID:电话:00345357https://theses.hal.science/tel-003453572008年12月9日提交HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaire
recommend-type

实现实时数据湖架构:Kafka与Hive集成

![实现实时数据湖架构:Kafka与Hive集成](https://img-blog.csdnimg.cn/img_convert/10eb2e6972b3b6086286fc64c0b3ee41.jpeg) # 1. 实时数据湖架构概述** 实时数据湖是一种现代数据管理架构,它允许企业以低延迟的方式收集、存储和处理大量数据。与传统数据仓库不同,实时数据湖不依赖于预先定义的模式,而是采用灵活的架构,可以处理各种数据类型和格式。这种架构为企业提供了以下优势: - **实时洞察:**实时数据湖允许企业访问最新的数据,从而做出更明智的决策。 - **数据民主化:**实时数据湖使各种利益相关者都可
recommend-type

SQL怎么实现 数据透视表

SQL可以通过使用聚合函数和GROUP BY子句来实现数据透视表。 例如,假设有一个销售记录表,其中包含产品名称、销售日期、销售数量和销售额等信息。要创建一个按照产品名称、销售日期和销售额进行汇总的数据透视表,可以使用以下SQL语句: ``` SELECT ProductName, SaleDate, SUM(SaleQuantity) AS TotalQuantity, SUM(SaleAmount) AS TotalAmount FROM Sales GROUP BY ProductName, SaleDate; ``` 该语句将Sales表按照ProductName和SaleDat
recommend-type

JSBSim Reference Manual

JSBSim参考手册,其中包含JSBSim简介,JSBSim配置文件xml的编写语法,编程手册以及一些应用实例等。其中有部分内容还没有写完,估计有生之年很难看到完整版了,但是内容还是很有参考价值的。