算法复杂性与现实生活情况?



我的问题是关于理论与实践的事情。
例如,假设我想对数字列表进行排序。Mergesort的复杂度为O(n*logn(,而bubblesort的复杂度为O(n^2(。 这意味着合并排序更快。但是复杂性并没有考虑到计算机上发生的整个事情。我的意思是,例如,mergesort是一种分而治之的算法,它比bubblesort需要更多的空间。 那么,创建这个额外的空间和资源的使用(传输数据、填充代码指令等的时间(是否可能比不使用任何额外空间的 bubblesort 花费更多的时间? 对于一定长度的输入(可能很小(,使用比另一种算法更差("更大"(的算法是否更有效?

答案显然是肯定的。

一个典型的例子是插入排序是O(n^2)。 然而,高效的排序实现通常会在剩余 100 个元素时切换到插入排序,因为插入排序可以很好地利用缓存,并避免 CPU 中的管道停滞。 不,插入排序不会扩展,但它的性能会更好。

我说的就是,可扩展性就像一辆Mack卡车。你想要它的一个大负载,但它可能不是在当地杂货店购物旅行的最佳选择。

算法复杂性只告诉你两种算法在输入变大时将如何比较,即接近无穷大。 它没有告诉你他们将如何在较小的输入上进行比较。 确定这一点的唯一方法是对代表典型情况的数据和设备进行基准测试。

相关内容

最新更新