【问题标题】:Difference between Best Conceivable Runtime vs Best Case RuntimeBest Conceivable Runtime 与 Best Case Runtime 之间的差异
【发布时间】:2020-02-23 14:55:00
【问题描述】:

我一直在努力理解 Best Conceivable Runtime 和 Best Case Runtime 之间的区别。两者之间你怎么看?最佳案例运行时是最佳运行时吗?如果是这样,人们如何决定可以想象的最佳时间?

【问题讨论】:

  • 是什么让您认为这些是不同的?我从未听说过可想象的最佳运行时,在没有进一步信息的情况下,我会假设这与最佳情况运行时相同。
  • @Patrick87 抱歉信息不足。该术语来自 Gayle Laakmann McDowell 关于破解编码面试的书。

标签: algorithm time-complexity


【解决方案1】:

最佳情况运行时意味着您拥有解决问题的算法,并且在最佳情况下,该算法具有特定的时间复杂度。

例如,选择排序的最佳情况运行时间是 O(n2),因为无论数组是什么,它总是会执行那么多操作。另一方面,在输入数组已经排序的情况下,插入排序的最佳运行时间是 O(n)。


可以想象的最佳运行时是一个概念,据我所知,在 Gayle Laakmann McDowell 的书 Cracking the Coding Interview 中引入。这意味着您遇到了问题,并且您正在尝试估计解决问题的效率;你还没有算法,或者如果你有算法,那么你不知道是否有另一个算法可能具有更短的渐近时间。

可以想象的最佳运行时间意味着它是您可以想象可能解决问题的最佳时间,而且绝对不可能比这更快地解决问题。这是一个快速检查,您可以排除某些不可能工作的方法,因为如果他们确实工作,他们会快。

例如,排序问题不能在平均 O(n) 时间内解决,因为仅需要 O(n) 时间才能进行正确的写入/交换以将元素放置在正确的位置。这并不意味着有一种算法可以按 O(n) 平均时间排序,只是它绝对不可能做得比平均 O(n) 更好

一个更好的论据可以表明comparison-based sorting 算法的最佳可想象运行时间平均为 O(n log n),因为每次比较仅提供有关输入数组所在排列的一点信息,因此您需要at least log2 (n!) comparisons区分所有n!可能的排列。因此,不可能编写一个基于比较的排序算法,该算法在数组上使用a single loop,并且每次迭代都做 O(1) 工作;我们可以在尝试设计算法时排除这种可能性。在这种情况下,基于比较的排序算法满足这个渐近界,所以它很紧。

因此,在某种程度上,对于给定的问题并没有真正的“可想象的最佳运行时间”,这取决于您是否有能力证明给定的运行时间是解决该问题的所有可能算法的下限。

【讨论】:

  • “可想象的最佳运行时间”概念可以应用于最佳、平均和最差情况,对吧?此外,不熟悉 n log n 和 log2 (n!) 之间关系的人可能想知道它是什么:-)
  • @HeapOverflow 添加了指向另一个答案的链接:log(n!)。是的,它可能是最好的best-case 运行时,最好的worst-case 运行时,等等。在这个答案中,O(n) 是(不一定基于比较的)排序算法的最佳可想象 平均 运行时间。
  • @kaya3 谢谢!这种解释绝对是 Gayle Laakmann McDowell 在她的书中遗漏的东西!
猜你喜欢
  • 2022-12-02
  • 2018-09-29
  • 1970-01-01
  • 2020-06-06
  • 2021-04-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多