我对Big(O)表示法感到困惑。 Big(O)机器是独立的还是机器独立的? (机器在我们运行算法的计算机中) 在i3处理器和i7处理器中使用快速排序对1000个数字进行排序是否相同?在计算时间复杂度时,为什么我们不考虑机器及其处理器速度?我是这个东西的初学者。
答案 0 :(得分:8)
Big-O衡量的是可扩展性,而不是速度。它显示了当你例如它对时间和记忆的影响。数据量加倍 - 是执行加倍还是两倍?
无论您使用i7还是i3,双倍都是双倍的。无论线性算法是快还是慢,双倍都是双倍的。
这也是许多人忽视的另一个含义。对于给定的O(n^3)
,O(n)
等复杂算法可能比n
这样的简单算法更快,低于某个限制。例如:
loop n times:
loop n times:
loop n times:
sleep 1 second
是O(n^3)
,因为它有3个嵌套循环。
loop n times:
sleep 10 seconds
是O(n)
,因为它只有一个循环。对于n = 10
,第一个程序执行1000秒,第二个程序仅执行100.因此,O(n)
是好的!人们很想说。但是如果你有n = 2
,第一个复杂的程序只在8秒内执行,而第二个,更简单的程序执行20个!即使对于n = 3
,第一个在27秒内执行,第二个在30中执行。因此,虽然n
较低,但复杂程序可能胜过较简单的程序。只是当n
上升时,复杂程序变得比一个简单的程序慢得多(如果有意义)。对于n = 1000
,简单代码已经上升到10000秒,但复杂的代码现在是1000000000秒!
此外,这清楚地表明复杂性不依赖于处理器。第二个是第二个。
编辑:此外,您可能需要阅读this question,其中Big-O在一些非常高质量的答案中进行了解释。
答案 1 :(得分:0)
Big(O)表示法是计算算法复杂度的方法,因此也就是计算运行所需的相对时间。对于相同的数据,相同的算法将在更快的处理器上运行得更快,但仍将采用相同数量的操作。它被用来评估不同算法的相对效率,以达到相同的效果。
答案 2 :(得分:0)
Big O表示法在任何方面都不依赖于体系结构,它是一个数学结构。它是一种非常有限的算法复杂度度量,它只给出了性能如何随数据大小变化的粗略上界。
答案 3 :(得分:0)
大(O)依赖于算术。它的工作是帮助比较各种算法的相对成本,而无需考虑机器的依赖性。
通过数组进行线性搜索,如果找到,平均会查看大约1/2个元素。出于所有实际目的,O(N / 2)与O(1/2 * N)相同。对于compairson,你抛弃系数。因此它是O(N)使用。
二叉树也可以容纳N个元素进行搜索。在agerage上,它会通过log base 2(N)来查找某些东西,因此你会看到它被描述为cost O(LN2(N))。
弹出N的小值,算法之间没有太大的区别。弹出大的N值,很明显二叉树查找要快得多。
答案 4 :(得分:0)
Big(O)不依赖于机器。表示算法的复杂性是数学符号。通常我们在理论上使用这些符号来比较算法性能。