码迷,mamicode.com
首页 > 其他好文 > 详细

数据结构《17》---- Ternary Search Tree

时间:2014-05-01 17:49:30      阅读:326      评论:0      收藏:0      [点我收藏+]

标签:ternary search tree

一、 序言


上一篇文章中,给出了 trie 树的一个实现。可以看到,trie 树有一个巨大的弊病,内存占用过大。

本文给出另一种数据结构来解决上述问题---- Ternary Search Tree (三叉树)


二、数据结构定义


Trie 树中每个节点包含了 26 个指针,但有很大一部分的指针是 NULL 指针,因此浪费了大量的资源。

一种改进措施就是,以一棵树来代替上述的指针数组。

节点定义如下:


一个节点代表了一个字母,左孩子的字母小于当前节点,右孩子的字母大于当前节点。

同时每个节点包含一个标记:指出当前节点是否是单词的结尾。

如下图: 

这个图很容易理解错。我详细讲解以下。

首先,根节点是 A, 以 A 为开头的单词都在 中子树中;

左子树表示那些首字母 < A 的单词集合;

中子树表示那些首字母 = A 的单词集合;

右子树表示那些首字母 > A 的单词集合;

黄色表示单词的结尾;

下图中包含以下单词: AB ABCD ABBA BCD

mamicode.com,码迷


三、与 Trie 树的比较


当建立一个 7000+ 的词典时,

1. Trie 树共消耗了大约 22383 * 27 * 4 BYTE = 2.4 M

2. Ternary Tree 共消耗了 22468 * 14 BYTE = 0.31M


可以看出,在内存占用方面 Ternary Tree 较 Trie 树有着巨大的优势。


四、代码



数据结构《17》---- Ternary Search Tree,码迷,mamicode.com

数据结构《17》---- Ternary Search Tree

标签:ternary search tree

原文地址:http://blog.csdn.net/shoulinjun/article/details/24743191

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!