考虑以下code(Github链接)
变量min
最多为M
,变量max
最多为M*N
我们在[min, max]
区间内运行二进制搜索。我们调用divisionSolvable
的每次迭代都是O(N)
,因此恕我直言,总体复杂性时间为O(N*log(NM))
。
你能解释为什么不是这样吗?
答案 0 :(得分:1)
不看链接,请注意O(log(NM)) = O(log(N+M))
。
实际上,对于N>=2
和M>=2
,我们有:
log (N+M) < log(NM) = log(N) + log(M) < log(N+M) + log(N+M) = 2 log(N+M)
。
使用O()
的定义来完成该操作,从而删除常量。