Algorithm 二维段树更新/修改步骤复杂度
我很难理解中“修改查询”的复杂性。它在文章的底部声明复杂性为O(2*n*logn*logm)。为什么不仅仅是O(logn*logm)?额外的线性项n从何而来?检查它们的更新实现Algorithm 二维段树更新/修改步骤复杂度,algorithm,time-complexity,Algorithm,Time Complexity,我很难理解中“修改查询”的复杂性。它在文章的底部声明复杂性为O(2*n*logn*logm)。为什么不仅仅是O(logn*logm)?额外的线性项n从何而来?检查它们的更新实现 def更新(位置、低位、高位、x、y、val): 如果(低==高): 最终更新(1、1、4、x、val、pos) 其他: 中=(低+高)//2 如果(低啊,我没有看到for循环。是的,我认为循环是毫无意义的。虽然有了这个循环,我认为复杂性应该是O(n log m+log n)=O(n log m)啊,你是对的,我一定对m
def更新(位置、低位、高位、x、y、val):
如果(低==高):
最终更新(1、1、4、x、val、pos)
其他:
中=(低+高)//2
如果(低啊,我没有看到for循环。是的,我认为循环是毫无意义的。虽然有了这个循环,我认为复杂性应该是O(n log m+log n)=O(n log m)啊,你是对的,我一定对m
,n
@user5965026这篇文章回答了你的问题吗?如果没有,这里缺少什么?
def update(pos, low, high, x, y, val):
if (low == high) :
changes = finalUpdate(1, 1, 4, x, val, pos)
else :
mid = (low + high) // 2
if (low <= y and y <= mid) :
changes = update(2 * pos, low, mid, x, y, val)
else :
changes = update(2 * pos + 1, mid + 1,
high, x, y, val)
for i in changes:
fin_seg[pos][i] = (fin_seg[2 * pos][i] +
fin_seg[2 * pos + 1][i])
return changes;