PHP权重算法-用于游戏根据权限来随机物品

转载 2015年07月09日 17:06:00

假设有数据:

 

复制代码
$data = array(

array(‘id’ => 1, ‘name’ => ‘张三’, ‘weight’ => 5),
array(‘id’ => 2, ‘name’ => ‘王五’, ‘weight’ => 10),
array(‘id’ => 3, ‘name’ => ‘李四’, ‘weight’ => 15),

);
复制代码

 

要随机取出其中一条,并且不是完全随机,而是根据其中weight的数值,按照数值越大,几率越高的规律取出。

以前写过一些权重算法,可是都不完美,要么数据量有限制,要么weight之和必须等于一个指定的数等等,都不完善。

今天突发奇想,写了一套完美的权重算法,该算法有如下优势:

1.支持无限多个数据
2.weight值之和任意
3.不存在两个weight值一样时无法平均分配的bug


算法如下:

复制代码
 1 $weight = 0;
 2 $tempdata = array();
 3 foreach ($data as $one) {
 4 
 5 $weight += $one['weight'];
 6 
 7 for ($i = 0$i < $one['weight']; $i ++) {
 8 $tempdata[] = $one;
 9 
10 }
11 
12 }
13 $use = rand(0, $weight – 1);
14 $one = $tempdata[$use];
15 
复制代码

 

 

最终得到的$one,就是源数据数组中按照权重分配,随机得到的数据。

相关文章推荐

游戏Algorithm----抽奖算法----奖品有权重的情况探讨

这么考虑的 相当于一个盒子里有很多小球,
  • kkgbn
  • kkgbn
  • 2014年04月12日 18:47
  • 2312

权重随机算法的java实现

一、概述  平时,经常会遇到权重随机算法,从不同权重的N个元素中随机选择一个,并使得总体选择结果是按照权重分布的。如广告投放、负载均衡等。  如有4个元素A、B、C、D,权重分别为1、2、3、4,随机...

权重随机算法

一个简单的按照权重来随机的实现,权重为几个随机对象(分类)的命中的比例,权重设置越高命中越容易,之和可以不等于100;简单实现代码如下: import java.util.ArrayList; imp...

根据权重随机选取指定条数记录的简单算法实现(C#)【含源代码】

原文地址: http://www.cnblogs.com/foolin/archive/2012/03/22/2412632.html 一.应用场景:     有时我们需要从一些列数据...

随机计算TFIDF作为权重,然后利用余弦距离进行聚类,用的是简单k-means算法。

#include #include #include #include #include #include #include #include #include using names...

随机选取算法 (有权重的记录中选取)

三类随机问题 1.  已有n条记录,从中选取m条记录,选取出来的记录前后顺序不管。      实现思路:按行遍历所有记录,约隔n/m条取一个数据即可 2.  在1...

带权重的随机算法

想给用户赠送随机额度的优惠券?大额度的几率低,小额度的几率高?试试这个算法!...

随机输出带权重数组中的值(百度二面算法题目)

题目:给定一个数组,每个值都是一个权值。随机返回数组中的数,要求权值高的相应的返回的概率高。比如现在数组存储了音乐的打分,要求随机返回数组中一个数的值。(假设数组中的值都是整数) 思路: 以 A:3,...

游戏中读取物品,各种资源配置,用于各种配置

游戏中读取配置的数据
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:PHP权重算法-用于游戏根据权限来随机物品
举报原因:
原因补充:

(最多只允许输入30个字)