【发布时间】:2019-03-13 16:06:58
【问题描述】:
就像任何其他未排序数组的中值选择问题一样,但有额外的限制。我们需要使用提供的子程序/辅助函数 Quart(A,p,r),它可以在线性时间内找到给定子数组中 1/4 的有序项。我们如何使用这个辅助函数来找到一个数组的中位数?
进一步的限制: 1. 您的解决方案必须就地执行(没有新的 可以创建数组)。特别是,一种替代解决方案是 将数组扩展为大小 m 以便 A[n+1, ... ,m] 中的所有条目 = 1 和 m > 2n。在此之后,您将能够解决中位数 原始数组中的问题,只需调用四分位数问题 在扩展数组中。有了进一步的限制,这是不可能的。 2. 在运行算法时,您可以临时更改数组中的元素,例如,SWAP 更改元素。但是,在你的算法结束后,数组中的所有元素都必须与开始时相同(但就像课堂上教授的随机选择算法一样,它们的顺序可能与最初不同)。
由于不允许您创建新数组,这意味着您只能修改少量(恒定)数量的项目。
【问题讨论】:
-
欢迎来到 StackOverflow。目前您的问题无法真正得到回答,因为您没有提供代码或
Quart的详细描述。此外,如果您可以分享您之前的努力(即您的代码),那将是一件好事,这样人们就可以真正知道您到目前为止所做的尝试。请浏览Tour 并阅读On-topic guide,尤其是关于家庭作业以及如何提问的部分,因为这似乎是一个家庭作业问题(“课堂教学”)。问候。 -
"一组数据的中位数是该组中最中间的数。中位数也是该组中间的数。要找到中位数,首先要按顺序排列数据从最小到最大。”因此,根据数组长度是偶数还是奇数,您将选择中间的数字或中间的两个数字,然后将它们的总和除以 2。一口气,您可以将一个(或两个)数字交换为其余的,所以最小的数字在中间的左边,最大的数字在右边。然后,你就可以算算了。