python - 如何在没有递归的情况下构建线段树?
问题描述
我试图了解使用 Python构建分段树的过程。我想出了这样的功能(有效):
arr = [ ... ]
tree = [None] * (4*len(arr))
def build(v, vl, vr):
if vl == vr:
tree[v] = arr[vl]
return
vm = (vl + vr) // 2
build(2*v + 1, vl, vm)
build(2*v + 2, vm + 1, vr)
tree[v] = tree[2*v + 1] + tree[2*v + 2]
build(0, 0, len(arr) - 1)
我怎样才能使这个构建函数迭代(无递归)?另外,以这种方式构建分段树的时间复杂度是多少?一些教程声明它是O(n)
,但递归调用不是O(n*log(n))
吗?
解决方案
推荐阅读
- java - 更改底部表内的片段
- r - 包检查和逻辑;is.element
- angular - 不清楚为什么父母在Angular初始化之前订阅了孩子的发射器
- vue.js - $emit 导致内存泄漏 - Vue.js
- python - ValueError:无法将字符串转换为浮点数:'nonPdr'
- javascript - 使用 Passport 和 Express JS 登录后如何保存会话?
- javascript - 在 Django 中使用 JavaScript 数据从 Ajax 存储到数据库
- vba - 如何在打开的演示文稿中用 SlideID 替换幻灯片
- haskell - 将 `(->) ((->) ab)` 实现为应用函子的最佳方法是什么?
- fortran - 变量不能出现在表达式中,用于数组维度和变量声明