2013-02-10 137 views
1

假设你有一个数字矩阵,这些数字在行和列之间排序。如何在二维排序数组中找到中值?例如

你怎么找到的中位数。

我搜索了网,发现有很多喜欢的答案:

有一个算法来找出在O(LOGN)两个排序阵列中位数 - 应用此n次。 我不认为这是有道理的。

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

谁能给我一个准确的算法?

+0

所以基本上必须是这样的:((1,3,5),(2,6,9),(4,10,14)),即排序行列式还是列式式? – aaaaaa123456789 2013-02-10 10:41:38

+0

链接到''算法找到两个排序数组的中位数......“? – Dukeling 2013-02-10 10:50:35

+0

我想你想问的问题是'给定一个N个交叉M矩阵,其中每一行都排序,找到矩阵的整体中值。假设N * M是奇数。注意:不允许有额外的内存。' – 2016-12-24 13:16:19

回答

-1

复制二维数组一维数组使用循环,然后进行排序,然后找到中位数...二维阵列发现的唯一的行或列中值不统一,我认为...多数民众赞成我看来,这可能是错误的或者正确的...... !!

0

鉴于这是一个明智的行和列进行排序明智矩阵(m×n个),我们可以发现使用优先级队列在澳中位数(M * N *日志(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]