Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/402.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/11.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_Complexity Theory - Fatal编程技术网

Java 包含预定义方法的计算算法复杂性

Java 包含预定义方法的计算算法复杂性,java,algorithm,complexity-theory,Java,Algorithm,Complexity Theory,拥有以下简单的Java代码: import java.util.ArrayList; import java.util.Collections; import java.util.List; public class Simple { public static void main(String[] args) { List list = new ArrayList(); list.add(5); list.add(4);

拥有以下简单的Java代码:

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

public class Simple {
    public static void main(String[] args) {
        List list = new ArrayList();
        list.add(5);
        list.add(4);
        list.add(3);
        Collections.sort(list);
    }
} 
在不知道Collection.sort方法的复杂性的情况下,如何计算此算法的复杂性

我是否应该转到java文档,搜索Collection.sort源代码,然后计算其复杂性

注意:Collection.sort只是预定义方法的一个示例


谢谢

样本没有任何输入,所以O是一个常数,或者说O1。例如,只有当您有一个大小为N的输入,并且程序中有某种循环或对相关函数的递归调用时,复杂性才有意义,因此运行时间取决于输入。正如Sanjeev Sharma指出的,在这种情况下,寻找复杂性是荒谬的

在不知道System.out.println方法的复杂性的情况下,如何计算此算法的复杂性

严格地说,你不能

另一方面,在算法分析中包含详细的I/O复杂性是不正常的。通常我们假设I/O的行为方式与人们通常理解的行为方式相同。。。因为真正的复杂性分析是很难解决的

在实践中,假设像这样的简单I/O具有ON的复杂性,其中N是读取或写入的字节/字符数

我是否应该转到java文档,搜索System.out.println源代码,然后计算其复杂性

不,见上文


好的,明白了,但是如果我调用sort预定义java方法呢

javadoc for Collections.sortList说:

此实现遵从使用指定列表和空比较器的List.sortComparator方法

反过来说:

实现说明:此实现是一种稳定、自适应、迭代的mergesort,当输入数组部分排序时,需要的lgn比较远远少于n次,同时在输入数组随机排序时提供传统mergesort的性能。如果输入数组几乎已排序,则实现需要大约n次比较。临时存储要求从几乎排序的输入数组的小常量到随机排序的输入数组的n/2对象引用

一般来说,要确定标准类库中类的复杂性,请阅读javadoc,如果javadoc没有说明,请查找并分析源代码。。。或者根据您对实际使用的数据结构的了解做出合理的假设

环境应该决定您的复杂性分析是否需要严格。如果不需要严谨,你可以在分析中走捷径。。。如果你得到了正确的答案:-


无论哪种情况,请注意算法几乎总是一个实现细节,性能和空间复杂度至少在理论上会发生变化。

这个hello world程序具有恒定的时间复杂度,例如,因为没有输入。
在打印字符串时,实际上并没有进行任何计算

寻找打印函数的复杂性是荒谬的。我认为可以安全地假设复杂性与正在打印的字符串长度成线性关系。+Sanjeev Sharma。那么如何计算这个算法的复杂度呢?这不是一个算法吗?你刚刚发布了另一个具有类似性质的问题。为什么你对这个问题的其他答案不满意?你应该阅读一些关于什么是算法什么不是算法的文献。例如,这个hello world程序具有恒定的时间复杂度,因为没有输入。请停止垃圾邮件,认真阅读您的问题的答案和评论。@MCHAppy您在打印字符串时没有进行任何计算。这就是为什么。好吧,我明白了,但是如果我调用sort预定义java方法呢?参见编辑我认为javadoc提到了内置排序算法的复杂性