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中显示格式化的用户输入
Oct 09 PHP
十天学会php之第二天
Oct 09 PHP
windows下PHP APACHE MYSQ完整配置
Jan 02 PHP
php cookis创建实现代码
Mar 16 PHP
php 使用post,get的一种简洁方式
Apr 25 PHP
Google Voice 短信发送接口PHP开源版(2010.5更新)
Jul 22 PHP
又一个PHP实现的冒泡排序算法分享
Aug 21 PHP
PHP中使用php5-ffmpeg撷取视频图片实例
Jan 07 PHP
PHP中的闭包(匿名函数)浅析
Feb 07 PHP
PHP实现过滤掉非汉字字符只保留中文字符
Jun 04 PHP
PHP实现微信提现(企业付款到零钱)
Aug 01 PHP
PHP新手指南
Apr 01 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中key和current,next的联合运用实例分析
2016/03/29 PHP
Yii2实现中国省市区三级联动实例
2017/02/08 PHP
如何修改Laravel中url()函数生成URL的根地址
2017/08/11 PHP
php实现微信公众平台发红包功能
2018/06/14 PHP
PHP实现获取毫秒时间戳的方法【使用microtime()函数】
2019/03/01 PHP
Prototype使用指南之base.js
2007/01/10 Javascript
JS解密入门 最终变量劫持
2008/06/25 Javascript
解决js正则匹配换行问题实现代码
2012/12/10 Javascript
原生JS实现美图瀑布流布局赏析
2015/09/07 Javascript
jQuery图片轮播滚动切换代码分享
2020/04/20 Javascript
详解JavaScript对象序列化
2016/01/19 Javascript
基于jQuery实现以手风琴方式展开和折叠导航菜单
2016/01/28 Javascript
Bootstrap基本组件学习笔记之导航(10)
2016/12/07 Javascript
js实现下一页页码效果
2017/03/07 Javascript
node.js中实现kindEditor图片上传功能的方法教程
2017/04/26 Javascript
详解webpack介绍&amp;安装&amp;常用命令
2017/06/29 Javascript
Three.js中网格对象MESH的属性与方法详解
2017/09/27 Javascript
Vue侧滑菜单组件——DrawerLayout
2017/12/18 Javascript
vue 2.8.2版本配置刚进入时候的默认页面方法
2018/09/21 Javascript
Vue使用轮询定时发送请求代码
2020/08/10 Javascript
vue中实现点击空白区域关闭弹窗的两种方法
2020/12/30 Vue.js
python实现unicode转中文及转换默认编码的方法
2017/04/29 Python
python程序 线程队列queue使用方法解析
2019/09/23 Python
Python any()函数的使用方法
2019/10/28 Python
关于Pytorch的MLP模块实现方式
2020/01/07 Python
Mac PyCharm中的.gitignore 安装设置教程
2020/04/16 Python
python 实现图片裁剪小工具
2021/02/02 Python
html5 canvas绘制矩形和圆形的实例代码
2016/06/16 HTML / CSS
Nike英国官网:Nike.com (UK)
2017/02/13 全球购物
Luxplus荷兰:以会员价购买美容产品等,独家优惠
2019/08/30 全球购物
DBA数据库管理员JAVA程序员架构师必看
2016/02/07 面试题
校园歌咏比赛主持词
2014/03/18 职场文书
幼儿发展评估方案
2014/06/11 职场文书
房屋过户委托书范本
2014/10/07 职场文书
Vue如何实现组件间通信
2021/05/15 Vue.js
Go语言入门exec的基本使用
2022/05/20 Golang