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和MySql中计算时间差的方法
Apr 22 PHP
php 生成唯一id的几种解决方法
Mar 08 PHP
基于curl数据采集之单页面采集函数get_html的使用
Apr 28 PHP
探讨fckeditor在Php中的配置详解
Jun 08 PHP
解决phpcms更换javascript的幻灯片代码调用图片问题
Dec 26 PHP
浅析Yii2 GridView 日期格式化并实现日期可搜索教程
Apr 22 PHP
php利用gd库为图片添加水印
Nov 09 PHP
Windows 下安装 swoole 图文教程(php)
Jun 05 PHP
PHP实现通过CURL上传文件功能示例
May 30 PHP
ThinkPHP5.1框架页面跳转及修改跳转页面模版示例
May 06 PHP
PHP二维索引数组的遍历实例分析【2种方式】
Jun 24 PHP
linux mint下安装phpstorm2020包括JDK部分的教程详解
Sep 17 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
Session的工作方式
2006/10/09 PHP
php 静态变量的初始化
2009/11/15 PHP
php生成随机颜色方法汇总
2014/12/03 PHP
PHP AjaxForm提交图片上传并显示图片源码
2016/11/29 PHP
kindeditor 加入七牛云上传的实例讲解
2017/11/12 PHP
php设计模式之抽象工厂模式分析【星际争霸游戏案例】
2020/01/23 PHP
Javascript 中介者模式实例
2009/12/16 Javascript
表单验证的完整应用案例探讨
2013/03/29 Javascript
JavaScript事件委托技术实例分析
2015/02/06 Javascript
jquery获取文档高度和窗口高度汇总
2016/01/25 Javascript
javascript中JSON.parse()与eval()解析json的区别
2016/05/19 Javascript
Bootstrap学习笔记之css组件(3)
2016/06/07 Javascript
javaScript中封装的各种写法示例(推荐)
2017/07/03 Javascript
JavaScript反射与依赖注入实例详解
2018/05/29 Javascript
JS实现页面跳转与刷新的方法汇总
2019/08/30 Javascript
layui 上传插件 带预览 非自动上传功能的实例(非常实用)
2019/09/23 Javascript
jQuery利用cookie 实现本地收藏功能(不重复无需多次命名)
2019/11/07 jQuery
javascript利用canvas实现鼠标拖拽功能
2020/07/23 Javascript
Python实现给qq邮箱发送邮件的方法
2015/05/28 Python
Python连接mysql数据库的正确姿势
2016/02/03 Python
Python字典中的键映射多个值的方法(列表或者集合)
2018/10/17 Python
python Pandas如何对数据集随机抽样
2019/07/29 Python
浅谈Pycharm最有必要改的几个默认设置项
2020/02/14 Python
html5的新增的标签和废除的标签简要概述
2013/02/20 HTML / CSS
Sneaker Studio罗马尼亚网站:购买运动鞋
2018/11/04 全球购物
Tuckernuck官网:经典的美国品质服装、鞋子和配饰
2021/01/11 全球购物
房地产融资计划书
2014/01/10 职场文书
音乐器材管理制度
2014/01/31 职场文书
图书馆标语
2014/06/19 职场文书
庆六一宣传标语
2014/10/08 职场文书
计划生育证明格式及范本
2014/10/09 职场文书
幼儿园毕业致辞
2015/07/29 职场文书
初中体育课教学反思
2016/02/16 职场文书
详解MySQL多版本并发控制机制(MVCC)源码
2021/06/23 MySQL
Python编程源码报错解决方法总结经验分享
2021/10/05 Python
教你部署vue项目到docker
2022/04/05 Vue.js