【问题标题】:Difference between Big O and How fast a Function growsBig O 与函数增长速度之间的区别
【发布时间】:2015-10-28 19:34:52
【问题描述】:

我似乎混淆了两个概念,渐近复杂度(函数增长的速度)和大 O(算法的时间复杂度)。它们是一样的吗?

例如,我知道O(1) 是算法的最佳案例运行时间。但很明显,这比O(n^n) 之类的增长速度要慢,后者增长得非常快,但这不是一种有利的算法复杂性吗?

还有类似的: nlogn 的增长速度比 1logn 快,但所有这些函数的增长速度都比 n^n 慢?任何澄清将不胜感激。

【问题讨论】:

  • 快速增长是不好的。你似乎已经明白这很好。不知道为什么。
  • 两个大学课程(数据结构和离散数学)之间的混淆会导致误解,进而导致误解。
  • 这取决于你想要什么。如果你想让你的算法超慢(例如,如果你想要一个能抵抗彩虹表攻击的哈希函数),快速增长是好的。如果你想用更少的资源,那当然不好……

标签: algorithm data-structures big-o time-complexity discrete-mathematics


【解决方案1】:

Big O 是一种衡量算法的渐近复杂度的方法,算法可能是时间或空间。来自维基百科链接:

通常只用大 O 表示法描述函数 提供函数增长率的上限。

...

大 O 表示法也用于许多其他领域以提供类似的估计。

对于n 的大小有一点要说,因为 O(1) 是最好的复杂度,尽管这指出对于足够大的n,常数项并不重要。

https://classes.soe.ucsc.edu/cmps102/Spring04/TantaloAsymp.pdf 可能有助于查看可以使用的不同符号。

【讨论】:

  • Big O 不一定只是最坏的情况,只是一个上限。
  • Big O 的“上限”组件将是表达同一点的另一种方式,这通常用于最坏情况,而其他符号则用于其他类型的边界。
  • 当然,我的意思是你可以对平均情况和最佳情况复杂度进行大 O 分析i.e. for [quicksort]。
  • 在数学中,您可以使用大/小 O 符号来表示序列如何收敛到其极限。大 O 表示法不受算法限制。
  • 我在陈述一种解释方式。还有使用这种符号和其他领域的概率论。您希望这里如何表示?
猜你喜欢
  • 2010-11-24
  • 1970-01-01
  • 1970-01-01
  • 2012-08-21
  • 1970-01-01
  • 2022-09-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多