Ефективний вибір медіани та елементів ліворуч та праворуч


14

Припустимо , у нас є безліч з кодеров.S={a1,a2,a3,,aN}N

Кожен має рейтинг та кількість золотих медалей , які вони вигравали досі.RiEi

Програмна компанія хоче найняти рівно три кодери для розробки програми.

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

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

Тепер ми маємо допомогти компанії, написавши програму для цього завдання.

Вхід:

Перший рядок містить , тобто кількість кодерів.N

Тоді другий рядок містить рейтинги з - й кодер.Rii

Третій рядок містить кількість золотих медалей, упакованих м кодером.i

Вихід:

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


3
Тож кодери вищого рейтингу завжди виграють менше медалей ?? Якщо ні, то яке замовлення ви фактично використовуєте для сортування?
JeffE

Відповіді:


16

Це проблема вибору го найменшого елемента зі списку, розв’язаного класом алгоритмів під назвою Алгоритми виділення . Існують детерміновані алгоритми лінійного вибору часу, тому вашу проблему можна вирішити за лінійним часом, вибравши n / 2 , n / 2 - 1 , n / 2 + 1- й найменший елемент з оригінального несортованого списку.kn/2,n/21,n/2+1


6
Якщо ви хочете, ви можете запустити алгоритм вибору один раз, щоб знайти медіану, а потім знайти мінімум та максимум у правому та лівому розділах відповідно одним махом.
Зак Ленглі

@Sid @ Zach Ленглі Привіт, будь ласка, надайте, будь ласка, Псевдокод.
Джек

@Jack Ви знайомі з тим, як працює кікспорт? Алгоритм рандомізованого вибору по суті однаковий, за винятком того, що він повторюється лише на одній стороні кожного стрижня.
Зак Ленглі

6
@Jack: Стаття Вікіпедії про алгоритми вибору (пов'язана у відповіді Сіда) містить псевдокод. Google також працює.
JeffE

@Sid :: Я читаю алгоритм wiki (Загальний алгоритм вибору на основі розділів). Треба тричі викликати функцію вибору з k = n / 2, k = n / 2-1, k / 2.Также, що буде значення ліворуч, праворуч під час виклику функції select.Также у функції розділу, який буде значення індексу розділів.
Джек
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.