【发布时间】:2015-02-11 03:31:01
【问题描述】:
给定一个未排序的数组 A[1....N],试图找到 A 中与 A 的中位数接近的 K 个数。我可以在线性时间 O(N) 内找到 A 的中位数.我也可以在线性时间内找到 K 吗?例如。 A = [9,2,7,3,8,1,12},Median(A) = 7,关闭值为 7 的 3 个项目是 {7,8,9}。
【问题讨论】:
给定一个未排序的数组 A[1....N],试图找到 A 中与 A 的中位数接近的 K 个数。我可以在线性时间 O(N) 内找到 A 的中位数.我也可以在线性时间内找到 K 吗?例如。 A = [9,2,7,3,8,1,12},Median(A) = 7,关闭值为 7 的 3 个项目是 {7,8,9}。
【问题讨论】:
我想你想要一个selection algorithm,比如Introselect。如果你碰巧用 c++ 实现,你可以使用非常有用的std::nth_element
它将重新排列元素序列,使得给定点之前的所有元素都小于后面的元素。这样做两次,你就得到了最接近均值的 K 个元素。
【讨论】: