Saya perlu menghitung kuartil (Q1, median dan Q3) secara real-time pada set besar data tanpa menyimpan pengamatan. Saya pertama kali mencoba algoritma P square (Jain / Chlamtac) tapi saya tidak puas dengan itu (penggunaan cpu terlalu banyak dan tidak yakin dengan presisi setidaknya pada dataset saya).
Saya menggunakan sekarang algoritma FAME ( Feldman / Shavitt ) untuk memperkirakan median dengan cepat dan mencoba untuk menurunkan algoritma untuk menghitung juga Q1 dan 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
Untuk melanjutkan, itu hanya menggunakan median M yang diperoleh dengan cepat untuk membagi kumpulan data menjadi dua dan kemudian menggunakan kembali algoritma yang sama untuk Q1 dan Q3.
Ini tampaknya berfungsi entah bagaimana tetapi saya tidak dapat menunjukkan (saya bukan ahli matematika). Apakah itu cacat? Saya akan sangat menghargai saran atau teknik lain yang sesuai dengan masalah.
Terima kasih banyak atas bantuan Anda !
==== EDIT =====
Bagi mereka yang tertarik dengan pertanyaan seperti itu, setelah beberapa minggu, saya akhirnya berakhir hanya dengan menggunakan Reservoir Sampling dengan daftar nilai 100 dan itu memberikan hasil yang sangat memuaskan (bagi saya).