数据结构与算法-学习笔记

116 阅读1分钟

串算法

子串的定位通常叫做串的模式匹配 定义两个索引值
BF算法的时间复杂度为O(),相当耗费时间,
KMP算法就是由BF基础上改进
从左到右逐一进行匹配,重点是在KMP中,如果匹配不正确的时候,要知道指针的位置在哪里
举个例子,有一个主串S“BBC ABCDAB ABCDABCDABDE”,和模式串P“ABCDABD”,现在要拿模式串P去跟文本串S匹配,以主串为根。
S[0]为B,P[0]为A,不匹配-即(S[i]!=P[j]),如果匹配失败,可以执行 i=i-j+1,j=0,s[1]和p[0]进行匹配,相当于模式串后退一步i=1,j=0
s[1]和p[0]还是不匹配,继续执行一直到s[4]和p[0]-如果匹配成功就可以i++,j++
如此保持i不回溯
当匹配失败时,模式串向右移动的位数为:失配字符所在位置 - 失配字符对应的next 值,即移动的实际位数为:j - next[j],且此值大于等于1。
此也意味着在某个字符失配时,该字符对应的next 值会告诉你下一步匹配中,模式串应该跳到哪个位置(跳到next [j] 的位置)。如果next [j] 等于0或-1,则跳到模式串的开头字符,若next [j] = k 且 k > 0,代表下次匹配跳到j 之前的某个字符,而不是跳到开头,且具体跳过了k 个字符。

什么阻挡