我的计划的时间复杂性

时间:2013-11-06 01:07:50

标签: java time-complexity

我想知道我的算法在这种方法中的确切时间复杂度。我认为它是nlogn,因为它使用arrays.sort;

public static int largestElement(int[] num) throws NullPointerException // O(1)
    {
    int a=num.length; // O(1)
    Arrays.sort(num); // O(1)? yes

    if(num.length<1) // O(1)
    return (Integer) null;
    else
    return num[a-1]; // O(1)
    }

3 个答案:

答案 0 :(得分:2)

你的帖子中似乎与自己完全矛盾。你的方法是O(nlogn)是正确的,但是以下是不正确的:

Arrays.sort(num); // O(1)? yes

如果你是对的,方法将是O(1)!毕竟,序列中的一堆O(1)过程仍然是O(1)。实际上,Arrays.sort()是O(nlogn),它决定了方法的整体复杂性。

查找数组或集合中的最大元素总是可以是O(n),因为我们可以简单地遍历每个元素并跟踪最大值。

答案 1 :(得分:1)

确实,这是O(nlogn)。 Arrays.sort()使用合并排序。使用此方法可能不是找到最大值的最佳方法。您可以循环遍历数组,而不是比较元素。

答案 2 :(得分:1)

“你的速度只有最慢的跑步者”--Fact

因此,这里重要的运行时操作是您的排序和您通过数组的步进。由于Arrays.sort(num)是一种最有效地对数组进行排序的方法,因此我们可以保证这将是O(nlg(n))(其中lg(n)是n的对数基数2)。这是因为O符号表示最坏情况运行时。此外,阵列的步进需要O(n)。

所以,我们有O(nlgn)+ O(n)+ O(1)+ ...

真正减少到O(2nlg(n))。但是,渐近符号中的系数可以忽略不计。 所以你的运行时如上所述接近O(nlg(n))。

相关问题