php - 生成数字组合

标签 php algorithm loops combinations

我有一个包含两个变量的 PHP 页面:$nbRank$nbNumeric。根据这两个变量,我想生成一个包含所有现有组合的数组。例如:

如果 $nbRank = 3$nbNumeric = 2 我会:

0 0 0
0 0 1
0 0 2
0 1 0
0 1 1
0 1 2
0 2 0
0 2 1
0 2 2
1 0 0
1 0 1
1 0 2
1 1 0
1 1 1
1 1 2
1 2 0
1 2 1
1 2 2
2 0 0
2 0 1
2 0 2
2 1 0
2 1 1
2 1 2
2 2 0
2 2 1
2 2 2

因此,我创建了不同的循环和公式来获得最终结果,但它不起作用。这就是我所做的:

$result = array();

$nbIntRank = 0;
$nbIntNumeric = 0;
$nbRank = array();
$nbNumeric = array();

$nb_rangs = 3;
$nb_chiffres = 2;

for ($i = 1; $i <= $nb_rangs; $i++){
    $nbRank[$i] = 0;
}

$nbIntRank = count($nbRank);

for ($i = 0; $i <= $nb_chiffres; $i++){
    $nbNumeric[$i] = $i;
}

$nbIntNumeric = count($nbNumeric);

$algo = ($nb_rangs * ($nb_chiffres + 1)) * ($nb_rangs * ($nb_chiffres + 1));
$nbLine = $algo / ($nb_rangs);

$occ = 0;
for ($i = 0; $i < $nbLine; $i++){
    foreach ($nbRank as $nbrItem => $nbrValue){
        $result[$i][] = $nbrValue;
        $occ++;
    }
}

echo '#############<br />';
echo '### DATAS ###<br />';
echo '#############<br /><br />';

echo '- Nb Elements : '.$algo.'<br />';
echo '- Nb Lines : '.$nbLine.'<br />';
echo '- Nb Valuable Occurency : '.$occ.'<br />';

echo '<br /><hr /><br />';
echo '##############<br />';
echo '### PARSER ###<br />';
echo '##############<br /><br />';

echo '<pre>';
var_dump($result);
echo '</pre>';

我设法用空值创建了我的最终数组(81 个值,在 27 行中,每行 3 个元素)但它只包含 0。

最佳答案

您表示您可以使用伪代码。抱歉,我无法为您的 PHP 代码提供具体的更正 [如果出现这些答案 - 它们可能更具教育意义],但我选择了 recursive这个问题的解决方案。

在递归的每一层,尝试所有的可能性,并调用同一个函数来找到一个更小尺寸的所有组合

伪代码:

findCombinations(range,size,sol,resultList):
  if (size ==0): #base clause
     resultList.append(copy(sol)) #making a copy of sol and appending it as a solution
     return
  for each i in (0,range):
     sol.append(i)
     findCombinations(range,size-1,sol,resultList) #recursive invokation, with smaller size
     sol.deleteLast() #clean up environment before next calls

调用 findCombinations(3,3,[],resultList) 其中 [] 只是空列表,resultList 将包含算法完成后的组合列表。此调用将获得大小 3 与元素 0、1、2 的所有组合。

复杂性注释: 可能性的数量呈指数增长 [O(rangesize)],因此如果您尝试使用 20,20 调用它 - 对于任何解决方案都可能需要一些 [非常长] 的时间。

关于php - 生成数字组合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10149523/

相关文章:

algorithm - 如何在 Haskell 中调试 BST 验证算法?

algorithm - 如何从 n 个元素中找到 k-排列的索引?

jquery - 如何在 $(element).each(...) 中使用 fadeTo

javascript - jQuery 下一个循环不会回到第一个 child

php - 从 php 调用时,将 RPi.GPIO 导入为 GPIO 在 python 中不起作用

PHP 代码气味检测器

python - 查找列表中每个字符串之间的最大差异

php - 在双引号或单引号中打印 HTML 和 PHP 代码

php - 无法在 CAKE PHP 中重定向页面

python - 遍历 Redis 键