我想找出什么是最有效的PHP脚本来均匀地表示特定组合子集中的所有数字。
彩票问题示例:
我知道从12个数字中我可以创建 924 组合,每个组合包含6个数字。
由于我买不起924行 - 我只想挑选10行代表所有选定数字的行。
所以在这个例子中它将是:
7-8-9-10-11-12
和另外8行
我试图避免像:
这样的组合......等几乎相同;我想平均代表每个数字。
希望这是有道理的。
答案 0 :(得分:1)
您可以创建要使用的数字的“池”,并从该池中随机抽取。例如,如果您想要10个组合,每组6个数字,那么总共有60个数字。但是你希望1-12中的每一个均匀表示,因此每个数字将有5个。所以从包含每个1-12中的5个的数组开始,并从数组中随机抽取每组6个。
$pool = array();
for($i = 0; $i < 5; $i++)
for($x = 1; $x <= 12; $x++)
$pool[] = $x;
$result = array();
for($i = 0; $i < 10; $i++) {
$set = array();
for($x = 0; $x < 6; $x++) {
$key = array_rand($pool);
$set[] = $pool[$key];
unset($pool[$key]);
}
$result[] = $set;
}
// $result now contains 10 sets of 6 numbers each
答案 1 :(得分:0)
// how many numbers are in the set, starting from 1 $numbers = 12; $set = array(); for ($i=1;$i>=$numbers;$i++) { array_push($set, $i); } // how many numbers in the subset $count = 6; $subSet = array(); while ($count > 0) { // get a random number from 1 to numbers in set $rand=rand(0,$numbers-1); array_push($subSet, $set[$rand]); $count--; } // $subSet now contains a combination of 6 random numbers from 1 to 12 // keep refreshing var_dump($subSet);
你去解释,这是你想要的吗?
编辑:我刚注意到你说“最有效的方式”。这不是最有效的(就使用的内存而言)方式,但它很接近。