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

bab*_*now 2 algorithm

可能重复:
如何在未知长度的链表中选择一个统一的随机元素?

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

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

Kar*_*ath 10

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

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

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

一般化版本(挑选k元素)是水库采样.