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


Posted in PHP onMarch 23, 2015

本文实例讲述了PHP回溯法解决0-1背包问题的方法。分享给大家供大家参考。具体分析如下:

这段代码是根据《软件设计师》教程的伪代码写的;
最麻烦的不是伪代码改成php,而是数组下标从0开始,及相应的下标判断问题;
带着调试输出一块写上

<?php
  $v_arr = array(11,21,31,33,43,53,55,65);
  $w_arr = array(1,11,21,23,33,43,45,55);
  $n = count($w_arr );
  //测试输出
  var_dump(bknap1(110));
//var_dump(bound(139,89,7,110));
  function bound($v,$w,$k,$W_total){
    global $v_arr,$w_arr,$n;
    $b = $v;
    $c = $w;
//var_dump($W_total);var_dump($n);var_dump($k);var_dump($v);var_dump($w);
//die;
    for($i=$k+1;$i<$n;$i++){
      $c = $c + $w_arr[$i];
      //var_dump($W_total);var_dump($c);
      if($c<$W_total)
        $b += $v_arr[$i];
      else{
//var_dump((1-($c-$W_total)/$w_arr[$i])*$v_arr[$i]);
        $b = $b+(1-($c-$W_total)/$w_arr[$i])*$v_arr[$i];
        return $b; 
      }
    }
    /*var_dump('------bound head');
    var_dump($k);
    var_dump($b);
    var_dump('------bound end');*/
    return $b; 
  }
  function bknap1($W_total){
    global $v_arr,$w_arr,$n;
    $cw = $cp = 0;
    $k = 0;
    $fp = -1;
    while(true){
      while($k<$n && $cw+$w_arr[$k]<=$W_total){
        $cw += $w_arr[$k];
        $cp += $v_arr[$k];
        $Y_arr[$k] = 1;
        $k +=1;
      }
//var_dump($cw);var_dump($cp);var_dump($Y_arr);var_dump($k);var_dump($n);
      if($k==$n){
        $fp = $cp;
        $fw = $cw;
        $k = $n-1;
        $X_arr = $Y_arr;
//bound($cp,$cw,$k,$W_total);
//var_dump(bound($cp,$cw,$k,$W_total),$fp,$k);die;
//var_dump($fp);var_dump($fw);var_dump($Y_arr);var_dump($k);var_dump($n);
      }else{
        $Y_arr[$k] = 0;
      }
//var_dump($Y_arr);var_dump($k);var_dump($n);//die;
//var_dump(bound($cp,$cw,$k,$W_total),$fp);die;
      while(bound($cp,$cw,$k,$W_total)<=$fp)
      {
        while($k>=0 && $Y_arr[$k]!=1){
          $k -= 1;
        }
        if($k<0)
        {
          return $X_arr;
        }
        var_dump($k);
        $Y_arr[$k] = 0;
        $cw -= $w_arr[$k];
        $cp -= $v_arr[$k];
      }
      $k += 1;
    }
  }
?>

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

PHP 相关文章推荐
使用sockets:从新闻组中获取文章(二)
Oct 09 PHP
php+mysql实现无限级分类 | 树型显示分类关系
Nov 19 PHP
解析在PHP中使用全局变量的几种方法
Jun 24 PHP
深入解析PHP中逗号与点号的区别
Aug 05 PHP
php中try catch捕获异常实例详解
Nov 21 PHP
PHP中substr()与explode()函数用法分析
Nov 24 PHP
php将文本文件转换csv输出的方法
Dec 31 PHP
又拍云异步上传实例教程详解
Apr 19 PHP
php自定义函数实现汉字转换utf8编码的方法
Sep 29 PHP
IIS 7.5 asp Session超时时间设置方法
Apr 17 PHP
Laravel实现表单提交
May 07 PHP
PHP实现百度人脸识别
May 06 PHP
PHP动态规划解决0-1背包问题实例分析
Mar 23 #PHP
php找出指定范围内回文数且平方根也是回文数的方法
Mar 23 #PHP
PHP判断一个字符串是否是回文字符串的方法
Mar 23 #PHP
PHP输出两个数字中间有多少个回文数的方法
Mar 23 #PHP
php使用正则表达式进行字符串搜索的方法
Mar 23 #PHP
分享十款最出色的PHP安全开发库中文详细介绍
Mar 22 #PHP
Codeigniter检测表单post数据的方法
Mar 21 #PHP
You might like
Protoss热键控制
2020/03/14 星际争霸
php判断并删除空目录及空子目录的方法
2015/02/11 PHP
分享10段PHP常用代码
2015/11/11 PHP
php探针不显示内存解决方法
2019/09/17 PHP
探讨JQUERY JSON的反序列化类 using问题的解决方法
2013/12/19 Javascript
鼠标悬浮停留三秒后自动显示大图js代码
2014/09/09 Javascript
JS动态修改表格cellPadding和cellSpacing的方法
2015/03/31 Javascript
在JavaScript中处理字符串之fontcolor()方法的使用
2015/06/08 Javascript
jQuery实现自动切换播放的经典滑动门效果
2015/09/12 Javascript
Jquery Easyui分割按钮组件SplitButton使用详解(17)
2016/12/18 Javascript
Bootstrap滚动监听组件scrollspy.js使用方法详解
2017/07/20 Javascript
cordova入门基础教程及使用中遇到的一些问题总结
2017/11/14 Javascript
JavaScript实现为事件句柄绑定监听函数的方法分析
2017/11/14 Javascript
详解koa2学习中使用 async 、await、promise解决异步的问题
2018/11/13 Javascript
js纯前端实现腾讯cos文件上传功能的示例代码
2019/05/14 Javascript
Vue ElementUI实现:限制输入框只能输入正整数的问题
2020/07/31 Javascript
python自动裁剪图像代码分享
2017/11/25 Python
Selenium定位元素操作示例
2018/08/10 Python
使用Python处理BAM的方法
2018/09/28 Python
Python线程同步的实现代码
2018/10/03 Python
Pycharm中切换pytorch的环境和配置的教程详解
2020/03/13 Python
Django serializer优化类视图的实现示例
2020/07/16 Python
matplotlib实现数据实时刷新的示例代码
2021/01/05 Python
html5 css3 动态气泡按钮实例演示
2012/12/02 HTML / CSS
Smashbox英国官网:美国知名彩妆品牌
2017/11/13 全球购物
护理毕业生自我鉴定
2014/02/11 职场文书
计算机科学系职业生涯规划书
2014/03/08 职场文书
简单租房协议书范本
2014/08/20 职场文书
党的群众路线教育实践活动对照检查材料思想汇报(党员篇)
2014/09/25 职场文书
大学生简历自我评价2015
2015/03/03 职场文书
2015个人半年总结范文
2015/03/09 职场文书
感恩教育主题班会
2015/08/12 职场文书
新手开公司创业注意事项有哪些?
2019/07/29 职场文书
Python中字符串对象语法分享
2022/02/24 Python
python区块链持久化和命令行接口实现简版
2022/05/25 Python
react中useState使用:如何实现在当前表格直接更改数据
2022/08/05 Javascript