【发布时间】:2019-08-13 10:48:13
【问题描述】:
大家好,我已被问及上述 2 个问题,并解释了原因。我很困惑,我知道运行 O(nlogn) 算法所需的时间比线性 O(n) 算法增长得更快,但不太确定这些问题的答案。 我相当确定 n log n 不等于 O(n) 但我不太确定如何解释它。 (我认为我们不需要做一个确切的证明)
【问题讨论】:
-
请使用cs.stackexchange.com 回答这个问题。显示这种关系的最简单方法是在 2d 平面上绘制这两个图。然后你会自动看到它的上限或下限。
-
如果您的问题不是关于 .net 实现的问题,请考虑删除特定语言的标签。
-
用实数测试方程。假设 O(n) 是 1,2,3,4,... 到无穷大。所以它是 n 的 1 倍。如果您查看等式 n log n 的左侧,当 log n 大于 1 时它会更大,当 log n 小于 1 时它会更小。
-
两者都是错误的,因为它们不正确并且根本没有意义。 (苹果和橘子)在左边你有正确复杂度的纯函数,如果没有算法的上下文,你不能从一个到另一个。如果您要制定
O(n*logn) = O(n),那将是错误的,但至少它是有意义的。 -
@Yoda:你误解了“复杂性”这个词。 O(n) 是一组函数。当我们说给定算法的时间复杂度在 O(n) 时,这意味着它的时间复杂度是一个函数,例如 3n+20,它是 O(n) 的一个元素。 (你说得对,写成 "f(n) = O(n)" 不是 quite 格式正确——严格来说,它应该是 "f(n) ∈ O(n) " -- 但在这方面使用 "=" 是很常见的,通常不会引起任何混淆。)
标签: loops big-o computer-science complexity-theory