求助:开发基于成本的Odds计算与Odds分布算法
本人英文水平有限,在此提前致歉。
一、任务说明与运行机制
需开发一款算法,输入为包含cost字段的物品数组,以及单次获取皮肤的成本$get_cost,示例数据如下:
$get_cost = 10; $items = [ ['cost' => 5], ['cost' => 10], ['cost' => 20] ];
通过筛选方法,已计算出部分输入对应的概率表(示例如下),表中展示了各物品的概率分布情况:
+———–+—–——–+——–—+ | 5 | 10 | 20 | +——––+——–––+—–——+ | 0 | 100 | 0 | | 10 | 85 | 5 | | 20 | 70 | 10 | | 30 | 55 | 15 | | 40 | 40 | 20 | | 50 | 25 | 25 | | 60 | 10 | 30 | +——––+——–––+—–——+
已删除部分筛选用数据,避免干扰
以下为基于概率进行随机选择的代码示例(JS版用于测试,PHP版用于物品选择):
JS测试代码
var get_cost = 10; var sum = 0; for (var i = 0; i < 10000000; i++) { var rand = Math.floor(Math.random() * 100) + 1 // generate a number from 1 to 100 if (rand <= 40) sum += 5; // 40% chance else if (rand <= 80) sum += 10; // 40% chance else if (rand <= 100) sum += 20; // 20% chance } document.getElementById('cost_get').innerHTML = i * get_cost; document.getElementById('sum_get').innerHTML = sum;
<div id="cost_get"></div> <div id="sum_get"></div>
PHP物品选择代码
$items = [ ['cost' => 5, 'chance' => 40], ['cost' => 10, 'chance' => 40], ['cost' => 20, 'chance' => 20] ]; foreach ($items as $key => &$item) { if (isset($items[$key - 1])) $item['chance'] += $items[$key - 1]['chance']; } function getRandItem($items) { $rand = rand(1, 100); foreach ($items as $item) { if ($rand <= $item['chance']) return $item; } } print_r(getRandItem($items));
二、理论分析
查阅了概率理论相关资料,推测需采用拉普拉斯分布,但仅为个人观点。通过整理概率数据,发现以下规律:
- 若输入2个物品,仅存在1种概率分布方案;若为3个及以上,方案数量大幅增加;
- 若存在等于
$get_cost的物品,必然存在其概率为100%的方案;若为3个及以上物品,还存在其概率为0%的方案; - 例外情况:所有物品的
cost均小于或大于$get_cost时,概率方案数量可能为0。
三、求助内容
观察到概率呈线性增减的固定规律,但无法推导通用计算公式,恳请协助开发该概率计算与分布算法,可提供报酬。代码可使用任意语言编写,相关代码已简化以便理解。再次致歉可能存在的表述错误,感谢关注!
内容的提问来源于stack exchange,提问作者David Meyster
相关产品推荐
相关产品推荐

