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利用COM对象访问SQLServer、Access
Oct 09 PHP
用PHP编程开发“虚拟域名”系统
Oct 09 PHP
php cout&amp;lt;&amp;lt;的一点看法
Jan 24 PHP
PHP中的array数组类型分析说明
Jul 27 PHP
浅析php学习的路线图
Jul 10 PHP
PHP循环输出指定目录下的所有文件和文件夹路径例子(简单实用)
May 10 PHP
php实现获取文件mime类型的方法
Feb 11 PHP
解决php表单重复提交实现方法
Sep 29 PHP
php安装dblib扩展,连接mssql的具体步骤
Mar 02 PHP
360搜索引擎自动收录php改写方案
Apr 28 PHP
什么是PHP7中的孤儿进程与僵尸进程
Apr 14 PHP
PHP后门隐藏的一些技巧总结
Nov 04 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框架Symfony2经典入门教程
2014/07/08 PHP
php通过排列组合实现1到9数字相加都等于20的方法
2015/08/03 PHP
详谈php静态方法及普通方法的区别
2016/10/04 PHP
PHP开发之归档格式phar文件概念与用法详解【创建,使用,解包还原提取】
2017/11/17 PHP
Jquery Ajax学习实例 向页面发出请求,返回XML格式数据
2010/03/14 Javascript
javascript面向对象之二 命名空间
2011/02/08 Javascript
文档对象模型DOM通俗讲解
2013/11/01 Javascript
ie浏览器使用js导出网页到excel并打印
2014/03/11 Javascript
jQuery实现级联菜单效果(仿淘宝首页菜单动画)
2014/04/10 Javascript
给应用部分的js代码设定一个统一的入口
2014/06/15 Javascript
使用jquery prev()方法找到同级的前一个元素
2014/07/11 Javascript
IE下通过a实现location.href 获取referer的值
2014/09/04 Javascript
Eclipse引入jquery报错如何解决
2015/12/01 Javascript
浅析jQuery移动开发中内联按钮和分组按钮的编写
2015/12/04 Javascript
jQuery自定义数值抽奖活动代码
2016/06/11 Javascript
详解BootStrap中Affix控件的使用及保持布局的美观的方法
2016/07/08 Javascript
AngularJS入门教程之MVC架构实例分析
2016/11/01 Javascript
AngularJS入门教程一:路由用法初探
2017/05/27 Javascript
微信小程序slider组件使用详解
2018/01/31 Javascript
Node.js readline 逐行读取、写入文件内容的示例
2018/03/01 Javascript
简单了解Javscript中兄弟ifream的方法调用
2019/06/17 Javascript
JS中FileReader类实现文件上传及时预览功能
2020/03/27 Javascript
Vue页面跳转传递参数及接收方式
2020/09/09 Javascript
Vue实现todo应用的示例
2021/02/20 Vue.js
[02:08:58]2014 DOTA2国际邀请赛中国区预选赛 Ne VS CIS
2014/05/22 DOTA
python中csv文件的若干读写方法小结
2018/07/04 Python
python实现LBP方法提取图像纹理特征实现分类的步骤
2019/07/11 Python
Python阶乘求和的代码详解
2020/02/14 Python
python中常见错误及解决方法
2020/06/21 Python
Python列表的深复制和浅复制示例详解
2021/02/12 Python
HTML5 localStorage使用总结
2017/02/22 HTML / CSS
毕业生怎样写好自荐信
2013/11/11 职场文书
动员大会主持词
2014/03/20 职场文书
工作散漫检讨书
2014/09/16 职场文书
大学生迟到检讨书500字
2014/10/17 职场文书
2015年人事工作总结范文
2015/04/09 职场文书