【问题标题】:Algorithmic complexity vs real life situations?算法复杂性与现实生活中的情况?
【发布时间】:2020-01-22 20:22:25
【问题描述】:

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

【问题讨论】:

    标签: algorithm complexity-theory mergesort bubble-sort


    【解决方案1】:

    答案是肯定的。

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

    我的说法是,可扩展性就像一辆麦克卡车。您希望它能够承受大量负载,但它可能不是在当地杂货店购物的最佳选择。

    【讨论】:

    • 我喜欢你的麦克卡车类比。
    【解决方案2】:

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

    【讨论】:

    • 好姓先生。
    猜你喜欢
    • 2019-07-31
    • 2010-09-11
    • 2021-08-19
    • 1970-01-01
    • 2022-11-17
    • 1970-01-01
    • 1970-01-01
    • 2012-10-24
    • 1970-01-01
    相关资源
    最近更新 更多