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

标签 algorithm linked-list

如果不是两次,您将如何在链表中选择长度未知的统一随机元素?

最佳答案

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

选择一个元素:

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

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

关于algorithm - 你会如何在未知长度的链表中选择一个统一的随机元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9401375/

相关文章:

在细胞网格中形成对的算法

algorithm - 该伪代码的大 O 是什么?

c - 为什么此 C 代码仅打印输入的第一个和最后一个节点?

c - 打印链表的float元素显示不正确?

c - 在 C 中反转双链双端队列

c - set_add 和 set_contains 错误

java - 制作合适的 Java 数独生成器的问题

algorithm - 查找产生相同二叉搜索树的给定整数序列的排列数

c - 分段故障核心转储[C语言,链表]

c++ - AES CBC算法的实现