【发布时间】:2014-06-14 15:19:50
【问题描述】:
给你:
- 一个流(流的结尾是 EOF)
- 一个函数
next(),用于获取流中的下一个元素并推进流中的指针 - 随机生成器均匀地生成 0 到 1(包括)之间的浮点数
输出:
- 被证明是随机(均匀分布)选择的元素
您可以使用一个或两个变量。
你不能使用数组/列表,你不能告诉trying to get all elements out and store them all and then pick的方式。
这是一道面试题。
我的想法是:
- 我使用 var
cur来存储最近保存的元素 - 所以,如果我得到一个新元素,我会使用生成器生成一个随机的 0 或 1,如果是 0 则
cur = new element;否则,继续; - 如果我得到 EOF,则返回 cur
我的想法对吗?如何证明?
这是同一个问题
How would you pick a uniform random element in linked list with unknown length?
【问题讨论】:
-
绘制概率树。
-
@OliCharlesworth 怎么样?你的意思是画一个概率树来证明?
-
对于前几个阶段,是的,要识别数学关系。从中你应该能够识别出一个证据。
-
你的算法基本上返回对应于生成器最后一次返回 0 的元素,这对应于末尾连续 1 的数量的几何分布(从 EOF 开始的方向看溪流)。这不是均匀分布。
-
您说生成器产生的浮点数统一为 0 或 1。您确定不应该是 介于 0 和 1 之间的浮点数吗?