您的位置:程序门 -> vb -> vba



随机数的问题


[收藏此页] [打印本页]选择字色:背景色:字体:[][][]


随机数的问题
发表于:2008-01-04 11:52:39 楼主
抽奖程序,数据库表中每条记录设定了权重,如何实现权重高的中奖概率高,权重低的中奖几率也低呢?请高手帮忙。
发表于:2008-01-04 12:04:191楼 得分:0
按权重划分随机数的区间,看随机数落在哪个区间。
比如随机数区间[0,1)
a权重8,b权重2
划分a[0,0.8),b[0.8,1)
如果产生的随机数为0.6,那么a中奖。
发表于:2008-01-04 12:52:042楼 得分:0
如果有1万条记录,每条记录的权重为从1到200的整数,整数越大,中奖概率越高,如何实现?
发表于:2008-01-04 13:19:583楼 得分:0
1楼已经说过了。
比方说3条记录分别为r1,r2,r3,对应的权重分别为:
w1=40
w2=100
w3=200
则在1~340(=w1+w2+w3)范围内生成一个随机整数t:
如果t落在[1,40]([1,w1])上,则取r1;
如果t落在[41,140]([w1+1,w1+w2])上,则取r2;
如果t落在[141,340]([w1+w2+1,w1+w2+w3])上,则取r3;
发表于:2008-01-04 13:46:304楼 得分:0
两个方案:
方案一,最容易理解:
建一个新表,表中只有一个字段,记录id(不要设置成非重复)。然后将原表中的记录   id   写入此表,权重   n   就写   n   次。
按新表的记录数求随机整数,结果就是所求记录的序号,取   id   即可。

方案二,原理相同,只是不必真正另外建表:
在表中增加一个字段,存前面所有记录的权重累加值(注意此累加值按   id   顺序计算)。
以一个查询求出权重的总和   ——   select   sum(权重)   from   表。
取随机数时乘以此总和得到随机整数。
select   top   1   *   from   表   where   权重累加值   <   随机整数   order   by   id
发表于:2008-01-07 10:10:485楼 得分:0
谢谢!
请问"在表中增加一个字段,存前面所有记录的权重累加值(注意此累加值按       id       顺序计算)。   "如何实现?


快速检索

最新资讯
热门点击