무작위 선택


14

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

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

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

방법:

  • 하나의 요소가 있으면 반환하십시오.ㅏ
  • 요소 ( "피벗")를 무작위로 균일하게 선택하십시오.피
  • 세트 및 R = { a ∈ A : a > p }L={a∈ㅏ:ㅏ<피}R={a∈A: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 .... 더 큰 부분 ....

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


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

.5

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

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

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

답변:


12

엔α엔(1−α)엔(1−α)엔α>1/22−2α1−2+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.