一個文件含有n個元素,只能遍歷一遍要求等機率取出其中之一。

解答:dom

     抽籤,5我的抽取5根籤,只有一個籤爲中籤。每一個人機率爲1/5. 隨機數

 

將這n個元素依次遍歷,每次獲得的數(第L個)取隨機數r,r%L==0(0-L以內)file

 

var pickOne(file){遍歷

  int lenth = 1;while

  while(lenth <= file.size){return

    if(random()%lenth == 0){

      pick = file[lenth];

    }

    lenth++;

  }

return pick;

}

 

1,2,3,4,5,6,7

第一個數:pick = 1 機率100%;

第二個數:pick被替換爲第二個數的機率爲1/2,前面的數選到機率爲1/2

第三個數:pick被替換爲第三個數的機率爲1/3,前面的數選到機率爲1/2*(1-1/3)

第四個數:pick被替換爲第四個數的機率爲1/4,以前機率爲1/3*(1-1/4)

第n個數:pick被替換爲第n個數的機率爲1/n

相關文章
相關標籤/搜索