问题描述
关于递归段树的构建时间复杂性,我得到了矛盾的证据。
某些资料来源(维基百科)声称它是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)