美文网首页
块状链表

块状链表

作者: lintong | 来源:发表于2015-03-13 10:18 被阅读333次

介绍

有时候我们需要设计这样一种数据结构:它能快速在要求位置插入或者删除一段数据。先考虑两种简单的数据结构:数组和链表。数组的优点是能够在O(1)的时间内找到所要执行操作的位置,但其缺点是无论是插入或删除都要移动之后的所有数据,复杂度是O(n)的。链表优点是能够在O(1)的时间内插入和删除一段数据,但缺点是在寻找操作位置时,却要遍历整个链表,复杂度同样时O(n)的。这两种数据结构各有优缺点,我们可以把数组和链表的优点结合来,这就构成了一个新的数据结构:块状链表,结合数组和链表的优缺点的块状链表其各种操作的时间复杂度均为O(sqrt(n))。
从总体上来看,维护一个链表,链表中的每个单元中包含一段数组,以及这个数组中的数据个数。每个链表中的数据连起来就是整个数据。设链表长度为a,每个单元中的数组长度是b。无论是插入或删除,在寻址时要遍历整个链表,复杂度是O(a); 对于插入和删除操作,需要移动数组的元素,所以总的复杂度是O(a+b)。因为ab=n,取a=b=√n,则总的复杂度是O(√n)。
问题是如何维护a和b大致等于√n?
在执行插入操作后,如果当前单元中的数据个数>2√n,则将当前单元分割成两个新单元,每个单元中的数据个数保持为√n。在执行删除操作后,如果当前单元和当前单元的下一个单元的数据个数和<√n,则将两个单元合并成一个新单元。执行上述维护操作需要移动数组中的数据,复杂度是O(b),对于单元的分割和合并均是O(1)的,总的复杂度是O(b)的。这样,维护操作并不会使总复杂度增加。最终得到一个复杂度是O(√n)的数据结构。

在STL中,deque内部就是使用块状链表保证在首尾能够快速插入。并能够以索引的方式查找元素。

相关文章

  • 块状链表

    介绍 有时候我们需要设计这样一种数据结构:它能快速在要求位置插入或者删除一段数据。先考虑两种简单的数据结构:数组和...

  • HTML 标签分类

    块状元素 内联元素 内联块状元素

  • 块状体

    2030年,未知海域。 人类第一次开始涉足某一片未知海域,发现无数个漂浮在海面上墨黑色的块状晶体,远远看去海面像是...

  • [html+css]HTML+CSS基础课程:水平居中

    水平居中又分为:行内元素和块状元素 ,块状元素里面又分为定宽块状元素,以及不定宽块状元素。 水平居中设置-行内元素...

  • css文本居中的几种方式

    行内元素 还是 块状元素 ,块状元素里面又分为定宽块状元素,以及不定宽块状元素一、左右居中1.行内元素:常用的in...

  • 前端最重要的块状元素、内联元素以及盒子模型

    块状元素和内联元素 块状元素 一般是其他元素的容器,可容纳内联元素和其他块状元素,块状元素排斥其他元素与其位于同一...

  • Css元素分类

    HTML中的标签元素大体被分为三种不同的类型:块状元素,内联元素,内联块状元素。 常用块状元素: ....

  • 块状元素和内联元素区别

    1块状元素可以设置宽高,内联元素不可以2、块状元素各占据一行,内联元素都在同一行3、块状元素可以包含块状和内联,但...

  • 慕课网HTML+CSS基础教程(11-15章)

    一、CSS盒模型 1、元素分类:html标签中元素分为块状元素、内联元素(行内元素)和内联块状元素。 常用块状元素...

  • 笔记《七》--盒模型、布局模型、弹性盒模型

    (一)布局 1、html中的标签元素大体被分为三类:块状元素、内联(行内)元素、内联块状元素 1.1、常用的块状元...

网友评论

      本文标题:块状链表

      本文链接:https://www.haomeiwen.com/subject/puybxttx.html