我正在尝试编写一个具有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)时间复杂度的算法是什么?
答案 0 :(得分:1)
我认为:
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))。