PHPスクリプトを使用して板取り問題を実装する必要があります。私の数学のスキルはそれほど優れていないので、私はそれを総当たり攻撃しようとしています。
これらのパラメータから始めます
- $ Inventoryは、カット可能な長さの配列です。
- $ requestedPiecesは、顧客から要求された長さの配列です。
- $solutionは空の配列です
私は現在、この再帰関数を実行して、考えられるすべての解決策を考え出しました。
function branch($inventory, $requestedPieces, $solution){
// Loop through the requested pieces and find all inventory that can fulfill them
foreach($requestedPieces as $requestKey => $requestedPiece){
foreach($inventory as $inventoryKey => $piece){
if($requestedPiece <= $piece){
$solution2 = $solution;
array_push($solution2, array($requestKey, $inventoryKey));
$requestedPieces2 = $requestedPieces;
unset($requestedPieces2[$requestKey]);
$inventory2 = $inventory;
$inventory2[$inventoryKey] = $piece - $requestedPiece;
if(count($requestedPieces2) > 0){
branch($inventory2, $requestedPieces2, $solution2);
}else{
global $solutions;
array_push($solutions, $solution2);
}
}
}
}
}
これで私が発見した最大の非効率性は、同じソリューションを複数回見つけるが、ステップの順序が異なることです。
例えば:
- $ Inventory = array(1.83、20.66);
- $ requestedPieces = array(0.5、0.25);
関数は8つのソリューションを考え出しますが、4つのソリューションを考え出す必要があります。これを解決するための良い方法は何ですか。