如何将概率算法应用于长尾词的识别与预测?
- 内容介绍
- 文章标签
- 相关推荐
本文共计269个文字,预计阅读时间需要2分钟。
php '0.1000000000', 'id'=> 1], ['probability'=> '0.3000000000', 'id'=> 2], ['probability'=> '0.6000000000', 'id'=> 3]];$d=10;$count=pow(10, $d);// 原理解释:// 精度为10,总球数为10^2,概率*10得到结果?>
'0.1000000000','id'=>1], ['probability'=>'0.3000000000','id'=>2], ['probability'=>'0.6000000000','id'=>3], ]; $d=10; // 小数点精度 $count = 10**$d; // 总球数 /** * 原理说明: * 精度为10,总球数为10**10,概率**10得出每个概率对应的球数: * 1000000000,3000000000,6000000000 * 从总球数中取一个随机数 * 如果数值落在区间 1~1000000000 则中1 * 如果数值落在区间 1000000000~(1000000000+3000000000) 则中2 * 如果数值落在区间 4000000000~(4000000000+6000000000) 则中3 */ $probs = []; // prize_id=>概率 $win_prize_id =0; foreach ($prizes as $k => $v) { if($v['probability']-0){ // 如果设置了概率 if($v['probability']>=1){ $win_prize_id =$v['id']; break; } $probs[$v['id']] = ($v['probability']*$count); // 概率对应的球数 } } if($win_prize_id==0){ $rand=mt_rand(1,$count); // 随机取出一个球 asort($probs); // 按概率排序,并保留prize_id $sep = 0; foreach ($probs as $prize_id=>$prob ) { if($rand<=$prob+$sep){ // 如果小球在第一个奖品的数值范围内就中奖 $win_prize_id = $prize_id; break; } $sep+=$prob; } } echo $win_prize_id;
本文共计269个文字,预计阅读时间需要2分钟。
php '0.1000000000', 'id'=> 1], ['probability'=> '0.3000000000', 'id'=> 2], ['probability'=> '0.6000000000', 'id'=> 3]];$d=10;$count=pow(10, $d);// 原理解释:// 精度为10,总球数为10^2,概率*10得到结果?>
'0.1000000000','id'=>1], ['probability'=>'0.3000000000','id'=>2], ['probability'=>'0.6000000000','id'=>3], ]; $d=10; // 小数点精度 $count = 10**$d; // 总球数 /** * 原理说明: * 精度为10,总球数为10**10,概率**10得出每个概率对应的球数: * 1000000000,3000000000,6000000000 * 从总球数中取一个随机数 * 如果数值落在区间 1~1000000000 则中1 * 如果数值落在区间 1000000000~(1000000000+3000000000) 则中2 * 如果数值落在区间 4000000000~(4000000000+6000000000) 则中3 */ $probs = []; // prize_id=>概率 $win_prize_id =0; foreach ($prizes as $k => $v) { if($v['probability']-0){ // 如果设置了概率 if($v['probability']>=1){ $win_prize_id =$v['id']; break; } $probs[$v['id']] = ($v['probability']*$count); // 概率对应的球数 } } if($win_prize_id==0){ $rand=mt_rand(1,$count); // 随机取出一个球 asort($probs); // 按概率排序,并保留prize_id $sep = 0; foreach ($probs as $prize_id=>$prob ) { if($rand<=$prob+$sep){ // 如果小球在第一个奖品的数值范围内就中奖 $win_prize_id = $prize_id; break; } $sep+=$prob; } } echo $win_prize_id;

