【问题标题】:Complexity of sorting n/logn sequences of an array size n对数组大小为 n 的 n/logn 序列进行排序的复杂性
【发布时间】:2020-12-26 16:44:16
【问题描述】:

给定一个大小为 N 的数组(数组包含整数),我希望对数组进行排序,但只对数组中 log(n) 的长度进行排序,所以到最后数组将有 n/logn 个序列(每个序列的 logn 大小)已排序。

我的想法是使用 MergeSort 算法,在最坏的时间复杂度情况下运行 O(nlogn)。 但是由于我只是对数组中 logn 的长度进行排序,所以时间复杂度应该是 O(log(n)*log(log(n))) 因为我实际上并没有遍历 N 的整个长度。

所以 MergeSort 将在这种情况下执行 n/logn 次。 是否可以安全地假设此操作的整体时间复杂度为 (n/logn)*O(log(n)log(log(n))) => O(nlog(log (n)))?

【问题讨论】:

  • 如果您的数据不是很大,那么快速排序是比合并排序更好的选择。快速排序最坏的情况是 N 平方,但在最坏的情况下甚至不可能下降,但其他事情(例如相同的数组和引用位置)使其比合并排序更强大和更快。但归并排序适用于大量数据,因为它还为您提供了虚拟内存使用。
  • 是的,O(n log log n) 是正确的。

标签: arrays sorting time-complexity


【解决方案1】:

您的计算是正确的:可以在O(n log(log n)) 中对大小为log n 的数组中的n / log n 块进行排序。

但是,如果您的整个数组一开始并没有那么大(比如最多几千个元素),log n 块将非常小,在这种情况下,使用insertion sort 实际上更有效,而不是而不是像归并排序或快速排序这样的算法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-29
    • 1970-01-01
    相关资源
    最近更新 更多