这些算法实际上普通开发写代码要用到的时候不多,但是对于这个行业的从业者来说,必须要搞清楚大致的内部算法从而对于提升自己的技术水准很有必要。用不用的到不一定,但是从应付面试和拓展自己的知识面从而达到借鉴和判断的效果还是有必要的。
二叉树:主要是利用二分查找的思维,形成一个一个顶点两个分支,一直向下延续n阶的树,查数据的时候一个阶耗费一次io,添加数据的时候重新建立二叉树,效率起码比一般的链表查询快很多。实际应用,没找到具体的数据结构,应该是多用于查询算法中。
平衡二叉树:和二叉树结构和算法基本相同,不同之处在于,添加数据的时候,不是重新排列整个数据结构,而是根据平衡因子为1去旋转局部的树结构,达到两边子树高度不超过平衡因子1的树结构,这样不需要整体去梳理树结构。实际应用和二叉树差不多,多用于查询算法,如果添加删除比二叉树多,可以用这个。
红黑树:红黑树也是两路分支向下延续,但是两路分支高度差不是保持为1,可以理解平衡因子不大于分支矮的那边的高度,所有节点由黑节点和红节点组成,黑节点为根节点,上下连续的节点不能同时为黑节点或者红节点,查询的时候和二叉树差不多,但是添加和删除数据的时候主要通过旋转红黑节点来达到新的树平衡,由于引入了红黑节点旋转的算法,因此整体效率是比平衡二叉树要高的。 使用非常广泛,如 TreeMap 和 TreeSet 都是基于红黑树实现的,而 JDK8 中 HashMap 当链表长度大于 8 时也会转化为红黑树。
B树:Banlance Tree即平衡树,和以上树的区别在于,它是一个n个顶节点的二叉树,每个顶节点用一个关键字定位,并且不分根节点和叶子节点,每个节点都存有key和data,每查询一个数据耗费一次io,添加和删除根据key值去定位和调整树结构,效率比上述都要高。主要用于数据库的文件及数据存储,nosql的mogodb就是用这种树结构存储数据。
B+树:和B树非常类似,只是每个节点只存储key,不存储data,最终key会指向底部的叶子节点,data只存储于叶子节点,然后一次性查出数据。对于这种存储数据的方式,如果查单个少量的数据,B树效率快,但如果是大量数据比较耗io的情况,B+树效率更好更稳定。mysql数据库的索引就是用的B+树。
以上仅为个人对知识的理解,如若有疑问的地方,可以自己去查找相关资料去了解详细知识点并佐证。