Java 我的程序的时间复杂性
我想知道这个方法中我的算法的精确时间复杂度。我认为它是nlogn,因为它使用array.sortJava 我的程序的时间复杂性,java,time-complexity,Java,Time Complexity,我想知道这个方法中我的算法的精确时间复杂度。我认为它是nlogn,因为它使用array.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 (Integ
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)
}
public static int largestElement(int[]num)抛出NullPointerException//O(1)
{
int a=num.length;//O(1)
Arrays.sort(num);//O(1)?是
如果(num.length确实是O(nlogn)。Arrays.sort()使用合并排序。但是,使用此方法可能不是找到最大值的最佳方法。您可以在数组中循环,比较元素。确实是O(nlogn)。Arrays.sort()使用合并排序。使用此方法可能不是找到最大值的最佳方法。您可以在数组中循环,而不是比较元素。您在文章中似乎自相矛盾。您的方法是O(nlogn),这是正确的,但以下是错误的:
Arrays.sort(num); // O(1)? yes
如果您是对的,那么该方法将是O(1)!毕竟,一组顺序的O(1)进程仍然是O(1)。实际上,Arrays.sort()
是O(nlogn),它决定了方法的总体复杂性
但是,在数组或集合中查找最大的元素始终可以是O(n),因为我们可以简单地遍历每个元素并跟踪最大值。您在文章中似乎自相矛盾。您的方法是O(nlogn),这是正确的,但以下是错误的:
Arrays.sort(num); // O(1)? yes
如果您是对的,那么该方法将是O(1)!毕竟,一组顺序的O(1)进程仍然是O(1)。实际上,Arrays.sort()
是O(nlogn),它决定了方法的总体复杂性
不过,在数组或集合中查找最大的元素始终可以是O(n),因为我们可以简单地遍历每个元素并跟踪最大值。“您的速度只与最慢的跑步者一样快”——事实上
因此,这里重要的运行时操作是排序和遍历数组。由于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)),如上所述。“您的速度只与最慢的跑步者一样快”——事实
因此,这里重要的运行时操作是排序和遍历数组。由于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)),如上所述。Arrays.sort(num);//O(1)?是-否它是n*log(n)
对数组排序不会导致O(1)复杂度:Arrays.sort(num);//O(1)?是-否n*log(n)
对数组排序不会导致O(1)复杂度:+1“查找数组或集合中的最大元素始终可以是O(n)”(有效编码时)+1“查找数组或集合中的最大元素始终可以是O(n)”(有效编码时)