【发布时间】:2012-06-11 10:39:01
【问题描述】:
那些阅读过我之前的问题的人都知道我在理解和实现快速排序和快速选择以及其他一些基本算法方面所做的工作。
快速选择用于计算未排序列表中的第k个最小元素,这个概念也可以用于查找未排序列表中的中位数。
这一次,我需要帮助设计一种有效的技术来计算运行中位数,因为 quickselect 不是一个好的选择,因为它需要在每次列表更改时重新计算。因为 quickselect 每次都必须重新启动,它不能利用之前完成的计算,所以我正在寻找一种不同的算法,它相似(可能)但在运行中位数方面更有效。
【问题讨论】:
-
这可以通过使用快速排序算法中的分区在线性时间内完成,但时间最差为 n^2。选择集合中的随机点作为枢轴并移动其他元素,使小于枢轴的元素在左侧,大于或等于的元素在右侧。如果枢轴在中间,则为中值,如果不是,则转到具有中值的块(较大的块)。重复。另一种保证线性时间的算法,它是 CLRS 中描述的中位数的中位数,我也相信在维基百科上。查一下。