当两个函数 f(n) [O(1)] 和 g(n) [O(n)] 相乘时的大 O 复杂度
Big O complexity when two functions f(n) [O(1)] and g(n) [O(n)] are multiplied together
f(n)和g(n)代表两种不同算法的运行时间。 f(n)的算法复杂度为O(1),g(n)的算法复杂度为O(n)。我们可以声称 f(n)*g(n) 的复杂度为 O(n) 吗? Why/Why 不是吗?
O(n) 是时间复杂度。当我们将 f(n) 和 g(n) 相乘时。更高的时间复杂度获得如此,算法复杂度为 O(n)。
数学证明:
如果我们想证明 f(n)*g(n) 是 O(n) 我们必须证明存在 n0
和常量 c
例如:
f(n)*g(n) < c*n for every n>n0
我们有事实 f(n) 是 O(n) 这意味着有 c1,n1 :
f(n)<c1*n for every n>n1 (1)
对于 g 有 c2,n2:
g(n)<c2 for every n>n2 (2)
现在我们有了,对于每个 n>max(n1,n2)
(最大因为我们希望 f 和 g 的不等式都成立):
f(n)g(n)<c1*c2*n (by multiplying (1),(2))
所以我们证明了 c=c1*c2 and n0=max(n1,n2)
如下不等式成立:
f(n)g(n)<c*n -> f(n)*g(n) is O(n) for every n>n0.
f(n)和g(n)代表两种不同算法的运行时间。 f(n)的算法复杂度为O(1),g(n)的算法复杂度为O(n)。我们可以声称 f(n)*g(n) 的复杂度为 O(n) 吗? Why/Why 不是吗?
O(n) 是时间复杂度。当我们将 f(n) 和 g(n) 相乘时。更高的时间复杂度获得如此,算法复杂度为 O(n)。
数学证明:
如果我们想证明 f(n)*g(n) 是 O(n) 我们必须证明存在 n0
和常量 c
例如:
f(n)*g(n) < c*n for every n>n0
我们有事实 f(n) 是 O(n) 这意味着有 c1,n1 :
f(n)<c1*n for every n>n1 (1)
对于 g 有 c2,n2:
g(n)<c2 for every n>n2 (2)
现在我们有了,对于每个 n>max(n1,n2)
(最大因为我们希望 f 和 g 的不等式都成立):
f(n)g(n)<c1*c2*n (by multiplying (1),(2))
所以我们证明了 c=c1*c2 and n0=max(n1,n2)
如下不等式成立:
f(n)g(n)<c*n -> f(n)*g(n) is O(n) for every n>n0.