当前位置: 首页 > news >正文

数据结构:带索引的双链表IDL

IDL=indexed double list
在这里插入图片描述
如图,下方是一个双链表,上方是索引。索引储存为结构体数组,结构体内包括一个指针,和长度。

假设索引只有一个,这时,它应该指向双链表的中间,这样才能提高搜索效率。称为1/2索引。

索引数增加到两个,它们应该指向1/3处。

索引数为N,指向1/(N+1)处。

经过上述设计后,索引速度不会达到O(logn),但是却能提高不少。

设双链表的最大长度为100万,则索引长1000,每个索引项中的长度为1000。即,隔一千多项有一个指针。

增加数据时,重新计算索引数组中的指针和长度,这需要产生2K次修改。相比使用数组,对于有1M个元素的数组,在首部增加1项,会产生1M个数据移动。2K比1M小很多。

举例来说,索引中储存的长度是6-6-5-6,插入一项之后变成6-7-5-6。总长度为24,分4段,平均每段长度为6,所以,修改为6-6-6-6。这一过程可以叫做“索引的均衡化”。

查找数据时,在索引数组中采用二分法,先找到双链表的中间位置,比大小。然后在前半段或后半段之中继续查找。当索引数组中的前后两项相邻时,就启用双链表的遍历,一项接一项地查找。

上文中计算过,隔一千个元素有一个索引,所以,遍历的过程会持续1000次。这仍然比遍历整个双链表的100万次小很多。

总之,带索引的双链表和跳表相比,它们都能维持序列,进行范围搜索。IDL占用的空间比跳表少,速度也慢,这是“空间换时间”策略的折中方案。

之前的博客描述过“延迟序列”,这是另一个处理序列的方案。它更省内存,可以用于从内存里的红黑树,到硬盘上的数据结构(如B+树),的转换过程中的替代品。但是延迟序列不能访问相邻元素,IDL却可以。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • STM32-门电路-储存器-寄存器-STM32f1-MCU-GPIO-总线-keil5-点led
  • 惠普澄清供应链转移传闻:中国在全球布局中扮演核心角色
  • Vuforia AR篇(九)— AR塔防下篇
  • 简单分享下python打包手机app的apk
  • 【C++】初识面向对象:类与对象详解
  • 十八.核心动画 - 使用CAGradientLayer图层构建渐变视图
  • 用Python在Word文档中创建和执行条件邮件合并
  • bootstrap之表格
  • module ‘pkgutil‘ has no attribute ‘ImpImporter‘. Did you mean: ‘zipimporter‘?
  • javascript:检测图片的宽高
  • 社交及时通讯平台完整版源码,uniapp技术,可打包成app
  • QEMU理解与分析系列(1):QEMU简介
  • Flutter 电视投屏模块
  • 单例模式(java)
  • jupyter notebook魔法命令
  • JS中 map, filter, some, every, forEach, for in, for of 用法总结
  • 【Linux系统编程】快速查找errno错误码信息
  • CSS盒模型深入
  • Fastjson的基本使用方法大全
  • go语言学习初探(一)
  • Linux快速复制或删除大量小文件
  • RxJS: 简单入门
  • vue-cli3搭建项目
  • Vue--数据传输
  • 程序员该如何有效的找工作?
  • 代理模式
  • 可能是历史上最全的CC0版权可以免费商用的图片网站
  • 全栈开发——Linux
  • 日剧·日综资源集合(建议收藏)
  • 如何打造100亿SDK累计覆盖量的大数据系统
  • 适配iPhoneX、iPhoneXs、iPhoneXs Max、iPhoneXr 屏幕尺寸及安全区域
  • 通过几道题目学习二叉搜索树
  • 物联网链路协议
  • 协程
  • 在Mac OS X上安装 Ruby运行环境
  • 终端用户监控:真实用户监控还是模拟监控?
  • 策略 : 一文教你成为人工智能(AI)领域专家
  • 没有任何编程基础可以直接学习python语言吗?学会后能够做什么? ...
  • ​LeetCode解法汇总2583. 二叉树中的第 K 大层和
  • ​RecSys 2022 | 面向人岗匹配的双向选择偏好建模
  • ​ssh免密码登录设置及问题总结
  • ​如何防止网络攻击?
  • #define、const、typedef的差别
  • (博弈 sg入门)kiki's game -- hdu -- 2147
  • (二) 初入MySQL 【数据库管理】
  • (二)学习JVM —— 垃圾回收机制
  • (附源码)springboot宠物医疗服务网站 毕业设计688413
  • (附源码)springboot炼糖厂地磅全自动控制系统 毕业设计 341357
  • (附源码)springboot学生选课系统 毕业设计 612555
  • (附源码)计算机毕业设计SSM疫情社区管理系统
  • (三)uboot源码分析
  • (四) Graphivz 颜色选择
  • (四)stm32之通信协议
  • (一)kafka实战——kafka源码编译启动
  • (原創) 如何讓IE7按第二次Ctrl + Tab時,回到原來的索引標籤? (Web) (IE) (OS) (Windows)...