提示:
词典及容错性检索(词典搜索的数据结构与通配符查询)
本节最重要的内容是:
(1)词典快速查找的数据结构(2)非精确查询(3)自动校正技术
希望大家学到:
(1)了解词典查找的数据结构(2)理解通配符查询的思想(3)掌握编辑距离的计算(4)理解自动校正技术的思路
>>***其他内容(拼写校正)可转***<<
文章目录
- 词典搜索的数据结构
- 常用数据结构
- 哈希函数
- 二叉树
- 字典树
- B树
- 通配符查询
- (1)轮排索引
- (2)支持通配符查询的k-gram索引
词典搜索的数据结构
常用数据结构
哈希函数
二叉树
字典树
B树
内部节点可以多于两个
举例:2-3 B树只能有2-3个内部结点
点击直达>>为什么平衡二叉树不适合索引:
索引是存在于索引文件中,是存在于磁盘中的。因为索引通常是很大的,因此无法一次将全部索引加载到内存当中,因此每次只能从磁盘中读取一个磁盘页的数据到内存中。而这个磁盘的读取的速度较内存中的读取速度而言是差了好几个级别。
注意,我们说的平衡二叉树结构,指的是逻辑结构上的平衡二叉树,其物理实现是数组。然后由于在逻辑结构上相近的节点在物理结构上可能会差很远。因此,每次读取的磁盘页的数据中有许多是用不上的。因此,查找过程中要进行许多次的磁盘读取操作。
而适合作为索引的结构应该是尽可能少的执行磁盘IO操作,因为执行磁盘IO操作非常的耗时。因此,平衡二叉树并不适合作为索引结构。
通配符查询
通配符查询:
方式 | 数据结构 | 举例 |
---|---|---|
尾通配符查询 | B树 | mon* |
首通配符查询 | 反向B树 | *mon |
一般通配符查询 | B树和反向B树 | se*mon |
查询方法:
(1)轮排索引
在字符集中引入新的符号$,标识词项开始和结束。
举例:hello轮排索引部分
轮排索引特点:解决了通配符查询问题,结构简单,词典会非常大
(2)支持通配符查询的k-gram索引
k-gram代表由k个字符组成的序列。
举例:在词项castle中 cas、ast、tle都是3-gram。
如果用$字符标识词项开始和结束。那么该词项所有的3-gram有:$ca,cas,ast,stl,tle,le$。