如何在2D排序数组中找到中值?

时间:2013-02-10 10:39:15

标签: matrix median sorted

假设您有一个数字矩阵,这些数字按行和列排序。

你如何找到中位数。

我在网上搜索并找到了很多答案,如:

有一种算法可以在O(logn)中找到两个排序数组的中位数 - 应用n次。 我认为这没有任何意义。

或者我得到一些研究论文。这个问题似乎并不像爵士那样。

有人能给我一个精确的算法吗?

2 个答案:

答案 0 :(得分:0)

鉴于它是行方式和列方式排序矩阵(m x n),我们可以使用优先级队列找到O(m * n * log(m))的中位数。

伪代码是,

PriorityQueue<Pair<int, int>> pq(m); 
//Pair<int, int> is the coordinate of the matrix element
for i <- 0 to m
    pq.add(Pair(i, 0))
count <- 0
k = (m*n)/2
Pair<int, int> xy
while count < k:
    count++
    xy <- pq.poll()
    x <- xy.first
    y <- xy.second
    if y+1 < n:
        pq.add(Pair(x, y+1))
return matrix[xy.first][xy.second]

答案 1 :(得分:-2)

使用循环将2d数组复制到1d数组,然后对其进行排序,然后在2d数组中找到中位数...它只找到行或列的中位数而不是我认为...这是我认为它可能是错误的或者对...... !!