Поиск медианы в несортированном массиве (ограничено использованием подпрограммы, которая находит квартальный элемент в линейном) - PullRequest
0 голосов
/ 13 марта 2019

Как и любая другая проблема выбора медианы для несортированного массива, но с дополнительным ограничением. нам необходимо использовать предоставленную подпрограмму / вспомогательную функцию Quart (A, p, r), которая находит 1/4 упорядоченного элемента в данном подрешетке за линейное время. Как мы можем использовать эту вспомогательную функцию, чтобы найти медиану массива?

Дальнейшее ограничение: 1. Ваше решение должно быть выполнено на месте (не новое массив может быть создан). В частности, одним из альтернативных решений будет расширить массив до размера m, чтобы все записи в A [n + 1, ..., m] = 1 и m> 2n. После этого вы сможете решить медиану проблема в исходном массиве с одним вызовом квартили в расширенном массиве. С дальнейшими ограничениями это невозможно. 2. во время работы алгоритма вы можете временно изменять элементы в массиве, например, SWAP меняет элементы. Но после завершения вашего алгоритма все элементы в массиве должны быть такими же, какими они были в начале (но так же, как в алгоритме рандомизированного выбора, который преподается в классе, они могут быть в другом порядке, чем они были изначально).

Поскольку вам не разрешено создавать новые массивы, это означает, что вы можете изменять только небольшое (постоянное) количество элементов.

1 Ответ

0 голосов
/ 14 марта 2019
  • Пройдите через массив и найдите минимальное и максимальное значения.
  • Позвоните в Quart, чтобы найти квартиль
  • Выполните итерацию по массиву и добавьте (max - min) + 1 ко всем значениям ниже квартиля. Это переместит нижнюю четверть значений в верх
  • Вызовите Quart снова, чтобы найти квартиль новых значений (который будет медианой исходных значений)
  • Выполните итерацию по массиву и вычтите (max - min) + 1 из всех значений, превышающих max, чтобы вернуть массив в исходное состояние

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...