gpt4 book ai didi

php - 如何创建平均分布的三人小组?

转载 作者:行者123 更新时间:2023-11-29 06:35:10 25 4
gpt4 key购买 nike

对于网站应用程序,我需要随机组成三个一组。用户他/她自己不能对他/她自己进行评分(因此不能成为该组的一部分)。始终至少有 4 个用户。

例如,如果有 5 个用户,我将有一个这样的数组:Array(0,1,2,3,4) 我希望输出为(其中键是用户和数据是 3 人组)。

Array(
[0 : 1,2,3],
[1 : 0,2,4],
[2 : 1,4,3],
[3 : 0,1,4],
[4 : 0,2,3]
);

请注意,该用户从不在该组中,并且每个用户都恰好分配了 3 次。

您不能简单地随机选择用户到组,因为它可能被分配超过 3 次并强制某些组中的用户少于 3 个。

我希望我适本地解释了这个问题并且有人能够提供帮助。

这里有一些代码将三个随机数放入一个字典中,并且对 [0,1,2,3] 工作正常,但是(很可能)对于任何更大的数字都会失败,因为数字不会平均分布(并且会继续永远在 while 循环中,因为没有可能的数字了)。

$rows = range(0,3);
$array_size = count($rows);
$peers_array = Array();
$number_count = array_fill(0, $array_size, 0);

foreach($rows as $index => $row){
$randomNumbers = Array();
for($x = 0; $x < 3; ++$x){
$randomNumber = rand(0, $array_size-1);
while($randomNumber==$index or in_array($randomNumber, $randomNumbers) or $number_count[$randomNumber]>2)
$randomNumber = rand(0, $array_size-1);
$number_count[$randomNumber]++;
$randomNumbers[] = $randomNumber;
}
$peers_array[$index] = $randomNumbers;
}
print_R( $peers_array);

最佳答案

好的,我想出了我自己的解决方案。花了一点时间,但多亏了建议,我才能够想出这个解决方案:

首先它生成从 0 到用户数 - 1 的范围(例如,对于 5,它会给出 [0,1,2,3,4])然后每次之后它都会将列表移动一个(例如 [0 ,1,2,3,4] 变为 [4,0,1,2,3]) 然后它获取数组给定索引处的每个元素并将其放入一个组中(所以如果我只想要 2 个一组会给出 0:[0,4] 1:[0,1] 2:[2,1] 等等...)。然后你在用户数量 - 组的大小之间移动顺序,不要问只相信我。这保证了所有数字出现的次数相同,但顺序仍然是随机的。

下面几行实现了这一点:

function getUsers($user_num, $groups_of){
$index_list = range(0,$user_num-1);
$random_indexes = range(0,$user_num-1);
shuffle($random_indexes);

$groups = array();
foreach($index_list as $user_num)
$groups[] = array($random_indexes[$user_num]);

for($i = 0; $i<($groups_of-1); ++$i){
array_unshift($index_list, array_pop($index_list)); //puts the last element first

foreach($index_list as $index => $user_num)
$groups[$index][] = $random_indexes[$user_num];
}

$shift_number = rand(1, ($len_users-$groups_of));
for($i = 0; $i<$shift_number; ++$i)
array_unshift($groups, array_pop($groups));

return $groups
}

关于php - 如何创建平均分布的三人小组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25336332/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com