การชักตัวอย่างเรซัฟวาร์

Reservoir sampling เป็นกลุ่มของอัลกอริทึมแบบสุ่ม สำหรับการสุ่มเลือกตัวอย่าง k จากรายการ S ที่มี n รายการ โดยที่ n เป็นจำนวนที่มากหรือไม่ทราบค่า โดยปกติ n มีขนาดใหญ่พอที่ไม่พอดีกับหน่วยความจำหลัก ตัวอย่างเช่นรายการข้อความค้นหาใน Google และ Facebookดังนั้นเราจึงรับอาร์เรย์ขนาดใหญ่ของตัวเลข (เพื่อให้ง่ายขึ้น) และเราจำเป็นต้องเขียนฟังก์ชันที่มีประสิทธิภาพเพื่อสุ่มเลือกหมายเลข k ที่ 1 <= k <= n ให้อาร์เรย์อินพุตเป็น stream[]วิธีง่ายๆคือการสร้างอาร์เรย์ reservoir[] ขนาดสูงสุด k สุ่มเลือกรายการจาก stream[0..n-1] ทีละรายการ หากรายการที่เลือกไม่ได้เลือกไว้ก่อนหน้านี้ แล้วใส่ไว้ใน reservoir[] หากต้องการตรวจสอบว่ามีการเลือกรายการก่อนหน้าหรือไม่ เราจำเป็นต้องค้นหารายการใน reservoir[]ความซับซ้อนของเวลาของขั้นตอนนี้จะเป็น O(k)² อาจมีค่ามากถ้า k มีขนาดใหญ่ นอกจากนี้ยังไม่ได้ผลถ้าอินพุทอยู่ในรูปแบบของสตรีมสามารถแก้ไขได้ในเวลา O(n) โซลูชันนี้เหมาะกับการป้อนข้อมูลในรูปแบบของสตรีม