我已经编写了这个方法来将我拥有的有序数组转换为平衡的二叉搜索树。我不确定这种方法的大时间复杂度应该是多少。它会是O(n)吗?
Node ArrayToBST(Node arr[], int start, int end)
{
if (start > end)
return null;
int mid = (start + end) / 2;
Node node =arr[mid];
node.left = ArrayToBST(arr, start, mid - 1);
node.right = ArrayToBST(arr, mid + 1, end);
return node;
}
答案 0 :(得分:0)
在O(n)中。 总时间定义为T(n)= 2T(n / 2)+ C:
答案 1 :(得分:0)
复杂性为O(n)
。每个节点都被创建,因此将有n个调用...每个都有O(1)运行时。
T(n)=2T(n/2)+C
如果您使用主人定理,您将得出相同的结论。
Master的定理规则: -
n^(log b base a) < f(n)
则T(n) = f(n)
n^(log b base a) = f(n)
则T(n) = f(n) * log n
n^(log b base a) > f(n)
则T(n) = n^(log b base a)
`n` -> input size `a` -> number of subproblems `n/b` -> size of each subproblem `f(n`) -> cost of non-recursive calls (Here C)
这里
a = 2, b = 2, f(n) = O(1)
n^(log b base a) = n = O(n)
此处<
或>
表示多项式更小或更大。