Поиск k-ой порядковой статистики в двух массивах — различия между версиями
Анна (обсуждение | вклад) (→Наивное решение за O(n + m)) |
Анна (обсуждение | вклад) (→Варианты решения) |
||
Строка 4: | Строка 4: | ||
=== Наивное решение за <tex>O(n + m)</tex> === | === Наивное решение за <tex>O(n + m)</tex> === | ||
Сольем два массива и просто возьмем элемент с индексом <tex>k</tex>. Сливание будет выполнено за O(n + m). | Сольем два массива и просто возьмем элемент с индексом <tex>k</tex>. Сливание будет выполнено за O(n + m). | ||
+ | === Чуть менее наивное решение за <tex>O(k)</tex> === | ||
+ | Будем использовать два указателя, с помощью которых сможем обойти массивы не сливая их. Поставим указатели на начало каждого из массивов. Будем увеличивать на единицу тот из них, который указывает на меньший элемент. После <tex>k</tex>-ого добавления сравним элементы, на которых стоят указатели. Меньший из них и будет ответом. Таким образом мы получим <tex>k</tex>-ый элемент за <tex>O(k)</tex> шагов. |
Версия 18:18, 13 апреля 2015
Содержание
Постановка задачи
Пусть даны два отсортированных массива
и размерами и соответственно. Требуется найти -ый порядковый элемент после их слияния. Будем считать, что все элементы в массивах различны.Варианты решения
Наивное решение за
Сольем два массива и просто возьмем элемент с индексом
. Сливание будет выполнено за O(n + m).Чуть менее наивное решение за
Будем использовать два указателя, с помощью которых сможем обойти массивы не сливая их. Поставим указатели на начало каждого из массивов. Будем увеличивать на единицу тот из них, который указывает на меньший элемент. После
-ого добавления сравним элементы, на которых стоят указатели. Меньший из них и будет ответом. Таким образом мы получим -ый элемент за шагов.