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

时间:2012-02-22 19:11:14

标签: algorithm linked-list

如何在一次通过中或未通过两次通过时在链表中选择一个未知长度的均匀随机元素?

1 个答案:

答案 0 :(得分:28)

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

选择一个元素:

  1. 选择第一个元素(概率1)
  2. 稍后,对于第k个元素,以1 / k的概率选择它(即用kth元素替换现有的选择)
  3. 我会告诉你,这会导致元素的统一选择。