[技术]讨论一个选择算法

0 views
Skip to first unread message

Johnbin

unread,
Oct 22, 2009, 10:40:31 AM10/22/09
to TopLanguage
给定一个数组X,大小为N。 要求设计这样一个选择函数select, 使得经过如下代码运行后,返回的结果elem为数组X中随机的一个元素(即概率
相等)。

ElementType elem = X[0];
for(int i=1; i<N; i++){
elem = select(elem, X[i]);// 返回两个参数其中之一
}
return elem;

Shuo Chen

unread,
Oct 23, 2009, 3:06:31 AM10/23/09
to TopLanguage
select 以 1/(i+1) 的概率返回 X[i].
程序设计实践上举过这个例子。

Lucas Zhang

unread,
Oct 23, 2009, 3:12:16 AM10/23/09
to pon...@googlegroups.com
可以去看看编程珠玑2,里面有关于随机选择的讨论~

2009/10/23 Shuo Chen <gian...@gmail.com>



--
=============
Thank you
Zhang Qing

赵立

unread,
Oct 23, 2009, 7:45:58 AM10/23/09
to pon...@googlegroups.com
记得编程珠玑里就有这题

2009/10/23 Lucas Zhang <zhangq...@gmail.com>

xueqiang pan

unread,
Oct 24, 2009, 11:28:37 AM10/24/09
to pon...@googlegroups.com
和轮盘赌差不多吧

2009/10/22 Johnbin <johnbi...@gmail.com>

Johnbin

unread,
Oct 25, 2009, 9:07:48 PM10/25/09
to TopLanguage
刚才证明了一下,果然应该是以1/i+1的概率选取i。但是不知道答案事先应该怎么思考呢。

Johnbin

unread,
Oct 25, 2009, 9:10:19 PM10/25/09
to TopLanguage
嗯,研究了一下编程珠玑2里面的随机选择算法,他给出的算法可以返回一个随机排列的数组。

On 10月23日, 下午3时12分, Lucas Zhang <zhangqing1...@gmail.com> wrote:
> 可以去看看编程珠玑2,里面有关于随机选择的讨论~
>

> 2009/10/23 Shuo Chen <giantc...@gmail.com>

Johnbin

unread,
Oct 25, 2009, 9:10:18 PM10/25/09
to TopLanguage
嗯,研究了一下编程珠玑2里面的随机选择算法,他给出的算法可以返回一个随机排列的数组。

On 10月23日, 下午3时12分, Lucas Zhang <zhangqing1...@gmail.com> wrote:

> 可以去看看编程珠玑2,里面有关于随机选择的讨论~
>
> 2009/10/23 Shuo Chen <giantc...@gmail.com>

Johnbin

unread,
Oct 25, 2009, 9:10:18 PM10/25/09
to TopLanguage
嗯,研究了一下编程珠玑2里面的随机选择算法,他给出的算法可以返回一个随机排列的数组。

On 10月23日, 下午3时12分, Lucas Zhang <zhangqing1...@gmail.com> wrote:

> 可以去看看编程珠玑2,里面有关于随机选择的讨论~
>
> 2009/10/23 Shuo Chen <giantc...@gmail.com>

Shuo Chen

unread,
Oct 25, 2009, 9:33:43 PM10/25/09
to TopLanguage
我不懂,我碰巧知道答案。
Reply all
Reply to author
Forward
0 new messages