【问题标题】:Is theta notation called the average case?θ符号是否称为平均情况?
【发布时间】:2016-08-25 06:34:07
【问题描述】:

有些书说 theta 表示法称为平均情况,而另一些书则说 theta 不是平均情况。 如果 theta 不是平均情况,那么就算法而言,什么叫做平均情况?

【问题讨论】:

  • 渐近复杂度类符号只是表达函数集,但使用它的作者必须注意它测量的内容(操作数、内存使用、消息数)以及如何测量(所有情况,一些子集,摊销的东西,“平均情况”)。 Theta 表示法只是 big-O 和 big-Omega 的交集(因此它既是它所测量的下限又是上限)。
  • @VipulPrakash 请注意,接受的答案并不能真正回答问题。您犯了第二个答案中解释的重要错误(@blazs 的答案)

标签: c algorithm data-structures


【解决方案1】:

您混淆了两个不同的概念。

average-case time complexity 是所有可能输入的平均运行时间(在某种概率分布下)。因此,它是某个算法的输入大小的函数。

theta 符号只是描述两个函数之间某种类型关系的一种方式。特别是如果一个函数是另一个函数的大 Theta,这告诉我们一个函数的增长速度大约与另一个函数一样快。

您可以使用 big-Theta 符号来描述平均情况复杂度。但您也可以为此目的使用任何其他符号。

如果一个算法的平均时间复杂度是3*n^2 - 5n + 13,那么它的平均时间复杂度确实是Theta(n^2)O(n^2)O(n^3)。在这三个中,Theta(n^2) 是对其时间复杂度的最准确描述(但当然不如精确表达式准确,这在实践中几乎不可能得到;我们通常只能提供一些界限)。

总而言之,theta 表示法(以及所有其他渐近表示法)允许您根据众所周知的函数来表征算法的平均情况运行时间(例如,它大约增长为 n^2)。

【讨论】:

  • 为避免混淆,不应将算法的平均情况与大θ符号联系起来。这些是正交概念。例如,一个算法很可能具有由 Θ 界描述的最坏情况或由 Ω 界描述的平均情况。
  • 这正是我要说的:这是两个不同(独立)的概念。
【解决方案2】:

O、Ω 和 Θ 符号实际上与算法最佳/平均/最坏情况无关。它们是表达函数渐近行为的方式,无论它们是什么。

f(n) = O(g(n)) 表示 f 的增长速度不会快于 g。 g 是一个上限,无论是否严格。

f(n) = Ω(g(n)) 表示 f 的增长速度不会比 g 慢。 g 是一个下界,无论是否紧。

f(n) = Θ(g(n)) 表示 f 的增长速度与 g 一样快。 g 是一个紧界,包括上限和下限。

那么,算法的最佳/平均/最差运行时间是元素数​​量的函数,通常有 O、Ω、Θ 表示。

在对特定算法的分析中,人们通常能够为最坏的情况推导出 O 界,即紧与否。此外,通过更多的努力,平均时间会受到限制。通常你并不关心最佳时间。

然后在给定问题的分析中(不管解决它的任何特定算法),有时可以建立运行时间的绝对下限,这是最佳时间的 Ω 界限(紧密与否)。平均时间的下限有时是可能的,但技术性很强。

【讨论】:

  • 那么认为 O 是最差的,Omega 是最好的,Theta 是平均运行时间是否正确?对不起,如果你已经解释过了,但我想我不太明白。我的意思是如果一个函数是 O(n) 那么这是最糟糕的,还是它的上限?我正在关注的课程材料表明 O 是最差的,依此类推。
  • @berimbolo:这里有一个技术问题,经常被绕过。算法的运行时间通常不是单独的 n 的函数。最坏情况下的运行时间是 n 的函数。 Big-O 表示函数的上限,不恰当地认为是“最坏情况下的运行时间”。而且 Big-Θ 不一定与平均案例行为有关。
  • 好的,谢谢您的回复,这确实有道理,如果文献和课程材料不正确,这将是有帮助的!
【解决方案3】:

As 'O' (Big-Oh) 用于定义最坏情况,即问题的上限。 并且,Ω 用于定义最佳情况,即问题的下限。 同样,Θ 用于定义上限和下限之间的任何内容。

因为上限和下限不会频繁出现。因此,在大部分时间运行我们的算法时,我们会遇到这两个极端点之间的场景。 因此,我们计算算法所花费的平均时间,并用 Θ 表示法表示。

但是,这并不意味着算法的最坏情况和平均情况复杂性永远不会相同。 可能相同,也可能不同。

因为可能有一种算法在最佳情况下针对特定输入运行,而除了该输入之外,其余输入需要相同的时间。 在这种情况下,平均复杂度和最坏情况复杂度将相同。

【讨论】:

  • @YvesDaoust:你是​​对的,这个答案是错误的。并且 \Omega 不用于定义最好的情况,因为它是陈述的。 \Omega 给出了函数的渐近下界,因此它给出了每个输入长度的最坏情况运行时增长的下限,这可能与最佳情况运行时完全不同。示例:旅行推销员在 \Omega(1) 中,但这并不意味着有一种算法/输入组合可以真正做到那么快。
  • @AEF Omega 用于表示最佳情况,Big oh 用于表示最坏情况。我建议你看看 Cormen。
  • 我拥有数学硕士学位,当涉及到函数的渐近行为时,我知道我在说什么;)您还可以阅读此线程中的其他答案和 cmets:其中许多确认我说过的。
【解决方案4】:

不,Θ(g(n)) 不是平均情况,但您可以知道平均情况的表现。 Θ 显示增长顺序,您可以使用 Θ 来描述最坏、平均或最佳情况的空间/时间复杂度。例如快速排序最坏情况是O(n^2),而平均情况性能是O(NlogN)

【讨论】:

  • “你不能说你的算法有 O(n^2) 时间复杂度和 Θ(n)”——是的,你可以。 O() 只是表示(某种)上限。例如,在无序数组中查找给定元素需要 O(n^2) 时间和 Θ(n) 时间。 (这也是 O(n^3) 时间和 O(42^(7n)) 时间,但不是 O(log n) 时间。)
  • 是的,你是对的,我在考虑 O(n^2) 是最佳上界的情况,那么 Θ 记法不能少函数
  • Theta 符号用于描述一类函数的渐近行为。它可以用于许多事情,包括时间复杂度和内存复杂度。它可以用于平均情况复杂度,就像最坏情况复杂度一样。这个答案没有解释问题中的这个重要错误。
  • 另外,快速排序在最坏情况下为 Θ(n²),在平均情况下为 Θ(n Log n)。
猜你喜欢
  • 2013-06-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-10
  • 1970-01-01
  • 2013-02-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多