我无法完全理解这个问题:
对于给定的n值,两个O(n 2 )算法总是花费相同的时间。对或错?解释
我认为答案是错误的,因为根据我的理解,我认为渐近时间复杂度只测量在O(n 2 )时运行的两个算法,但是一个算法可能需要更长时间也许它可能有额外的O(n)组件到算法。像O(n 2 )vs(O(n 2 )+ O(n))。
我不确定我的逻辑是否正确。任何帮助将不胜感激。
答案 0 :(得分:3)
是的,你是对的。大哦符号描绘了时间复杂性的上限。可能会添加一些额外的常量字词c
或更短的n
字词,例如O(n)
,因为时间复杂度不会被考虑。
此外,
for i = 0 to n
for j = 0 to n
// some constant time operation
end
end
和
for i = 0 to n
for j = i to n
// some constant time operation
end
end
这两个都是O(n^2)
渐近但不会花费相同的时间。
大哦分析的概念不是计算程序执行所需的精确时间,而不是计算循环迭代的次数。而是用n
表示算法的增长率。
答案 1 :(得分:3)
答案是正确的,但缺乏解释。
首先,大O符号允许任意常数因子。所以n 2 和100 * n 2 都在O(n 2 ),但显然第二个总是更大。
另一个原因是符号只给出一个上限,所以即使n的运行时间在O(n 2 )中,所以其中一个算法实际上可能是线性的。