模式匹配001: 基本概念
来源:互联网 发布:电脑聊天交友软件 编辑:程序博客网 时间:2024/06/01 07:19
1. 简言
字符串匹配的问题,可以理解为从给定符号序列中找出具有某种属性的模式的问题。最简单的字符串匹配问题,就是从给定字符序列中找出给定的字符串。
本系列文章从基本概念谈起,然后依次对单字符串匹配、多字符串匹配、模糊匹配等问题的现存算法做一归纳整理,方便大家学习。
2. 基本概念
文本:给定的待搜索字符序列。可记为text、Text,或简写为t、T。
模式:具有某属性的字符串,在t中可能存在0次或多次。可记为pattern、Pattern,或简写为P、Patn、p、patn等。
字符表:字符集合,一般记为∑。t和p都定义在同一∑上。
字符串:∑上字符组成的序列。例如对于ASCII字符表,”hello cppgp” 是字符串。
空串:不含有任何字符的字符串称为空串。一般记为ε。
前缀:设x、y为字符串,对于定字符串xy,称x为xy的前缀。其中x和y均可为ε。记为x⊆xy。
真前缀:如果x为xy的前缀且满足y≠ε,则称x为xy的真前缀。记为x⊂xy。
后缀:设x、y为字符串,对于定字符串xy,称y为xy的后缀。其中x和y均可为ε。记为x⊇xy。
真后缀:如果x为xy的后缀且满足x≠ε,则称y为xy的真后缀。记为x⊃xy。
子串:设x、y、z为字符串,对于定字符串xyz,称y为xyz的子串。其中x、y、z均可为ε。
真子串:如果y为xyz的子串且满足x、y不同时为ε,则称y为xyz的真子串。
边界:设x、y为字符串,则称x是xyx的边界。记为x=b(xyx)。
搜索窗口:令t长度为n,p的长度为m,对于任意i≥0,i+m≤n,称t[i..i+m]为一个搜索窗口。
3. 单字符串匹配
在所有单字符串匹配的算法中,都存在搜索窗口的概念,搜索窗口沿着text从左向右移动,搜索过程在搜索窗口内进行(如Figure-01所示)。根据搜索窗口内移动方式的不同,单字符串匹配算法可以归纳为三类:前缀搜索、后缀搜索、子串搜索。
前缀搜索:
在搜索窗口内从前向后逐个读入字符,获取搜索窗口和模式串的最长公共前缀。当最长前缀等于模式串长度时,匹配成功。暴力搜索、KMP、都属于该类。如Figure-02所示。
后缀搜索:
在搜索窗口内从后向前逐个读入字符,获取搜索窗口和模式串的最长公共后缀。当最长后缀等于模式串长度时,匹配成功。Boyer-Moore、Horspool、Sunday、都属于该类。该类算法通常具有亚线性的时间复杂度。如Figure-03所示。
子串搜索:
在搜索窗口内从后向前逐个读入字符,搜索满足如下条件的最长字符串u:u是搜索窗口的后缀,同时也是模式串的子串。与后缀搜索算法一样,使用这种搜索方法的算法也具有亚线性的平均时间复杂度。如Figure-04所示。
- 模式匹配001: 基本概念
- 模板匹配的基本概念
- 模板匹配的基本概念
- 模式匹配
- 模式匹配
- 模式匹配
- 模式匹配
- 模式匹配
- 模式匹配
- 模式匹配
- 模式匹配
- 模式匹配
- 模式匹配
- 模式匹配
- 模式匹配
- 模式匹配
- 模式匹配
- 模式匹配
- 如何选择Web报表工具
- linux脚本(shell)编程
- DW导出到excel文件(标题、数据)
- 人生如水
- 年轻人,这就是C语言家族的故事
- 模式匹配001: 基本概念
- extjs java mysql 存储过程 分页
- Oracle常用函数
- oracle中表的左外连接,右外连接,全外连接
- QT多线程异步调用,类似MFC的PostThreadMessage
- 对话框式Activity的设置
- RHEL5建立自己的yum源服务器(基于http方式)
- SQL Server 2000 数据类型
- tomcat+花生壳 搭建服务器供外网访问