PHP概率计算函数摘要

PHP概率计算函数摘要
事实上,没有使用这个博客的感觉,这是太简单了,人们看不到它,人们不会动脑筋想它。但看着自己的博客已经这么久了,真的很痛。粗略一算只有水文代码,OSC将至少十几KB的数据库空间,但是想到在性质和鸡蛋乱弹,也松了一口气。
< PHP
*概率计算类
*可用于抽奖等。
* /
类的概率
{

*概率统计数据
*机会
* /
var =数组();
VaR chance_count = 0美元;

功能__construct($ initdata =阵列()){
如果(!空($ initdata)){
美元->数据= $ initdata;
foreach($ initdata为$){
美元-> chance_count = $ { 'num};
}
}
}

功能adddata($name,$机会){
美元->数据{ } =阵列('name' = > $name,'num= > $的机会);
美元-> chance_count = $的机会;
}

功能一(){
美元指数=兰特(0美元-> chance_count);
foreach(美元->数据为$){
美元指数,美元指数- $ { 'num};
如果($ < = 0){
返回$ { 'name' };
}
}
返回' ';
}
}
*使用实例
* /
新的概率();
$亲> adddata('iphone ',10);
$亲> adddata(手表,30);
亲> adddata美元(18美元,50);
$亲> adddata(谢谢你,10);
$亲> adddata(超级大',1);
($ i = 0;$ i < 100;$ + +){
echo $亲>办理()。;
}
这是一个非常经典的概率算法函数
功能get_rand($ proarr){
结果=;
概率的总概率
$启源= array_sum($ proarr);
循环数组的概率
foreach(proarr美元美元美元关键=采购指){
randnum美元(1美元= mt_rand,启源); / /随机数
如果(randnum美元美元采购指){
$结果
打破;
{人}
$启源= $采购指;
}
}
unset($ proarr);
返回$结果;
}

假设我们有一个数组:一个中奖概率20%,B奖概率30%,C奖概率50%。
prize_arr美元=阵列(A =>20,B =>30,C = > 50);
模拟功能执行过程:

总概率精度为20±30=50=100。

第一个数组循环、采购指= 20美元

假设抽取和随机数(1100)被认为是引起randnum = 55美元

如果法官----

如果randnum美元<= 20,然后结果=一

否则,进入下一个周期,总的概率精度改为100-2000 = 80

第二阵列线圈,采购指= 30美元

假设随机数RAND(80)提取出来,想抽到randnum = 33美元

如果法官

如果randnum美元<= 30,然后结果= B

Otherwise, entering the next cycle, the total probability accuracy is changed to 80-30=50

第三时间序列的循环,prosur = 50美元;

假设随机数RAND(50)提取出来,不管如何,随机数将小于或等于50,

然后得出结果;

由于样本中没有变化,虽然可以提取多个随机数,但概率是恒定的。

或者它可以:
功能get_rand($ ARR)
{
pro_sum = array_sum美元($ ARR);
rand_num美元(1美元= mt_rand,pro_sum);
tmp_num = 0美元;
foreach(ARR美元美元美元K = > Val)
{
如果(rand_num美元美元美元<=瓦尔+ tmp_num)
{
美元= k;
打破;
}其他
{
tmp_num美元美元= val;
}
}
返回n;
}
彩票共享概率算法
*
*经典概率算法,
* $ proarr是预先设置的阵列,
*假设数组是:数组(100200300400),
*开始是从他的概率范围内的11000个概率范围内筛选第一个数字,
*如果不是,概率空间,即,k的值,从现在的概率空间中减去。
*在这种情况下,减去100,也就是说,第二个数字在1900的范围内被筛选。
所以最终总会有一些要求。
*相当于在盒子里摸东西,
第一个不是,第二个不是,第三个不是,最后一个必须是。
*该算法简单高效。
*关键在于该算法已经在我们以前的项目中使用,特别是在具有大量有效数据的项目中。
* /
功能get_rand($ proarr){
结果=;
概率的总概率
$启源= array_sum($ proarr);
循环数组的概率
foreach(proarr美元美元美元关键=采购指){
randnum美元(1美元= mt_rand,启源);
如果(randnum美元美元采购指){
$结果=键;
打破;
{人}
$启源= $采购指;
}
}
unset($ proarr);
返回$结果;
}
*
*奖阵列
*是一个二维数组,记录所有奖项信息,
*代表中奖等级,奖品是奖品,V是中奖的可能性。
*注意V必须是整数,你可以把相应的奖励的V设为0,这意味着赢得这个奖的机会是0。
v(和数组基),更准确地反映基地的概率。
*在这种情况下,V的总和是100,那么赢得平板电脑奖金的概率是1%。
*如果v的总和是10000,赢得奖品的概率是1 10000。
*
* /
prize_arr美元=阵列(
0=阵列('id' = > 1,'prize= >平板电脑,V = > 1),
1=阵列('id' = > 2,'prize= >,数码相机,V = > 5),
2=阵列('id' = > 3,'prize= >的音频,V = > 10),
3=阵列('id' = > 4,'prize= > '4g,V = > 12),
4=阵列('id' = > 5,'prize'=>10,Q,V = > 22),
5=阵列('id' = > 6,'prize= >也许下次可以哦,V = > 50),
);

*
* PHP循环奖励为前端页面的每个请求设置数组。
*通过概率计算函数get_rand获得中奖身份证。
*在数组既{是节约奖},
*和其余非奖信息保存在$ RES {没},
*最后将JSON数据输出到首页。
* /
foreach(prize_arr美元美元美元关键= val){
$ ARR { $瓦尔{ 'id' } } = { } $值V;
}
摆脱美元= get_rand($ ARR); / /根据一个ID奖获得概率

RES {是} =美元美元美元prize_arr { } { } rid-1 'prize '; / /
撤消($ prize_arr { $ rid-1 }); / /从数组中删除,其余的奖
洗牌($ prize_arr); / /排列的顺序打乱
为($我= 0;$我<计数(prize_arr美元美元);i++){
$公关{ } = { $ $ prize_arr我} { 'prize};
}
RES {没} =美元美元的公关;
print_r(合物{是});
免责声明:本网信息来自于互联网,目的在于传递更多信息,并不代表本网赞同其观点。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,并请自行核实相关内容。本站不承担此类作品侵权行为的直接责任及连带责任。如若本网有任何内容侵犯您的权益,请及时联系我们,本站将会在24小时内处理完毕。
相关文章
返回顶部