【发布时间】:2015-05-12 11:25:50
【问题描述】:
我有一个算法,我需要帮助找出它的复杂性(尽可能严格的上限)
for(int i = 0; i < n/2; i++)
for(int j = 0; j < n/4; j++)
for(int k = 0; k < n; k++)
x++;
我的分析是,如果n在每个for循环中不被分割,那就是O(n^3)。这种复杂性仍然成立,因为每个“for 循环”都会将每个操作降低到 O(log n) 复杂性,因为它在每次循环执行时都将 n 相除,使其越来越小(至少小于 O(n))。
我会说答案在O(log n) 和O(n^3) 之间。你能帮我弄个最紧的界限吗?
【问题讨论】:
-
n永远不会被修改 => 复杂性Θ(n * (n/4) * (n/2)) = Θ(n³)
标签: java algorithm complexity-theory code-complexity