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 "
随机推荐
- debian防火墙firestarter
Firestarter是一个非常好用的防火墙图形化配置工具,作者和开发者是芬兰人. 首先肯定的说Firestarter防火墙是一款非常优秀的基于GUI图形用户界面下的,完全免费的自由软件,它为中小型L ...
- 判断脚本,图片,CSS,iframe等是否加载完成
1.图片 <img id="MyImg" src="src"/>jquery实现:$("#MyImg").load(functi ...
- XGPush集成(信鸽集成)
#import "AppDelegate.h" #import "XGPush.h" #import "XGSetting.h" #defi ...
- JavaFX(三)窗口拖动
1.问题场景 在上一篇中,我们将窗口的默认标题栏隐藏从而导致鼠标点击窗体无法进行拖动. 2.解决思路 给组件添加鼠标按下事件监听器和鼠标拖动事件监听器. 3.代码实现 代码片段: private do ...
- cocos2d-x lua与c++简单交互
cocos2d-x lua与c++简单交互 version: cocos2d-x 3.6 本文讲述lua与c++的一些简单交互: lua通过消息方式调用c++无参接口 c++调用lua带参接口 1.通 ...
- Android 高级UI设计笔记02:可以拖动交换item位置的GridView(转载)
如果大家不知道GridView基本使用,可以先参见:Android(java)学习笔记154:使用GridView以及重写BaseAdapter 1. 首先我们明白GridView拖拽的思路: ()根 ...
- Captcha生成及使用
@Controller @RequestMapping("/PictureCheckCode") public class ServletController { @Request ...
- Objective-C ,ios,iphone开发基础:几个常用类-NSNumber
2013-08-21 在Objective-C,包括int double float 等等再内的基础数据类型都不是一个类,所以就不能给它们发送消息,也就是说不能调用方法,那怎么办呢 ?Objectiv ...
- Lamp下安装memcached
1.先安装 libevent,再安装 Memcached主程序 # tar xf libevent-2.0.21-stable.tar.gz # cd libevent-2.0.21-stable # ...
- [转]Response.AddHeader 文本下载
本文转自:http://hi.baidu.com/yuxi981/item/7c617fc41b03ad60f6c95d30 Response.AddHeader实现下载 /// <su ...