【问题标题】:What is the time complexity of the following codes in Big O notation? [closed]Big O 表示法中以下代码的时间复杂度是多少? [关闭]
【发布时间】:2014-08-28 10:37:54
【问题描述】:
  1. T(n) = 8*T(n/2) + n*n

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

我想用大 O 表示法计算时间复杂度。答案是什么(不使用主定理)

【问题讨论】:

  • 答案是应用主定理
  • 你能解释一下主定理是如何工作的吗?
  • 有谁知道为什么我添加这个问题得到了 4 票反对?
  • 因为您不只是在谷歌上搜索“主定理”,而只是希望其他人为您完成工作。 StackOverflow 旨在帮助人们回答他们自己无法轻松回答的问题。
  • 我无法通过在 Wiki 上查看主定理来理解它。

标签: performance algorithm big-o time-complexity


【解决方案1】:

主定理适用于T(n) = a*T(n/b) + n^c 形式的任何重复。它查看并比较递归的两个部分:

1) 这个级别的常数工作的大小 (c) 2)递归调用的数量和大小(a和b)

从这里,我们将 log_b (a) 与 c 进行比较。三种可能

  1. log_b (a) > c -> T(n)O(n^log_b (a))
  2. log_b (a) < c -> T(n)O(n^c)
  3. log_b (a) = c -> T(n)O(n^c log(n))

所以对于你的两个例子......

  1. T(n) = 8*T(n/2) + n*n,因此a = 8, b = 2, c = 2log_2 (8) > 2,因此T(n)O(n^(log_2 (8)) = O(n^3)
  2. T(n) = 3 * T(n/4) + n,因此a = 3, b = 4, c = 1log_4 (3) < 1,因此T(n)O(n^c) = O(n)

A fuller explanation on Wikipedia

【讨论】:

    【解决方案2】:

    对于第一个关系,你可以这样做:

    【讨论】:

      猜你喜欢
      • 2014-01-04
      • 1970-01-01
      • 2023-03-27
      • 2016-06-30
      • 1970-01-01
      • 1970-01-01
      • 2017-02-01
      • 1970-01-01
      • 2012-07-10
      相关资源
      最近更新 更多