Q:一個很長的數據流,這個數據流中有R個逗號,那么要等概率的獲取一個逗號的偏移量,即獲取一個逗號偏移量的概率為1/R。該如何做? A:遇到第一個逗號,以概率1取其偏移量;遇到第二個逗號,以概率1/2替換已選擇的偏移量;遇到第三個逗號時,以概率1/3替換已選擇的偏移量。。。依次類推到R個逗號時,以概率1/R替換已選擇的偏移量。 簡單證明: 設遇到第n個逗號時,替換已選擇偏移量的概率為1/n,那么當數據流全部讀取結束之后,仍然選擇第n個逗號的概率的算法是: 不管前n-1個逗號的選擇情況,第n個逗號一定替換,n+1到R一定不替換,即 1/n * (1 - 1/(n+1)) * (1 - 1/(n+2)) * (1 - 1/(n+3)) * (1 - 1/(n+R)) ,化簡后為1/R。因此,每個逗號是等概率被選擇的。 |
|