我可以理解算法中的运行时间复杂度。但是当我们知道算法运行时间复杂度为 O(n) 时,这有点令人困惑。
我们可以看出 f(n)< g(n)..
g(n)到底是什么..?
对不起菜鸟问题..
谢谢。
我可以理解算法中的运行时间复杂度。但是当我们知道算法运行时间复杂度为 O(n) 时,这有点令人困惑。
我们可以看出 f(n)< g(n)..
g(n)到底是什么..?
对不起菜鸟问题..
谢谢。
让f(x)
和g(x)
是在实数的某个子集上定义的两个函数。一个写
f(x) = O(g(x)) as x -> infinity
当且仅当存在一个正实数M
和一个实数x0
使得
|f(x)| <= M |g(x)| for all x > x0
一般而言,f(x)
是算法在输入规模上的实际成本(例如执行步骤数)x
,而比用于表征 的复杂性行为g(x)
要简单得多。f(x)
f(x)
我同意 f(x) 和 g(x) 只是一对函数的评论。f(x) = O(g(x)) 告诉我们它们以特定的方式相关。
这通常使用的方式是使 f(x) 成为一些复杂的、难以表征的函数。g(x) 是一个更简单的函数。知道 f(x) = O(g(x)) 让我们感觉随着 x 的增加, f(x) 的界限。
在计算机科学中的应用是使 f(x) 作为输入大小 x 的函数来衡量程序行为。例如,f(x) 可能是对 x 元素数组进行排序时的最大比较次数,或者是某些算法中使用的内存字数。f(x) 通常会非常混乱。
我们可以通过找到一个好的、干净的函数 g(x) 来使事情变得更简单,这样我们就可以证明 f(x) = O(g(x))。
例如,对于小于 30 的输入,某些算法实际上可能在其输入中每个元素采用 35 次操作或 10 次操作中的较大者,或者对于所有较大的输入,每个元素采用 1000 次操作中的较大者。
如果我们只注意到 f(x) = O(x),那么比较算法会更简单,也更容易。
请注意,这与说 f(x) < g(x) 不同。在我的示例中,对于较大的 x,f(x) 是 g(x) 的一千倍。它只是意味着 g(x) 捕获了 f(x) 在 x 变大时的行为方式。