【发布时间】:2014-08-08 19:51:08
【问题描述】:
发这个问题的原因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: 对于较大的 n 值都需要 O(n)
space complexity 中可能存在一些差异,因为我们在 Snippet A 中有另一个循环变量 j
观察:
我在VBA 中测试了这个循环结构的类似版本,Snippet B 比Snippet A 快一点
是因为空间或时间复杂度差异还是两者兼而有之?
【问题讨论】:
-
在A中你必须做一个B中没有的字符串连接。
-
A 也有一个内部循环。
-
我实际上没有看到任何“n”。出于时间复杂度的目的,您所指的“n”是外部 for 循环中的 10 吗?
-
请不要将“执行时间”或“性能”与“时间复杂度”混淆。如果 n 是输入数据项的数量,并且您有一个算法需要大约 0.001 * n 秒才能运行,而另一种算法需要 10 * n i> 秒运行,它们都具有相同的时间复杂度(线性,或 O(n)),但当然慢了一万倍。
-
并非如此。如果您要在两种完全不同的算法之间做出决定,比如说,一种在 O(n) 中运行,而另一种在 O(n log n i>),那么您可以确定第一个将运行得更快对于足够大的 n。例如,我们使用它来评估排序算法。但在现实生活中,基本算法通常是很早就定下来的,性能是基于“时间复杂度”之外的其他因素。
标签: java performance loops time-complexity