Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如果一个算法调用另一个算法来执行其功能,它的总体时间复杂度是否会受到影响?_Java_Algorithm_Big O - Fatal编程技术网

Java 如果一个算法调用另一个算法来执行其功能,它的总体时间复杂度是否会受到影响?

Java 如果一个算法调用另一个算法来执行其功能,它的总体时间复杂度是否会受到影响?,java,algorithm,big-o,Java,Algorithm,Big O,我试图设计一个时间复杂度为O(1)的算法,该算法从不是最小值的数组返回一个值。我知道搜索数组并比较数组中的元素以找到最小的元素会使算法成为O(n),所以这是行不通的 如果我编写一个单独的方法,首先使用排序算法对数组进行排序,然后返回最小的数组,这会影响算法的时间复杂度吗 这是我的密码: private static int nonSmallestElement(int[] array) { int smallest = smallestElement(array); int in

我试图设计一个时间复杂度为O(1)的算法,该算法从不是最小值的数组返回一个值。我知道搜索数组并比较数组中的元素以找到最小的元素会使算法成为O(n),所以这是行不通的

如果我编写一个单独的方法,首先使用排序算法对数组进行排序,然后返回最小的数组,这会影响算法的时间复杂度吗

这是我的密码:

private static int nonSmallestElement(int[] array) {
    int smallest = smallestElement(array);
    int index = (int) (array.length * Math.random());
    System.out.println("Index = " + index);
    for (int i = index; i < array.length; i++) {
        if (array[i] != smallest) {
            return array[i];
        }
    }
    return array[1];
}

private static int smallestElement(int[] array) {
    Arrays.sort(array);
    return array[0];
}
私有静态int非扩展元素(int[]数组){
int最小值=smallestElement(数组);
int index=(int)(array.length*Math.random());
System.out.println(“Index=“+Index”);
for(int i=index;i

这里的
Arrays.sort()
方法使用的是双枢轴快速排序算法,即O(n log(n))。这是否意味着
nonSmallestElement()
方法也具有这种时间复杂度,或者它是O(1),因为它不必处理排序?

您是对的,您需要计算所有操作以计算算法的复杂度。但您应该了解这些规则,例如,较大的包含较小的()。在您的例子中,您正在调用
smallestElement()
一次-O(nlogn),然后有一个循环O(n)。因此,总体复杂度将为O(n+nlogn)。但finalnonSmallestElement()
的复杂性是O(nlogn),因为nlogn更大

另一方面,不可能有比O(n)更好的算法来返回not min值。因为您将需要在所有元素上至少迭代一次才能找到最小值。异常可以按数组排序


评论更新:


这里有一个提示:如果您手头有两个不同的值,那么 较大的值不能是数组中的最小值。暂时 “典型”数组您希望在任意两个数组中找到两个不同的值 元素@詹姆斯·K·波尔克


你得数一数,否则你就是在作弊。但是为什么要对数组进行排序呢?我以为你想返回一个不是最小的元素。嗨。为了确保我没有返回最小值,我必须知道最小值是什么,不是吗?然后进行比较以返回任何其他值!=smallest这里有一个提示:如果您手头有两个不同的值,那么较大的值不能是数组中的最小值。对于“典型”数组,您希望在任意两个元素中找到两个不同的值。@JamesKPolk我相信我支持您。这样我就可以比较任意两个元素并返回一个更大的元素。Cheers@PumpkinBreath-如果可以使用非不同(相等)值,则可能需要查看2个以上的值。