在未排序的数组中查找中位数(仅限于使用查找线性季度元素的子例程)

时间:2019-03-13 16:06:59

标签: arrays algorithm median

与未排序数组的任何其他中位数选择问题一样,但有额外的限制。我们需要使用提供的子例程/辅助函数Quart(A,p,r),该函数在线性时间内查找给定子数组中第1/4的有序项。我们如何使用此辅助函数来找到数组的中位数?

进一步限制: 1.您的解决方案必须就地执行(没有新的 可以创建数组)。特别是,一种替代解决方案是 将数组扩展为大小m,以便A [n + 1,...,m] =中的所有条目 1并且m> 2n。之后,您将能够解决中位数 只需调用四分位问题即可解决原始数组中的问题 在扩展数组中。在进一步的限制下,这是不可能的。 2.在运行算法时,您可以临时更改数组中的元素,例如SWAP更改元素。但是,在算法结束后,数组中的所有元素必须与开始时的元素相同(但就像课堂上讲授的随机选择算法一样,它们的顺序可能与原始顺序不同)。

由于不允许创建新数组,因此,仅允许修改少量(恒定)项。

1 个答案:

答案 0 :(得分:0)

  • 遍历数组并找到最小值和最大值。
  • 致电Quart查找四分位数值
  • 遍历数组,并将(max-min)+1加到四分位数以下的所有值。这会将值的底部四分之一移到顶部
  • 再次调用Quart查找新值的四分位数(将是原始值的中位数)
  • 遍历数组,并从大于最大值的所有值中减去(max-min)+ 1,以使数组返回其原始状态

您可能需要一些其他规则来处理特殊情况,例如如果有多个值等于四分位数。

相关问题