刚刚看到了红黑树(red-black tree),进程申请的地址空间管理用到的,改变了我一直的一个观点。我一直以为所有的数据管理都是简单的链表,没有其他的了。看到这里我才发现我的认识是错误的,一切的根本都是链表没错,但在链表的基础上,设计师又设计出了一些链表的节点规则,这样一切就真的就变了。例如这个红黑树,在成百上千个节点的情况下就大大的缩短了查询速度。如果是简单的链表,那速度与节点个数是简单的线性关系。加上红黑树算法后可不是了,它加了一个对数,随着节点数量的增加,速度降低速度明显变缓。
书中写到了红黑树的4条规则:
1、每个节点必须或为黑或为红
2、树的根必须为黑
3、红节点的孩子必须为黑
4、从一个节点到后代叶子节点的每个路径都包含相同数量的黑节点 。当统计黑节点个数时,空指针也算作黑节点。
后面又举了一个旋转的例子,但是我没看太明白。这块以后还得继续研究,这是我认为我知道的第一个我认为可以成为算法的规则。linux内核用到了这个,说明绝对是一个经典有效的算法。它运行在一切的最底层,运行在你每次malloc的时候。运行在所有其他语言程序操作大数据的下面一层。
前几天和领导谈话的时候已经定下了2019年的学习目标,领导年底的时候会再问我。这一年有的学了。内核&&网络