1
這是一個家庭作業問題。爲了打印範圍[0,N)中的M個排序的不同隨機整數,我們可以使用以下算法: 如何證明採樣算法?
int n = N
int m = M
for i in [0,N)
if (bigrandom() % n--) < m)
print i
m--
如我們所知,該算法以相等的概率選取範圍內的所有整數。你能幫我證明嗎?
這是一個家庭作業問題。爲了打印範圍[0,N)中的M個排序的不同隨機整數,我們可以使用以下算法: 如何證明採樣算法?
int n = N
int m = M
for i in [0,N)
if (bigrandom() % n--) < m)
print i
m--
如我們所知,該算法以相等的概率選取範圍內的所有整數。你能幫我證明嗎?
m/n
。n' = n - 1
和m' = m - 1
。如果不是,我們有同樣的問題,但n' = n - 1
和m' = m
。你的算法是這個想法的實現。
你還需要證明假設1
,但你可以自己做。
會說「這是Knuth,TAOCP,第3.4.2節」太多*幫助或太*小*幫助? – AakashM 2010-11-27 20:42:48