Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从已排序数组创建BST的巨大优势_Java_Algorithm_Binary Search Tree_Asymptotic Complexity - Fatal编程技术网

Java 从已排序数组创建BST的巨大优势

Java 从已排序数组创建BST的巨大优势,java,algorithm,binary-search-tree,asymptotic-complexity,Java,Algorithm,Binary Search Tree,Asymptotic Complexity,我编写这个方法是为了将我拥有的一个排序数组转换成一个平衡的二进制搜索树。我不确定这个方法的时间复杂度应该是多少。是O(n)吗 它在O(n)中。 总时间定义为T(n)=2T(n/2)+C: T(n):大小为n的数组所用的时间 C:常量(查找数组中间并将根链接到左、右子树需要常量时间) 它在O(n)中。 总时间定义为T(n)=2T(n/2)+C: T(n):大小为n的数组所用的时间 C:常量(查找数组中间并将根链接到左、右子树需要常量时间) 复杂性将是O(n)。每个节点都被创建,因此将有n个调用

我编写这个方法是为了将我拥有的一个排序数组转换成一个平衡的二进制搜索树。我不确定这个方法的时间复杂度应该是多少。是O(n)吗

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

  • T(n):大小为n的数组所用的时间
  • C:常量(查找数组中间并将根链接到左、右子树需要常量时间)
它在O(n)中。 总时间定义为T(n)=2T(n/2)+C:

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

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

T(n)=2T(n/2)+C
如果你使用马斯特斯定理,你会得出相同的结论

硕士定理规则:-

  • 如果
    n^(log b base a)
    那么
    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)
  • 这里


    这里
    表示多项式更小或更大。

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

    T(n)=2T(n/2)+C
    如果你使用马斯特斯定理,你会得出相同的结论

    硕士定理规则:-

  • 如果
    n^(log b base a)
    那么
    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)
  • 这里


    这里
    表示多项式的大小。

    让我们试试苏格拉底的方法。大O的目的是什么?例如,它的定义是什么?它是对算法在给定输入下完成的时间的度量。通常根据输入n来测量。对吗?你接触了多少次arr[]中的所有元素?让我们试试苏格拉底的方法。大O的目的是什么?例如,它的定义是什么?它是对算法在给定输入下完成的时间的度量。通常根据输入n来测量。对吗?您触摸arr[]中的所有元素多少次?
    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;
    }
    
    `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)