문제

작업

$ d $ 에서

에서

$ N $ 샘플을 사용하여이를위한 간단한 알고리즘은 다음과 같습니다.

samples = [D.sample() for i in range(n)] # generate n samples from D
sort(samples)
return samples[n/2]
.

그러나 $ o (n) $ 공간 보다 적은 알고리즘을 찾고 있습니다.

아이디어

이 알고리즘을 살펴 보았습니다.

$ o (n) $ 공간을 사용하여 내 문제를 해결할 수있는 다른 알고리즘이 있습니까? 특히, 에서 샘플 일괄 처리를 생성하여 $ o (m) $ 공간을 사용하는 알고리즘이있을 수 있습니다. $ d $ 크기 $ m $ ...

세부 사항

  • 이상적으로, 분석 (성공 확률, 예상 런타임 등)이 포함 된 알고리즘에 대한 참조를 찾고 있습니다.
  • 실제로 $ d $ $ p $ -the 백분위 수의 알고리즘이 필요합니다. 주어진 $ P $ 에 대해서는 대부분의 중앙값을 찾는 알고리즘을 일반화 할 수 있기를 바랍니다.
  • 위에 표시된 간단한 알고리즘으로서 동일한 정확도를 얻고 싶습니다. 이를 달성하는 한 가지 방법은 출력 분포가 샘플 알고리즘과 동일한 알고리즘을 사용하는 것입니다 (그러나 드문 경우가 아닐 수도 있음)
도움이 되었습니까?

해결책

확실히 조금 더 많은 실행 시간을 사용 하여이 작업을 수행 할 수 있습니다. 다음은 개념적으로 간단한 접근 방식이며, 최적이 아닐 수도 있지만 시작할 수 있으며 아마도 꽤 좋을 것입니다 :

바이너리 검색을 사용하여 대략적인 중앙값 $ m $ 을 찾습니다. 후보자 $ M $ 이 너무 크거나 작 으면 어떻게 알 수 있습니까? 샘플 $ n '$ 샘플에서 샘플이 $ \ gem $ $ n '/ 2 $ 과 비교하십시오. 이것은 $ o (1) $ 공간으로 수행 할 수 있습니다.

그런 다음 핵심 질문은 다음과 같습니다. $ n '$ 을 선택하려면 오류 확률을 제어합니까? 간단한 접근 방식은 $ N '$ 보다 $ N $ 보다 충분히 크게 더 큽니다. 바이너리 검색의 각 반복의 오류는 $ n $ 을 사용할 때 오류 확률보다 적게 $ T $ 이 작습니다. $ T $ 은 원하는 정확도를 달성하는 데 필요한 바이너리 검색의 반복 수의 샘플입니다. 그런 다음 노동 조합 결합은 이것이 정확도 조건을 충족시킬 수 있도록합니다.

불행히도, 귀하의 정확성 조건은 샘플 중앙값의 정확도가 임의로 나쁠 수 있기 때문에 데이터 분포에 대해 알 수 없을 때 귀하의 정확성 조건은 조금 일하기가 약간 힘들어집니다. 예를 들어 확률 $ (1- ε $) / 2 $ 을 사용하여 $ 0 $ 을 출력하는 분포를 고려하십시오. 확률 $ 100 $ $ 100 $ $ 100 $ / span>. 그런 다음 샘플 중앙값은 0 또는 100이 될 가능성이 훨씬 큼 0 또는 100이지만 배포 중앙값은 100이고, 따라서 샘플 중앙값의 평균 오차는 약 50입니다 ( $ \ gg 1 / \ 엡실론 ^ 2 $ 샘플을 그리는 것이 아닌 한. 그것은 특히 불쾌한 유통이며, 그것은 일하기가 어려울 것입니다. 그러나 표준 편차 $ \ sigma $ , $ n $ 샘플은 대략 $ 1.25 \ sigma / sqrt {n} $ 입니다. 따라서 위의 알고리즘은 $ T \ Appl \ LG (\ sqrt {n} /1.25) $ 을 설정하고 $ n '\ 약 NT ^ 2 $ .

그것은 간단한 접근법입니다. 당신은 아마 더 잘할 수 있습니다. 중앙값을 계산하기위한 스트리밍 알고리즘을 찾고 싶을 수도 있습니다. 분배에서 무제한의 샘플 수를 주어주는 문제가 있지만 공간이 제한적이지만 우리가 얻을 수있는 최선의 견적은 무엇입니까? 중앙값? 예를 들어, 여기서 하나의 간단한 알고리즘이 있습니다. 첫 번째 층은 반복적으로 3 개의 샘플을 취하여 그 세 가지의 중앙값을 출력합니다. 제 2 층은 반복적으로 제 1 층으로부터 3 개의 숫자를 취하여 그 3의 중앙값을 출력한다. 등등. 로그 수있는 수의 레이어 수를 마친 후에는 중간에 합리적인 근사치를 얻습니다. 이 주제에 대해 전체 문헌이 있습니다. 그리고 당신은 더 많은 것을 찾을 수 있어야합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 cs.stackexchange
scroll top