从排序数组创建BST的大哦

时间:2017-10-28 14:21:12

标签: java algorithm binary-search-tree asymptotic-complexity

我已经编写了这个方法来将我拥有的有序数组转换为平衡的二叉搜索树。我不确定这种方法的大时间复杂度应该是多少。它会是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;
}

2 个答案:

答案 0 :(得分:0)

在O(n)中。 总时间定义为T(n)= 2T(n / 2)+ C:

  • T(n):大小为n
  • 的数组所用的时间
  • C:常量(查找数组的中间并将根连接到左右子树需要恒定时间)

答案 1 :(得分:0)

复杂性为O(n)。每个节点都被创建,因此将有n个调用...每个都有O(1)运行时。

T(n)=2T(n/2)+C如果您使用主人定理,您将得出相同的结论。

Master的定理规则: -

  1. 如果n^(log b base a) < f(n)T(n) = f(n)
  2. 如果n^(log b base a) = f(n)T(n) = f(n) * log n
  3. 如果n^(log b base a) > f(n)T(n) = n^(log b base a)
  4. `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)
    

    此处<>表示多项式更小或更大。