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将向Java靠拢
Oct 09 PHP
用PHP和MySQL保存和输出图片
Oct 09 PHP
PHP中路径问题的解决方案
Oct 09 PHP
php 数组的一个悲剧?
May 11 PHP
php 数据库字段复用的基本原理与示例
Jul 22 PHP
PHP数据集构建JSON格式及新数组的方法
Nov 07 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(三)
Jun 23 PHP
php上传图片客户端和服务器端实现方法
Mar 30 PHP
PHP 实现的将图片转换为TXT
Oct 21 PHP
PHP读取文本文件并逐行输出该行使用最多的字符与对应次数的方法
Nov 25 PHP
PHP编程快速实现数组去重的方法详解
Jul 22 PHP
PHP用PDO如何封装简单易用的DB类详解
Jul 30 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
PHP iconv 解决utf-8和gb2312编码转换问题
2010/04/12 PHP
php比较两个绝对时间的大小
2014/01/31 PHP
PHP比较运算符的详细介绍
2015/09/29 PHP
php mysql 封装类实例代码
2016/09/18 PHP
Linux下安装Memcached服务器和客户端与PHP使用示例
2019/04/15 PHP
《JavaScript高级程序设计》阅读笔记(一) ECMAScript基础
2012/02/27 Javascript
js修改input的type属性及浏览器兼容问题探讨与解决
2013/01/23 Javascript
Extjs4 关于Store的一些操作(加载/回调/添加)
2013/04/18 Javascript
Flexigrid在IE下不显示数据的处理的解决方法
2013/10/24 Javascript
禁止IE用右键的JS代码
2013/12/30 Javascript
JavaScript中利用Array和Object实现Map的方法
2015/07/27 Javascript
js实现select下拉框菜单
2015/12/08 Javascript
JavaScript、jQuery与Ajax的关系
2016/01/24 Javascript
Angular2学习笔记——详解NgModule模块
2016/12/02 Javascript
MVVM 双向绑定的实现代码
2018/06/21 Javascript
基于React Native 0.52实现轮播图效果
2020/08/25 Javascript
nuxt踩坑之Vuex状态树的模块方式使用详解
2019/09/06 Javascript
使用preload预加载页面资源时注意事项
2020/02/03 Javascript
js实现拖拽与碰撞检测
2020/09/18 Javascript
[00:35]TI7不朽珍藏III——寒冰飞龙不朽展示
2017/07/15 DOTA
python matplotlib画图库学习绘制常用的图
2019/03/19 Python
Python实现Singleton模式的方式详解
2019/08/08 Python
django使用xadmin的全局配置详解
2019/11/15 Python
opencv之为图像添加边界的方法示例
2019/12/26 Python
CentOS 7如何实现定时执行python脚本
2020/06/24 Python
英国最大的手表网站:The Watch Hut
2017/03/31 全球购物
美国网上眼镜供应商:LEOTONY(眼镜、RX太阳镜和太阳镜)
2017/10/31 全球购物
销售员自我评价怎么写
2013/09/19 职场文书
职业技术学校毕业生推荐信
2013/12/03 职场文书
暑期培训心得体会
2014/09/02 职场文书
公安机关纪律作风整顿个人剖析材料材料
2014/10/10 职场文书
2015年人事科工作总结
2015/04/28 职场文书
秋收起义观后感
2015/06/11 职场文书
给校长的建议书作文400字
2015/09/14 职场文书
用Python selenium实现淘宝抢单机器人
2021/06/18 Python
MySql 8.0及对应驱动包匹配的注意点说明
2021/06/23 MySQL