我只想确保自己朝着正确的方向前进。我想通过递归拆分找到数组的最大值,并找到每个单独数组的最大值。因为我分裂它,它将是2 * T(n / 2)。因为我必须在最后为2个数组进行比较,所以我有T(1)。 那么我的复发关系是这样的:
T = {2 * T(n / 2)+ 1,当n> = 2; T(1),当n = 1时;
因此我的复杂性将是Theta(nlgn)?
答案 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说的那样)