왼쪽과 오른쪽의 중앙값과 요소를 효율적으로 선택


14

우리가 설정해야한다고 가정 의 코더.에스={1,2,,,}

각 코더는 등급 과 금메달 수 를 가지고 있으며 지금까지 이겼습니다.E i아르 자형나는이자형나는

소프트웨어 회사는 응용 프로그램을 개발하기 위해 정확히 3 개의 코더를 고용하려고합니다.

세 명의 코더를 고용하기 위해 다음 전략을 개발했습니다.

  1. 먼저 코더를 등급의 오름차순과 금메달의 내림차순으로 정렬합니다.
  2. 이 정렬 된 목록에서 중간 코더 중 3 개를 선택합니다. 예를 들어, 배치리스트이면 가 선택 코더.( a 2 , a 3 , a 1 )(5,2,,1,4)(2,,1)

이제이 작업을위한 프로그램을 작성하여 회사를 도와야합니다.

입력:

첫 번째 줄에는 , 즉 코더 수가 포함 됩니다.

그런 다음 두 번째 줄에는 번째 코더 의 등급 가 포함 됩니다. 내가아르 자형나는나는

세 번째 줄에는 번째 코더가 포장 한 금메달 수가 포함 됩니다.나는

산출:

회사가 선택할 3 개의 코더가 얻은 금메달의 합계를 포함하는 한 줄만 표시하십시오.


3
따라서 더 높은 등급의 코더는 항상 더 적은 메달을 얻습니다 ?? 그렇지 않은 경우 실제로 어떤 순서를 사용하여 정렬합니까?
JeffE

답변:


16

케이/2,/21,/2+1


6
원하는 경우 선택 알고리즘을 한 번 실행하여 중앙값을 찾은 다음 오른쪽 및 왼쪽 파티션에서 최소 및 최대 파티션을 각각 한 번에 찾을 수 있습니다.
Zach Langley

@Sid @ Zach Langley 안녕하세요. Pseudo Code를 제공해 주시겠습니까? wiki paedia를 통해 갔지만 이해하기가 다소 어려울 수 있습니다.
Jack

@Jack Quicksort의 작동 방식에 익숙하십니까? 무작위 선택 알고리즘은 각 피벗의 한쪽에서만 반복되는 것을 제외하고는 본질적으로 동일합니다.
Zach Langley

6
@ 잭 : Sid의 답변에 링크 된 선택 알고리즘에 대한 Wikipedia 기사에는 의사 코드가 포함되어 있습니다. 구글도 작동합니다.
JeffE

@Sid :: 위키 알고리즘 (파티션 기반 일반 선택 알고리즘)을 읽었습니다. k = n / 2, k = n / 2-1, k / 2를 사용하여 select 함수를 세 번 호출해야합니까? 함수 select를 호출하는 동안 왼쪽, 오른쪽의 값. 파티션 기능에서 파티션 인덱스의 값은 무엇입니까?
Jack
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.