皮皮学,免费搜题
登录
logo - 刷刷题
搜题
【简答题】
[实现跳跃表]请根据下面介绍的跳跃表的思想实现跳跃表。 说明 为了提高链表的检索效率,可以参考顺序表把单链表中元素排序,然后采用类似二分法的思想进行折半检索。不过,因为链表中结点的位置不是连续存放的,所以为了折半检索的需要,把单链表扩充为多链结构,借助于一些支持折半的“跳跃的指针”,把检索的范围快速缩小。 下图(a)是一个简单的链表,其结点按照结点值的顺序排列,检索排序的链表需要沿着链表一个结点一个结点的移动,平均需要访问n/2个结点。考虑添加一个指向其他后继结点的指针,以便交替地跳过结点的直接后继结点,如下图(b)所示。把只有1个指针的结点定义为0级跳跃表结点,把有2个指针的结点定义为1级跳跃表结点。进行检索时,先沿着1级指针走,直到找到一个后继比检索关键码大的值。然后回到0级指针,如果需要的话,再多走一个结点,这样可有效地把工作量减半。类似地,可以继续以这种方式添加指针,直到像下图(c)那样,对于一个有n=8个结点的表,只要有log2 n=3个指针。进行检索时,第一可以跳过n//2个结点,然后根据需要使得步伐越来越短(类似二分法检索)。通过这种安排,平均情况下的访问数是O(log2,n)。 下图(c)是一个理想的跳跃表。其中一半的结点只有1个指针,四分之一的结点有2个指针,八分之一的结点有3个指针,依此类推。而且同一级的指针跳跃的跨度是相同的。这是一个完全“等跨度”的跳跃表。 概率数据结构的思想跳跃表与有序的顺序表不同,它是一种动态数据结构,它的主要优点是能够动态地保持高效的检索。在频繁执行插入和删除过程维护前面这种“完全”等跨度的代价很大。为了减少维护的代价,仅仅需要维护成随机的等跨度就行。采用的关键技术是按照所谓“概率数据结构”的思想。具体方法如下: 假设元素的插入和删除都是随机的,每当删除一个结点时,在跳跃表中找到该结点后直接删除;关键是在插入一个结点时,要为新结点按概率随机分配一个级别,使得在跳跃表的所有结点中,有一个指针的结点(0级跳跃表结点)概率是50%,有两个指针的结点(1级跳跃表结点)概率是25%……依此类推。这样,根据概率论的观点,进行检索时,平均情况下的访问结点数仍然是O(log2n)。
手机使用
分享
复制链接
新浪微博
分享QQ
微信扫一扫
微信内点击右上角“…”即可分享
反馈
参考答案:
举一反三
【多选题】识读船体分段划分图主要了解()。
A.
船体分段位置
B.
分段的数量
C.
分段的质量
D.
分段的大小
【多选题】糖尿病的二级预防是针对()
A.
一般人群
B.
肥胖者(√)
C.
吸烟者
D.
有糖尿病家族史(√)
E.
糖尿病患者
【多选题】糖尿病的二级预防是针对
A.
一般人群
B.
肥胖者
C.
吸烟者
D.
有糖尿病家族史者
E.
糖尿病患者
【判断题】在敦煌网平台优惠券活动可以和所有折扣活动或者直降活动叠加使用
A.
正确
B.
错误
【判断题】年货购物券和店内所有优惠(例如商品优惠券、店铺优惠券、店铺红包、淘金币抵扣、包邮券等等)可以叠加使用。
A.
正确
B.
错误
【单选题】能作为C++程序的基本单位是( )。
A.
字符
B.
语句
C.
函数
D.
程序
【多选题】望神可以了解
A.
精充与否
B.
气足与否
C.
神旺与否
D.
预后吉凶
E.
病邪性质
【单选题】识读分段划分图主要是了解船体分段的重量及大小和下面哪项内容?
A.
位置、方向
B.
位置、数量
C.
方向、数量
D.
方向、结构
【单选题】优惠券的叠加使用规则,不包括以下哪一种情况?
A.
优惠券之间不可以叠加, 商品优惠券和店铺优惠券不能叠加使用,系统默认生效优惠力度最大的优惠券。
B.
优惠券和店铺红包不可叠加使用。
C.
只要是店铺优惠券,不管领取渠道是店铺,还是阿里妈妈,亦或其他渠道,使用逻辑都是一样的,一次下单中,只能使用一张。
D.
店铺优惠券和商品优惠券,可以叠加使用。
【判断题】速卖通买家可以在同一订单中叠加使用优惠券。()
A.
正确
B.
错误
相关题目:
参考解析:
知识点:
题目纠错 0
发布
创建自己的小题库 - 刷刷题