【前言】
写着sched这节却是在说红黑树,惊不惊喜意不意外。。。。因为我跑飞了。。。
AVL树: 最早的平衡二叉树之一。应用相对其他数据结构比较少。windows对进程地址空间的管理用到了AVL树。
红黑树: 平衡二叉树,广泛用在C++的STL中。如map和set都是用红黑树实现的。
B/B+树: 用在磁盘文件组织 数据索引和数据库索引。
Trie树(字典树): 用在统计和排序大量字符串,如自动机。
O(n)结构:list/栈/队列
O(1)结构:数组/hash/位图
O(logn)树形结构:红黑树/B+树/skip list
【红黑树】
闻其名,知其意:它是一颗数,长得黑色和红色的果实,它具有树的特点,它是树的一种。
红黑树的应用比较广泛,主要是用它来存储有序的数据,它的时间复杂度是O(lgn),效率非常之高。红黑树的特性:
(1)根节点是黑色。
(2)每个节点或者是黑色,或者是红色。
(3)每个叶子节点(NIL)是黑色。 [注意:这里叶子节点,是指为空(NIL或NULL)的叶子节点!]
(4)如果一个节点是红色的,则它的子节点必须是黑色的。
(5)从一个节点到该节点的子孙节点的所有路径上包含相同数目的黑节点。
定理:一棵含有n个节点的红黑树的高度至多为2log(n+1)
基本操作: 左旋 右旋 添加 删除 查找
【kernel中的红黑树】
kernel中老能用红黑树,本质上是用空间换时间:
内存管理:__insert_vmap_area
进程调度:CFS进程调度算法中,vruntime利用红黑树来进行存储,选择最小vruntime节点调度。
Epoll:红黑树 + 双向链表
高分辨率计时器:使用rbtree来组织未完成的计时器请求。
ext3文件系统:跟踪红黑树中的目录条目。
C++:广泛用在C++的STL中,如map和set都是用红黑树实现的。
【实现】
未完待续