Как найти медиану в двумерном отсортированном массиве?

Допустим, у вас есть матрица чисел, отсортированных как по строкам, так и по столбцам.

Как найти медиану.

Я искал в сети и нашел много ответов, таких как:

Существует алгоритм нахождения медианы двух отсортированных массивов за O(logn) — примените его n раз. Я не думаю, что это имеет смысл.

Или же я получаю некоторые исследовательские работы. Однако проблема не кажется такой уж фантастической.

Может ли кто-нибудь дать мне точный алгоритм?


person user814266    schedule 10.02.2013    source источник
comment
Итак, по сути, у вас есть что-то вроде: ((1, 3, 5), (2, 6, 9), (4, 10, 14)), которое отсортировано как по строкам, так и по столбцам?   -  person aaaaaa123456789    schedule 10.02.2013
comment
Ссылка на "algorithm to find median of two sorted arrays ..."?   -  person Bernhard Barker    schedule 10.02.2013
comment
Я думаю, что вопрос, который вы хотите задать, звучит так: «Дана матрица N и M, в которой отсортирована каждая строка, найдите общую медиану матрицы». Предположим, что N*M нечетно. Примечание. Дополнительная память не допускается.   -  person Achyut Rastogi    schedule 24.12.2016
comment
Возможный дубликат медианы матрицы с отсортированными строками   -  person roottraveller    schedule 30.07.2017


Ответы (1)


Учитывая, что это матрица, отсортированная по строкам и столбцам (m x n), мы можем найти медиану в O (m * n * log (m)), используя Priority Queue.

Псевдокод,

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]
person harun_a    schedule 15.10.2016