zoukankan      html  css  js  c++  java
  • 跳表与二分查找

    跳表
    对数据结构中的数据常见的操作有:查找、插入、删除。有序数组的二分查找操作速度很快,但是插入、删除操作很耗时,并且对内存要求很苛刻。那么有什么数据结构能够做到查找、插入、删除操作速度都很快而且对内存要求不高呢?——答案是:跳表。

    跳表是什么?即:把有序链表改造位支持“二分查找”算法,这种链表叫做跳表。 跳表的二分查找算法其实是一种“类似二分查找算法”。

    跳表是一个各方面性能都比较优秀的“动态数据结构”。可以进行快速的插入、删除、查找操作。代码实现也不复杂。甚至能替代“红黑树”。
    时间复杂度:O(logn),空间复杂度:O(n)。

    如何实现跳表?
    有序链表怎么实现跳表?——》有序链表怎么实现二分查找?——》有序链表怎么实现随机访问?
    最终要解决的问题就是:让有序链表可以随机访问。
    可以对有序链表建立索引,索引可以放在链表中。从链表的头结点开始,每三个元素取第一个元素放到索引链表中。索引链表的结点中保存了元素值和指向原始链表中值地址的指针。这个索引叫做“一级索引”,可以在一级索引的基础上,在建立二级、三级……索引。这种链表加多级索引的数据结构叫跳表。
    如下:


    补充
    redis缓存数据库的有序集合(SortedSet)用的就是跳表实现。
    ————————————————
    版权声明:本文为CSDN博主「白衬衫猿」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/qq_32328959/article/details/88606320

  • 相关阅读:
    [模板] 主席树
    [模板] 替罪羊树
    [模板] Treap
    [LUOGU] P4342 [IOI1998]Polygon
    [JOYOI] 1051 选课
    poj 1845 数论(唯一分解定理+分治法求等比数列前n项的和mod m的值)
    poj 2418 bst统计字符串
    hdu 3791 二叉排序树
    hdu 3999 二叉排序树
    toj 3711 水题
  • 原文地址:https://www.cnblogs.com/moxiaotao/p/11643601.html
Copyright © 2011-2022 走看看