【问题标题】:Modified MergeSort runtime修改 MergeSort 运行时
【发布时间】:2020-07-21 03:11:31
【问题描述】:

帮助我了解 Modified MergeSort 算法的运行时间。 在经典的 MergeSort 中,当输入数组被分成两部分并递归排序时,执行时间为:nlogn

MergeSort 算法的执行时间是多少,如果 将输入数组分成三部分(不是一半),每三分之一递归排序,最后使用三参数 Merge 合并子程序合并结果。

  1. n
  2. nlogn
  3. n (log n) ^ 2
  4. n ^ 2logn

【问题讨论】:

  • 在你的排序中,需要多少次比较才能从 3 个项目中选出最小的?
  • @DavidZimmerman - 比较的增加被移动的减少所抵消。
  • 我正确理解,当输入数据被分成三部分时,比较的次数增加了,但是递归的次数(深度)减少了。那些。比较的次数由递归的数量(深度)来平衡。因此,无论我们将输入数据分解多少部分,算法的复杂性都保持不变。
  • 仍然是 O(n log n)。只有对数的底会发生变化。所以你得到的是n * log_base_3(n),而不是n * log_base_2(n)。您执行的迭代次数更少,但每次迭代的工作量更多。
  • 请注意,您的语句“执行时间为:nlogn”不正确。该算法的复杂度为 O(n log n),执行时间预计与 n log n 成正比。

标签: algorithm sorting mergesort


【解决方案1】:

在经典的合并排序算法中,大约有 n * log2(n) 比较和尽可能多的元素复制操作,因此时间复杂度为 O(n.log(n)),因为乘法常数是隐式的.

如果不是将数组拆分为 2 部分,而是拆分为 3 部分,对部分执行相同的递归排序并将 3 个排序的切片合并为一个,比较次数增加到大约 2 * n * log3(n) 和元素副本减少到n * log3(n),但两者仍与n * log(n) 成正比。除去乘法常数,您仍然会得到 O(n.log(n)) 的时间复杂度。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-12-08
    • 2013-10-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多