PHP贪婪算法解决0-1背包问题实例分析


Posted in PHP onMarch 23, 2015

本文实例讲述了PHP贪婪算法解决0-1背包问题的方法。分享给大家供大家参考。具体分析如下:

贪心算法解决0-1背包问题,全局最优解通过局部最优解来获得!比动态规划解决背包问题更灵活!

//0-1背包贪心算法问题
class tanxin{
  public $weight;
  public $price;
  public function __construct($weight=0,$price=0)
  {
    $this->weight=$weight;
    $this->price=$price;
  }
}
//生成数据
$n=10;
for($i=1;$i<=$n;$i++){
  $weight=rand(1,20);
  $price=rand(1,10);
  $x[$i]=new tanxin($weight,$price);
}
//输出结果
function display($x)
{
  $len=count($x);
  foreach($x as $val){
    echo $val->weight,' ',$val->price;
    echo '<br>';
  }
}
//按照价格和重量比排序
function tsort(&$x)
{
  $len=count($x);
  for($i=1;$i<=$len;$i++)
  {
    for($j=1;$j<=$len-$i;$j++)
    { 
      $temp=$x[$j];
      $res=$x[$j+1]->price/$x[$j+1]->weight;
      $temres=$temp->price/$temp->weight;
      if($res>$temres){
        $x[$j]=$x[$j+1];
        $x[$j+1]=$temp;
      }
    }
  } 
}
//贪心算法
function tanxin($x,$totalweight=50)
{
  $len=count($x);
  $allprice=0;
  for($i=1;$i<=$len;$i++){
    if($x[$i]->weight>$totalweight) break;
    else{
      $allprice+=$x[$i]->price;
      $totalweight=$totalweight-$x[$i]->weight;
    }
  }
  if($i<$len) $allprice+=$x[$i]->price*($totalweight/$x[$i]->weight);
  return $allprice;
}
tsort($x);//按非递增次序排序
display($x);//显示
echo '0-1背包最优解为:';
echo tanxin($x);

希望本文所述对大家的php程序设计有所帮助。

PHP 相关文章推荐
学习使用PHP数组
Oct 09 PHP
php中处理模拟rewrite 效果
Dec 09 PHP
php max_execution_time执行时间问题
Jul 17 PHP
利用PHP扩展vld查看PHP opcode操作步骤
Mar 04 PHP
PHP函数http_build_query使用详解
Aug 20 PHP
php 删除cookie方法详解
Dec 01 PHP
php从memcache读取数据再批量写入mysql的方法
Dec 29 PHP
使用phpexcel类实现excel导入mysql数据库功能(实例代码)
May 12 PHP
[原创]php集成安装包wampserver修改密码后phpmyadmin无法登陆的解决方法
Nov 23 PHP
php curl优化下载微信头像的方法总结
Sep 07 PHP
PHP实现微信申请退款功能
Oct 01 PHP
tp5框架内使用tp3.2分页的方法分析
May 05 PHP
PHP回溯法解决0-1背包问题实例分析
Mar 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
You might like
Apache+php+mysql在windows下的安装与配置图解(最新版)
2008/11/30 PHP
php中引用符号(&amp;)的使用详细介绍
2016/12/06 PHP
php 使用curl模拟ip和来源进行访问的实现方法
2017/05/02 PHP
ThinkPHP下表单令牌错误与解决方法分析
2017/05/20 PHP
用js得到网页中所有的div的id
2020/10/19 Javascript
JQuery SELECT单选模拟jQuery.select.js
2009/11/12 Javascript
jQuery实现跟随鼠标运动图层效果的方法
2015/02/02 Javascript
Javascript中的getUTCDay()方法使用详解
2015/06/10 Javascript
详解JavaScript的表达式与运算符
2015/11/30 Javascript
JavaScript的MVVM库Vue.js入门学习笔记
2016/05/03 Javascript
微信小程序 教程之引用
2016/10/18 Javascript
JavaScript仿支付宝6位数字密码输入框
2016/12/29 Javascript
使用Webpack提高Vue.js应用的方式汇总(四种)
2017/07/10 Javascript
vue中动态设置meta标签和title标签的方法
2018/07/11 Javascript
对layui中表单元素的使用详解
2018/08/15 Javascript
layui表格设计以及数据初始化详解
2019/10/26 Javascript
在vue项目中利用popstate处理页面返回的操作介绍
2020/08/06 Javascript
[05:06]TI4西雅图DOTA2前线报道 海涛密探LGD训练
2014/07/09 DOTA
[40:17]2018DOTA2亚洲邀请赛 4.5 淘汰赛 LGD vs Liquid 第一场
2018/04/06 DOTA
[48:24]完美世界DOTA2联赛PWL S3 Forest vs INK ICE 第一场 12.09
2020/12/12 DOTA
python绘图库Matplotlib的安装
2014/07/03 Python
在Python的Django框架的视图中使用Session的方法
2015/07/23 Python
pyqt远程批量执行Linux命令程序的方法
2019/02/14 Python
Python3.0 实现决策树算法的流程
2019/08/08 Python
使用pyinstaller逆向.pyc文件
2019/12/20 Python
python调用HEG工具批量处理MODIS数据的方法及注意事项
2020/02/18 Python
Django自关联实现多级联动查询实例
2020/05/19 Python
python使用Windows的wmic命令监控文件运行状况,如有异常发送邮件报警
2021/01/30 Python
Pytorch 图像变换函数集合小结
2021/02/01 Python
用C或者C++语言实现SOCKET通信
2015/02/24 面试题
UNIX文件名称有什么规定
2013/03/25 面试题
内勤主管岗位职责
2014/04/03 职场文书
医院科室评语
2015/01/04 职场文书
语文教师个人工作总结
2015/02/06 职场文书
2015初中团支部工作总结
2015/07/21 职场文书
导游词之天下银坑景区
2019/11/21 职场文书