主页 > 程序人生 > 对三叉搜索树的理解

对三叉搜索树的理解

对于字符串的高效处理一般都是用字典树——Trie,或者ac自动机的。但是字典树对于大量数据的空间的开销相当大,特别我们的字典中不仅仅是26个字母组成的字符串时空间的损耗就会巨大无比。。。
三叉搜索树就是一种比较好的解决方法,我第一次看到的时候时在最近的《程序员》杂志上的一篇文章——《用三叉搜索树实现高效率的“自动完成”》,是一个.net大牛写的~于是我便对这个产生了兴趣,在折腾几天后,终于用java也写了一个很挫的三叉搜索树(见用三叉搜索树实现高效字符查找)。
其实所谓的三叉树就是舍去了Trie的多余的指针,而是把一个个树套在一起,每个节点压缩成三个方向。如果匹配的话就走中间方向的指针,如果不匹配,那么就走左或者右指针。选左选右则是这个数据结构优化的一个好地方,我用了字母顺序,文章作者说这个是最挫的方法。。。窘一个。。。好方法我还没有想到,因为不会写自平衡的树。。。杯具一个。。。
这里有一个例子,假如我们存入”AB”,”ABBA”.”ABCD”.”BCD”,这几个单词,那么三叉树就会出现如下的储存方式。。。

tt

红线表示匹配的箭头~黄色的表示单词结尾

相关日志

, , , , ,

评论:9

参与评论
  1. 回复 weet
    09/11/09

    我奇怪的是,我在Google上搜索“三叉搜索树”的时候你的文章排在第一。中文维基上也找不到。百度更不用说。难道这不是特殊名词。
    还有就是实现自平衡,有种叫做旋转的来自红黑树的方法,不知道对你会不会有用。

    • 回复 混沌的云
      09/11/09

      因为没人写我才写的,而且这个数据结构很冷僻的,搜不到很正常的。。。自平衡我知道方法,只是还不能理解

      • 回复 zagfai
        10/04/29

        @混沌的云, 沒有自平橫的吧

        • 回复 zerob13
          10/04/29

          @zagfai, 我写的没有的,但是可以实现的,不过很复杂,我写不出来 :razz:

    • 回复 混沌的云
      09/11/09

      国内资料很少的,你可以搜索Ternary Search Tree,维基百科也有的

  2. 回复 oeddyo
    10/04/08

    空间是少了1/3。。。时间慢了好多倍……

  3. 回复 oeddyo
    10/04/08

    倒…sorry…忘了你是用JAVA写的了,错跟C++的比了。
    不好意思:)

    • 回复 混沌的云
      10/04/08

      没事

      • 回复 zagfai
        10/04/29

        @混沌的云, 其實慢了很多也應該吧 最壞時候慢的是26倍吧.

发表评论

电子邮件地址不会被公开。 必填项已用 * 标注

*

您可以使用这些 HTML 标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

引用:0

下面所列的是引用到本博客的链接
对三叉搜索树的理解 来自 混沌的云
顶部