一、知识内容
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