【问题标题】:Choosing O(n) over O(1) when for all of n, O(1) is faster than O(n)?当对于所有 n,O(1) 比 O(n) 快时,选择 O(n) 而不是 O(1)?
【发布时间】:2016-10-27 20:33:58
【问题描述】:

如果对于所有 n,O(1) 比 O(n) 快,我何时会选择 O(n) 算法而不是 O(1) 算法的示例

【问题讨论】:

  • 是的,正是那个时候。

标签: algorithm runtime big-o compile-time-constant


【解决方案1】:

通常,真实数据适用于时间复杂度更差的算法。例如,在 O(n^2) 时间内运行的冒泡排序通常在几乎排序的数据上更快。通常,常数因素可能会使算法太慢而无法实用。请记住,big-O 处理的是在极限情况下更有效的事情,而不是在直接情况下。对于 n

【讨论】:

  • for all of n 的某些部分必须选择忽略。
  • @greybeard 我不清楚提问者的意思是他们测量 O(1) 算法还是O(n) 算法,或者他们只是假设 O(1) 总是小于 O(n)。这是一个措辞非常糟糕的问题。
  • (@MarkRansom 我认为这个问题是在介绍 Big-O-notation 后不久的一项作业。)
【解决方案2】:

一个例子是 O(1) 算法会消耗大量内存,而 O(n) 算法则不会。与性能相比,内存对您来说更重要。

【讨论】:

  • (注意函数渐近行为的大小写 - small o 表示 argument is strict large - o(1) 中的算法需要在严格小于常数的时间内完成。) 非并行 O(1) 算法只能接触 O(1) 内存。你的推理对于 O(n²) 超过 O(n) 是有效的。
  • @greybeard,我理解你的意思,但我认为这个答案可能是有效的。让我们假设两种算法都使用 O(1) 内存。但是,o(n) 使用 1 个字节,而 o(1) 算法使用 1000 个字节。
  • @greybeard 抱怨的是你使用little-o 而不是big-O 的随意方式。它们是一回事!
  • @MarkRansom,谢谢你我修好了
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-03
  • 1970-01-01
  • 2022-01-13
  • 2019-05-17
  • 2012-02-23
  • 1970-01-01
相关资源
最近更新 更多