共识:Math.random 调用的次数越多,结果越趋于概率权重,但相应的时间也越长。原编程语法用的是AS3,已经去除了部分语法特性。
randomOneByTradition:一个随机数与累计概率比较
function static randomOneByTradition($ratio:Array):int
{
var cusum:Number = 循环一遍求累计和
var rand:Number = 生成[0, cusum) 之间的随机浮点数
for(var index:int = $ratio.length-1; index>0; index--)
{
var r:Number = $ratio[index];
if(rand< r)
returnindex;
else
rand-= r;
}
}
randomOneByEvery:每次随机做替换
function static randomOneByTradition($ratio:Array):int
{
var res:int = -1;
var cusum:Number = 0;
for(var index:int = $ratio.length-1; index>0; index--)
{
var rand:Number = 生成[0,1) 之间的随机浮点数
var r:Number = $ratio[index];
cusum += r;
if(rand< r)
res= index;
}
}
randomSomeByTradition:累计概率方式的多个不重随机
建立一个结果列表,依照randomOneByTradition 选取随机数和累计判断时去除已随出的元素概率即可。
function staticrandomOneByTradition($ratio:Array):Array
{
var cusum:Nu