【问题标题】:Should we always sort an array before performing operations on it?我们应该在对数组执行操作之前对数组进行排序吗?
【发布时间】:2021-01-13 03:27:09
【问题描述】:

所以在很多情况下,当对数组执行操作时,例如二分查找或集合操作,排序数组总是更快。例如,合并两个已排序的数组需要 O(m+n) 或 O(n) 作为一个变量,而两个未排序的数组需要 O(n^2)。凭借其优势,我们是否应该在对数组执行操作之前始终对数组进行排序?

【问题讨论】:

  • 如果不指定您想到的操作,就说“总是”是荒谬的。有很多有用的操作只是 O(n),排序是 O(n log n)。

标签: arrays performance sorting time-complexity


【解决方案1】:

总是主动排序通常会使进行中的操作更快,但您仍然会花费时间和资源对初始数组进行排序。

如果您的逻辑涉及可能受益于排序的下游计算,那么您应该尝试在逻辑流的早期对输入数组进行一次排序,以便所有函数重复使用相同的排序实例。

如果排序然后执行函数所花费的时间明显少于使用未排序数组执行函数的时间,那么您可能会争辩说强制函数首先排序是有好处的。

问题在于,如果您的函数不断对已排序的同一个数组实例进行排序,那么通过消除所有排序可以获得一些性能提升。

如果您的函数涉及的操作对排序数组执行得更好,那么您应该指定输入参数一个排序数组,(在 c# 中您可能使用SortedList)然后您已经向调用者声明他们需要提前处理排序。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-06-13
    • 2020-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-15
    • 2012-01-08
    • 1970-01-01
    相关资源
    最近更新 更多