Java 从已排序数组创建BST的巨大优势
我编写这个方法是为了将我拥有的一个排序数组转换成一个平衡的二进制搜索树。我不确定这个方法的时间复杂度应该是多少。是O(n)吗 它在O(n)中。 总时间定义为T(n)=2T(n/2)+C: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个调用
- T(n):大小为n的数组所用的时间
- 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)