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 相关文章推荐
PHP strtr() 函数使用说明
Nov 21 PHP
php面向对象全攻略 (三)特殊的引用“$this”的使用
Sep 30 PHP
PHP的explode和implode的使用说明
Jul 17 PHP
php 生成唯一id的几种解决方法
Mar 08 PHP
解析php中的escape函数
Jun 29 PHP
php根据身份证号码计算年龄的实例代码
Jan 18 PHP
destoon实现调用图文新闻的方法
Aug 21 PHP
php自定义函数实现汉字转换utf8编码的方法
Sep 29 PHP
Thinkphp实现短信验证注册功能
Oct 18 PHP
CI(CodeIgniter)框架实现图片上传的方法
Mar 24 PHP
thinkPHP分页功能实例详解
May 05 PHP
php基于自定义函数记录log日志方法
Jul 21 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
聊天室php&amp;mysql(四)
2006/10/09 PHP
弄了个检测传输的参数是否为数字的Function
2006/12/06 PHP
优化使用mysql存储session的php代码
2008/01/10 PHP
《PHP编程最快明白》第七讲:php图片验证码与缩略图
2010/11/01 PHP
php中flush()、ob_flush()、ob_end_flush()的区别介绍
2013/02/17 PHP
php常用正则函数实例小结
2016/12/29 PHP
php批量修改表结构实例
2017/05/24 PHP
php接口实现拖拽排序功能
2018/04/23 PHP
jQuery 数据缓存data(name, value)详解及实现
2010/01/04 Javascript
JS遮罩层效果 兼容ie firefox jQuery遮罩层
2010/07/26 Javascript
更换select下拉菜单背景样式的实现代码
2011/12/20 Javascript
NodeJS 模块开发及发布详解分享
2012/03/07 NodeJs
nodejs中exports与module.exports的区别详细介绍
2013/01/14 NodeJs
用javascript替换URL中的参数值示例代码
2014/01/27 Javascript
JavaScript排序算法之希尔排序的2个实例
2014/04/04 Javascript
jQuery设置和获取select、checkbox、radio的选中值方法
2017/01/01 Javascript
jQuery 添加样式属性的优先级别方法(推荐)
2017/06/08 jQuery
Vue.js搭建移动端购物车界面
2020/06/28 Javascript
微信小程序实现语音识别转文字功能及遇到的坑
2019/08/02 Javascript
js实现漂亮的星空背景
2019/11/01 Javascript
多个Vue项目部署到服务器的步骤记录
2020/10/22 Javascript
解决Vue watch里调用方法的坑
2020/11/07 Javascript
浅析vue中的nextTick
2020/12/28 Vue.js
python控制台显示时钟的示例
2014/02/24 Python
Python获取linux主机ip的简单实现方法
2016/04/18 Python
Python基于回溯法子集树模板实现图的遍历功能示例
2017/09/05 Python
python实现在IDLE中输入多行的方法
2018/04/19 Python
numpy求平均值的维度设定的例子
2019/08/24 Python
Python反爬虫伪装浏览器进行爬虫
2020/02/28 Python
python opencv肤色检测的实现示例
2020/12/21 Python
AmazeUI 缩略图的实现示例
2020/08/18 HTML / CSS
福克斯租车:Fox Rent A Car
2017/04/13 全球购物
新西兰第一的行李箱网站:luggage.co.nz
2019/07/22 全球购物
清明祭英烈活动总结
2015/05/11 职场文书
2016校本研修培训心得体会
2016/01/08 职场文书
SQL Server使用PIVOT与unPIVOT实现行列转换
2022/05/25 SQL Server