什么是递归找到最大值的时间复杂性

Dan*_*Dan 5 time-complexity

我只是想确保我朝着正确的方向前进.我想通过递归拆分找到数组的最大值,并找到每个单独数组的最大值.因为我分裂它,它将是2*T(n/2).因为我必须在最后为2个数组进行比较,所以我有T(1).那么我的复发关系是这样的:

当n> = 2时T = {2*T(n/2)+ 1;当n = 1时T(1);

因此我的复杂性将是Theta(nlgn)?

Neo*_*ard 2

您编写的公式似乎是正确的,但您的分析并不完美。

T = 2*T(n/2) + 1 = 2*(2*T(n/4) + 1) + 1 = ...
Run Code Online (Sandbox Code Playgroud)

对于第 i 次迭代,您将得到:

Ti(n) = 2^i*T(n/2^i) + i
Run Code Online (Sandbox Code Playgroud)

现在你想知道 i 的 n/2^i 等于 1 (或者任何常数,如果你愿意的话),这样你就达到了 n=1 的结束条件。这就是 n/2^I = 1 -> I = Log2(n) 的解。将其代入 Ti 的方程中,您将得到:

TI(n) = 2^log2(n)*T(n/2^log2(n)) + log2(n) = n*1+log2(n) = n + log2(n)
Run Code Online (Sandbox Code Playgroud)

你得到 T(n) = O(n + log2(n) (就像@bdares所说) = O(n) (就像@bdares所说)