为什么算法复杂度为O(N * log(N + M))?

时间:2018-06-17 15:06:24

标签: algorithm time-complexity computer-science complexity-theory

考虑以下code(Github链接)

变量min最多为M,变量max最多为M*N 我们在[min, max]区间内运行二进制搜索。我们调用divisionSolvable的每次迭代都是O(N),因此恕我直言,总体复杂性时间为O(N*log(NM))

你能解释为什么不是这样吗?

1 个答案:

答案 0 :(得分:1)

不看链接,请注意O(log(NM)) = O(log(N+M))。 实际上,对于N>=2M>=2,我们有:

log (N+M) < log(NM) = log(N) + log(M) < log(N+M) + log(N+M) = 2 log(N+M)

使用O()的定义来完成该操作,从而删除常量。