Big(O)机器是否依赖?

时间:2015-01-27 05:50:50

标签: algorithm big-o

我对Big(O)表示法感到困惑。 Big(O)机器是独立的还是机器独立的? (机器在我们运行算法的计算机中) 在i3处理器和i7处理器中使用快速排序对1000个数字进行排序是否相同?在计算时间复杂度时,为什么我们不考虑机器及其处理器速度?我是这个东西的初学者。

5 个答案:

答案 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)不依赖于机器。表示算法的复杂性是数学符号。通常我们在理论上使用这些符号来比较算法性能。