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 树有着巨大的优势。


    四、代码



  • 相关阅读:
    各种HTTP错误消息含义
    fastjson生成和解析json数据
    javascript性能优化
    js正则表达式test方法、exec方法与字符串search方法区别
    JavaScript中字符串的match与replace方法
    js 字符串indexof与search方法的区别
    JavaScript indexof方法
    JavaScript数组方法说明
    setTimeout模拟setInterval调用
    javascript forEach方法与jQuery each区别
  • 原文地址:https://www.cnblogs.com/mengfanrong/p/5174369.html
Copyright © 2011-2022 走看看