为什么这个代码给出big-O=O(1) 公共静态链接列表第三(int[]数组){ LinkedList retval=null; 对于(int i=0;i
为什么这段代码会给出big-O=O(1)?因为循环最多执行999次,这是一个常量值,因此您可以将其视为O(999)=O(1)=O(c),其中c是一个常量值为什么这个代码给出big-O=O(1) 公共静态链接列表第三(int[]数组){ LinkedList retval=null; 对于(int i=0;i,big-o,Big O,为什么这段代码会给出big-O=O(1)?因为循环最多执行999次,这是一个常量值,因此您可以将其视为O(999)=O(1)=O(c),其中c是一个常量值 如果i的值不受999的限制,则循环将执行array.length次,复杂性为O(n),其中n是输入数组的大小 也许因为我不是999,但它应该是O(999),它“应该”不是O(999)(冗余符号)O(999)如果使用Big-O-notation的形式化定义来分析这个算法,就像任何其他算法一样,自然会减少到O(1)。To OP:例如,参见“正式”
如果
i
的值不受999的限制,则循环将执行array.length
次,复杂性为O(n),其中n是输入数组的大小 也许因为我不是999,但它应该是O(999),它“应该”不是O(999)
(冗余符号)O(999)
如果使用Big-O-notation的形式化定义来分析这个算法,就像任何其他算法一样,自然会减少到O(1)
。To OP:例如,参见“正式”分析常数函数的渐近行为(一种分析,其本身非常冗余,但可能对学习有价值)。将链接答案中的f(n)=4
替换为f(n)=999
,您将很快得出结论,上面的算法是在恒定时间内运行的,即O(1)
。非常感谢。您帮了我很多忙。
public static LinkedList third(int[] array){
LinkedList retval = null;
for (int i = 0; i < 999 && i < array.length; i = i + 1) {
retval = new LinkedList(array[i], retval);
}
return retval;
}