Einzelnen Beitrag anzeigen
  #2 (permalink)  
Alt 06-02-2017, 15:18
sanktusm
 Registrierter Benutzer
Links : Onlinestatus : sanktusm ist offline
Registriert seit: Aug 2005
Beiträge: 660
sanktusm zeigte ein beschämendes Verhalten in der Vergangenheit
Standard günstigste Kombination von Längen finden:

Wenn man eine gegebene Länge (mit kleinen Überlappungen) mit 2 Platten der Länge 4 und 2.5 auskleiden will, bekommt man mit dieser Funktion eine Lösung:
PHP-Code:
<?php
   
$totals 
= array();
$x=0;

function 
getAllCombinations($ind$denom$n$vals=array()){
    global 
$totals$x;    
    if (
$n == 0){
        foreach (
$vals as $key => $qty){
            for(; 
$qty>0$qty--){
                
$totals[$x][] = $denom[$key];
             }
        }
        
$x++;
        return;
    }
    if (
$ind == count($denom)) return;
    
$currdenom $denom[$ind];
    for (
$i=0;$i<=($n/$currdenom);$i++){
        
$vals[$ind] = $i;
        
getAllCombinations($ind+1,$denom,$n-($i*$currdenom),$vals);
    }
    
    return 
$totals;
}


function 
ceiling($number$significance 1)
    {
        return ( 
is_numeric($number) && is_numeric($significance) ) ? (ceil($number/$significance)*$significance) : false;
    }

$array = array(2.534);
$length ceiling(16.40.5);


$totals = array();
$x=0;


while(empty(
getAllCombinations(0$array$length))) {

$length $length 0.5;
 
}

$smallest = Array();


$totals = array();
$x=0;


$total_arr getAllCombinations(0$array$length);

foreach(
$total_arr as $combinations) {

$smallest[] = count($combinations);

}


$min_val 0;
$min_key 0;
foreach(
$smallest as $key => $val) {
  if (
$val $min_val) {
    
$min_val $min;
    
$min_key $key;
  }
}



$numberofoverlays count($total_arr[$min_key]) - 1;

$length $length + ($numberofoverlays 0.3);


$length ceiling($length0.5);

$totals = array();
$x=0;

while(empty(
getAllCombinations(0$array$length))) {

$length $length 0.5;
 
}
  
$totals = array();
$x=0;

$total_arr getAllCombinations(0$array$length);

echo 
"<pre>";
  
print_r($total_arr[$min_key]);
echo 
"</pre>";
Mit Zitat antworten