比方說你有:
a = 2, b = 2, c = 1, d = 3
現在使它:
a = 2, b = 4, c = 5, d = 8
從1創建一個隨機數MaxVal最大值(最後一個鍵,8個在這個例子中的值)。選擇其中value> = RandomNum
編輯
我做了一個小VB.Net說明了算法和它是如何工作的第一重點。該代碼並不意味着:優秀,優雅,高性能或可讀。
Module Module1
Private Class Value
Public vOrg, vRecalc, HitCount As Integer
Public Key As String
Public Sub New(s, v1, v2, c)
Key = s : vOrg = v1 : vRecalc = v2 : HitCount = c
End Sub
End Class
Sub Main()
' set initial values
Dim KVP() As Value = {New Value("A", 2, 0, 0),
New Value("B", 2, 0, 0),
New Value("C", 1, 0, 0),
New Value("D", 3, 0, 0)}
' recalc values
For i = 0 To KVP.Length - 1
If i = 0 Then KVP(0).vRecalc = KVP(0).vOrg Else KVP(i).vRecalc = KVP(i).vOrg + KVP(i - 1).vRecalc
Next
' do test
Dim r As New Random
Dim runs As Integer = 1000 * 1000, maxval As Integer = KVP(KVP.Length - 1).vRecalc
For i = 1 To runs
Dim RandVal = r.Next(1, maxval + 1)
Dim chosen As Integer = (From j In Enumerable.Range(0, KVP.Length) Where KVP(j).vRecalc >= RandVal Take 1 Select j)(0)
KVP(chosen).HitCount += 1
Next
' ouput results
For Each kv In KVP
Console.WriteLine("{0} was chosen with {1:F3} propability, expected was {2:F3}", kv.Key, kv.HitCount/CDbl(runs), kv.vOrg/CDbl(maxval))
Next
Console.ReadLine()
End Sub
End Module
輸出採樣:
A was chosen with 0.250 propability, expected was 0.250
B was chosen with 0.251 propability, expected was 0.250
C was chosen with 0.124 propability, expected was 0.125
D was chosen with 0.375 propability, expected was 0.375
我不明白你在問什麼。這個「1/4或1/3等」比例是什麼? – melpomene
四分之一的100%= 25% –