你如何在未知长度的链表中选择一个统一的随机元素?

exl*_*x15 16 algorithm linked-list

你如何在一次通过或不通过两次通过的情况下在链表中选择一个未知长度的统一随机元素?

ElK*_*ina 29

使用水库采样http://en.wikipedia.org/wiki/Reservoir_sampling.您只需要传递一次数据.

选择一个元素:

  1. 选择第一个元素(概率1)
  2. 之后,对于第k个元素以1/k的概率选择它(即用kth元素替换现有的选择)

我会告诉你,这会导致元素的统一选择.