【发布时间】:2012-04-21 07:16:02
【问题描述】:
设计一个快速算法来重复生成数字 离散分布:给定一个非负实数数组 a[] 总和为 1,目标是返回索引 i 的概率为 a[i]
我在一本在线算法书籍《Java 编程简介》第 4.2 章:排序和搜索 (http://introcs.cs.princeton.edu/java/42sort/) 中发现了这个问题。
提示说:
形成一个累加和的数组 s[],使得 s[i] 是 a[] 的前 i 个元素的和。现在,生成一个介于 0 和 1 之间的随机实数 r,并使用二分查找返回 s[i] ≤ s[i+1] 的索引 i。
有些我无法理解提示,因此无法找到解决方案..
【问题讨论】:
-
到目前为止您尝试过哪些不起作用的方法?请发布您的代码并解释它如何无法按您的预期工作,这里的人将很乐意帮助您弄清楚如何修复它。不过,我们不只是为您做您的工作 - 您确实需要做一些工作来尝试自己先弄清楚。 :)
-
嗯,因为
a[]是非负数,所以s[i] <= s[i+1]对所有i都是正确的。提示似乎是错误的。我认为这意味着你必须返回第一个i,这样s[i] >= r。