【问题标题】:How would you pick a uniform random element in linked list with unknown length?您将如何在链表中选择长度未知的统一随机元素?
【发布时间】:2012-03-13 04:03:40
【问题描述】:

你将如何在一次或两次都没有的情况下在链表中选择一个长度未知的均匀随机元素?

【问题讨论】:

  • 恐怕你得在你的问题上多花点功夫,把你要问的问题说得一清二楚
  • 好的。如何在链表中选择一个长度未知的统一随机元素?
  • 如果这是您的问题,这是一个有趣的问题。请相应地编辑您的问题,我会支持它
  • 好的固定帖子。你知道我该如何解决这个问题吗?我正在尝试使用这种方法来获取快速排序中的枢轴元素
  • 两遍是微不足道的。在第一次通过时,计算长度:)

标签: algorithm linked-list


【解决方案1】:

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

选择一个元素:

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

我会让你证明这会导致元素的统一选择。

【讨论】:

  • 我尝试使用它,但这会选择 k 个随机元素。但我只需要选择第一个元素
  • @AnilBabooram 使用 k=1 吗?无论如何,帖子(不是维基)中提到的算法是针对一个元素案例的。
  • 好的,如果我沿 ++length 使用 while 循环来遍历列表。如果我使用 i= rand() % length,“i”会是当前节点的随机选择吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-09-08
  • 1970-01-01
  • 2018-03-06
  • 1970-01-01
  • 1970-01-01
  • 2021-12-30
  • 2012-03-12
相关资源
最近更新 更多