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 自写函数代码 获取关键字 去超链接
Feb 08 PHP
php修改NetBeans默认字体的大小
Jul 02 PHP
PHP jQuery表单,带验证具体实现方法
Feb 15 PHP
php防止站外远程提交表单的方法
Oct 20 PHP
php数组去除空值函数分享
Feb 02 PHP
ThinkPHP进程计数类Process用法实例详解
Sep 25 PHP
PHP7正式版测试,性能惊艳!
Dec 08 PHP
ThinkPHP实现更新数据实例详解(demo)
Jun 29 PHP
php使用get_class_methods()函数获取分类的方法
Jul 20 PHP
yii2.0整合阿里云oss删除单个文件的方法
Sep 19 PHP
PHP实现深度优先搜索算法(DFS,Depth First Search)详解
Sep 16 PHP
Laravel获取当前请求的控制器和方法以及中间件的例子
Oct 11 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函数
2006/10/09 PHP
vBulletin HACK----关于排版的两个HACK
2006/10/09 PHP
简单实用的.net DataTable导出Execl
2013/10/28 PHP
php获取QQ头像并显示的方法
2014/12/23 PHP
针对多用户实现头像上传功能PHP代码 适用于登陆页面制作
2016/08/17 PHP
PHP实现的折半查找算法示例
2017/12/19 PHP
JQuery从头学起第二讲
2010/07/04 Javascript
Ext 今日学习总结
2010/09/19 Javascript
javascript使用百度地图api和html5特性获取浏览器位置
2014/01/10 Javascript
Mac OS X 系统下安装和部署Egret引擎开发环境
2014/09/03 Javascript
js实现进度条的方法
2015/02/13 Javascript
SpringMVC restful 注解之@RequestBody进行json与object转换
2015/12/10 Javascript
javascript实现下拉提示选择框
2015/12/29 Javascript
bootstrap-datetimepicker实现只显示到日期的方法
2016/11/25 Javascript
微信小程序之前台循环数据绑定
2017/08/18 Javascript
React从react-router路由上做登陆验证控制的方法
2018/05/10 Javascript
详解Vue一个案例引发「内容分发slot」的最全总结
2018/12/02 Javascript
详解微信小程序回到顶部的两种方式
2019/05/09 Javascript
详解Vue 项目中的几个实用组件(ts)
2019/10/29 Javascript
[11:42]2018DOTA2国际邀请赛寻真——OG卷土重来
2018/08/17 DOTA
实现python版本的按任意键继续/退出
2016/09/26 Python
Python分析学校四六级过关情况
2017/11/22 Python
python中redis查看剩余过期时间及用正则通配符批量删除key的方法
2018/07/30 Python
Django进阶之CSRF的解决
2018/08/01 Python
Django forms组件的使用教程
2018/10/08 Python
用Python画小女孩放风筝的示例
2019/11/23 Python
全面介绍python中很常用的单元测试框架unitest
2020/12/14 Python
pycharm远程连接服务器并配置python interpreter的方法
2020/12/23 Python
解决pytorch 模型复制的一些问题
2021/03/03 Python
html5 乒乓球(碰撞检测)实例二
2013/07/25 HTML / CSS
大学生职业生涯设计书
2014/01/02 职场文书
小学师德标兵先进事迹材料
2014/05/25 职场文书
2014年学生工作总结
2014/11/20 职场文书
佛光寺导游词
2015/02/10 职场文书
教师年终个人总结
2015/02/11 职场文书
python的html标准库
2022/04/29 Python