相关疑难解决方法(0)

从阵列加权随机选择

我想从数组中随机选择一个元素,但每个元素都有一个已知的选择概率.

所有机会在一起(在阵列中)总和为1.

您认为哪种算法最快,最适合大型计算?

例:

id => chance
array[
    0 => 0.8
    1 => 0.2
]
Run Code Online (Sandbox Code Playgroud)

对于这个伪代码,所讨论的算法应该在多个调用上统计地返回id上0的一个元素的id 上的四个元素1.

arrays random algorithm

69
推荐指数
7
解决办法
4万
查看次数

在PHP中按权重生成随机结果?

我知道如何在PHP中生成一个随机数,但是我想要一个介于1-10之间的随机数,但我想要更多的3,4,5,然后是8,9,10.这怎么可能?我会发布我尝试的但老实说,我甚至不知道从哪里开始.

php random

55
推荐指数
6
解决办法
3万
查看次数

如何从PHP列表中选择10个随机内容?

我知道如何从数组中选择一个随机项,但是如何从一个数组中选择十个随机项,比方说二十个项?(在PHP中.)

更复杂的是每个项目实际上有两个部分:文件名和描述.基本上,它是一个网页,每次重新加载时将显示十个随机图像.这些数据的实际格式并不重要,尽管它很简单,我宁愿将其包含在平面文本中,甚至是硬编码,而不是设置数据库.(这也不是经常改变的.)

奖金问题,不确定我是否会这样做 - 但是你如何对参赛作品进行加权,以便某些项目总是被选中,或者至少比其他项目更频繁?

谢谢.

php arrays random

10
推荐指数
2
解决办法
7899
查看次数

加权随机选择

我有一套物品。我需要随机挑选一个。问题是它们每个的权重都是1-10。权重为 2 意味着该商品被挑选的可能性是权重为 1 的两倍。权重为 3 则意味着该商品被挑选的可能性是权重的三倍。

我目前用每个项目填充一个数组。如果权重为 3,我将该项目的三个副本放入数组中。然后,我随机选择一个项目。

我的方法速度很快,但占用大量内存。我试图想出一种更快的方法,但什么也没想到。有人有解决这个问题的窍门吗?

编辑:我的代码...

显然,我没说清楚。我不想使用(或改进)我的代码。这就是我所做的。

//Given an array $a where $a[0] is an item name and $a[1] is the weight from 1 to 100.
$b = array();
foreach($a as $t)
    $b = array_merge($b, array_fill(0,$t[1],$t));
$item = $b[array_rand($b)];
Run Code Online (Sandbox Code Playgroud)

这要求我检查 $a 中的每个项目,并为数组使用 $a 内存的 max_weight/2*size 。我想要一个完全不同的算法。

此外,我在半夜用电话问了这个问题。在手机上输入代码几乎是不可能的,因为那些愚蠢的虚拟键盘简直太糟糕了。它会自动更正所有内容,破坏我输入的任何代码。

此外,我今天早上醒来时发现了一种全新的算法,该算法几乎不使用任何额外的内存,并且不需要检查数组中的每个项目。我将其作为答案发布在下面。

php

4
推荐指数
1
解决办法
4175
查看次数

标签 统计

php ×3

random ×3

arrays ×2

algorithm ×1