设计一种随机化算法,从链表中选择一个元素

时间:2012-10-03 23:35:33

标签: algorithm

  

可能重复:
  How would you pick a uniform random element in linked list with unknown length?

假设我们要随机选择链表中的元素, 但是我们不知道链表的长度。

设计一种算法,该算法尽可能采用随机选择元素的运行时间。

2 个答案:

答案 0 :(得分:10)

有一个简单的算法O(N),获取长度,然后选择一个元素。

但是你可以通过在线算法做得更好,只访问每个元素一次:

您选择第一个元素作为答案,然后在k元素上使用概率1/k替换您的答案。这种方法没有偏差的事实可以通过数学归纳证明。

一般化版本(挑选k个元素)是reservoir sampling

答案 1 :(得分:-2)

考虑一下: 我假设你有一个变量来跟踪你链接列表中的项目数量(标准编程实践)。如果你有一个传入该变量的函数,你所要做的就是有一个指向链表中项目的指针,并将指针设置为rand()%Amount_Of_Items然后让函数返回指针,如果你必须使用它