Algorithm 段树构建?

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

关于递归段树的构建时复杂性,我得到了相互矛盾的证据

一些来源(维基百科)声称它是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, 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)