简单循环的大O表示法

时间:2016-03-20 19:40:59

标签: big-o

我刚刚开始在数据结构类中,教师已经发布了10个问题,并向其中一个问了大O.根据我读过的帖子,我假设此代码的Big O为O(1),因为data参数是单个数据元素。但是,它会根据数字的大小执行多次,因此会使其成为O(N)?

public class Main {

    public static void main(String[] args) {
        f(100000);
    }

    public static long f (int n) {
        long sum = 0;
        for (long i = 2; i < n; i = i * i) {
            sum += i;
            System.out.println(sum);
        }
        return sum;
    } // end f
}

2 个答案:

答案 0 :(得分:1)

此函数的时间复杂度为 O(log(log(n))

i通过乘以指数增长因子而增长,从而使指数增长成倍增长&#34; (不确定这是否是一个有效的定义),复杂性是相反的。您可以阅读有关此类复杂性的更多信息here

答案 1 :(得分:1)

使用Sigma表示法分析算法

要严格分析算法的增长,您可以使用Sigma表示法,如下所示:

enter image description here

使用:

enter image description here

我们还假设,在使用(*)的结果的平等中,n不是2^(2^j)形式上的数字,对于某个正整数{{1} }。对于此假设不成立的j值,只需移除上方n总和中的floor function

结果:log-logaritmic时间复杂度

从上面可以看出,你的算法显然具有 log-logarithmic 时间复杂度,即(渐近上限)k