C++ KMP算法

本文介绍了KMP算法的起源、暴力(BF)算法的原理,以及KMP算法的优势。KMP算法通过预处理得到一个数组p[j],用于在模式串匹配失败时避免不必要的比较,提高效率。文章提供了C++代码实现,并推荐了一道KMP算法的模板题。
摘要由CSDN通过智能技术生成

目录:

 

KMP的起源

BF算法

KMP算法

模板题推荐 



KMP的起源:

         KMP算法是一种改进的字符串匹配算法,由D.E.Knuth,J.H.Morris和V.R.Pratt提出的,因此人们称它为克努特—莫里斯—普拉特操作(KMP就是取三个人名字的首字母作为该算法的名字)。KMP算法的核心是利用匹配失败后的信息,尽量减少模式串与主串的匹配次数以达到快速匹配的目的。

        简而言之,就是三位信息界的Orz受够了暴力这种低效率的算法,共同研究了KMP这种优化算法,当然,KMP算法的效率要远远高于暴力,至于为什么,请读者大大继续往下看。

BF算法:

        BF算法,即暴力(Brute Force)算法,是普通的模式匹配算法,BF算法的思想就是将目标串 s 的第一个字符与模式串T的第一个字符进行匹配,若相等,则继续比较 s 的第二个字符和 t 的第二个字符;若不相等,则比较 s 的第二个字符和T的第一个字符,依次比较下去,直到得出最后的匹配结果。BF算法是一种蛮力算法。

        正所谓暴力,当然是:将主串 s 中某个位置i起始的子串和模式串t相比较。即从 j=0 起比较 s[i+j] 与 t[j],若相等,则在主串 t 中存在以 i 为起始位置匹配成功的可能性,继续往后比较( j逐步+1 ),直至与 t 串中最后一个字符相等为止,否则改从 s 串的下一个字符起重新开始进行下一轮的"匹配",即将串 t 向后滑动一位,即 i 增1,而 j 退回至0,重新开始新一轮的匹配。

【代码实现】

int baoli(char *s,char *t)//主串s,模式串t
{
    int i=0,j;
    while(i<strlen(s
  • 5
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值