Segment Tree

可紊 提交于 2019-11-28 17:34:15

Leetcode上一道题,给定一个整数数组,要实现:

  • 求[i, j]所有元素的和,0 <= i <= j <= n - 1,sumRange(i, j)
  • 数组的元素会被修改, update(i, val)
  • 这两个函数会被均匀的调用很多次

最简单的方法是求和O(n),修改元素O(1),时间复杂度太大,使用Segment Tree可以将二者的时间复杂度均变为O(logn)

Segment Tree:

  • 叶子节点是输入数组中的所有元素
  • 内部节点是其孩子节点所带信息的merge
  • Segment Tree可以由数组实现,数组索引i的左孩子为2 * i + 1,右孩子为2 * i + 2,父节点在(i - 1) / 2下取整处
  • 该数组的大小为$2 * 2 ^(ceil(log_2^n)) - 1$
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!