Нахождение k-го наименьшего числа из n отсортированных массивов

Итак, у вас есть n отсортированных массивов (не обязательно одинаковой длины), и вы должны вернуть k-й наименьший элемент в объединенном массиве (т.е. объединенном массиве, сформированном путем слияния всех n отсортированных массивов)

Я пробовал этот и другие варианты уже довольно давно, и до сих пор я чувствую себя комфортно только в случае, когда есть два массива одинаковой длины, оба отсортированы, и нужно вернуть медиану из этих двух. Это имеет логарифмическую временную сложность.

После этого я попытался обобщить ее до нахождения k-го наименьшего среди двух отсортированных массивов. Вот вопрос на SO. Даже здесь приведенное решение не является для меня очевидным. Но даже если мне каким-то образом удастся убедить себя в этом решении, мне все равно интересно, как решить абсолютно общий случай (который и является моим вопросом)

Может ли кто-нибудь объяснить мне пошаговое решение (которое, опять же по моему мнению, должно занимать логарифмическое время, т.е. O( log(n1) + log(n2) ... + log(nN), где n1, n2...nN - длины n массивов), которая начинается с более конкретных случаев и переходит к более общему?

Я знаю, что подобные вопросы для более конкретных случаев есть во всем интернете, но я не нашел убедительного и ясного ответа.

Вот ссылка на вопрос (и ответ на него) на SO, который касается 5 отсортированных массивов и нахождения медианы объединенного массива. Ответ слишком сложен, чтобы я мог его обобщить.

Приветствуются даже чистые подходы для более специфических случаев (как я упоминал в посте).

PS: Как вы думаете, можно ли это обобщить на случай несортированных массивов?

PPS: Это не домашняя задача, я просто готовлюсь к интервью.

23
задан Community 23 May 2017 в 10:30
поделиться