관측 값을 저장하지 않고 많은 데이터 세트에서 사 분위수 (Q1, 중앙값 및 Q3)를 실시간으로 계산해야합니다. 나는 먼저 P 제곱 알고리즘 (Jain / Chlamtac)을 시도했지만 그것에 만족하지 못했습니다 (약간의 CPU 사용량과 적어도 내 데이터 세트의 정밀도에 대해서는 확신하지 못했습니다).
나는 즉시 중간 값을 추정하기 위해 FAME 알고리즘 ( Feldman / Shavitt )을 사용하고 Q1과 Q3을 계산하기 위해 알고리즘을 유도하려고 시도합니다.
M = Q1 = Q3 = first data value
step =step_Q1 = step_Q3 = a small value
for each new data :
# update median M
if M > data:
M = M - step
elif M < data:
M = M + step
if abs(data-M) < step:
step = step /2
# estimate Q1 using M
if data < M:
if Q1 > data:
Q1 = Q1 - step_Q1
elif Q1 < data:
Q1 = Q1 + step_Q1
if abs(data - Q1) < step_Q1:
step_Q1 = step_Q1/2
# estimate Q3 using M
elif data > M:
if Q3 > data:
Q3 = Q3 - step_Q3
elif Q3 < data:
Q3 = Q3 + step_Q3
if abs(data-Q3) < step_Q3:
step_Q3 = step_Q3 /2
다시 시작하기 위해, 간단히 얻은 중간 값 M을 사용하여 데이터 세트를 2 개로 나누고 Q1과 Q3에 동일한 알고리즘을 재사용합니다.
이것은 어떻게 든 작동하는 것처럼 보이지만 나는 증명할 수 없습니다 (수학자가 아닙니다). 그것은 엷은가? 문제에 맞는 제안이나 다른 기술이 있으면 감사하겠습니다.
당신의 도움을 주셔서 대단히 감사합니다 !
==== 편집 =====
그러한 질문에 관심이있는 사람들을 위해, 몇 주 후에 마침내 100 값의 잔향과 함께 저수지 샘플링을 사용하여 매우 만족스러운 결과를 얻었습니다 (나에게).