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文件上传实例详解!!!
Jan 02 PHP
php date()日期时间函数详解
May 16 PHP
优化PHP程序的方法小结
Feb 23 PHP
PHP运行环境配置与开发环境的配置(图文教程)
Jun 04 PHP
解析thinkphp import 文件内容变量失效的问题
Jun 20 PHP
js限制checkbox勾选的个数以及php获取多个checkbbox的方法深入解析
Jul 18 PHP
PHP实现生成唯一编号(36进制的不重复编号)
Jul 01 PHP
PHP中单引号与双引号的区别分析
Aug 19 PHP
php 二维数组快速排序算法的实现代码
Oct 17 PHP
Thinkphp5框架简单实现钩子(Hook)行为的方法示例
Sep 03 PHP
PHP+redis实现的限制抢购防止商品超发功能详解
Sep 19 PHP
Laravel 5+ .env环境配置文件详解
Apr 06 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
程序员编程十条戒律
2009/07/09 PHP
php explode函数实例代码
2012/02/27 PHP
javascript基础的动画教程,直观易懂
2007/01/10 Javascript
ExtJS 2.2.1的grid控件在ie6中的显示问题
2009/05/04 Javascript
Iframe自适应高度绝对好使的代码 兼容IE,遨游,火狐
2011/01/27 Javascript
js实现屏蔽默认快捷键调用自定义事件示例
2013/06/18 Javascript
基于Jquery实现键盘按键监听
2014/05/11 Javascript
学习javascript的闭包,原型,和匿名函数之旅
2015/10/18 Javascript
实现React单页应用的方法详解
2016/08/02 Javascript
微信小程序开发之入门实例教程篇
2017/03/07 Javascript
JavaScript 事件流、事件处理程序及事件对象总结
2017/04/01 Javascript
Express框架之connect-flash详解
2017/05/31 Javascript
浅谈Node.js 中间件模式
2018/06/12 Javascript
vue2.0基于vue-cli+element-ui制作树形treeTable
2019/04/30 Javascript
layui禁用侧边导航栏点击事件的解决方法
2019/09/25 Javascript
Js Snowflake(雪花算法)生成随机ID的实现方法
2020/08/26 Javascript
vue-cli3项目打包后自动化部署到服务器的方法
2020/09/16 Javascript
Python+matplotlib实现华丽的文本框演示代码
2018/01/22 Python
对pandas中两种数据类型Series和DataFrame的区别详解
2018/11/12 Python
Python使用ctypes调用C/C++的方法
2019/01/29 Python
详解如何用python实现一个简单下载器的服务端和客户端
2019/10/28 Python
详解Anconda环境下载python包的教程(图形界面+命令行+pycharm安装)
2019/11/11 Python
浅谈python输出列表元素的所有排列形式
2020/02/26 Python
Python tcp传输代码实例解析
2020/03/18 Python
关于Python解包知识点总结
2020/05/05 Python
HTML5离线应用与客户端存储的实现
2018/05/03 HTML / CSS
华丽的手绘陶瓷:MacKenzie-Childs
2017/02/04 全球购物
ROSEFIELD手表荷兰官方网上商店:北欧极简设计女士腕表品牌
2018/01/24 全球购物
美国在线纱线商店:Darn Good Yarn
2019/03/20 全球购物
廉政教育的心得体会
2014/09/01 职场文书
产品调价通知函
2015/04/20 职场文书
2015年小学语文教学工作总结
2015/05/25 职场文书
大学毕业晚会开场白
2015/05/29 职场文书
护理专业毕业自我鉴定
2019/08/12 职场文书
基于python实现银行管理系统
2021/04/20 Python