무작위 선택


14

무작위 선택 알고리즘은 다음과 같습니다.

입력 :는 어레이 의 N 숫자 (편의상 구분) 및 다수의 (K) [ N ]Ank[n]

출력 : 다음은 "순위 의 요소" (즉, 위치에있는 한 K 경우 A는 분류했다)케이케이

방법:

  • 하나의 요소가 있으면 반환하십시오.
  • 요소 ( "피벗")를 무작위로 균일하게 선택하십시오.
  • 세트 R = { a A : a > p }L={a:<}R={aA:a>p}
  • 경우 이면 L 의 순위 k 요소를 반환합니다 .||케이케이
  • 그렇지 않으면, 순위 반환 R의 원소케이||아르 자형

나는 다음과 같은 질문을 받았다.

그 가정 는 중간을 찾고 있습니다, 그래서, 그리고하자 α ( 1 / 2 , 1 ) 일정합니다. 첫 번째 재귀 호출에서 중간 값을 포함하는 집합의 크기가 최대 α n ? 일 확률은 얼마입니까?케이=/2α(1/2,1)α

답은 이며 "선택된 피벗 은 원래 배열의 1 - αα 사이 여야합니다."라는 근거가 있습니다.2α11αα

왜? 마찬가지로 피봇으로서 선택되어 어떠한 소자의 절반 이상 원래 어느 요소보다 크거나 작다. 분할 된 하위 배열의 요소가 항상 피벗보다 작기 때문에 중간 값은 항상 더 큰 하위 배열에 있습니다.α(0.5,1)

피벗이 원래 배열의 절반 (반쪽 미만)에있는 경우 중간 값이 발견되면 배열의 중간 위치에 있어야하기 때문에 중간 값은 반드시 두 번째 큰 절반에있게됩니다. 피봇 앞의 모든 것은 위에서 언급 한 것처럼 더 작습니다.

피벗이 원래 배열의 두 번째 절반 (요소의 절반 이상)에있는 경우 같은 이유로 중간 값은 반드시 첫 번째 절반이 더 커집니다.

예:

34 5 8 7 9 1 6 10

중앙값은 5입니다.

선택한 피벗이 2라고 가정하면 첫 번째 반복 후에는 다음과 같이됩니다.

1 2 .... 더 큰 부분 ....

12첫 번째 반복 한 후 교체된다. 숫자 5 (중앙값)는 여전히 전반 절반에 있습니다 (피벗 2로 진행). 요점은, 중앙값은 항상 더 큰 절반에 있다는 것입니다. 어떻게 작은 하위 배열에 머무를 수 있습니까?


우리는 강의에 앉아 있지 않았으므로 방법을 설명하십시오.
Raphael

.5

결정적 방법이 아닌 무작위 방법을 사용한 선택 알고리즘입니다.
Amumu

요소를 무작위로 선택하는 방법에는 여러 가지가 있습니다.
Raphael

2
@ Amumu : 알고리즘을 설명하기 위해 편집했습니다. 이와 같은 포럼에서 모든 사람이 당신이 무슨 말을하는지 알지 못하며, 분석하기 쉬운 선택에 대한 매우 다른 무작위 접근 방식이 있습니다.
Louis

답변:


12

α(1α)(1α)α>1/222α12+2α=2α1


답변 해주셔서 감사합니다. 나는 아직도 몇 가지 불분명하다. 그렇다면 α> 1/2는 분리 세트와 어떤 관련이 있습니까? 하위 배열 크기에 관계없이 항상이 방법으로 분리 세트를 가질 때 생각했습니다.
Amumu

1α<1/2(1α)<(1α)

마지막 한가지 : 나쁜 / 좋은 피벗은 이것과 어떤 관련이 있습니까? 내가 아는 한, 좋은 피벗은 일반적으로 25-75 범위 (원래 배열을 25 % -75 %로 나눕니다)이며 나쁜 것은 그 범위를 벗어 났으며 더 나쁜 것은 일반적으로 원래의 시작 또는 끝에 있습니다 정렬. 하지만 이것은?
Amumu

2
αα=/4영형()α
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.