段树构建?

问题描述

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

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

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...