1.块状链表的基本思想
常见的线性表结构修改操作有:再某一位置后插入一段数,从某一位置开始删除连续若干个数,我们不妨先来看看数组和链表这两种常用线性结构的实现效果。
可见,它们各有各的优势和缺点,且恰巧是优势互补。我们不禁想,如果把两者结合起来,是不是会有更优异的表现?块状链表正好是基于这个思想,将数组和链表结合了起来。块状链表整体上看其结构是一个链表,链表上每个节点存放着一段数组,链表上每个节点的数据拼接起来就是原先的整个线性表的内容,“块状”一词由此而来。
块状链表的基本组织形式,假设链表中每个节点所维护的数组的大小为S,那么,一共需要维护C快,满足SC=n(为了计算方便,如果n不是S的倍数,不妨在最后补齐相应数量的空位),n为要维护的元素总个数。按照这种方式分块,我们来看一下块状链表在上述三种操作中的表现。
(1)定位:定位时需要沿着链表的指针依次查找。假设查询数组中第P个数,那么需要找到块Bt,使得tS<P并且(t+1)S>=P。所以,查询的时间复杂度与块数同阶,为O(C)。当然,你也许会像维护一个反向的索引,即在外部用数组维护链表节点的顺序,这样就可以二分查找了。不过由于块状链表是动态的,每次修改后这个数组又需重新维护,维护这个数组的时间复杂度仍然是O(C)。
(2)插入:插入时间显然与插入的数的个数有关,为了考察块状链表本身,我们忽略这一点。首先,需要花费O(C)的时间定位到要插入的位置,接下来插
块状链表与块状树初步
最新推荐文章于 2021-03-17 13:41:21 发布