|
$ V_arr = array (, 33 );
$ W_arr = array );
$ N = count ($ w_arr );
// Test output
Var_dump (bknap1 (110 ));
// Var_dump (bound (7,110 ));
Function bound ($ v, $ w, $ k, $ W_total ){
Global $ v_arr, $ w_arr, $ n;
$ B = $ v;
$ C = $ w;
// Var_dump ($ W_total); var_dump ($ n); var_dump ($ k); var_dump ($ v); var_dump ($ w );
// Die;
For ($ I = $ k + 1; $ I <$ n; $ I ++ ){
$ C = $ c + $ w_arr [$ I];
// Var_dump ($ W_total); var_dump ($ c );
If ($ c <$ W_total)
$ B + = $ v_arr [$ I];
Else {
// Var_dump (1-($ c-$ W_total)/$ w_arr [$ I]) * $ v_arr [$ I]);
$ B = $ B + (1-($ c-$ W_total)/$ w_arr [$ I]) * $ v_arr [$ I];
Return $ B;
}
}
/* Var_dump ('------ bound head ');
Var_dump ($ k );
Var_dump ($ B );
Var_dump ('------ bound end ');*/
Return $ B;
}
Function bknap1 ($ W_total ){
Global $ v_arr, $ w_arr, $ n;
$ Cw = $ cp = 0;
$ K = 0;
$ Fp =-1;
While (true ){
While ($ k <$ n & $ cw + $ w_arr [$ k] <= $ W_total ){
$ Cw + = $ w_arr [$ k];
$ Cp + = $ v_arr [$ k];
$ Y_arr [$ k] = 1;
$ K + = 1;
}
// Var_dump ($ cw); var_dump ($ cp); var_dump ($ Y_arr); var_dump ($ k); var_dump ($ n );
If ($ k = $ n ){
$ Fp = $ cp;
$ Fw = $ cw;
$ K = $ n-1;
$ X_arr = $ Y_arr;
// Bound ($ cp, $ cw, $ k, $ W_total );
// Var_dump (bound ($ cp, $ cw, $ k, $ W_total), $ fp, $ k); die;
// Var_dump ($ fp); var_dump ($ fw); var_dump ($ Y_arr); var_dump ($ k); var_dump ($ n );
} Else {
$ Y_arr [$ k] = 0;
}
// Var_dump ($ Y_arr); var_dump ($ k); var_dump ($ n); // die;
// Var_dump (bound ($ cp, $ cw, $ k, $ W_total), $ fp); die;
While (bound ($ cp, $ cw, $ k, $ W_total) <= $ fp)
{
While ($ k> = 0 & $ Y_arr [$ k]! = 1 ){
$ K-= 1;
}
If ($ k <0)
{
Return $ X_arr;
}
Var_dump ($ k );
$ Y_arr [$ k] = 0;
$ Cw-= $ w_arr [$ k];
$ Cp-= $ v_arr [$ k];
}
$ K + = 1;
}
}
?>
|