繁体   English   中英

时间复杂度为 O(log N^3/M) 的算法

[英]Algorithm with O(log N^3/M) time complexity

我正在尝试编写一个时间复杂度为 O(log N^3/M) 的算法。 但是,我不确定 log N/M 部分。 如果有人能确认我的算法是否正确,我将不胜感激。

for (int i = 1; i < N; i = i*2) // log N
  for (int i = 1; i < N; i = i*2) // log N
    *for (int i = 1; i < N; i += M+i*2) // log N/M

* 如果for (int i = 1; i < N; i += M)时间复杂度为 O(N/M),并且 O(log N) 要求i乘以一个常数,那么结论是 O(log N/M) 如果我们将常数添加到i并同时乘以另一个常数,则可以实现。

O(N/log N) 时间复杂度的算法是什么?

我认为: for (int i = 1; i < N; i += M+i*2)不是 O(log(N/M)) 因为可以说循环将运行 k 次,然后我们有: k*M + 2^k >=N -> 这不会导致 k=O(log(N/M))。

相反,你可以写:

for (int i = 1; i < N/M; i =i*2)

这显然是 O(log(N/M))。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM