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 之 没有mysql支持时的替代方案
Oct 09 PHP
IIS6+PHP5+MySQL5+Zend Optimizer+phpMyAdmin安装配置图文教程 2009年
Jun 08 PHP
PHP无限分类(树形类)的深入分析
Jun 02 PHP
PHP实现的交通银行网银在线支付接口ECSHOP插件和使用例子
May 10 PHP
Yii使用find findAll查找出指定字段的实现方法
Sep 05 PHP
百度实时推送api接口应用示例
Oct 21 PHP
PHP合并静态文件详解
Nov 14 PHP
最准确的php截取字符串长度函数
Oct 29 PHP
PHP strip_tags保留多个HTML标签的方法
May 22 PHP
PHP7.1新功能之Nullable Type用法分析
Sep 26 PHP
详解PHP版本兼容之openssl调用参数
Jul 25 PHP
php 处理png图片白色背景色改为透明色的实例代码
Dec 10 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中,文件上传
2006/12/06 PHP
Phpbean路由转发的php代码
2008/01/10 PHP
PHP函数getenv简介和使用实例
2014/05/12 PHP
PHP图片处理之图片背景、画布操作
2014/11/19 PHP
SSO单点登录的PHP实现方法(Laravel框架)
2016/03/23 PHP
js判断字符长度及中英文数字等
2014/03/19 Javascript
JavaScript中数组的合并以及排序实现示例
2015/10/24 Javascript
详解JavaScript的Date对象(制作简易钟表)
2020/04/07 Javascript
jquery实现全选、不选、反选的两种方法
2016/09/06 Javascript
NodeJs读取JSON文件格式化时的注意事项
2016/09/25 NodeJs
Javascript 制作图形验证码实例详解
2016/12/22 Javascript
JavaScript提高加载和执行效率的方法
2017/02/03 Javascript
深入理解js中的加载事件
2017/02/08 Javascript
webpack2.0搭建前端项目的教程详解
2017/04/05 Javascript
BootStrap Table前台和后台分页对JSON格式的要求
2017/06/28 Javascript
使用Fullpage插件快速开发整屏翻页的页面
2017/09/13 Javascript
详解vue+css3做交互特效的方法
2017/11/20 Javascript
详解关于vue-area-linkage走过的坑
2018/06/27 Javascript
详解为什么Vue中不要用index作为key(diff算法)
2020/04/04 Javascript
Vue自定义render统一项目组弹框功能
2020/06/07 Javascript
利用Python批量压缩png方法实例(支持过滤个别文件与文件夹)
2017/07/30 Python
python 统计数组中元素出现次数并进行排序的实例
2018/07/02 Python
django-rest-framework 自定义swagger过程详解
2019/07/18 Python
python3字符串操作总结
2019/07/24 Python
python飞机大战pygame游戏背景设计详解
2019/12/17 Python
html5新增的定时器requestAnimationFrame实现进度条功能
2018/12/13 HTML / CSS
美国领先的精品家居照明和装饰产品在线零售商:LightsOnline.com
2018/01/23 全球购物
贝佳斯官方网站:Borghese
2020/05/08 全球购物
校园绿化美化方案
2014/06/08 职场文书
创先争优宣传标语
2014/10/08 职场文书
司法局群众路线教育实践活动整改措施思想汇报
2014/10/13 职场文书
2014年乡镇工会工作总结
2014/12/02 职场文书
干部年终考核评语
2015/01/04 职场文书
党员争先创优承诺书
2015/01/20 职场文书
退税申请报告怎么写
2015/05/18 职场文书
golang gopm get -g -v 无法获取第三方库的解决方案
2021/05/05 Golang