AVL树,红黑树,B树,B+树,Trie树应用场景简介
来源:互联网 发布:国产爆笑喜剧电影知乎 编辑:程序博客网 时间:2024/06/05 17:12
转载自:点击打开链接
AVL树,红黑树,B树,B+树,Trie树应用场景简介
1.AVL树:
平衡二叉树,一般是用平衡因子差值决定并通过旋转来实现,左右子树树高差不超过1,那么和红黑树比较它是严格的平衡二叉树,平衡条件非常严格(树高差只有1),只要插入或删除不满足上面的条件就要通过旋转来保持平衡。由于旋转是非常耗费时间的。我们可以推出AVL树适合用于插入删除次数比较少,但查找多的情况。
应用相对其他数据结构比较少。windows对进程地址空间的管理用到了AVL树。
2.红黑树:
平衡二叉树,通过对任何一条从根到叶子的简单路径上各个节点的颜色进行约束,确保没有一条路径会比其他路径长2倍,因而是近似平衡的。所以相对于严格要求平衡的AVL树来说,它的旋转保持平衡次数较少。用于搜索时,插入删除次数多的情况下我们就用红黑树来取代AVL。
红黑树应用比较广泛:
广泛用在C++的STL中。map和set都是用红黑树实现的。
著名的linux进程调度Completely Fair Scheduler,用红黑树管理进程控制块。
epoll在内核中的实现,用红黑树管理事件块
nginx中,用红黑树管理timer等
Java的TreeMap实现
3.B树,B+树:
它们特点是一样的,是多路查找树,一般用于数据库中做索引,因为它们分支多层数少,因为磁盘IO是非常耗时的,而像大量数据存储在磁盘中所以我们要有效的减少磁盘IO次数避免磁盘频繁的查找。
B+树是B树的变种树,有n棵子树的节点中含有n个关键字,每个关键字不保存数据,只用来索引,数据都保存在叶子节点。是为文件系统而生的。
B+树相对B树磁盘读写代价更低:因为B+树非叶子结点只存储键值,单个节点占空间小,索引块能够存储更多的节点,从磁盘读索引时所需的索引块更少,所以索引查找时I/O次数较B-Tree索引少,效率更高。而且B+Tree在叶子节点存放的记录以链表的形式链接,范围查找或遍历效率更高。Mysql InnoDB用的就是B+Tree索引。
4.Trie树:
又名单词查找树,一种树形结构,常用来操作字符串。它是不同字符串的相同前缀只保存一份。
相对直接保存字符串肯定是节省空间的,但是它保存大量字符串时会很耗费内存(是内存)。
类似的有:前缀树(prefix tree),后缀树(suffix tree),radix tree(patricia tree, compactprefixtree),crit-bit tree(解决耗费内存问题),以及前面说的double arraytrie。
前缀树:字符串快速检索,字符串排序,最长公共前缀,自动匹配前缀显示后缀。
后缀树:查找字符串s1在s2中,字符串s1在s2中出现的次数,字符串s1,s2最长公共部分,最长回文串。
trie 树的一个典型应用是前缀匹配,比如下面这个很常见的场景,在我们输入时,搜索引擎会给予提示。
- AVL树,红黑树,B树,B+树,Trie树应用场景简介
- AVL树,红黑树,B树,B+树,Trie树应用场景简介
- AVL树,红黑树,B树,B+树,Trie树应用场景简介
- AVL树,红黑树,B树,B+树,Trie树应用场景简介
- AVL树,红黑树,B树,B+树,Trie树都分别应用在哪些现实场景中?
- AVL树,红黑树,B树,B+树,Trie树都分别应用在哪些现实场景中
- AVL树,红黑树,B树,B+树,Trie树
- AVL树、红黑树、B/B+树、Trie树
- AVL树,红黑树,B-B+树,Trie树原理和应用
- AVL 红黑树 B(+)树 跳表 字典树 应用场景及分析
- AVL树、红黑树、B/B+树和Trie树的比较
- B树、B+树、AVL树、红黑树
- B树、B+树、AVL树、红黑树
- B树、B+树、红黑树、AVL树
- 红黑树和B树应用场景总结
- 红黑树和B树应用场景总结
- B树(B-树)、B+树、AVL树、B*树
- B树、B-树、B+树、B*树、红黑树、 二叉排序树、trie树Double Array 字典查找树简介
- SVN中tag branch trunk用法详解
- (十九)maven实践-父子模块
- ios 去除字符串首尾空格、换行
- 一个类似淘宝筛选框的右边弹出框(Acitivity实现)
- kendoMaskedTextBox常用录入格式
- AVL树,红黑树,B树,B+树,Trie树应用场景简介
- 2015最流行的Android组件、工具、框架大全
- 第一篇博客
- 【OpenCV】opencv 2.4 版本共100个自带例子
- org.apache.cxf.interceptor.Fault: No such operation
- C#控制台基础 helloworld之 通过重写Tostring方法输出
- Java 日期的几种常见操作工具类
- oracle中的(+)表示外连接,总是放在从表(非主表)的一方
- linux vim 编辑器显示行号