Поиск k-ой порядковой статистики в двух массивах

Материал из Викиконспекты
Версия от 18:19, 13 апреля 2015; Анна (обсуждение | вклад) (Варианты решения)
Перейти к: навигация, поиск

Постановка задачи

Пусть даны два отсортированных массива [math]A[/math] и [math]B[/math] размерами [math]n[/math] и [math]m[/math] соответственно. Требуется найти [math]k[/math]-ый порядковый элемент после их слияния. Будем считать, что все элементы в массивах различны.

Варианты решения

Наивное решение

Сольем два массива и просто возьмем элемент с индексом [math]k[/math]. Сливание будет выполнено за [math]O(n + m)[/math].

Чуть менее наивное решение

Будем использовать два указателя, с помощью которых сможем обойти массивы не сливая их. Поставим указатели на начало каждого из массивов. Будем увеличивать на единицу тот из них, который указывает на меньший элемент. После [math]k[/math]-ого добавления сравним элементы, на которых стоят указатели. Меньший из них и будет ответом. Таким образом мы получим [math]k[/math]-ый элемент за [math]O(k)[/math] шагов.