【发布时间】:2018-08-24 08:05:39
【问题描述】:
算法的运行时间是否取决于数组的长度? 我知道如果数组的长度未知,我们会说以下算法的运行时间是 O(n)。
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.print("Size of array: ");
int lengthOfArray = sc.nextInt();
int[] longArray = new int[lengthOfArray];
for (int i = 0; i < longArray.length; i++) {
System.out.println("Hello" + i);
}
}
但是,如果数组的长度是已知且固定的。它会被视为常数时间,即 O(1) 还是仍被视为 O(n)。
public static void main(String[] args) {
int[] longArray = new int[99];
for (int i = 0; i < longArray.length; i++) {
System.out.println("Hello" + i);
}
}
【问题讨论】:
-
这有点主观。严格来说,两个代码 sn-ps 都是
O(n),其中n是数组的大小。如果你知道数组是固定的,那么你可以通过说它是一个已知的时间惩罚来抵消你的资产负债表。但它不会改变第二个循环的运行时间动态。 -
是的,如果你的数组是固定大小并且它不随输入的大小而变化,它是 O(1),因为它可以表示为 c * O(1) = O( 1),其中 c 是一些常数。
-
这是必须区分时间复杂度和实际执行时间的地方。