|
原帖由 lsftest 于 2011-1-27 20:29 发表
不是,我的意思是说:例如基段的原始顺序是:
1,2,3,4,5,6,7,8,9.。。。。。。
第一基段要出3个数,所以快速跳蚤(你说洗牌就洗牌吧)跳了3下,乱序后是:
1,3,7,4,5,6,2.。。。。。。。
出3个数 ...
哈,这个办法不错。应该是目前为止最好的算法,而且可以生成超过计算机内存能够容纳的样本数。
不过你所说的跳蚤算法,真的应该叫洗牌算法:
<<计算机程序设计艺术>>(第二卷) The Art Of Computer Programming - Volume2(By Donald.E.Knuth)
该书的英文版第二卷第三章的相关内容
Algorithm P (Shuffling).
Let Xi, X2, ...... Xt be a set of t numbers to be shuffled.
PI. [Initialize] Set j = t.
P2. [Generate U] Generate a random number U, uniformly distributed between zero and one.
P3. [Exchange] Set k = j*U + 1. ((Now A; is a random integer, between 1 and j, Exchange Xk, Xj
P4. [Decrease j] Decrease j by 1. If j > 1, return to step P2
This algorithm was first published by R. A. Fisher and F. Yates [Statistical
Tables (London, 1938), Example 12], in ordinary language, and by R. Durstenfeld
[CACM 7 A964), 420] in computer language.
1938年被提出,然后1964年被写成计算机语言
[ 本帖最后由 灰袍法师 于 2011-1-28 06:37 编辑 ] |
|