以下代码的总运行时间是多少(N是一个int变量)

时间:2016-05-28 13:46:09

标签: algorithm time-complexity running-total

我正在准备考试,我来到这个问题:

以下代码的总运行时间是多少(N是一个int变量)

Z z = new Z(N);
for (int i = 0; i < N; i++) z.insert("Bob", i);

Z级:

public class Z
{
     String[] names;
     Integer[] numbers;
     int N = 0;

     public Z(int cap)
     {
        names = new String[cap];
        numbers = new Integer[cap];
     }


     public Integer find(String S)
     {
        for (int i = 0; i < N; i++)
        {
            if (names[i].equals(S)) return numbers[i];
        }
        return null;
     }

    public void insert(String S, Integer M)
    {
        for (int i = 0; i < N; i++)
        {
            if (names[i].equals(S)) numbers[i] = M;
        }
        names[N] = S;
        numbers[N] = M;
        N++;
    }
}

我认为这个问题的答案是O(n ^ 2)。第一个for循环需要O(n)次,方法insert需要O(n)次(注意:每次插入调用都是n ++),总数为O(n ^ 2)

1 个答案:

答案 0 :(得分:0)

首先请注意,主要部分中的 N 变量与对象实例中引用的 N 不同。

创建 z 对象后,其私有 N 成员等于0,并且只会在每次调用insert时增加。

因此,insert方法中的循环迭代的次数等于先前对insert方法的调用次数。

因此,insert方法(将所有 N 调用一起完成)中的总迭代次数为:

Σ i = 0..N-1 (i)

这等于:

<强>½N(N-1)

½N² - ½N因而 O(n²)