【问题标题】:What is the running time of the following algorithm (in terms of ????-notation)?以下算法的运行时间是多少(以??????-符号表示)?
【发布时间】:2020-10-13 17:07:54
【问题描述】:

算法求解大小为????的问题如下:递归求解大小为???? - 2的3个子问题,然后及时构造原问题的答案????(1)

Master 定理显然不能在这里应用。所以,我想画一个递归树,但困扰我的是我需要考虑两种情况:n 是奇数/偶数?或者结果总和因此运行时间根本不依赖于此?提前致谢。

【问题讨论】:

  • 提示:如果子问题的大小为 n-1,你能解决这个问题吗?如果子问题的大小为 n-2,它会如何变化?
  • @Henry 我想在树的每个新级别上,我们需要从 n (T(n-2)、T(n-4)、T(n-6) 等中再减去 2 个)。并且金额上限也发生了变化

标签: algorithm recursion time-complexity big-o


【解决方案1】:

我们必须假设递归的基本情况发生在 ? 为 0 或 1 时。也可能是基本情况发生在 ? 为 1 或 2 时,? 不允许为 0。我们真的不知道,但这并不重要。

在第一种情况下,给定奇数 ? 的操作数与 ?−1 的操作数相同。在第二种情况下,它的操作数与 ?+1 相同。

因此,为了确定渐近复杂度,我们可以只查看偶数(或仅查看奇数)。

递归树是完美的三叉树,高度为 (?+1)/2 或 (?+2)/2(同样:取决于基本情况)。

在高度为 h 的完美三叉树中,我们有 (3h-1)/2 em> 个节点,因此是 O(3h),就 ? 而言是 O(3? /2) = O((√3)?).

【讨论】:

  • 仍然不完全明白为什么我们只能查看偶数或奇数(不能同时查看两者)
  • 渐近意味着观察 n 增加的趋势。两个连续的 n 将具有相同的树大小。然后下一个增加,然后再次相等。等等……
  • 这回答了你的问题吗?
【解决方案2】:

除了@trincot 提出的解决方案之外的另一个(可能更简单的)解决方案:

T(n)=3T(n-2)+O(1)=...=3k(T(n-2k)+O(1))。

让我们找出这个递归关系的停止条件,即需要找到满足以下条件的 k:n-2k=0 --> k=n/2 --> T(n)=O(3n/2)=O(√3n)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-19
    • 2020-11-15
    • 2019-05-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多