zoukankan      html  css  js  c++  java
  • 数据结构《17》---- 自己主动补齐之《二》----Ternary Search Tree

    一、 序言


    上一篇文章中,给出了 trie 树的一个实现。

    能够看到,trie 树有一个巨大的弊病,内存占用过大。

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


    二、数据结构定义


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

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

    节点定义例如以下:


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

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


    例如以下图: 

    这个图非常easy理解错。

    我具体解说下面。

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

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

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

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

    黄色表示单词的结尾。

    下图中包括下面单词: AB ABCD ABBA BCD


    三、与 Trie 树的比較


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

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

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


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


    四、代码



  • 相关阅读:
    Hopcroft-Carp 算法模板 自用
    (转)二分图匹配匈牙利算法与KM算法
    LightOJ
    最短路类型 (至今做过的)
    POJ
    POJ
    差分约束
    传递闭包(例题POJ3660)
    arrow,
    分辨率,
  • 原文地址:https://www.cnblogs.com/mengfanrong/p/5174369.html
Copyright © 2011-2022 走看看