跳表的概念
对链表建立n级索引,例如每两个结点提取一个节点到上一层,称之为索引层。
图中的down表示down指针,指向下一级结点
跳表的时间复杂度
跳表的高度
跳表的高度是log2n。
跳表的时间复杂度
跳表中查询某个数据的时间复杂度是O(logn)。
跳表的空间复杂度及优化
跳表的空间复杂度
跳表的空间复杂度为O(n)。
优化时间复杂度
如果链表有n个节点,每3或5个节点抽取抽出一个节点作为上一级索引的节点,
虽然跳表的空间复杂度仍然是O(n),但和每2个节点抽取一次相比占用的内存空间少了很多。
高效的动态插入和删除
时间复杂度
跳表本质上就是链表,所以仅插作,插入和删除操时间复杂度就为O(1),
但在实际情况中,要插入或删除某个节点,需要先查找到指定位置,而这个查找操作比较费时。
在跳表中查找操作的时间复杂度是O(logn),因此跳表的插入和删除操作的是时间复杂度也是O(logn)。
跳表索引动态更新
当往跳表中插入数据的时候,可以选择同时将这个数据插入到部分索引层中,
可以通过随机函数来决定将这个节点插入到哪几级索引中,比如随机函数生成了值K,那就可以把这个节点添加到第1级到第K级索引中。