Изменения

Перейти к: навигация, поиск

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

394 байта добавлено, 21:08, 14 апреля 2015
Варианты решения
Чтобы получить логарифмическую сложность, будем использовать бинарный поиск, который вдвое сокращает область поиска с каждой итерацией. То есть для достижения нужной сложности мы должны на каждой итерации вдвое сокращать круг поиска в каждом из массивов.
Рассмотрим следующую ситуацию: пусть у нас есть элемент <tex>a[i]</tex> из массива <tex>A</tex> и элемент <tex>b[j]</tex> из массива <tex>B</tex> и они связаны неравенством <tex>b[j - 1] < a[i] < b[j]</tex>. Тогда <tex>a[i]</tex> есть <tex>(j + i + 1)</tex>-ый порядковый элемент после слияния массивов. Это объясняется тем, что до <tex>a[i]</tex>-ого элемента идут <tex>(j - 1)</tex> элемент из массива <tex>B</tex>, <tex>i</tex> элементов из массива <tex>A</tex> (включая сам элемент <tex>a[i]</tex>) и так как индексация массивов начинается с нуля, то необходимо прибавить еще <tex>2</tex>. В итоге получаем <tex>(j - 1) + i + 2 = j + i + 1</tex>. Принимая это во внимание, выберем будем выбирать <tex>i</tex> и <tex>j</tex> таким образом, чтобы <tex>j + i + 1 = k</tex>. Подведем итог вышесказанного:# Инвариант <tex>j + i = k - 1</tex># Если <tex>b[j - 1] < a[i] < b[j]</tex>, то <tex>a[i]</tex> и есть <tex>k</tex>-ая порядковая статистика# Если <tex>a[i - 1] < b[j] < a[i]</tex>, то <tex>b[j]</tex> и есть <tex>k</tex>-ая порядковая статистика
Анонимный участник

Навигация