algorithm - 为什么算法复杂度为 O(N*log(N+M))?
问题描述
考虑以下代码(Github 链接)
变量min
最多是,M
变量max
最多是M*N
我们对区间进行二分搜索[min, max]
。我们调用的每次迭代divisionSolvable
都是O(N)
恕我直言,整体复杂性时间是O(N*log(NM))
.
你能解释一下为什么不是这样吗?
解决方案
不看链接,注意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()
用which 删除常量的定义来完成它。
推荐阅读
- typescript - 根据任意属性名称复制值
- docker - docker-compose - 在容器 aspnet 核心内部和外部使用 localhost
- r - 如何在 R Shiny 中显示来自 Postgresql 函数的文本消息
- java - 如果需要抽象接口,则不允许在函数参数中提供已实现的接口
- python - 如何将输入 dim 从 fit 方法传递到 skorch 包装器?
- python - 使用 plac 时出现 AttributeError:“命名空间”对象没有属性
- java - 密码无效或用户没有密码
- java - 打印以下 1 2 3 4 Bus 6 7 8 9 bUs 11 12 13 14 bus
- sorting - 整数排序算法
- python-3.x - 即使我只有一个 Tkinter 窗口,复选框总是返回 false?