【问题标题】:What would be the recurrence relationship for this algorithm?这个算法的递归关系是什么?
【发布时间】:2019-03-31 19:47:49
【问题描述】:

我得到了这个算法,它计算一个数组的中位数并分割它周围的其他项目。

它将所有小于中位数的元素放在集合 A1 中,所有等于中位数的元素放在 A2 中,所有大于中位数的元素放在 A3 中。如果 A1 大于 1,它会递归地进入它,A3 也会发生同样的情况。它在复制 A 中的 A1、A2 和 A3 的串联后终止。

我知道它与 Quickselect 非常相似,但我不知道如何进行才能确定最坏情况下的时间复杂度。

我所知道的是,在快速排序中,时间复杂度为 T(n) = n -1 + T(a) + T(n -a-1),其中 n - 1 用于分区,T(a)是第一部分的递归调用,t(n-a-1) 是最后一部分的递归调用。在这种情况下,当枢轴始终是数组中最大或最小的项目时,就会发生最坏的情况。

但是现在,既然我们以中位数作为支点,那么最坏的情况会是什么?

【问题讨论】:

  • 你将使用哪种算法计算中位数?
  • 使用中值作为主元会导致两侧分区不超过数组的一半。但是,我们没有定义找到中位数的例程,这会将未知项引入所寻求的关系中......
  • @trincot 这就是问题所在!伪代码只是声明:“找到 A 中的中位数 x”
  • 求中位数有一个O(nlogn)的时间复杂度,这实际上是一个好的排序算法的时间复杂度,所以不是一个很好用的函数在排序算法中。

标签: algorithm sorting partitioning median


【解决方案1】:

您可以使用 Big 5 算法,它会给您一个近似的中位数。如果你使用它作为快速排序的枢纽,最坏情况的复杂性将是 O(n log n) 而不是 O(n^2),因为我们每次都进行相等的除法,而不是当我们不等除时的最坏情况一个桶有一个元素,另一个桶有 n - 1 个元素。

另一方面,这种最坏的情况不太可能发生。使用 Big 5 中值算法找到枢轴点会产生相当大的开销,因此在实践中,它通过选择随机枢轴来表现更好。但是如果你想每次都找到中位数,最坏的情况是 O(n logn)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-28
    相关资源
    最近更新 更多