【问题标题】:Big O Notation O(n^2) what does it mean?Big O Notation O(n^2) 是什么意思?
【发布时间】:2023-02-08 19:54:31
【问题描述】:

例如,它说在 1 秒内 3000 个数字用选择排序排序。我们如何预测 10 秒内将排序多少个数字?

我检查过选择排序需要 O(n^2) 但我不明白我将如何计算在 10 秒内将排序多少个数字。

【问题讨论】:

  • 大 O 符号与特定时间测量无关。这里有更多关于它的信息:en.wikipedia.org/wiki/Big_O_notation
  • “我不明白我将如何计算 10 秒内将排序多少个数字”: 我也不。如果有人告诉你有一个公式可以计算它,那说明他们还没有理解 big O 是什么意思。这是很多人的误解,包括老师。
  • @wohlstad 我认为 big-oh 表示法完全可以用作相对的时间计算的因素。请检查我的答案,如果我错了请告诉我。 (如果可以,请证明我错了。)
  • @trincot 我认为 big-oh 表示法完全可以用作相对的时间计算的因素。请检查我的答案,如果我错了请告诉我。 (如果可以,请证明我错了。)

标签: data-structures big-o selection-sort


【解决方案1】:

正如 cmets 所说,大 O 符号与特定时间测量无关;然而,这个问题仍然是有道理的,因为大 O 符号完全可以用作相对的时间计算的因素。

Big-oh 表示法让我们知道算法执行的基本操作的数量如何随着要处理的项目数量的变化而变化。

简单算法对每个项目执行固定数量的操作,但在更复杂的算法中,每个项目需要执行的操作数量会随着项目数量的变化而变化。排序算法就是这种复杂算法的典型例子。

大 O 符号的伟大之处在于它属于科学领域,而不是技术领域,因为它完全独立于您的硬件,以及您的硬件能够执行单个操作的速度。

但是,这个问题确切地告诉我们一些假设的硬件处理一定数量的项目需要多少时间,所以我们知道硬件执行单个操作需要多少时间,因此我们可以据此进行推理。

如果在 1 秒内对 3000 个数字进行排序,并且该算法以 O( N ^ 2 ) 进行操作,这意味着该算法在该秒内执行了 3000 ^ 2 = 9,000,000 次操作。

如果给定 10 秒的工作时间,该算法将在该时间内执行十倍的操作,即 90,000,000 次操作。

由于该算法在 O( N ^ 2 ) 时间内运行,这意味着在 90,000,000 次操作之后它将对 Sqrt( 90,000,000 ) = 9,486 个数字进行排序。

验证一下:一秒内9,000,000次操作意味着每次操作1.11e-7秒。由于该算法在 O( N ^ 2 ) 上运行,这意味着要处理 9,486 个数字,它将需要 9,486 ^ 2 次操作,大约等于 90,000,000 次操作。在每次操作 1.11e-7 秒时,将在大约 10 秒内完成 90,000,000 次操作,因此我们通过不同的途径得出相同的结果。

如果您认真地追求计算机科学或编程,我建议您阅读大 O 表示法,因为它 a) 非常重要并且 b) 一个非常大的主题,无法在 stackoverflow 问题和答案中涵盖。

【讨论】:

  • 我还建议您以后不要使用“将要”一词;不仅如此不是听起来和你想象的一样酷,而且,你不是在这里和你的朋友说话,你是在和你不认识的人说话。
猜你喜欢
  • 2011-10-22
  • 1970-01-01
  • 2010-12-26
  • 2023-03-16
  • 2012-01-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多