【发布时间】:2024-01-18 20:50:01
【问题描述】:
我对这个特定问题有疑问,答案说 big-Oh(n^2) 算法不会比 big-Oh(n^3) 算法运行得更快,而如果这两种情况下的符号都是 theta,那么本来是真的,但为什么会这样呢?
如果有人可以向我详细解释,我会很高兴,因为我找不到任何可以澄清我的疑问的来源。
【问题讨论】:
标签: algorithm complexity-theory
我对这个特定问题有疑问,答案说 big-Oh(n^2) 算法不会比 big-Oh(n^3) 算法运行得更快,而如果这两种情况下的符号都是 theta,那么本来是真的,但为什么会这样呢?
如果有人可以向我详细解释,我会很高兴,因为我找不到任何可以澄清我的疑问的来源。
【问题讨论】:
标签: algorithm complexity-theory
第 1 部分的释义(请注意,问题中的措辞在“数字”被量化的地方是模棱两可的——它必须在您选择两种算法之后选择,但我认为这就是预期的结果)。
给定具有 f=Theta(n^2) 和 g=Theta(n^3) 的函数 f 和 g,那么存在一个数 N,使得对于所有 n>N,f(n)
第 2 部分释义:
给定函数 f 和 g,其中 f=O(n^2) 和 g=O(n^3),那么对于所有 n,f(n)
1 为真,可以应用 big-Theta 的定义来证明。
2 是错误的(作为一般性陈述),您可以通过找到一个 f 和 g 为错误的示例来反驳它。例如,f(n) = 2, g(n) = 1。大 O 是一种上界,所以这些常数函数起作用。问题中给出的反例为 f(n)=n, g(n)=log(n),但原理相同。
【讨论】:
答案说 big-Oh(n^2) 算法不会比 big-Oh(n^3) 算法运行得更快
更微妙的是:O(?²) 算法可能比 O(?³) 算法运行得更慢。不是会,而是会。
答案给出了一个原因,但实际上有两个:
大 O 表示法只给出 上 界。引用自*:
用大 O 表示法对函数的描述通常只提供函数增长率的上限。
所以任何 O(?) 也是 O(?²) 和 O(?³),但不一定反之亦然。答案是 O(?³) 的算法可能有一个更严格的界限,即 O(log?)。的确,这听起来很傻,因为当它也是 O(log?) 时,为什么还要说它是 O(?³)?那么只讨论 O(log?) 似乎更合理。这就是我们通常做的事情。但还有第二个原因:
第二个选项在其声明中没有约束“n > number”。这是必不可少的,因为无论时间复杂度如何,对于给定的 ? 值,算法的运行时间都无法从其时间复杂度中确定。 O(?log?) 的算法可能需要 10 秒才能完成工作,而 O(?²) 的算法可能需要 8 秒才能获得相同的结果,即使它的时间复杂度更差。在比较时间复杂度时,您只能获得关于渐近行为的信息,即当 ? 大于足够大的数字时。
因为这个额外的约束是第一个声明的一部分,它确实是真的。
【讨论】: