【问题标题】:Time complexity of finding the smallest value in an unordered array在无序数组中找到最小值的时间复杂度
【发布时间】:2019-03-31 23:05:38
【问题描述】:

我正在阅读wiki page,上面写着:

但是,在无序数组中找到最小值并不是一件容易的事 扫描数组中每个元素的恒定时间操作是 需要确定最小值。因此它是线性的 时间运算,耗时 O(n)。如果元素个数已知 提前并且不会改变,但是,这样的算法仍然可以 可以说是在恒定时间内运行。

如果事先知道元素的数量,我无法理解时间复杂度如何变得恒定?还是不会是O(n)吧?

【问题讨论】:

  • 如果元素的个数是预先知道的并且不改变,那么它是常量。在这种情况下,根本就没有变量n 让算法成为O(n)
  • @JohnColeman,你能举个例子解释一下吗?
  • 说数组中有100元素。那你要看看100元素,1001的常数倍数,所以:O(1)。此外,大 O 表示法用于渐近发生的情况,因为n 趋于无穷大。常数保持固定而不是趋于无穷大,因此甚至不会出现渐近问题。

标签: algorithm


【解决方案1】:

看一下Big-O的定义:

f(n) = O(g(n)) 表示存在正常数 c 和 k,因此对于所有 n ≥ k,0 ≤ f(n) ≤ cg(n)。对于函数 f,c 和 k 的值必须是固定的,并且不能依赖于 n。

如果我们知道数组大小,比如 100,很明显,我们需要 100 步才能检查数组中的最小值是多少。

因此,对于每 n ≥ 1,c = 100:

100 ≤ 1 * 100

这意味着(根据定义):

100 = O(1)

所以时间复杂度变成了O(1)。

如果你还是不明白,试着用 n 大小的数组来证明它。

【讨论】:

    猜你喜欢
    • 2014-08-06
    • 1970-01-01
    • 2013-12-08
    • 2019-10-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多