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