php 概率分布,php - 概率算法排序

根据概率对数据进行排序,如何让每个概率区间都有结果?

举例如下,假设有一组数据如下

{

a: 40,

b: 20,

c: 10,

d: 5,

e: 5,

f: 5,

g: 5,

h: 5,

i: 3,

j: 2

}

key为要排序的值,value为每个值出现在数组该位置的概率,比如a,出现在数组0位置的概率为40%,也就是算出来的数组中,a有40%的机会展示在数组的第一位,然后剩下的依次根据概率进行算法排序。

我目前的解决方法(Low的办法,而且不能随着数组的扩大而继续支持):

1、根据现有的概率进行区间划分,假设a的区间为0-40,b为40-60,c为60-70,以此类推

2、利用函数获得1-100区间的随机数,然后将结果进行丢弹(也就是放在对应的区间中)

代码如下(求优化思路)

public function getRandValue($rate, $max, $min, $arr)

{

while (count($rate)) {

$rand = $this->getRand($min, $max);

if (0 < $rand && $rand <= 40) {

$num = 40;

} else if (40 < $rand && $rand <= 60) {

$num = 20;

} else if (60 < $rand && $rand <= 70) {

$num = 10;

} else if (70 < $rand && $rand <= 75) {

$num = 5;

} else if (75 < $rand && $rand <= 80) {

$num = 5;

} else if (80 < $rand && $rand <= 85) {

$num = 5;

} else if (85 < $rand && $rand <= 90) {

$num = 5;

} else if (90 < $rand && $rand <= 95) {

$num = 5;

} else if (95 < $rand && $rand <= 98) {

$num = 3;

} else if (98 < $rand && $rand <= 100) {

$num = 2;

}

if (!in_array($num, $arr) && in_array($num, array(40, 20, 10, 3, 2))) {

$arr[] = $num;

} elseif (!in_array($num, array(40, 20, 10, 3, 2))) {

$arr[] = $num;

}

if (count($arr) >= 10) {

break;

}

}

return $arr;

}

遇到的问题:(in_array判断是有因为这几个区间的值只能算出来一次)

1、算出来的值不一定每个区间的值都有

2、代码没有可扩展性

还望大家指点指点,请指教,感谢各位!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值