码迷,mamicode.com
首页 > 编程语言 > 详细

树状数组

时间:2015-09-25 18:04:22      阅读:207      评论:0      收藏:0      [点我收藏+]

标签:

一. 树状数组简介:

  树状数组用来求区间元素的和,求一次区间元素和的效率为O(log n).

 

二. 图解树状数组:

  假设序列为:A[1]-A[8],C[]为树状数组.

  C[1] = A[1];

  C[2] = A[1] + A[2];

  C[3] = A[3];

  C[4] = A[1] + A[2] + A[3] + A[4];

  C[5] = A[5];

  C[6] = A[5] + A[6];

  C[7] = A[7];

  C[8] = A[1] + A[2] + A[3] + A[4] + A[5] + A[6] + A[7] + A[8];

  将十进制化成二进制,然后观察这些二进制数最右边的1的位置:

  1 --> 00000001

  2 --> 00000010

  3 --> 00000011

  4 --> 00000100

  5 --> 00000101

  6 --> 00000110

  7 --> 00000111

  8 --> 00001000

  最右边的1的位置C[]的关系:

    在满二叉树中,

  以1结尾的节点(C[1], C[3], C[5], C[7]),其叶子数有1个,所以这些节点C[i]代表区间为1的元素和;

  以10结尾的节点(C[2], C[6]),其叶子数为2,所以这些节点C[i]代表区间范围为4的元素和;

  以100结尾的节点(C[4]),其叶子数为8个,锁业这些节点C[i]代表的区间范围为8的元素和.

树状数组

标签:

原文地址:http://www.cnblogs.com/wubdut/p/4838526.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!