根據不同的粒度,你可以創建100,1000或10000元的指數。假定一個分佈(A,B,C,d)其中p =(10%,20%,30%,40%),我們創建了一個地圖:
val prob = Map ('a' -> 10, 'b' -> 20, 'c' -> 30, 'd' -> 40)
val index = (for (e <- prob;
i <- (1 to e._2)) yield e._1).toList
index: List[Char] = List(a, a, a, a, a, a, a, a, a, a,
b, b, b, b, b, b, b, b, b, b, b, b, b, b, b, b, b, b, b, b,
c, c, c, c, c, c, c, c, c, c, c, c, c, c, c, c, c, c, c, c, c, c, c, c, c, c, c, c, c, c,
d, d, d, d, d, d, d, d, d, d, d, d, d, d, d, d, d, d, d, d, d, d, d, d, d, d, d, d, d, d, d, d, d, d, d, d, d, d, d, d)
我們現在可以選擇所需概率的元素非常快:
val x = index (random.nextInt (100))
X現在是由40%d,由10%等。設置簡單,訪問速度快。
數字甚至都不需要總結到100,但你必須一次計算的範圍內,則:
val max = prob.map (_._2).sum
val x = index (random.nextInt (max))
到目前爲止,您嘗試過哪些方法無效?請發佈您的代碼並解釋它如何不如預期的那樣工作,並且有人會很樂意幫助您瞭解如何解決此問題。不過,我們不只是爲你做你的工作 - 你需要做一些工作,先嚐試自己解決問題。 :) – 2012-04-08 16:28:25
可能重複[數據結構爲加載骰子?](http://stackoverflow.com/questions/5027757/data-structure-for-loaded-dice) – templatetypedef 2012-04-08 16:35:59
呃,因爲'a []'是非負的,'s [i] <= s [i + 1]'對於所有'i'都是真實的。提示看起來不對。我認爲這意味着你必須返回第一個'i',使得[s]> = r'。 – IVlad 2012-04-08 16:36:10