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 相关文章推荐
一个用php3编写的简单计数器
Oct 09 PHP
一个简单的PHP投票程序源码
Mar 11 PHP
PHP如何抛出异常处理错误
Mar 02 PHP
PHP输出时间差函数代码
Jan 28 PHP
解析posix与perl标准的正则表达式区别
Jun 17 PHP
解析php中获取系统信息的方法
Jun 25 PHP
PHP函数microtime()用法与说明
Dec 04 PHP
兼容ie6浏览器的php下载文件代码分享
Jul 14 PHP
php跨站攻击实例分析
Oct 28 PHP
PHP7匿名类用法分析
Sep 26 PHP
CI框架无限级分类+递归的实现代码
Nov 01 PHP
浅谈PHP中的Trait使用方法
Mar 22 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简单获取目录列表的方法
2015/03/24 PHP
PHP之密码加密的几种方式
2015/07/29 PHP
有关PHP 中 config.m4 的探索
2020/08/26 PHP
jquery右下角弹出提示框示例代码
2013/10/08 Javascript
实例说明为什么不要行内使用javascript
2014/04/18 Javascript
js控制当再次点击按钮时的间隔时间
2014/06/03 Javascript
NodeJs基本语法和类型
2015/02/13 NodeJs
js实现的后台左侧管理菜单代码
2015/09/11 Javascript
TypeScript Type Innference(类型判断)
2016/03/10 Javascript
Javascript基础_简单比较undefined和null 值
2016/06/14 Javascript
vue2.0开发实践总结之入门篇
2016/12/06 Javascript
jquery实现刷新随机变化样式特效(tag标签样式)
2017/02/03 Javascript
Nodejs 获取时间加手机标识的32位标识实现代码
2017/03/07 NodeJs
node.js中grunt和gulp的区别详解
2017/07/17 Javascript
Node.js利用断言模块assert进行单元测试的方法
2017/09/28 Javascript
jQuery实现获取当前鼠标位置并输出功能示例
2019/01/05 jQuery
微信小程序利用for循环解决内容变更问题
2020/03/05 Javascript
JavaScript实现Tab标签页切换的最简便方式(4种)
2020/06/28 Javascript
基于小程序请求接口wx.request封装的类axios请求
2020/07/02 Javascript
[46:20]DOTA2-DPC中国联赛 正赛 PSG.LGD vs LBZS BO3 第二场 1月22日
2021/03/11 DOTA
Python中的测试模块unittest和doctest的使用教程
2015/04/14 Python
使用python的pandas库读取csv文件保存至mysql数据库
2018/08/20 Python
对Python 3.5拼接列表的新语法详解
2018/11/08 Python
如何使用python把ppt转换成pdf
2019/06/29 Python
Python函数基本使用原理详解
2020/03/19 Python
在keras 中获取张量 tensor 的维度大小实例
2020/06/10 Python
Python 存取npy格式数据实例
2020/07/01 Python
PyTorch预训练Bert模型的示例
2020/11/17 Python
One.com挪威:北欧成长最快的网络托管公司
2016/11/19 全球购物
群众路线教育实践活动对照检查材料
2014/09/22 职场文书
教师三严三实心得体会
2014/10/11 职场文书
股权转让协议书
2014/12/07 职场文书
五一劳动节活动总结
2015/02/09 职场文书
2015年团队工作总结范文
2015/05/04 职场文书
2015年网管个人工作总结
2015/05/22 职场文书
文艺有韵味的诗句(生命类、亲情类...)
2019/07/11 职场文书