【问题标题】:algorithm find O(n) with two T(n) on the other side of the recurrence equation算法在递归方程的另一边找到 O(n) 和两个 T(n)
【发布时间】:2018-06-23 10:45:04
【问题描述】:

接下来的几天我将参加算法考试,教授要求我们学习如何以这种形式找到 O(n) 的方程:

T(n) = T(n/3) + T(n/4) + 5n

T(n) = T(n/3) + 2T(n/4) + 5n

T(n) = T(n/3) + T(n/4) + 15n

T(n) = 2T(n/3) + T(n/4) + 4n

我知道如何使用主定理,但我怀疑我可以在这里以某种方式使用它。我的教授也没有向我们展示如何解决这个问题的一个例子,在谷歌上我找不到太多(或者不知道如何找到解决方案 - 如何搜索它)所以有人可以告诉我吗如何逐步解决以上问题?

提前致谢。

PS:抱歉标题可能是错误的,正如我所说,我不知道如何准确地表达我想要的。

【问题讨论】:

  • 通常的方法是观察,例如,T(n/3) >= T(n/4)(尽管这并不总是正确的......)。然后你可以说T(n) >= 2T(n/3) + 5n,然后从那里开始工作。 >= 是“好的”,因为您仍然可以获得函数的上限,即使它不一定很紧。
  • @hnefatl 对于T(n),它应该是<= 而不是>=。这是一个上限。
  • 我有一个以前的答案here,它解决了这种功能。希望对你有帮助

标签: algorithm time-complexity asymptotic-complexity recurrence master-theorem


【解决方案1】:

正如评论中提到的,因为T(n/3) > T(n/4),您可以找到上述每个方程的上限(这个条件对于增加T(n) 是正确的)。

T(n) = T(n/3) + T(n/4) + 5n => T(n) < 2T(n/3) + 5n =>(using master theorem) T(n) = O(n) 另外,我们可以说T(n) = \Theta(n),因为5n 我们可以说T(n) = \Omega(n)

T(n) = T(n/3) + 2T(n/4) + 5n => T(n) < 3T(n/3) + 5n =>(using master theorem) T(n) = O(nlog(n))

T(n) = T(n/3) + T(n/4) + 15n => T(n) < 2T(n/3) + 15n =>(using master theorem) T(n) = O(n)

T(n) = 2T(n/3) + T(n/4) + 4n => T(n) < 3T(n/3) + 4n =>(using master theorem) T(n) = O(nlog(n))

【讨论】:

  • 我明白了,是否存在 T(n/3) > T(n/4) 会评估为 false 的情况,所以这个答案不会被接受?
  • @PavTze 因为 T(n) 正在增加,所以这是真的。
猜你喜欢
  • 2013-06-19
  • 1970-01-01
  • 1970-01-01
  • 2019-07-01
  • 2020-07-30
  • 1970-01-01
  • 2020-03-05
  • 2015-08-29
  • 2014-05-02
相关资源
最近更新 更多