【发布时间】: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