zoukankan      html  css  js  c++  java
  • 极客时间课程《数据结构与算法之美》笔记09

    跳表

    对链表改造一波,可以支持类似“二分”的查找算法,改造成跳表。
    快速的插入删除查找,有些时候可以替代红黑树。
    核心思想是对链表建立一层索引(比如隔两个结点提取一个结点到上一级),减少遍历节点的数目。
    进阶思想是再加一层索引。
    链表加多级索引的结构,就是跳表。
    我的感觉思想比较接近向上生长的二叉树。

    跳表查询的时间复杂度就是O (logn) ,空间换时间。每一层最多遍历m个结点,m数量跟索引规则有关。(隔一个结点取索引的话,m就是3)
    虽然占用空间有点多,空间复杂度为O (n) ,但是实际开发中,原始链表的存储可能很大,而索引仅仅是存储关键值和几个指针。新占用的空间和原始数据相比可以忽略。

    高效动态插入删除

    复杂度也是O (logn) ,仅仅是定位到插入的位置需要复杂度,单个的插入操作的时间复杂度是O(1)。

    常常插入和删除之后,需要动态更新索引,要不然会退化成为单链表。

    往跳表中插入数据的时候,可以选择同时将这个数据插入到部分索引层中,通过一个随机函数,决定将这个节点插入到哪几级索引中。比如生成K,则将此结点一次添加到第一级到第K级这K级索引中。

  • 相关阅读:
    PHP的五大运行模式
    PHP设计模式-工厂模式
    php+redis实现消息队列
    面试题一
    Linux常用命令
    实现session在多台服务器上共享
    Memcache和redis的区别
    PHP设计模式-建造者模式
    FASTCgi和PHP-fpm关系
    安装vm虚拟机
  • 原文地址:https://www.cnblogs.com/JackKing-defier/p/11155512.html
Copyright © 2011-2022 走看看