数据结构与算法整理3——BP算法和KMP算法
数据结构与算法整理3——BP算法和KMP算法 目录 数据结构与算法整理3——BP算法和KMP算法 1、字符串的基本操作 2、模式匹配——BP算法和KMP算法 3、串的操作代码(C语言) 1、字符串的基本操作 1)串的定义:字符串(也就是串)是0个或多个字符序列组成的有限序列。 串就是数据元素为单个字符的特殊线性表。 “qhjkdcbjsb”(隐含结束符\0)就是一个字符串,引号起界定作用,“”表示空串,串长为0 “ ”空格串不是空串,串长为空格数。 2)串的存储类型: 顺序存储 :定长顺序存储结构、堆分配存储结构(动态分配连续内存) 链式存储: 2、模式匹配——BP算法和KMP算法 串的模式匹配:就是指定一个主串S和子串T,求T在S中第一次出现的位置。 (1) 朴素模式匹配(BP算法) 核心思想 :主串S和子串T,S[1]和T[1]比较,S[2]与T[2]比较,直到S[n]与T[n]都是相等的为止,若S[i]与T[i]不相等,则子串向右移动一个(一个字符)继续比较。 时间复杂度 :主串S长度为n,子串T长度为m,最多进行m(m-n+1)次,最坏的时间复杂度为O(mn) 效率不高。 (2) KMP 算法 核心思想 :尽量利用已经得到的“部分匹配”的结果信息,不要让i回溯,加快子串右滑的速度, 问题由子串决定而不是主串决定的 next 数组 :是一个智能数组