【问题标题】:Prove or disprove statements about running times证明或反驳关于运行时间的陈述
【发布时间】:2012-11-13 03:05:51
【问题描述】:

我正在阅读 CLRS 的第 3 章,该章是关于运行时间的,我想通过一些示例来学习。由于我没有参加算法课程,因此我需要求助于 www 寻求帮助。

1) n^2 = 大欧米茄(n^3)

我认为这种说法是错误的:如果最好的情况下运行时间是n^3,那么算法不可能是n^2,。即使是最好的情况也比这慢。

2) n + log n = Big-Theta (n)

我认为这个说法是对的,我们可以忽略log n的下限。这为我们提供了 Big-Oh (n) 的最坏情况运行时间。以及 Big-Omega (n) 的最佳情况运行时间。我不太确定这一点。我们将不胜感激。

3) n^2 log n =Big-Oh (n^2)

我认为this.statement是错误的:最坏情况下的运行时间应该是n^2 log n。

4) n log n = Big-Oh (n sqrt (n))

可能是真的,因为 n log n

5) n^2 - 3n - 18 = Big-Theta (n^2) 真的不知道...

6) 若f(n) = O(g(n))且g(n) = O(h(n)),则f(n) = O(h(n))。

由传递属性持有。

我希望有人可以详细说明我的相当可能错误的答案:)

【问题讨论】:

  • 您对符号有一些基本的误解。 (1) O(n^2)(例如)是一个集合,而n^2*log(n)是一个函数。一个函数不能是一个集合,它可以包含在一个集合中。正确的术语是is n^2 * log(n) in the set O(n^2)?(2) “最佳情况/最坏情况”与大 O 表示法无关。例如,快速排序是Theta(nlogn) 平均情况和Theta(n^2) 最坏情况。大 O 符号可以应用于每个分析,因为它是“分组”此分析提供的功能。
  • @amit = 通常与O() 表示法一起使用。
  • 是的,在文献中他们使用 '=' 符号而不是 'is in set' 符号。让我们不要过多地谈论这个。
  • @JanDvorak:“经常使用”!= 正确。对于这些情况,我从未见过= 的正式定义。当然 - 这并不意味着不存在。
  • @amit 这是一种常见的做法,在计算复杂性时完全可以接受。在此上下文中,= 表示 belongs to the set不同于= 通常的数学含义。

标签: algorithm computer-science time-complexity


【解决方案1】:
  1. 你是对的,但原因不是。请记住,Omega(n^3) 并不直接与算法相关,而是与函数相关。
    您正确的原因是:对于每个常量c,N,都有一些n>N 使得n^2 < c * n^3——因此n^2Omega(n^3)不是

  2. 你是对的。 n < n + logn < 2*n(对于足够大的 n),因此 n + logn 既是 O(n) 又是 Omega(n)

  3. 你是对的,但同样,不要在这里使用“最坏情况”。解释和证明指南将类似于1.

  4. 这是正确的,因为log(n) 渐近小于sqrt(n),其余的紧随其后。

  5. 1中的原理相同。使用相同的方法将是正确的。

  6. 正确。


附带说明:Omega(n) 并不表示“n 的最佳情况运行时间”,它表示 函数 表示复杂性(可以是最坏情况复杂性、最佳情况复杂性或平均案例复杂度,...) 满足成为Omega(n) 的条件。

例如 - 快速排序:

  • 最坏情况分析下是Theta(n^2)
  • 而在平均案例分析下,它是Theta(nlogn)

【讨论】:

  • 我很想投反对票,只是为了让您的代表正好 40K。但我决定根据答案的质量来投票。
  • 谢谢你,@amit,很明显我需要更加注意尽可能正式。目前我的理解有点“松散”。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-09-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-27
相关资源
最近更新 更多