我看到这个algorithm that will take numbers or words and find all possible combinations
我正在使用它,但它不会返回所有“真正的”组合.
PHP:
<?php
require_once 'Math/Combinatorics.php';
$words = array('cat', 'dog', 'fish');
$combinatorics = new Math_Combinatorics;
foreach($combinatorics->permutations($words, 2) as $p) {
echo join(' ', $p), "\n";
}
?>
它返回:
cat dog
dog cat
cat fish
fish cat
dog fish
fish dog
但这些都不是真正的组合,所有真正的组合也包括这些:
cat cat
dog dog
fish fish
这就是我需要的,获得所有真实组合的方法:
cat dog
dog cat
cat fish
fish cat
dog fish
fish dog
cat cat
dog dog
fish fish
解决方法:
好的,这是你的代码(顺便说一句,感谢发布这样一个有趣且具有挑战性的问题 – 至少对我来说…… :-)) – 在给定元素数组的情况下对所有可能的排列(由N)使用递归
代码:
<?php
function permutations($arr,$n)
{
$res = array();
foreach ($arr as $w)
{
if ($n==1) $res[] = $w;
else
{
$perms = permutations($arr,$n-1);
foreach ($perms as $p)
{
$res[] = $w." ".$p;
}
}
}
return $res;
}
// Your array
$words = array('cat','dog','fish');
// Get permutation by groups of 3 elements
$pe = permutations($words,3);
// Print it out
print_r($pe);
?>
输出:
Array
(
[0] => cat cat cat
[1] => cat cat dog
[2] => cat cat fish
[3] => cat dog cat
[4] => cat dog dog
[5] => cat dog fish
[6] => cat fish cat
[7] => cat fish dog
[8] => cat fish fish
[9] => dog cat cat
[10] => dog cat dog
[11] => dog cat fish
[12] => dog dog cat
[13] => dog dog dog
[14] => dog dog fish
[15] => dog fish cat
[16] => dog fish dog
[17] => dog fish fish
[18] => fish cat cat
[19] => fish cat dog
[20] => fish cat fish
[21] => fish dog cat
[22] => fish dog dog
[23] => fish dog fish
[24] => fish fish cat
[25] => fish fish dog
[26] => fish fish fish
)
提示:通过排列($words,2),你将能够得到你想要的……