随机概率问题
2011-07-20 23:04
316 查看
8:设随机抽到A的概率为0.1,B的概率为0.2,C的概率为0.3,D的概率为0.4,现在求按此概率随机抽出一个字母的算法
本文出自 “一方有” 博客,请务必保留此出处http://yifangyou.blog.51cto.com/900206/618827
<?php /* *8:设随机抽到A的概率为0.1,B的概率为0.2,C的概率为0.3,D的概率为0.4,现在求按此概率随机抽出一个字母的算法, *系统环境:windows/linux *编译环境:php4/php5 *输入参数:存放在in.txt,多个参数时空格分隔 参数1是一个数字,表示测试循环次数 输出:out.txt */ //输出结果 //output(getRandomLetter(),true); $params=getParams(1); $argv0=trim($params[0]); if(!is_numeric($argv0)) { error_msg("params 1 must be a numbers"); } //测试几率 $test=array(); for($i=0;$i< $argv0;$i++) { $letter=getRandomLetter(); if(!isset($test[$letter])) { $test[$letter]=0; } $test[$letter]++; } output("",true); foreach($test as $k => $v) { output("get $k times:$v"); } error_msg("execute success"); function getRandomLetter() { //随机数基数 $MaxRand=10000; $percentA=0.1*$MaxRand; //获得A的几率1~$percentA; 1-1000 $percentB=$percentA+0.2*$MaxRand; //获得A的几率$percentA+1~$percentB 1000~3000 $percentC=$percentB+0.3*$MaxRand; //获得A的几率$percentB+1~$percentC 3000~6000 $percentD=$percentC+0.4*$MaxRand; //获得A的几率$percentC+1~$percentD 6000~10000 $r=rand(1, $MaxRand); if($r >= 1 && $r <= $percentA) { return "A"; } if($r >= $percentA+1 && $r <= $percentB) { return "B"; } if($r >= $percentB+1 && $r <= $percentC) { return "C"; } if($r >= $percentC+1 && $r <= $percentD) { return "D"; } return ""; } /* 从in.txt里读取参数 */ function getParams($paramNum) { $in=file_get_contents("in.txt"); if($in===FALSE){ error_msg("cannot read in.txt,please check in.txt exists\n"); } $in=preg_replace("/(\s+)/i", " ", $in); //多个参数时,按照空格分隔 $parms=split(" ",trim($in)); if($parms===FALSE) { error_msg("cannot get param from in.txt\n"); } if(count($parms) < $paramNum) { error_msg("it needs $paramNum params\n"); } return $parms; } /* 把结果输出到输出文件里 当isClean=true时清空out.txt */ function output($msg,$isClean=false) { if($isClean) { $handle = fopen('out.txt', 'w'); fclose($handle); } error_log($msg."\n", 3, "out.txt"); } /* 输入错误信息 如果$is_exit表示输入信息后退出 */ function error_msg($msg,$is_exit=true) { if($is_exit) die($msg."\n"); else echo $msg."\n"; } ?>
本文出自 “一方有” 博客,请务必保留此出处http://yifangyou.blog.51cto.com/900206/618827
相关文章推荐
- Alias Method解决随机类型概率问题
- 概率随机问题
- 概率随机问题【2】 取样与概率
- 概率随机问题【1】相关C语言知识
- 用优先级随机概率解决'今天吃神马问题
- java-解决随机类型概率问题
- 单次遍历,等概率随机选取问题
- 随机概率问题全集
- (转)概率随机问题
- Alias Method解决随机类型概率问题
- python随机选球的概率问题
- 概率随机问题【3】给定能随机生成1到5的函数,写出能随机生成1到7的函数
- 使用Random工具类来解决等概率随机问题
- 海量数据等概率随机选取问题
- (转)概率随机问题
- 单次遍历,等概率随机选取问题
- 概率随机问题
- 给定一个单链表,从链表返回一个随机节点的值。 每个节点必须具有相同的选择概率。 跟进: 如果这个链表非常大,而且它的长度不为人知呢? 你能解决这个问题,而不使用额外的空间?
- 给定能随机生成整数1到5的函数,写出能随机生成整数1到7的函数(均匀概率问题)
- 读书笔记:应用随机过程:概率模型导论:Aloha协议问题