“外存优先队列按键选择元素并以块传输计费,既不保持到达顺序,也不能用内存队列的常数操作描述。蓄水池抽样只需顺序读一次未知长度数据流,却维护的是固定大小均匀样本,不是等待出队的全部元素。并发队列…”
形式陈述 ​
接口与更新规则 ​
输入是长度事先未知的 append-only 数据流,目标是在任意时刻
等价实现是均匀生成
联合均匀性证明 ​
归纳假设处理
对包含
只证明边缘相等不足以排除相关偏置:一个错误算法可能让每个位置边缘概率正确,却总是成对选择相邻位置。需要联合子集归纳才能支持“均匀无放回”的接口承诺。
直觉
第
例子与边界
容量三的状态轨迹 ​
前 3 项 A、B、C 全收。第 4 项 D 以
以 A 为例,它经过第 4 步的留存概率是
再乘第 5 步不被替换的
推论与应用
随机数与合并 ​
固定宽随机整数直接对
两段长度
对象边界 ​
重复记录按出现位置抽样,出现十次的 key 有十个被选机会;若希望对 distinct key 均匀,必须使用去重摘要或另一种采样定义。加权 reservoir 通过经证明的随机优先级按权抽样,也不是把
删除流与滑动窗口会让旧位置失效,经典 reservoir 没有足够信息补回被淘汰候选。并行合并、带权与带删除版本都应分别声明算法和分布保证,不能沿用本页证明。
参考资料
- Jeffrey Vitter, “Random Sampling with a Reservoir,” TOMS, 1985.
- Donald Knuth, The Art of Computer Programming, Vol. 2: Seminumerical Algorithms, 3rd ed., Addison-Wesley, 1997.