背包问题的 javascript和java 实现

一个背包,总载重量限定

提供各种质量及相应价值的物品, 提供一个价值最优的装包选择

参考:  http://www.importnew.com/13072.html


[html]  view plain copy
  1. <!DOCTYPE html>  
  2. <head>  
  3. <meta charset="utf-8">  
  4. <script type = "text/javascript">  
  5.   
  6. var total = 10;  
  7. var OBJ_NUM = 4;  
  8. var weights = [];  
  9. var values = [];  
  10. var matrix = [];  
  11.   
  12. /**** init weights ****/  
  13. weights.push(0); // defualt 0  
  14. weights.push(5);  
  15. weights.push(4);  
  16. weights.push(6);  
  17. weights.push(3);  
  18.   
  19. /**** init values ****/  
  20. values.push(0); // default 0  
  21. values.push(10);  
  22. values.push(40);  
  23. values.push(30);  
  24. values.push(50);  
  25.   
  26.   
  27. /** init row 0 value as ZERO **/  
  28. for(var i=0; i<(OBJ_NUM+1)*(total+1); i++)  
  29.     matrix.push(0);  
  30.       
  31. var X_WIDTH = total + 1;  
  32.   
  33. /****  calculate  ****/  
  34. for(var y=1; y<=OBJ_NUM; y++){  
  35.     for(var x=1; x<=total; x++){  
  36.         if(x >= weights[y]){  
  37.             // 添加了当前物品的价值  
  38.             var addedValue = matrix[(y - 1) * X_WIDTH + (x - weights[y])] + values[y];          
  39.             matrix[y*X_WIDTH + x] = Math.max(addedValue,   
  40.                                         matrix[(y - 1) * X_WIDTH + x]);  
  41.         }else{  
  42.             matrix[y*X_WIDTH + x] = matrix[(y-1) * X_WIDTH + x];  
  43.         }  
  44.     }  
  45. }  
  46.    
  47.   
  48. for(var y=1; y<=OBJ_NUM; y++){     
  49.     for(var x=1; x<=total; x++){  
  50.         document.write(matrix[y*X_WIDTH + x] + "\t");  
  51.     }  
  52.     document.write("</br>");  
  53. }  
  54.   
  55. document.write("最优解(背包的总value值最大)为: " + matrix[(OBJ_NUM+1)*X_WIDTH - 1]);  
  56.   
  57. </script>  
  58.   
  59.   
  60. </head>  
  61. </html>  



输出:

背包问题的 javascript和java 实现



下面是Java的实现

[java]  view plain copy
  1. package com.anialy.test.packnage;  
  2. /** 
  3.  * Package: com.anialy.test.packnage 
  4.  * 参考: http://www.importnew.com/13072.html 
  5.  * 
  6.  */  
  7. public class PackageProblem {  
  8.     // 物品数量  
  9.     private static final int NUM = 4;  
  10.       
  11.     // 物品质量, 0为占位符  
  12.     private static int wt[] = new int[]{05463};   
  13.       
  14.     // 物品价值, 0为占位符  
  15.     private static int val[] = new int[]{010403050};  
  16.       
  17.     // 背包容量  
  18.     private static final int TOTAL = 10;  
  19.     private static final int X_WIDTH = TOTAL + 1;  
  20.       
  21.     private static int process(){  
  22.         int calc[] = new int[X_WIDTH * (NUM + 1)];  
  23.           
  24.         for(int y=0; y<=NUM; y++)  
  25.             for(int x=0; x<=TOTAL; x++)  
  26.                 calc[y*X_WIDTH + x] = 0;  
  27.           
  28.         for(int y=1; y<=NUM; y++){  
  29.             for(int x=1; x<=TOTAL; x++){  
  30.                 if(x >= wt[y]){  
  31.                     calc[y*X_WIDTH + x] = Math.max(  
  32.                             val[y] + calc[(y-1)*X_WIDTH + (x-wt[y])]  
  33.                            , calc[(y-1)*X_WIDTH + x]);  
  34.                 }else{  
  35.                     calc[y*X_WIDTH + x] = calc[(y-1)*X_WIDTH + x];  
  36.                 }  
  37.             }  
  38.         }  
  39.           
  40.         for(int y=1; y<=NUM; y++){  
  41.             for(int x=1; x<=TOTAL; x++){  
  42.                 System.out.format("%3d ", calc[y*X_WIDTH + x]);  
  43.             }  
  44.             System.out.printf("\n");  
  45.         }  
  46.           
  47.         // 返回最后一个  
  48.         return calc[(NUM+1)*X_WIDTH - 1];  
  49.     }  
  50.       
  51.     public static void main(String[] args) {  
  52.         System.out.printf("\n optimum value: %d", process());  
  53.     }  
  54. }  

你可能感兴趣的:(背包问题的 javascript和java 实现)