我需要一个函数来返回输入数组的所有可能的唯一变体,但不重复数组元素,因此 [a,b,c] 和 [b,c,a] 是相同的。
我有一个使用二进制计数输出所需结果的工作函数。所以对于它的输入数组array("a", "b", "c")
将输出:
Array
(
[0] => Array
(
[0] => c
)
[1] => Array
(
[0] => b
)
[2] => Array
(
[0] => b
[1] => c
)
[3] => Array
(
[0] => a
)
[4] => Array
(
[0] => a
[1] => c
)
[5] => Array
(
[0] => a
[1] => b
)
[6] => Array
(
[0] => a
[1] => b
[2] => c
)
)
但是,我发现对于具有 20 个或更多元素的数组,代码会耗尽内存。我怀疑是因为$binary
变量
我正在使用的代码是:
function find_unique_combinations($arr){
$bits = count($arr);
$dec = 1;
while($dec < pow(2, $bits)) {
$binary = str_split(str_pad(decbin($dec), $bits, '0', STR_PAD_LEFT));
$curterm = array();
$i = 0;
while($i < ($bits)){
if($binary[$i] == 1) {
$curterm[] = $arr[$i];
}
$i++;
}
$terms[] = $curterm;
$dec++;
}
return $terms;
}
我得到的错误信息是
Fatal error: Allowed memory size of 536870912 bytes exhausted (tried to allocate 36 bytes)
php.ini 当前设置为 512MB,如果可能的话,我宁愿修复代码也不愿分配更多内存。
所以经过大量的分析和拆开代码,我得出的结论是,无论函数如何编码,都会发生内存耗尽错误。随着数组元素数量的增加,可能的组合数量呈指数增长,直至达到系统内存限制。
因此,我将输入数组限制为 15,这将产生 32,768 种可能的组合。这应该涵盖此功能最可能的用例。
感谢@Anant_Singh 看一看。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句