在循环中查找avg语句,如Big O,O(n)等

时间:2014-06-20 20:34:56

标签: java methods big-o

我很亲密,我可以品尝它!我要计算我的方法中的所有语句,并找到一些值“n”的平均语句数。所以我相信我的所有内容都设置正确,因为我的声明计数器,但我不知道如何计算这个循环,我可以采取每个“n”的平均值。我相信我必须用一些东西来区分我的总陈述,但我不确定这个数字是什么 - 有人能指出我正确的方向吗?我知道我应该最终获得二次方fxn,O(n ^ 2)......

以下是我正在评估的方法......

public static int myMethod(int[] array) {
    int statements = 0;
    for (int next = 1; next < array.length; next++) {
        statements++;
        int val = array[next];
        int index = next;
        while (index > 0 && val < array[index - 1]) {
            statements++;
            array[index] = array[index - 1];
            index--;
        }
        array[index] = val;
    }
    return statements;
}

}

这是我的测试类调用方法...

statements = myClass.myMethod(array); //this is the call we want to measure
                     //I believe the statements variable is working correctly.
        avgStatements = statements/(something here?)
编辑:我应该提一下这个方法的作用...它需要一个整数,比如5,并且从一个随机顺序它按升序排列1到5,例如如果它是5,我们可以有4个1 2 3 5,它会将它组织成阵列,1 2 3 4 5 ....谢谢!

1 个答案:

答案 0 :(得分:1)

我不能确定你想要计算什么,但是如果我猜对了,那就是数组的大小(array.length),你需要计算每个语句的平均语句数数组的成员。

因此

 avgStatements = statements/array.length

但是如果要计算所有语句,你应该注意到内部循环有两个语句(不包括语句++),而外部循环有三个语句。

因此你应该算这样:

public static int myMethod(int[] array) {
    int statements = 0;
    for (int next = 1; next < array.length; next++) {
        statements+=3;
        int val = array[next];
        int index = next;
        while (index > 0 && val < array[index - 1]) {
            statements+=2;
            array[index] = array[index - 1];
            index--;
        }
        array[index] = val;
    }
    return statements;
}