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文件下载类
Dec 06 PHP
使用PHP的日期与时间函数技巧
Apr 24 PHP
PHP 数组入门教程小结
May 20 PHP
php addslashes 函数详细分析说明
Jun 23 PHP
php获取用户IPv4或IPv6地址的代码
Nov 15 PHP
PHP应用JSON技巧讲解
Feb 03 PHP
php根据操作系统转换文件名大小写的方法
Feb 24 PHP
thinkphp项目部署到Linux服务器上报错“模板不存在”如何解决
Apr 27 PHP
Laravel中日期时间处理包Carbon的简单使用
Sep 21 PHP
php使用curl_init()和curl_multi_init()多线程的速度比较详解
Aug 15 PHP
php数值计算num类简单操作示例
May 15 PHP
Swoole扩展的6种模式深入详解
Mar 04 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
WAR3重制版DOTA 5V5初体验
2020/04/09 DOTA
使用纯php代码实现页面伪静态的方法
2015/07/25 PHP
PHP常用的排序和查找算法
2015/08/06 PHP
Laravel 验证码认证学习记录小结
2019/12/20 PHP
jquery isType() 类型判断代码
2011/02/14 Javascript
js新闻滚动 js如何实现新闻滚动效果
2013/01/07 Javascript
用jQuery实现一些导航条切换,显示隐藏的实例代码
2013/06/08 Javascript
jquery实现的图片点击滚动效果
2014/04/29 Javascript
JS+CSS实现仿msn风格选项卡效果代码
2015/10/22 Javascript
JS实现的鼠标跟随代码(卡通手型点击效果)
2015/10/26 Javascript
js实现兼容IE、Firefox的图片缩放代码
2015/12/08 Javascript
js代码实现点击按钮出现60秒倒计时
2021/01/28 Javascript
js原型链与继承解析(初体验)
2016/05/09 Javascript
微信小程序--组件(swiper)详细介绍
2017/06/13 Javascript
微信小程序实现点击图片放大预览
2019/10/21 Javascript
Nest.js散列与加密实例详解
2021/02/24 Javascript
[01:14:12]2018DOTA2亚洲邀请赛4.7 总决赛 LGD vs Mineski 第二场
2018/04/09 DOTA
Python使用Scrapy爬虫框架全站爬取图片并保存本地的实现代码
2018/03/04 Python
解决Tensorflow使用pip安装后没有model目录的问题
2018/06/13 Python
基于python代码实现简易滤除数字的方法
2018/07/17 Python
Django框架组成结构、基本概念与文件功能分析
2019/07/30 Python
python使用正则来处理各种匹配问题
2019/12/22 Python
Python操作Excel工作簿的示例代码(\*.xlsx)
2020/03/23 Python
通过cmd进入python的步骤
2020/06/16 Python
Office DEPOT法国官网:欧迪办公用品采购
2018/01/03 全球购物
四种会话跟踪技术
2015/05/20 面试题
股东授权委托书范文
2014/09/13 职场文书
网络工程专业大学生求职信
2014/10/01 职场文书
社保缴纳证明申请书
2014/11/03 职场文书
初中成绩单评语
2014/12/29 职场文书
材料员岗位职责范本
2015/04/11 职场文书
2016学习雷锋精神活动倡议书
2015/04/27 职场文书
抢劫罪辩护词
2015/05/21 职场文书
入党介绍人意见范文
2015/06/01 职场文书
张丽莉事迹观后感
2015/06/16 职场文书
2015元旦感言
2015/12/09 职场文书