2014-02-25 15 views
2

如果我有一個包含以下字符串列表:如何隨機得到一個集合的字符串,但在集合的開始喜歡串

"a","b","c","d","e","f","g","h","i","j","k","l","m","n" 

什麼是獲得一個隨機字符串的最佳方式,但加權的方式會更可能得到「a」而不是「n」?

+2

應該是dup [加權隨機](http://stackoverflow.com/search?q= [c%23]加權+隨機)問題。 –

+1

「a」與「n」相比有多大可能性? 'return'a「;'滿足您的要求:P – Blorgbeard

+0

這裏有一個答案應該足以讓您進行修改:http://stackoverflow.com/a/7538795/3317555 – bubbinator

回答

8

選擇兩個隨機數字並選擇較低的一個。

Random rnd = new Random(); 
var randomItem = list[Math.Min(rnd.Next(list.Count+1), rnd.Next(list.Count+1))]; 

而且我勸你自己確定每個項目的所產生的相對概率。

如果你想出了一個更嚴格的'最好'的定義,那麼這個答案可能不適合它。

+1

非常好的解決方案! –

+0

這似乎是進化算法中的錦標賽選擇。不幸的是,這個問題並沒有說明正確的比賽規模應該是什麼。是2,5,100還是更多? – Tregoreg

+0

感謝您的解決方案,並對缺乏清晰度感到抱歉 - 這是凌晨4點 – JoeS

0

得到一個隨機字符串的最好方法是什麼,但加權的方式是更容易得到「a」而不是「n」?

你應該澄清你願意得到的分配。 「更可能」還不夠清楚。

例如,你可以使用:

for i in 1..size(array) do 
    if random(0.0,1.0) < k then 
    return array[i] 
end for 
return array[i] 

但對於k不同的值,你會得到很多不同的行爲。

對於k=1.0,您將始終獲得第一個元素。對於k=1/size(array),您會得到一個隨機元素。

相關問題