数学建模社区-数学中国

标题: 200908网友练习《最优化问题》 [打印本页]

作者: dalin123    时间: 2009-8-17 16:34
标题: 200908网友练习《最优化问题》
本帖最后由 为你奋斗 于 2009-12-3 15:35 编辑


文件保存问题

    在出发去度假之前,你希望将你的一些最重要的文件备份到软盘上。每个空白软盘的容量是1.44MB。你需要备份的16个文件的大小分别为:46KB55KB62KB87KB108KB114KB137KB164KB253KB364KB372KB388KB406KB432KB461KB851KB。假定你无法使用压缩软件,但软盘数量足够,那么应如何将这些文件分配到每一张软盘上才能使使用的软盘数目最少?




急需参考答案!  主要思路  。。。。  感谢!
作者: lijiustc    时间: 2009-8-17 17:16
整数规划~~
作者: lijiustc    时间: 2009-8-17 17:17
对于整数规划应该有现有程序可解的~~~~
应该是这样了~~~问题不难(?我只是随便看了看~~~~回答不当,楼主别生气哈~~~~呵呵)
作者: pengxiangda    时间: 2009-8-18 18:09
整数0—1规划易想到,但实现起来并不大容易。
我想用贪婪算法也能实现,其原理是每次挑能搁进最大的文件向软盘里储存。我在这里不能从理论上证明该算法一定能得到最优解,直观上感觉是有效的,仅当作参考。
用Matlab实现了该算法,附在下面,因时间的关系代码写的并不简洁,望批评指正
  1. C=input('请输入软盘的容量(以MB为单位):');
  2. C=C/1024;
  3. A=input('请输入所要备份的文件的大小(由大及小,用向量来表示,例如题目中的文件应表示为[388 372 364 253 164 137 114 108 87 62 55 46],编号1-12):');
  4. n=0;

  5. while sum(A)~=0
  6. C=1475;
  7. i=1;j=1;
  8. m=1;
  9. D=[];E=[];
  10. while C>0 & i<numel(A)+1
  11. C=C-A(i);
  12. if C<0 & i==numel(A)
  13. D(m)=A(i);
  14. end
  15. if C<0 & i<numel(A)
  16. while C<0 & i<numel(A)

  17. C=C+A(i);
  18. C=C-A(i+1);
  19. if C<0 & i<numel(A)
  20. D(m)=A(i+1);
  21. m=m+1;
  22. else
  23. E(j)=A(i+1);
  24. En(j)=i+1;
  25. j=j+1;
  26. end
  27. i=i+1;
  28. end
  29. else
  30. E(j)=A(i);
  31. En(j)=i;
  32. j=j+1;
  33. end
  34. i=i+1;
  35. end
  36. n=n+1;
  37. n=int8(n);
  38. A=D;
  39. disp('-----------------------------------------------------')
  40. disp('第')
  41. disp(n)
  42. disp('张软盘所放的文件为:')
  43. En
  44. disp('所放的文件的大小为:')
  45. E
  46. end
  47. disp('-----------------------------------------------------')
  48. disp('所需软盘的个数:')
  49. n
复制代码





欢迎光临 数学建模社区-数学中国 (http://www.madio.net/) Powered by Discuz! X2.5