循环时间复杂度的差异

时间:2014-08-08 19:51:08

标签: java performance loops time-complexity

发布此问题的原因comes from here

以下代码片段之间是否存在Time complexity差异?

代码段A:

public static void main(String[] args) {
        for (int i = 0; i < 10; i++) {
            for (int j = 1; j < 2; j++) {
                if (i < 100)
                    System.out.println("Hi");    
            }    
        }    
    }    

代码段B:

public static void main(String[] args) {
        for (int i = 0; i < 10; i++) {    
            if (i < 100)
                System.out.println("Hi");    
        }    
    }

两者之间的代码差异是Snippet B不包含来自Snippet A的内部循环,它不会用于任何目的,因此被删除。

我的假设:

Snippet A:Snippet B:都需要O(n)表示n

的大值

space complexity可能存在一些差异,因为我们在j

中有另一个循环变量Snippet A

观察:

我在VBA中测试了此循环结构的相似版本,Snippet BSnippet A

快一点

是因为空间或时间复杂度的差异还是两者兼而有之?

2 个答案:

答案 0 :(得分:3)

技术,您的两个示例都会在固定时间内运行。

如果您要切换第一个for循环以计数N或某个变量,那么它们都将以O(N)运行。时间复杂度没有差异,因为它们都是O(N)加上恒定时间操作,导致只有O(N)。

代码片段A较慢的原因是因为仍然存在循环开销(递增并比较j)。

答案 1 :(得分:1)

初始化,比较和递增j的开销会减慢A,但我没有看到内循环的实际应用。
这肯定会在生产代码中被删除,因为它会降低可读性。