栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

使用二进制索引树进行RMQ扩展

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

使用二进制索引树进行RMQ扩展

从一点点摆弄的水平来看,这就是我们所拥有的:

g
用于整数数据数组的普通BIT数组
a
存储范围和。

g[k] = sum{ i = D(k) + 1 .. k } a[i]

其中,

D(k)
仅仅是
k
具有最低阶1位设置为0。下面我们就来代替

T[k] = min{ i = D(k) + 1 .. k } a[i]

该查询的工作方式与普通的BIT范围总和查询完全相同,只是随着查询的进行,子范围的最小值(而不是总和)有所变化。对于中的N个项目

a
,N中有ceiling(log
N)个上限,它确定运行时间。

此更新需要更多的工作,因为O(log N)子范围最小值(即的元素)

g
受更改影响,并且每个子集都需要自己进行O(log
N)查询来解决。这使得更新总体为O(log ^ 2 n)。

从有点麻烦的角度来看,这是非常聪明的代码。该语句

x += x &-x
清除1中最低顺序的连续字符串,
x
然后将下一个最高顺序的零设置为1。这正是您需要“遍历”原始整数的BIT的条件
x



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/382614.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号