[算法]在已知数字中找到N个满足条件的组合
已知有N个数字,找到能够满足条件的N个组合。
已知数字如图:
现在需要找到任意几个数字相加等于 50 的所有的组合。
写了一个程序,但是一直跑不出来结果(可能是数据量太大了),有没有大佬有更好的方法。
<?php
function printAllSubsetsRec($arr, $n, $v, $sum)
{
if ($sum == 0) {
for ($i = 0; $i < count($v); $i++)
echo $v[$i] . " ";
echo "\n";
return;
}
if ($n == 0)
return;
printAllSubsetsRec($arr, $n - 1, $v, $sum);
array_push($v, $arr[$n - 1]);
printAllSubsetsRec($arr, $n - 1, $v,
$sum - $arr[$n - 1]);
}
function printAllSubsets($arr, $n, $sum)
{
$v = array();
printAllSubsetsRec($arr, $n, $v, $sum);
}
$data_list = [
['number' => 6, 'total' => 41],
['number' => 7.1, 'total' => 168],
['number' => 8.2, 'total' => 22],
['number' => 6.9, 'total' => 171],
['number' => 6.5, 'total' => 310],
['number' => 7.2, 'total' => 238],
['number' => 7, 'total' => 189],
['number' => 6.8, 'total' => 287],
['number' => 7.6, 'total' => 58],
['number' => 8, 'total' => 44],
['number' => 7.5, 'total' => 90],
['number' => 7.7, 'total' => 50],
['number' => 7.4, 'total' => 119],
];
$arr = [];
foreach ($data_list as $item) {
for ($i = 0; $i < $item['total']; $i++) {
$arr[] = $item['number'];
}
}
$sum = 50;
$n = count($arr);
printAllSubsets($arr, $n, $sum);
推荐文章: