무작위 선택 알고리즘은 다음과 같습니다.
입력 :는 어레이 의 N 숫자 (편의상 구분) 및 다수의 (K) ∈ [ N ]
출력 : 다음은 "순위 의 요소" (즉, 위치에있는 한 K 경우 A는 분류했다)
방법:
- 하나의 요소가 있으면 반환하십시오.
- 요소 ( "피벗")를 무작위로 균일하게 선택하십시오.
- 세트 및 R = { a ∈ A : a > p }
- 경우 이면 L 의 순위 k 요소를 반환합니다 .
- 그렇지 않으면, 순위 반환 R의 원소
나는 다음과 같은 질문을 받았다.
그 가정 는 중간을 찾고 있습니다, 그래서, 그리고하자 α ∈ ( 1 / 2 , 1 ) 일정합니다. 첫 번째 재귀 호출에서 중간 값을 포함하는 집합의 크기가 최대 α n ? 일 확률은 얼마입니까?
답은 이며 "선택된 피벗 은 원래 배열의 1 - α 와 α 사이 여야합니다."라는 근거가 있습니다.
왜? 마찬가지로 피봇으로서 선택되어 어떠한 소자의 절반 이상 원래 어느 요소보다 크거나 작다. 분할 된 하위 배열의 요소가 항상 피벗보다 작기 때문에 중간 값은 항상 더 큰 하위 배열에 있습니다.
피벗이 원래 배열의 절반 (반쪽 미만)에있는 경우 중간 값이 발견되면 배열의 중간 위치에 있어야하기 때문에 중간 값은 반드시 두 번째 큰 절반에있게됩니다. 피봇 앞의 모든 것은 위에서 언급 한 것처럼 더 작습니다.
피벗이 원래 배열의 두 번째 절반 (요소의 절반 이상)에있는 경우 같은 이유로 중간 값은 반드시 첫 번째 절반이 더 커집니다.
예:
34 5 8 7 9 1 6 10
중앙값은 5입니다.
선택한 피벗이 2라고 가정하면 첫 번째 반복 후에는 다음과 같이됩니다.
1 2 .... 더 큰 부분 ....
만 1
과 2
첫 번째 반복 한 후 교체된다. 숫자 5 (중앙값)는 여전히 전반 절반에 있습니다 (피벗 2로 진행). 요점은, 중앙값은 항상 더 큰 절반에 있다는 것입니다. 어떻게 작은 하위 배열에 머무를 수 있습니까?