【问题标题】:Complexity analysis for code代码复杂度分析
【发布时间】:2015-02-21 11:43:23
【问题描述】:

所以我编写了一些 Java 代码来列出一个目录及其子目录中今天已修改的文件。我需要一点帮助来理解时间和空间的复杂性。

代码:

公共类 FileInDir {

File[] files = null; 
Date d = new Date(); 
long mill;

public void listTodayFiles(String path) {
    File dir = new File(path);
    files = dir.listFiles();

    for(File file : files){
        mill = file.lastModified(); 
        Date f = new Date(mill);

        if(f.getDate() == d.getDate()){
            if(file.isFile())
                System.out.println("FILE: " + file.getName() + " WAS LAST MODIFIED ON: " + f);
            else if(file.isDirectory())
                listTodayFiles(file.getAbsolutePath());
        }
    }
}

}

所以据我了解,将所有文件存储到数组中需要 O(n) 时间,循环需要 O(n) 时间。我不确定递归调用的复杂性。我也不确定 if 语句是否在时间或空间复杂性中起作用。空间复杂度也会为 O(n),因为它需要存储每个元素(文件)。

谢谢:D

【问题讨论】:

标签: java time complexity-theory space analysis


【解决方案1】:

您的复杂性取决于您为 n 选择的内容。如果 n 是文件数,则复杂度为 O(n),因为每个文件都被访问过一次。

【讨论】:

    【解决方案2】:

    @popovitsj 定义的时间复杂度是正确的。

    您的空间复杂度也是 O(n),因为由于递归调用,您需要将每个文件对象存储在堆栈中。

    【讨论】:

    • 假设有多个级别的目录。那么也一样吗??
    • 如果我的目录只包含文件,这意味着我不需要进行递归调用,这会影响空间复杂度吗?拥有子目录也会影响时间复杂度,因为我必须访问子目录中的每个文件。
    • @Prashant 这是最坏的情况,我说有多个级别的目录,或者它是具有“n”个文件数的同一个目录。空间复杂度将始终保持不变,因为您要创建那么多文件对象。
    • files对象是类变量时,每个文件数组如何存储在堆栈中?
    • @boxed__l 对不起。对象存储在堆中,并且仍在使用内存。所以复杂性会保持不变吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-08
    • 1970-01-01
    • 1970-01-01
    • 2018-04-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多