假设N
和M
是算法的两个参数。以下简化是否正确?
O(N+NM) = O[N(1+M)] = O(NM)
换句话说,是否可以在这种情况下删除常量?
答案 0 :(得分:3)
很显然,如果使用N
,就不能摆脱M=0
这个词。因此,我们假设M>0
。取常数k > 0
使得1<=kM
(如果M
是整数k=1
,则取常数c
使得0 < c <= M
取{ {1}})。我们有
k=1/c
另一方面,
N+NM = N(1+M)
<= N(kM+M) ; 1<=kM
= (k+1)NM
∊ O(NM)
因此平等。
答案 1 :(得分:3)
TL; DR 是
说明
根据Big-Oh表示法的定义,如果对于变量的所有足够大的值,O(。)内部的项证明是小于常数乘以另一个项的常数,则可以删除较小的项。
您可以找到Big-Oh here的更精确定义,但是一些示例结果是:
O(1000 * N + N ^ 2)= O(N ^ 2),因为N ^ 2会在N> 1000时使1000 * N变小
O(N + M)无法简化
O(N + NM)= O(NM),因为N + NM <2(NM)会在N> 1和M> 1