求解0-1背包问题的PHP回溯法实例分析

本文介绍了用PHP回溯法求解0-1背包问题,供大家参考,具体分析如下:

此代码是按照软件设计者的伪代码编写的。

最麻烦的不是PHP的伪代码,而是数组下标由0,以及相应下标判断的问题;

用调试输出写一篇文章




< PHP
v_arr美元=阵列(11,21,31,33,43,53,55,65);
w_arr美元=阵列(1,11,21,23,33,43,45,55);
$ N =计数($ w_arr);
测试输出
var_dump(bknap1(110));
/ / var_dump(绑定(139,897110));
函数绑定($ V,W K美元,美元,美元w_total){
全球v_arr美元,w_arr美元,$ N;
美元=美元;
美元= W;
/ / var_dump($ w_total);var_dump(N);var_dump(k);var_dump($ V);var_dump($ W);
/死亡;
对于($ = $ K + 1;$ i $ n;$ + +){
C = C +美元美元美元美元w_arr {我};
/ / var_dump($ w_total);var_dump($ C);
如果($ C组w_total美元)
B =美元美元美元v_arr {我};
别的{
/ / var_dump(((1($ C $ w_total)/美元美元w_arr {我})* $ v_arr {我});
B = B +(美元$ 1($ C $ w_total)/美元美元w_arr {我})* $ v_arr {我};
返回$;
}
}
/ * var_dump(' ------界头);
var_dump(k);
var_dump($);
var_dump(' ------必将结束);* /
返回$;
}
功能bknap1($ w_total){
全球v_arr美元,w_arr美元,$ N;
$ = $ CP = 0;
$ k=0;
$ = 1;
当(真){
而(k<n CW + $ w_arr { $ K } < = $ w_total){
连续w_arr美元美元= { $ K };
CP =美元美元v_arr { $ K };
y_arr美元{ $ K } = 1;
$ = 1;
}
/ / var_dump($ CW);var_dump($ CP);var_dump($ y_arr);var_dump(k);var_dump(N);
如果($ = $ n){
美元= CP;
百万美元;
美元= n-1美元;
x_arr = y_arr美元美元;
/ /绑定(美元美元美元CP,CW,K,w_total美元);
/ / var_dump(绑定(美元美元美元CP,CW,K,w_total美元美元美元),FP,K);模具;
/ / var_dump($ FP);var_dump($ FW);var_dump($ y_arr);var_dump(k);var_dump(N);
其他{ }
y_arr美元{ $ K } = 0;
}
/ / var_dump($ y_arr);var_dump(k);var_dump(N); / /模具;
/ / var_dump(绑定(美元美元美元CP,CW,K,w_total美元美元),FP);模具;
而(绑定(美元美元美元CP,CW,K,w_total美元)< = $ FP)
{
While ($k>=0 $Y_arr{$k}! = 1){
$ k=1;
}
如果(k<0)
{
返回的x_arr;
}
var_dump(k);
y_arr美元{ $ K } = 0;
连续w_arr美元美元= { $ K };
CP =美元美元v_arr { $ K };
}
$ k=1;
}
}
>


希望本文能对大家的PHP程序设计有所帮助。