树的几点总结(二叉树,红黑树,tire树……)

今天做索引结构,看了一些不同的树的知识,这里简单的总结了一下。


 二叉查找树 (Binary Search Tree)
 这个相信大家比较熟悉,BST的查找最好时间复杂度O(logN),最坏时间复杂度O(N)。


平衡二叉树(AVL):
查找代价和插入代价:O(logN)级别上
删除操作的时间复杂度为O(logN)+O(logN)=O(2logN)


二叉平衡树的严格平衡策略以牺牲建立查找结构(插入,删除操作)的代价,换来了稳定的查找时间复杂度O(logN) 。如果说再去找一种折中策略,即不牺牲太大的建立查找结构的代价,也能保证稳定高效的查找效率呢? ——红黑树。


红黑树 (Red-Black Tree )

查找效率最好情况下时间复杂度为O(logN),

但在最坏情况下比AVL要差一些,

但也远远好于BST。
总体评价:大量数据实践证明,RBT的总体统计性能要好于平衡二叉树。

其实在我项目中具体用的是B+树,具体B树的知识我在这里不再重复,可以参考下http://blog.csdn.net/hguisu/article/details/7786014这篇说的很详细。


标准 Trie树

  所有含有公共前缀的字符串将挂在树中同一个结点下。实际上trie简明的存储了存在于串集合中的所有公共前缀。
总结:一个存储长度为n,来自大小为d的字母表中s个串的集合X的标准trie具有性质如下:
      (1) 树中每个内部结点至多有d个子结点。
      (2) 树有s个外部结点。
      (3) 树的高度等于X中最长串的长度。
      (4) 树中的结点数为O(n)。
标准Trie树的应用和优缺点
     (1) 全字匹配:确定待查字串是否与集合的一个单词完全匹配。如上代码fullMatch()。
     (2) 前缀匹配:查找集合中与以s为前缀的所有串。
优点: 查找效率比与集合中的每一个字符串做匹配的效率要高很多。在o(m)时间内搜索一个长度为m的字符串s是否在字典里。
      缺点:标准Trie的空间利用率不高,可能存在大量结点中只有一个子结点,这样的结点绝对是一种浪费。正是这个原因,才迅速推动了下面所讲的压缩trie的开发。 
     注意:Trie树的结构并不适合用来查找子串匹配

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值