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 "
随机推荐
- [置顶] mybatis的批量新增
开发项目中,总是与数据打交道,有的时候将数据放入到一个集合中,然后在遍历集合一条一条的插入,感觉效率超不好,最近又碰到这个问题,插入50条数据用了将近1s,完全满足不了系统的需求.效率必须加快,然后网 ...
- SQL语言的四大分类
以下是sql数据语言类型的关键词: 1.数据定义语言DDL create.drop.alter.truncate 2.数据查询语言DQL select 3.数据操纵语言DML insert.dele ...
- memcached linux / win32 1.4.13
memcached-win32-1.4.13 点击下载 http://pan.baidu.com/s/1kTMABaf memcached -d install (安装为windows service ...
- iOS之内购
很久之前就想出一篇IOS内付费的教程,但是一查网上的教程实在太多了,有的写得真的蛮不错的,就心想算了,于是就保存在草稿箱了.至于为什么写完它呢!真是说来话长,最近公司有个项目经理跑来问我有关苹果内付费 ...
- 移动互联网(APP)产品设计的经验分享【转】
随着移动互联网的发展,越来越多的Web产品开始布局移动端,因此最近经常碰到PM们在交流讨论移动APP产品的设计.我从事移动互联网已经有一年多了,通过不断的学习和实践也积累了一些心得,今天整理并分享一下 ...
- 最简单的Linux-ACL操作
添加ACL setfacl -m u:'username':rw 'dir or file' "-R可以迭代式的给目录下所有文件都添加相同的ACL" 查看ACL规则 getfa ...
- server 2003上为单点登录sso配置映射
单点登录不是本人做的,代码需要调用类似 http://***.com/login.sso 的地址.要成功调用,需要在IIS设置.sso为后缀的映射项. Win7系统下一设置完,就能成功调用. 但是服务 ...
- 在 CentOS 里安装 BIND-UTILS 以使用 DIG、HOST 和 NSLOOKUP
想用一下 dig 指令来进行域名设置的查询,结果 CentOS 提示没有此指令,然后想当然的以为就需要安装 DIG 软件包,可是查了查才知道实际上 dig.host.nslookup 这几个指令都在 ...
- java算法小知识练习(二)
话不多说,直接上题: 题目:两个乒乓球队进行比赛,各出三人.甲队为a,b,c三人,乙队为x,y,z三人.已抽签决定比赛名单. 有人向队员打听比赛的名单.a说他不和x比,c说他不和x,z比,请编程序 ...
- Angular 全局页面切换动画 me-pageloading
最近看了Codrops的一篇文章, 里面讲到了一个页面切换的效果, 详情点击此处. 看了这个效果感觉很赞, 觉得这个效果可以用在angular的页面切换中, 所以将这个效果移植到angular中, 做 ...