Эффективный выбор медианы и элементов слева и справа

14

Предположим, у нас есть множество из N кодеров.Sзнак равно{a1,a2,a3,...,aN}N

Каждый кодер имеет рейтинг и количество золотых медалей E i , которые они выиграли до сих пор.ряЕя

Компания-разработчик программного обеспечения хочет нанять ровно трех программистов для разработки приложения.

Для найма трех кодеров они разработали следующую стратегию:

  1. Сначала они размещают кодеров в порядке возрастания рейтингов и в порядке убывания золотых медалей.
  2. Из этого упорядоченного списка они выбирают три средних кодера. Например, если упорядоченным списком является они выбирают ( a 2 , a 3 , a 1 ) кодеры.(a5,a2,a3,a1,a4)(a2,a3,a1)

Теперь мы должны помочь компании, написав программу для этой задачи.

Входные данные:

Первая строка содержит N , то есть количество кодеров.

Тогда вторая строка содержит рейтинги of iряя - й кодер.

Третья строка содержит количество золотых медалей в мешки по я го кодера.

Выход:

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

разъем
источник
3
Так что кодеры с более высоким рейтингом всегда выигрывают меньше медалей? Если нет, то какой порядок вы используете для сортировки?
Джефф

Ответы:

16

КN/2,N/2-1,N/2+1

выбирать
источник
6
Если вы хотите, вы можете запустить алгоритм выбора один раз, чтобы найти медиану, а затем найти минимум и максимум в правом и левом разделах соответственно одним махом.
Зак Лэнгли
@Sid @ Зак Лэнгли. Привет. Можете ли вы предоставить псевдокод. Я прошел через вики-педию, но немного сложнее понять. Так что вы можете предоставить псевдокод Спасибо большое!
Джек,
@ Джек, ты знаком с тем, как работает быстрая сортировка? Алгоритм рандомизированного выбора по сути тот же, за исключением того, что он повторяется только на одной стороне каждого центра.
Зак Лэнгли
6
@Jack: статья в википедии об алгоритмах выбора (ссылка на которую содержится в ответе Сида) содержит псевдокод. Гугл тоже работает.
Джефф
@Sid :: Я прочитал вики-алгоритм (общий алгоритм выбора на основе разделов). Нужно ли трижды вызывать функцию выбора с k = n / 2, k = n / 2-1, k / 2. Также что будет значение left, right при вызове функции select. Также в функции section, что будет значением индекса Index.
Джек,