- packagecom.eshore.sweetop.dynamicprogramming;
- publicclassBestBinTree{
- //关键字节点,p[0]为构造数据
- //double[]p={0,0.15,0.10,0.05,0.10,0.20};
- //虚拟节点
- //double[]q={0.05,0.10,0.05,0.05,0.05,0.10};
- //规模
- //intn=5;
- double[]p={0,0.04,0.06,0.08,0.02,0.10,0.12,0.14};
- double[]q={0.06,0.06,0.06,0.06,0.05,0.05,0.05,0.05};
- staticintn=7;
- double[][]e=newdouble[n+2][n+1];
- double[][]w=newdouble[n+2][n+1];
- int[][]root=newint[n+2][n+2];
- publicvoidoptimalBest(){
- for(inti=1;i<e.length;i++){
- e[i][i-1]=q[i-1];
- w[i][i-1]=q[i-1];
- }
- for(intl=1;l<n+1;l++){
- for(inti=1;i<=n-l+1;i++){
- intj=i+l-1;
- e[i][j]=Double.MAX_VALUE;
- w[i][j]=w[i][j-1]+p[j]+q[j];
- for(intr=i;r<=j;r++){
- doublet=e[i][r-1]+e[r+1][j]+w[i][j];
- if(t<e[i][j]){
- e[i][j]=t;
- System.out.println(r);
- root[i][j]=r;
- }
- }
- }
- }
- //BestBinTree.display(w);
- //BestBinTree.display(e);
- BestBinTree.display(root);
- BestBinTree.viewTree(root);
- }
- publicstaticvoiddisplay(double[][]a){
- for(inti=1;i<a.length;i++){
- for(intj=1;j<a[0].length;j++){
- System.out.print(String.format("%.2f",a[i][j])+"/t");
- }
- System.out.println();
- }
- }
- publicstaticvoiddisplay(int[][]a){
- for(inti=1;i<a.length;i++){
- for(intj=1;j<a[0].length;j++){
- if(i<=j)
- System.out.print(a[i][j]+"");
- }
- System.out.println();
- }
- }
- publicstaticvoidviewTree(int[][]a){
- System.out.println("根是k"+a[1][n]);
- view(a,a[1][n],1,n);
- //System.out.println(a[6][7]);
- }
- publicstaticvoidview(int[][]a,introot,inti,intj){
- if(a[i][root-1]==0){
- System.out.println("k"+root+"左孩子是d"+(root-1));
- }else{
- System.out.println("k"+root+"左孩子是k"+a[i][root-1]);
- view(a,a[i][root-1],i,root-1);
- }
- if(a[root+1][j]==0){
- System.out.println("k"+root+"右孩子是d"+root);
- }else{
- System.out.println("k"+root+"右孩子是k"+a[root+1][j]);
- view(a,a[root+1][j],root+1,j);
- }
- }
- publicstaticvoidmain(String[]args){
- BestBinTreebbt=newBestBinTree();
- bbt.optimalBest();
- }
- }
算法之动态规划最优二叉树
最新推荐文章于 2024-11-19 08:00:00 发布