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 相关文章推荐
连接到txt文本的超链接,不直接打开而是点击后下载的处理方法
Jul 01 PHP
php中几种常见安全设置详解
Apr 06 PHP
ECMall支持SSL连接邮件服务器的配置方法详解
May 19 PHP
ThinkPHP中的系统常量和预定义常量集合
Jul 01 PHP
php程序内部post数据的方法
Mar 31 PHP
php基于dom实现读取图书xml格式数据的方法
Feb 03 PHP
PHP重定向与伪静态区别
Feb 19 PHP
PHP简单装饰器模式实现与用法示例
Jun 22 PHP
PHP实现十进制数字与二十六进制字母串相互转换操作示例
Aug 10 PHP
PHP实现一个轻量级容器的方法
Jan 28 PHP
Thinkphp5.0框架使用模型Model的获取器、修改器、软删除数据操作示例
Oct 11 PHP
微信小程序结合ThinkPHP5授权登陆后获取手机号
Nov 23 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文件上传(实例)
2013/10/27 PHP
PHP使用星号替代用户名手机和邮箱的实现代码
2018/02/07 PHP
Yii2框架控制器、路由、Url生成操作示例
2019/05/27 PHP
Laravel框架控制器的request与response用法示例
2019/09/30 PHP
TP5框架简单登录功能实现方法示例
2019/10/31 PHP
在 Laravel 6 中缓存数据库查询结果的方法
2019/12/11 PHP
浅谈javascript的call()、apply()、bind()的用法
2016/02/21 Javascript
Bootstrap table分页问题汇总
2016/05/30 Javascript
js控制文本框只能输入中文、英文、数字与指定特殊符号的实现代码
2016/09/09 Javascript
Node.js包管理器Yarn的入门介绍与安装
2016/10/17 Javascript
简单实现JS倒计时效果
2016/12/23 Javascript
用js制作淘宝放大镜效果
2020/10/28 Javascript
JS排序之快速排序详解
2017/04/08 Javascript
详解angular ui-grid之过滤器设置
2017/06/07 Javascript
AngularJS通过ng-Img-Crop实现头像截取的示例
2017/08/17 Javascript
vue.js  父向子组件传参的实例代码
2017/10/29 Javascript
vue-content-loader内容加载器的使用方法
2018/08/05 Javascript
小试SVG之新手小白入门教程
2019/01/08 Javascript
wxpython 学习笔记 第一天
2009/03/16 Python
python获取豆瓣电影简介代码分享
2014/01/16 Python
解析Mac OS下部署Pyhton的Django框架项目的过程
2016/05/03 Python
python:目标检测模型预测准确度计算方式(基于IoU)
2020/01/18 Python
Python控制台实现交互式环境执行
2020/06/09 Python
python logging模块的使用
2020/09/07 Python
css3之UI元素状态伪类选择器实例演示
2017/08/11 HTML / CSS
HTML5 Blob对象的具体使用
2020/05/22 HTML / CSS
索引覆盖(Index Covering)查询含义
2012/02/18 面试题
int和Integer有什么区别
2013/05/25 面试题
学校春季防火方案
2014/06/08 职场文书
作文评语怎么写
2014/12/25 职场文书
2015年节能减排工作总结
2015/05/14 职场文书
2016年大学生社区服务活动总结
2016/04/06 职场文书
导游词之开封禹王台风景区
2019/12/02 职场文书
Redisson实现Redis分布式锁的几种方式
2021/08/07 Redis
JS中如何优雅的使用async await详解
2021/10/05 Javascript
PostgreSQL之连接失败的问题及解决
2023/05/08 PostgreSQL