scala 动态规划解决完全背包问题
来源:互联网 发布:linux中vim删除一行 编辑:程序博客网 时间:2024/05/22 12:01
object WanQuanBeiBao2 extends App{val num = 5val volumn = 100//法一var beg = System.currentTimeMillis()val thing = Array((92,77),(22,22),(87,29),(46,50),(90,99)) //(价值,重量)// val volumn = 10// val thing = Array((6,2),(3,2),(5,6),(4,5),(6,4)) //(价值,重量)val table = new Array[Int](volumn+1)def find(){ //最终的表:对于当前的容量,尽量用性价比最高的商品填充,剩余的容量再用对它来说性价比最高的商品填充,依次走一去,直到不能再填充商品。for(i <- 0.until(num);j <- thing(i)._2.to(volumn).reverse;k <- 1.to(j/thing(i)._2))if(table(j-k*thing(i)._2)+k*thing(i)._1 > table(j)) table(j) = table(j-k*thing(i)._2)+k*thing(i)._1}find()println(table(volumn))println("耗时(毫秒): " + (System.currentTimeMillis() - beg))//法二:var beg2 = System.currentTimeMillis()val thing2 = Array((92,77),(22,22),(87,29),(46,50),(90,99)).sortWith((a:(Int,Int),b:(Int,Int)) => a._1/a._2.toDouble > b._1/b._2.toDouble)val table2 = new Array[Int](volumn+1)def find2(){ //将商品按性价比从高到低排序,能提高效率;这种改进使得动态规划与贪心算法很像。for(i <- 0.until(num);j <- thing2(i)._2.to(volumn).reverse;k <- 1.to(j/thing2(i)._2))if(table2(j-k*thing2(i)._2)+k*thing2(i)._1 > table2(j)) table2(j) = table2(j-k*thing2(i)._2)+k*thing2(i)._1}find2()println(table2(volumn))println("耗时(毫秒): " + (System.currentTimeMillis() - beg2))//法三:二进制思想划分商品var beg3 = System.currentTimeMillis()val table3 = new Array[Int](volumn+1)def find3(){for(i <- 0.until(num);j <- thing2(i)._2.to(volumn).reverse){var count = 0for(k <- 0.to((math.log(volumn/thing2(i)._2)/math.log(2)).toInt).reverse){val temp = math.pow(2,k).toIntif(j-(count+temp)*thing2(i)._2 >= 0){ //可以放if(table3(j-(count+temp)*thing2(i)._2)+(count+temp)*thing2(i)._1 > table3(j)){ //是否放table3(j) = table3(j-(count+temp)*thing2(i)._2)+(count+temp)*thing2(i)._1count += temp}}}}}find3()println(table3(volumn))println("耗时(毫秒): " + (System.currentTimeMillis() - beg3))}
结果如下:
261耗时(毫秒): 57261耗时(毫秒): 9261耗时(毫秒): 3
0 0
- scala 动态规划解决完全背包问题
- scala 动态规划解决0-1背包问题
- 完全背包问题 动态规划
- 动态规划-完全背包问题
- 完全背包问题-动态规划
- 动态规划-----背包问题-----01背包,完全背包,多重背包
- 动态规划解决背包问题
- 动态规划解决背包问题
- 动态规划解决背包问题
- 动态规划之完全背包问题
- 完全背包问题动态规划c++
- 动态规划初步-完全背包问题
- 动态规划-----完全背包
- 完全背包---动态规划
- 【动态规划】完全背包
- 动态规划之背包问题(二):完全背包问题
- 动态规划之01背包、完全背包问题
- 动态规划解决0-1背包问题
- 《JAVA与模式》之观察者设计模式及自定义监听器
- (十)c52学习之旅-定时器实验
- Wiki_Android汇总
- iOS10 IDFA 获取不到问题解决
- DOM初探系列(3)
- scala 动态规划解决完全背包问题
- React with Visual Studio Code and Webpack
- 文章标题
- 为自己活一次
- 第三周项目3 求集合并集
- 【物联网(IoT)开发】Arduino IDE(集成开发环境)下载及安装
- ThinkPHP3.1.3创建项目
- Android事件分发拦截机制(图解)
- zookeeper3.4.8伪集群的搭建