一、Redis中的跳表
跳表可以简单理解就是给链表加索引,当结点数量多的时候,这种添加索引的方式,会使查询效率提高的非常明显。
跳表这个动态数据结构,不仅支持查找操作,还支持动态的插入、删除操作,而且插入、删除操作的时间复杂度也是 ○(㏒n)。
对于单纯的单链表,需要遍历每个结点来找到插入的位置。但是对于跳表来说,因为其查找某个结点的时间复杂度是 ○(㏒n),所以这里查找某个数据应该插入的位置,时间复杂度也是 ○(㏒n)。
二、数据库中的 B 树和 B + 树
1.B 树,每个节点都存储 key 和 data,所有节点组成这棵树,并且叶子节点指针为 null,叶子结点不包含任何关键字信息。
2.B + 树,所有的叶子结点中包含了全部关键字的信息,及指向含有这些关键字记录的指针,且叶子结点本身依关键字的大小自小而大的顺序链接,所有的非终端结点可以看成是索引部分,结点中仅含有其子树根结点中最大(或最小)关键字。(而 B 树的非终节点也包含需要查找的有效信息)
-
非叶结点仅具有索引作用,跟记录有关的信息均存放在叶结点中。
-
树的所有叶结点构成一个有序链表,可以按照关键码排序的次序遍历全部记录。
3.B 和 B + 树的区别在于,B + 树的非叶子结点只包含导航信息,