我有一個N個元素的數組(表示給定字母表的N個字母),並且該數組的每個單元格都包含一個整數值,該整數值表示一個字符串中出現的次數給出了那封信的文本。現在我想隨機選擇從所有的字母一個字母在字母表的基礎上,他與給定約束的出現次數:從加權概率列表中隨機選擇
如果這封信具有正(非零)值,那麼就可以總是由算法選擇(當然,有更大或更小的概率)。
如果字母A的值比字母B的值高,那麼它必須更有可能被算法選擇。現在
,考慮到這一點,我想出了一個簡單的算法,可以做的工作,但我只是想知道是否有更好的事情要做。這似乎相當重要,我認爲爲了更有效地完成這項工作,可能會有更多聰明的事情要做。這是我認爲的算法:
- 將數組中的所有頻率相加。將其存儲在SUM中
- 選擇從0到SUM的隨機值。將其存儲在RAN中
- [While] RAN> 0,從第一個開始,訪問陣列中的每個單元(按順序),並從RAN中減去該單元格的值
- 最後訪問的單元格是選定的單元格
那麼,還有比這更好的事情嗎?我錯過了什麼嗎?
我知道大多數現代計算機可以計算這麼快,我甚至不會注意到,如果我的算法效率低下,所以這是一個更理想的問題,而不是一個實際的問題。
我更喜歡解釋的算法,而不僅僅是代碼的答案,但如果你更自在地在代碼中提供你的答案,我沒有問題。
順便說一下,這種方法稱爲*逆變換採樣*。 – Thomas