Algorithm 大(O)机器依赖吗?

Algorithm 大(O)机器依赖吗?,algorithm,big-o,Algorithm,Big O,我真的被大(O)符号弄糊涂了。大(O)机器依赖还是机器独立?(我们在其中运行算法的计算机) 在i3处理器和i7处理器中使用快速排序对1000个数字进行排序是否相同?我们在计算时间复杂度时为什么不考虑机器和处理器的速度呢?我是这方面的新手 Big-O是衡量可伸缩性的指标,而不是速度。它向您展示了当您将数据量增加一倍时,它对时间和内存的影响—是执行量增加一倍,还是增加四倍 无论您使用i7还是i3,double都是double。无论线性算法是快还是慢,double都是double 这也有很多人忽视的另

我真的被大(O)符号弄糊涂了。大(O)机器依赖还是机器独立?(我们在其中运行算法的计算机)
在i3处理器和i7处理器中使用快速排序对1000个数字进行排序是否相同?我们在计算时间复杂度时为什么不考虑机器和处理器的速度呢?我是这方面的新手

Big-O是衡量可伸缩性的指标,而不是速度。它向您展示了当您将数据量增加一倍时,它对时间和内存的影响—是执行量增加一倍,还是增加四倍

无论您使用i7还是i3,double都是double。无论线性算法是快还是慢,double都是double

这也有很多人忽视的另一个含义。对于低于特定限制的给定
n
,复杂算法(如
O(n)
)可能比简单算法(如
O(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秒,而复杂的代码现在是100000000秒

此外,这清楚地告诉您,复杂性并不依赖于处理器。一秒钟就是一秒钟


编辑:此外,您可能想阅读,其中Big-O在许多高质量的答案中进行了解释。

Big(O)表示法是计算算法复杂度的方法,因此计算算法运行所需的相对时间。对于相同的数据,相同的算法将在更快的处理器上运行得更快,但仍将执行相同数量的操作。它被用来评估不同算法的相对效率,以获得相同的结果。

大O表示法在任何方面都不依赖于体系结构,它是一种数学构造。它是算法复杂性的一个非常有限的度量,它只为您提供了性能如何随数据大小变化的粗略上限

Big(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,很明显,二叉树查找要快得多。

Big(O)不依赖于机器。它是表示算法复杂性的数学符号。通常我们在理论上使用这些符号来比较算法性能。

Big O是一个关于抽象算法的数学概念。数学怎么可能依赖于机器?不,不是。大(O)是关于你正在采取的解决问题的步骤的规模。