BF与KMP算法

本文介绍了BF和KMP两种字符串匹配算法。BF算法是一种暴力枚举方法,效率较低;而KMP算法通过预处理避免了不必要的比较,提高了效率。以具体的例子展示了BF算法的比较次数为34次(在S=aaaaaaaaaa, T=aaaab的情况下),而KMP算法只需16次。同样,对于S=cdbbacc和T=abcd的情况,两者比较次数均为8次。文章还包括源码展示和总结,强调学习算法要亲手实践。" 111575294,10297206,12-Factor 应用:理解和实践,"['软件工程', '应用设计', '云应用', '开发环境', '部署']
摘要由CSDN通过智能技术生成

一、知识内容

BF和KMP算法
BF相当于一种暴力枚举,是手中没有地图的旅客
而KMP则会是手中有地图,看地图走的旅客

1. 效率分析

给定主串和模式串,分别统计模式匹配的BF算法和KMP算法的比较次数。
如主串为S=aaaaaaaaaa ,模式串为T=aaaab

BF比较次数为 34
KMP比较次数为 16
如主串为S=cdbbacc ,模式串为T=abcd
BF比较次数为 8
KMP比较次数为 8


二、源码展示

#include <iostream>
#include <algorithm>
#include <cstring>
#include <string>
using namespace std;
char nex[100];
char s[100];
char t[100];

void next() {
	int j = 0;
	int i = 1;
	nex[1] = 0;
	int len2 = strlen(t + 1);
	while (i < len2) {
		if (j == 0 || t[i] == t[j]) {
			i++;
			j++;
			nex[i] = j;
		} else {
			j = nex[j];
		}
	}
}

int kmp() {
	int i = 1;
	int j = 1;
	int len1 = strlen(s + 1);
	int len2 = strlen(t + 1);
	int count = 0;
	int count1 = 0;
	while (i <= len1 && j <= len2) {
		cou
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值