例如输入数据 [(“a”,3),(“b”,3),(“c”,9),(“d”,1)], 权重分别为3,3,9,1
具体算法是将3,3,9,1 映射到一维坐标中,0-3-6-15-16,取得一个随机数,范围是0,16, 看结果落在哪个区间就返回哪个数值
已下以python代码为例子:
import random
import collections
def get_seq(inputData):
head = 0
output=[]
for i in inputData:
head += i[1]
output.append((i[0],head))
return head, output
def get_value(maxValue, seq):
r = random.randint(0,maxValue)
for i in seq:
if r <= i[1]:
return i[0]
Test program
test = [(“a”,3),(“b”,3),(“c”,9),(“d”,1)]
m, s = get_seq(test)
p = []
for i in range(10000):
p.append(get_value(m, s))
print(collections.Counter(p))
Test result
Counter({‘c’: 5340, ‘a’: 2310, ‘b’: 1756, ‘d’: 594})