ฉันจำเป็นต้องคำนวณควอไทล์ (Q1, มัธยฐานและ Q3) แบบเรียลไทม์กับชุดข้อมูลขนาดใหญ่โดยไม่ต้องจัดเก็บข้อสังเกต ฉันลองใช้อัลกอริธึม P square (Jain / Chlamtac) ครั้งแรก แต่ฉันไม่พอใจกับมัน (ใช้ซีพียูมากเกินไปและไม่เชื่อในความแม่นยำของชุดข้อมูลของฉันอย่างน้อย)
ตอนนี้ฉันใช้อัลกอริธึม 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 ที่ได้รับทันทีเพื่อแบ่งชุดข้อมูลในสองชุดจากนั้นนำอัลกอริทึมเดิมมาใช้ซ้ำสำหรับทั้งไตรมาสที่ 1 และไตรมาสที่ 3
สิ่งนี้ดูเหมือนจะใช้ได้ แต่ฉันไม่สามารถสาธิตได้ (ฉันไม่ใช่นักคณิตศาสตร์) มันมีข้อบกพร่องหรือไม่ ฉันขอขอบคุณข้อเสนอแนะหรือเทคนิคอื่น ๆ ในที่สุดเหมาะสมปัญหา
ขอบคุณมากสำหรับความช่วยเหลือของคุณ !
==== แก้ไข =====
สำหรับผู้ที่มีความสนใจในคำถามดังกล่าวหลังจากนั้นไม่กี่สัปดาห์ฉันก็สิ้นสุดลงเพียงแค่ใช้การสุ่มตัวอย่างอ่างเก็บน้ำที่มีค่า 100 revervoir และให้ผลลัพธ์ที่น่าพอใจมาก (สำหรับฉัน)