IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> 树状数组及求和 -> 正文阅读

[数据结构与算法]树状数组及求和

1.概念

给定一个n个数字的数列,要求一下操作:?

? ①改变第k个数字,增加或减少一个值;

? ②查询第i个到第j个数的和

?一般数组解法: O(1) O(n);

?树状数组 O(logn) O(logn);

2.构建

假设给定数列A[1]->A[8]

?序列C[]为树状数组 特点:

(1)满二叉树,且二叉树中的每个叶子节点为A[]的一个元素 ? ? ? ? ? ?

?(2) C[i]为A[i]对应的那一列的最高的节点

找出规律:

i的二进制中从右到左连续0为x,则C[i]拥有2^x个叶子,C[i]为序列A[]中第i-2^x+1到第i个元素和,即C[i]=A[i-2^x+1]+…+A[i];

则S[i]:前i个元素的和

S[i]=C[i]+C[i-2x]+…

?***计算2^x:? 2^x=i&(-i) //位运算

证明:? i的二进制为A1B,其中B为全0序列。 ? ? ?

? ? ? ? ? ?假设A’为A的反码,B’为B的反码。 ? ? ? ? ? ?

? ? ? ? ? ? ? 由于补码=反码+1,-i=A’0B’+1。 ? ? ? ? ?

? ? ? ? ? ? ?因为B’为全1序列,-i=A’1B。 ? ? ? ? ?

? ? ? ? ? ? ?因此,i and (-i)=A1B & A’1B=1B,即2x的值。

int lowbit(int x){
 return x&(-x);
}
int sum(int i){
  int s=0; 
  while(i>0){
  s+=c[i];
   i-=lowbit(i);
}

3.数据更新

x为i的二进制从右到左连续0的个数。

如果A[i]改变,则C[i]需要改变。

如果C[i]改变,则C[i+2x]需要改变。

void update(int k,int value){
  while(i<=n){
  c[i]+=value;
  i+=lowbit(i);
}

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2021-09-11 19:04:09  更:2021-09-11 19:05:31 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 3:38:11-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码