如何解决重现A(n)= A(n-1)+ n * log(n)?

时间:2016-11-07 11:30:43

标签: algorithm time-complexity asymptotic-complexity recurrence

鉴于再次发生:
A(n) = A(n-1) + n*log(n)
如何找到A(n)的时间复杂度?

2 个答案:

答案 0 :(得分:6)

A(n) = A(n-1) + nlog(n)

看,你的复发说:取上一个值,然后加nlogn

所以...假设A(1)= log(1)是序列的第一个元素:A(n) = SUM from i = 1 to n (ilog(i))

enter image description here

为什么呢?

A(1) = log(1).
A(2) = log(1) + 2log(2).
A(3) = A(2) + 3log(3) = 1log(1) + 2log(2) + 3log(3).
.
.
.
A(n) = 1log(1) + 2log(2) + 3log(3) + ... + nlog(n)

F(n) - F(n-1)是非递归函数时,可以始终使用这种求解递归的方法。在我们的例子中它是nlogn所以它有效。

F(n)/F(n-1)是非递归函数时,可以使用类似的规则。然后我们使用PI而不是SIGMA。

如果我被要求给它上限,我建议尝试以下方法:

  log(n)   + log(n)   + log(n)   + log(n)   + ...
+            log(n-1) + log(n-1) + log(n-1) + ...
+                       log(n-2) + log(n-2) + ...
.
.
.

所以

enter image description here

现在你有一个非常明确的上限,所以是免费的(O(nlog(n!)))。如果你正在寻找,你需要再努力一点。

答案 1 :(得分:3)

  1. 设A(0)= c。找到A(n)作为n和c的函数,由sum定义。
  2. 总和中有多少个词?
  3. 总和的最小值是多少?试着找一个估计。
  4. 总和的最大值是多少?试着找一个估计。
  5. 如果你能估计(3)和(4)这样他们中的一个比其他的大一倍,你做完了吗?为什么?