Php 此函数需要正确的数组计算
这里是我的算法要求找到捐赠者id的总和捐赠 等于所需捐款Php 此函数需要正确的数组计算,php,arrays,algorithm,function,loops,Php,Arrays,Algorithm,Function,Loops,这里是我的算法要求找到捐赠者id的总和捐赠 等于所需捐款 <?php function magicalFunction($donationArray , $expactedValue ){ /*need some algorithm get key of elements from $donationArray which sum is equal to $expactedValue $*/ } $userDonation = array( '1' =&
<?php
function magicalFunction($donationArray , $expactedValue ){
/*need some algorithm get key of elements from $donationArray which sum is
equal to $expactedValue $*/
}
$userDonation = array(
'1' => 100,
'4' => 8064,
'5' => 578,
'6' => 752,
'21' => 512,
'121' => 660,
'152' => 135,
'199' => 1350
);
$requiredDonation = 886;
$selectedDonatee = magicalFunction( $userDonation , $requiredDonatee );
// return false
$requiredDonation = 1465;
$selectedDonatee = magicalFunction( $userDonation , $requiredDonatee );
// return array(5, 6, 152);
?>
这是最重要的,也是最重要的
。。。给定一组整数和一个整数s,是否有任何非空子集和s
在这里:
$requiredDonation是s
$usergeneration是一组整数
magicalFunction返回求和为s的整数集的子集。正确NP完全问题的正确答案为非错误答案,错误答案为错误答案
为子集和问题提供了一些解决方案,谷歌搜索提供了其他解决方案
这是一个建议。
是基于PHP的解算器。
您可能还希望评估需求,因为如果要搜索的捐赠数量很大,问题可能会失控。这是NP完全问题的一个性质。它们可能需要很长时间才能精确求解。这里有一种方法。对于较大的输入阵列,这会很慢,但在理论上是可行的。此外,这将返回第一个键组合,其值与它找到的目标值之和,并且将忽略任何其他可能的组合
function findSet($values, $target, $keys = [], $sum = 0) {
while ($k = key($values)) {
$v = reset($values);
// return the current set of keys if the target sum is found
if ($sum + $v == $target) return array_merge($keys, [$k]);
// remove the current value
unset($values[$k]);
// recursively test the remaining values and return if a matching set is found
if ($sum + $v < $target) {
$test = findSet($values, $target, array_merge($keys, [$k]), $sum + $v);
if ($test) return $test;
}
}
// return false if no matching sets are found
return false;
}
$result = findSet($userDonation, 1465);
我不知道你想要什么,你能给我一个使用你自己的数组的例子吗?我几乎可以保证有更好的方法来完成你正在做的事情。您想将数组值之和等于传递给函数的int值吗?那么,您自己是否尝试过任何方法,或者这只是一个需求规范。您希望我们在哪里为您构建它?更新的格式