如何找到这个方法的渐近运行时?

时间:2014-03-03 01:28:40

标签: java methods time term

我被要求编写此方法,然后根据数组的大小给出渐近运行时间。有人可以向我解释这是怎么做到的吗?

public int doSomething(int[] nums) {
    int count = 0;

    for (int i = 0; i < nums.length; i++)
        for (int j = 0; j < i; j++)
            if (nums[i] > nums[j])
                count++;

    return count;
}

2 个答案:

答案 0 :(得分:2)

问题大小N是nums的长度。

从只有for语句的代码中确定渐近运行时的方法非常简单。

渐近运行时由传统表示法描述,如

O(N)

这是一个简单的声明。我们只需要处理输入元素一次。

像你这样的嵌套for语句意味着我们需要多次检查每个nums的值。

你在外循环中重复N次。您在内循环中重复多次依赖于N.

另外如何打印像

这样的三角形
*
**
***
****
*****
******

三角形中的元素数量与N²

成比例

答案 1 :(得分:1)

运行时间通常需要执行多少步骤。

渐近运行时间几乎相同,但你可以做一些“魔术”来简化你的结果。

在您的情况下,您有for (int i = 0; i < nums.length; i++)个周期nums.length个步骤。在每一步中,您都会for (int j = 0; j < i; j++)

首先,你只做1,然后做2步,而不是3步等。

运行时间1 + 2 + 3 + 4 + 5 + 6 + .... + n,使用您获得的系列总和:n*(n+1)/2

渐近运行时间基于一些规则。在我们的例子中,你可以摆脱常数,只有n很重要,因此n*(n+1)/2 = Theta(n*(n)) = Theta(n^2)

结果:n^2