【发布时间】:2019-07-09 17:34:48
【问题描述】:
假设N 和M 是算法的两个参数。下面的简化正确吗?
O(N+NM) = O[N(1+M)] = O(NM)
也就是说,在这种情况下是否允许移除常量?
【问题讨论】:
-
等式是正确的。仅取决于您希望显示复杂性的精确程度。
标签: time-complexity big-o complexity-theory
假设N 和M 是算法的两个参数。下面的简化正确吗?
O(N+NM) = O[N(1+M)] = O(NM)
也就是说,在这种情况下是否允许移除常量?
【问题讨论】:
标签: time-complexity big-o complexity-theory
TL;DR 是的
说明
根据 Big-Oh 表示法的定义,如果 O(.) 中的一个项对于变量的所有足够大的值可证明小于一个常数乘以另一个项,那么您可以删除较小的项。
您可以找到 Big-Oh here 的更精确定义,但一些示例结果如下:
O(1000*N+N^2) = O(N^2) 因为一旦 N>1000,N^2 就会使 1000*N 相形见绌
O(N+M) 无法简化
O(N+NM) = O(NM) 因为 N+NM 1 和 M>1
【讨论】:
显然,如果M=0,您无法摆脱N 术语。所以让我们假设M>0。取一个常量k > 0 使得1<=kM (如果M 是整数,k=1,否则取一个常量c 使得0 < c <= M 取k=1/c)。我们有
N+NM = N(1+M)
<= N(kM+M) ; 1<=kM
= (k+1)NM
∊ O(NM)
另一方面,
NM <= N+NM ∊ O(N+NM)
因此相等。
【讨论】: