Algorithm 段树构建?
关于递归段树的构建时复杂性,我得到了相互矛盾的证据 一些来源(维基百科)声称它是O(N*log(N)),而另一些则声称它是O(N)。我的直觉是O(N),因为我们有2N个节点和2N-1条边 是哪一个 注意:我们正在使用如下函数构建段树:Algorithm 段树构建?,algorithm,data-structures,time-complexity,segment-tree,Algorithm,Data Structures,Time Complexity,Segment Tree,关于递归段树的构建时复杂性,我得到了相互矛盾的证据 一些来源(维基百科)声称它是O(N*log(N)),而另一些则声称它是O(N)。我的直觉是O(N),因为我们有2N个节点和2N-1条边 是哪一个 注意:我们正在使用如下函数构建段树: private int build(int[] a, int i, int l, int r){ if(l == r){ nodes[i] = a[l]; }else{ nodes[i] = Math.min(build(a
private int build(int[] a, int i, int l, int r){
if(l == r){
nodes[i] = a[l];
}else{
nodes[i] = Math.min(build(a, i*2, l, (l+r)/2),
build(a, i*2+1, (l+r)/2+1, r));
}
return nodes[i];
}
我们没有对数组中的每个值进行点更新。请注意,它只是一个DFS算法,DFS时间复杂度为O(|V|+|E|)
这意味着复杂度是O(2n+2n-1)=O(n)注意,这只是一个DFS算法,DFS时间复杂度是O(| V |+| E |) 这意味着复杂度是O(2n+2n-1)=O(n)