php 根据权重随机数,PHP根据概率产生随机数

假设 有四个选项:a 占 10%,b占20% ,C占30% , d 占 40% ,原理就是现获取随机数,然后找区间。

当然了,选项的数量可以任意。目前默认是 总和是 100% 。如果需要别的数,修改 随机数的范围即可。

这个算法,比较简单,效率也还算高。

$data = array(

'a' => 10 ,

'b' => 20 ,

'c' => 30 ,

'd' => 40

);

echo randomSelect( $data );

function randomSelect( &$array ){

$datas = $array ;

if( !is_array($datas) || count($datas) == 0 )

return ;

asort($datas); //按照大小排序

$random = rand(1,100);

$sum = 0 ;

$flag = '';

foreach($datas as $key => $data ){

$sum += $data ;

if( $random <= $sum ){

$flag = $key;

break ;

}

}

if( $flag == '' ){ // 如果传递进来的值的和小于100 ,则取概率最大的。

$keys = array_keys($datas);

$flag = $keys[count($keys) - 1] ;

}

return $flag;

}

给定一个函数rand&lpar;&rpar;能产生0到n-1之间的等概率随机数,问如何产生0到m-1之间等概率的随机数?

题目:给定一个函数rand()能产生1到n之间的等概率随机数,问如何产生1到m之间等概率的随机数? 先把问题特殊化,例如原题变为给定一个函数rand5(),该函数可以随机生成1-5的整数,且生成概率一 ...

面试题:给定一个函数rand&lpar;&rpar;能产生1到m之间的等概率随机数,产生1到n之间等概率的随机数?

虽然TX的面试已经过去好几天了,然而惨痛的过程还历历在目.人生中第一次正式job面试就这么挂掉了.在于面试官的交流过程中,被问及了几个算法设计题,在今后几篇博文中,我一一总结与诸君分享. 1. 给定一 ...

JAVA 根据设置的概率生成随机数

import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; i ...

【watcher】 &num;02 c&num; 中实现时间戳等,日期数字及大概率绝对随机数 实现

在Wacher的项目中,用到了很多时间记录的地方,为了将来能够和在线数据打通,我们使用了时间戳来记录时间信息 由于c# 没有现成的方法,所以我们重新写了一个Helper类来帮助我们使用这些公共函数 同 ...

10,随机等概率的输出m个不重复的数

今天看到一段代码,可以从0.....n-1中随机等概率的输出m个不重复的数(n远远大于m).遂记录下来. 首先,产生随机数,不免要用到srand,rand函数.先简单介绍下两个函数. 1,void s ...

&lbrack;JS&rsqb;Math&period;random&lpar;&rpar;

参考网址:http://www.soulteary.com/2014/07/05/js-math-random-trick.html [JS]Math.random()的二三事 看到题目,如果大家平时 ...

php 抽奖概率 随机数

<?php $prize_arr = array( '0' => array('id' => 1, 'title' => 'iphone5s', 'v' => 5), ' ...

C&num; 获取一定区间的随即数 0、1两个值除随机数以外的取值方法&lpar;0、1两个值被取值的概率相等&rpar;

获取随机数 举例:0-9 Random random = new Random(); int j = random.Next(0, 9); 0.1两个值被取值的概率相等 int a = Math.Ab ...

随机推荐

Unity3D ShaderLab 车辆喷漆光照模型实战

这一篇,我们来创建一个车辆喷漆的光照模型.首先就是准备场景,新建Shader & Material. 过程比较简单,直接看完成的代码吧: Shader "91YGame/CarOut ...

OC中成员变量的命名

先前写C++ 的时候,命名成员变量一般都是用 m_veriableName:的方式,但是进到新项目组,用了OC以后,发现成员变量都是用 veriableName_的方式,最后的一个下划线表示是成员变量 ...

计算几何基础——矢量和叉积 &amp&semi;&amp&semi; 叉积、线段相交判断、凸包(转载)

转载自 http://blog.csdn.net/william001zs/article/details/6213485 矢量 如果一条线段的端点是有次序之分的话,那么这种线段就称为 有向线段,如果 ...

poj 2251 搜索

Dungeon Master Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 13923   Accepted: 5424 D ...

PowerDesigner 怎么给 Table Properties 增加注释和默认值

1.  选中表,右键 2. 选中“comment”, 这个就是列的注释 3.还是这个页面 ,往下有个“default value”, 这个就是你设置的默认值. 4. 这个是怎么设置默认值.

ES聚合实例

在es中需要根据app_categor进行聚合,JSON查询语句如下: { "query": { "bool": { "must": [ { ...

list集合接口

import java.util.ArrayList; import java.util.List; class Phone { private String brand; private doubl ...

GMA Round 1 向量计算

传送门 向量计算 已知$\left |\overrightarrow{AB} \right |^2+\left |\overrightarrow{CD} \right |^2+\left |\over ...

Mongodb 笔记 - 性能及Java代码

性能 以下数据都是在千兆网络下测试的结果 写入 数据量的增大会导致内存占满, 因为mongodb会将数据尽可能地载入内存, 索引占用的空间也很可观非安全模式下, 速度取决于内存是否占满能差一个数量级, ...

bzoj1497 &lbrack;NOI2006&rsqb;最大获利 最大权闭合子图

链接 https://www.lydsy.com/JudgeOnline/problem.php?id=1497 思路 最大权闭合子图的裸题 一开始知道是这个最大权闭合子图(虽然我不知道名字),但是我 ...

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值