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

时间:2011-04-26 08:26:32

标签: time-complexity

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

  

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

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

2 个答案:

答案 0 :(得分:2)

不,不......你每次递归都需要O(1)时间。

有多少人?

有N片叶子,所以你知道它至少是O(N)。

您需要比较多少才能找到绝对最大值?那是O(log(N))。

将它们加在一起,不要繁殖。 O(N + log(N))是你的时间复杂度。

答案 1 :(得分:2)

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

T = 2*T(n/2) + 1 = 2*(2*T(n/4) + 1) + 1 = ...

对于第i次迭代,你会得到:

Ti(n) = 2^i*T(n/2^i) + 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)

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