2012-12-07 104 views
3

全問題是產生一組m個整數:隨機從大小爲n的數組

寫隨機產生從大小n陣列的組m個整數的方法。每個元素都必須有被chosen`

這個問題是來自「破解編碼訪談」和解決方案採摘等概率是這樣的:

我們可以與元素的開頭交換元素的數組,然後「記住」數組現在只包含元素j和更大。也就是說,當我們選擇subset[0]array[k]時,我們用數組中的第一個元素替換array[k]。當我們選擇subset[1]時,我們認爲array[0]爲「死亡」,我們從1到數組size()之間挑選一個隨機元素y。然後我們設置子集[1]等於array[y],並且設置array[y]等於數組[1]。元素0和1現在「已死」。 Subset[2]現在從array[2]array[array size()]之間選擇,等等。

我的問題是,如果我們正在縮小從中選取隨機數的數組,那麼每個數字被選中的概率爲1/remaining_num_elements。所有元素如何保持平等?

回答

3

想想看,像你從n號的袋子撿m隨機數,與代表the numbers in your hand第一j元素和代表the numbers still in the bag剩餘的元素。 (您遍歷j從0到m - 1拉出來的數字,因爲你的書建議。j的話,代表你已經掏出包裏的整數的個數。)

如果你從採摘m整數一個現實生活中的包,然後每次你選擇一個新號碼時,你只從包裏取出,而不是從你的手裏取出。因此,remaining_num_elements在每一步都會縮小。

當你這麼想的時候,應該很簡單的看到這個方法保證每個元素具有相同的被選擇概率。

4

如果我們收縮從其中我們挑選的隨機數然後每個數字的概率陣列被拾起1/remaining_num_elements。

是的,你是正確的,但1/remaining_num_elements是在一個特定的轉拿起得到元素的概率。在這裏,我們感興趣的是一個元素最終得到的概率拾起m。對於所有的n元素都保持相同。你需要問

問題是:每個n元素得到的m圈越來越拿起公平和平等的機會? 答案是肯定的,因爲

P = P(元素獲取1日又將回升)+
P(元素沒有得到回升(元素獲得最終的集m元素的回升)第1回合)* P(元素在第2回合中被拾取)+
P(元素在第1回合中沒有被拾取)* P(元素在第3回合中被拾取)+ ...等等

其中,如果您計算,對於初始存在的所有n元素都保持相同。

0

您在概率中看到的差異是由於它是條件屬性的事實(事實上已經選擇了某個事實,並且在上次獲取中,此元素未被選中或獲取)。但是,選擇任何給定的球的概率或平等公平性不會改變。

相關問題