目录:
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