double array trie 插入结点总结
提示:任一状态点的移动,会影响其Trie树中父节
点的base值的选择以及兄弟结点位置的变动,而兄
弟结点的移动又须变更相应的子节点的check值。
设待插入的词或其子串为‘c1c2c3...’。由双数
组的结构可以看出,当索引中已经存在以单个字符G
为状态的状态点时,所需的操作与建立双数组时的相
同,不影响双数组的整体结构,我们把符合这种情况
的词或其子串统称为“稳定词”。
(1)字符c1不在序列码表中,把c1加入序列码表中,设定其码值为数组大小。
(2) 索引中存在以字符c1,以及(c1,....ci-2)ci-1
为状态的状态点,但字符Ci不在序列码表中。这时要把ci加入序列码表。
比如:青年,青菜,已经在索引中,但青壮年中的‘壮‘不在序列码中,这时需要调整’壮‘的兄弟结点‘年’‘菜’,的插入位置,并修改兄弟结点孩子的check值。青年,青菜,没有孩子结点。
(3) 索引中存在以字符c1以及c1...ci-2ci-1’
为状态的状态点,字符Ci也在序列码表中,但状态点
c1...ci-2ci-1ci不存在索引中。
如: 白菜,白金在索引中,白伯不在索引中,需要修改白的base值,及白菜,白金的插入位置。并修改白菜心(白菜的孩子结点)的check值。
原先索引中已经存在:阿伯,现在新插入结点白伯,类似于: 青菜,白菜。
(4) ci 在序列码中,但ci不是首字状态点。把ci对应位置空出来,存放ci。ci位置原先结点及其兄弟结点插入其他位置,并修改其父节点的base值,孩子结点的check值,类似于relocate。
double array trie 插入结点总结的更多相关文章
- 双数组字典树(Double Array Trie)
参考文献 1.双数组字典树(DATrie)详解及实现 2.小白详解Trie树 3.论文<基于双数组Trie树算法的字典改进和实现> DAT的基本内容介绍这里就不展开说了,从Trie过来的同 ...
- sphinx索引分析——文件格式和字典是double array trie 检索树,索引存储 – 多路归并排序,文档id压缩 – Variable Byte Coding
1 概述 这是基于开源的sphinx全文检索引擎的架构代码分析,本篇主要描述index索引服务的分析.当前分析的版本 sphinx-2.0.4 2 index 功能 3 文件表 4 索引文件结构 4. ...
- Double Array Trie 的Python实现
不多介绍,可自行Google,或者其它关键词: "datrie" 放代码链接: double_array_trie.py 因为也是一段学习代码,参考的文章都记在里面了,主要参考gi ...
- 【转】B树、B-树、B+树、B*树、红黑树、 二叉排序树、trie树Double Array 字典查找树简介
B 树 即二叉搜索树: 1.所有非叶子结点至多拥有两个儿子(Left和Right): 2.所有结点存储一个关键字: 3.非叶子结点的左指针指向小于其关键字的子树,右指针指向大于其关键字的子树: 如: ...
- [LeetCode] Insert into a Cyclic Sorted List 在循环有序的链表中插入结点
Given a node from a cyclic linked list which is sorted in ascending order, write a function to inser ...
- [LeetCode] Insert into a Binary Search Tree 二叉搜索树中插入结点
Given the root node of a binary search tree (BST) and a value to be inserted into the tree, insert t ...
- 链表(三)——链表删除冗余结点&插入结点到有序链表
1.一个以递增方式排列的链表,去掉链表中的冗余值. 思路一:设有两个指针p和q.使p不动,q依次往后循环直到p->data不等于q->data,再将中间的冗余数据删除. 思路二:设有两个指 ...
- [LeetCode] Merge Sorted Array 混合插入有序数组
Given two sorted integer arrays A and B, merge B into A as one sorted array. Note:You may assume tha ...
- Save and read double array in a binary file
;} 32 bytes read 9.5 -3.4 1 2.1 "
随机推荐
- PAT 1002
1002. A+B for Polynomials (25) This time, you are supposed to find A+B where A and B are two polynom ...
- textarea 中的换行符问题
下面是我对这个问题的解决过程,最后算是完全搞懂了,真是阴沟里险些翻船 1.必须知道textarea中的换行符是 \n (个人检测发现按回车键是\n,好像在linux下是\r\n) 2.用nl2br之 ...
- qt widget设置Qt::FramelessWindowHint和Qt::WA_TranslucentBackground, 会出现一个bug: 在最小化后还原时界面停止刷新
qt widget设置Qt::FramelessWindowHint和Qt::WA_TranslucentBackground, 会出现一个bug: 在最小化后还原时界面停止刷新 Widget wit ...
- B - Plane of Tanks: Pro
Description Vasya has been playing Plane of Tanks with his friends the whole year. Now it is time to ...
- ios webview点击图片看大图效果及相应手势操作
下面参考资料有比较详细的解释,在之前的就项目中也有比较好的效果(支持更多手势),可以参考下 参考资料
- sql 自定义函数--固定格式字符转时间类型
遇到一个德国的客户,他们的时间格式是JJJJ-TT-DD HH:MM:SS,程序按照这个格式将时间插入数据库,但是在sql自带的转换函数convert.cast过程中报错,网上搜了下都说用conver ...
- 关于MapReduce单词统计的例子:
要统计的文件的文件名为hello hello中的内容如下 hello you hello me 通过MapReduce程序统计出文件中的各个单词出现了几次.(两个单词之间通过tab键进行的分割) im ...
- 转 oracle 11g 导出空表
1.Oracle11g默认对空表不分配segment,故使用exp导出Oracle11g数据库时,空表不会导出. 2.设置deferred_segment_creation 参数为FALSE后,无论是 ...
- 核心概念 —— 服务容器
1.简介 Laravel 服务容器是一个用于管理类依赖和执行依赖注入的强大工具.依赖注入听上去很花哨,其实质是通过构造函数或者某些情况下通过 set 方法将类依赖注入到类中. 让我们看一个简单的例子: ...
- HDOJ2004成绩转换
成绩转换 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submis ...