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 相关文章推荐
用Socket发送电子邮件(利用需要验证的SMTP服务器)
Oct 09 PHP
PHP 和 MySQL 基础教程(三)
Oct 09 PHP
一个图形显示IP的PHP程序代码
Oct 19 PHP
php自动获取目录下的模板的代码
Aug 08 PHP
解析PHP生成静态html文件的三种方法
Jun 18 PHP
php中explode的负数limit用法分析
Feb 27 PHP
PHP数组和explode函数示例总结
May 08 PHP
详细解读PHP的Yii框架中登陆功能的实现
Aug 21 PHP
如何在旧的PHP系统中使用PHP 5.3之后的库
Dec 02 PHP
PHP实现四种基础排序算法的运行时间比较(推荐)
Aug 11 PHP
php数值计算num类简单操作示例
May 15 PHP
基于php解决json_encode中文UNICODE转码问题
Nov 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
php5.2.0内存管理改进
2007/01/22 PHP
国外十大最流行的PHP框架排名
2013/07/04 PHP
php异步多线程swoole用法实例
2014/11/14 PHP
ThinkPHP5分页paginate代码实例解析
2020/11/10 PHP
解javascript 混淆加密收藏
2009/01/16 Javascript
Exitjs获取DataView中图片文件名
2009/11/26 Javascript
jquery调用asp.net 页面后台的实现代码
2011/04/27 Javascript
scrollWidth,clientWidth,offsetWidth的区别
2015/01/13 Javascript
jQuery地图map悬停显示省市代码分享
2015/08/20 Javascript
JavaScript如何动态创建table表格
2020/08/02 Javascript
JavaScript ParseFloat()方法
2015/12/18 Javascript
JQuery EasyUI Layout 在from布局自适应窗口大小的实现方法
2016/05/28 Javascript
js获取form表单所有数据的简单方法
2016/08/18 Javascript
Javascript中this绑定的3种方法与比较
2016/10/13 Javascript
Node.js中看JavaScript的引用
2017/04/22 Javascript
vue.js声明式渲染和条件与循环基础知识
2017/07/31 Javascript
Vue 中对图片地址进行拼接的方法
2018/09/03 Javascript
Angular2使用SVG自定义图表(条形图、折线图)组件示例
2019/05/10 Javascript
基于JavaScript获取url参数2种方法
2020/04/17 Javascript
利用Python的装饰器解决Bottle框架中用户验证问题
2015/04/24 Python
Python简单调用MySQL存储过程并获得返回值的方法
2015/07/20 Python
Python找出最小的K个数实例代码
2018/01/04 Python
Python cookbook(数据结构与算法)将序列分解为单独变量的方法
2018/02/13 Python
Python实现针对给定字符串寻找最长非重复子串的方法
2018/04/21 Python
python实现flappy bird游戏
2018/12/24 Python
在python环境下运用kafka对数据进行实时传输的方法
2018/12/27 Python
Python学习笔记之变量、自定义函数用法示例
2019/05/28 Python
关于Python字符串显示u...的解决方式
2020/03/06 Python
Python pytesseract验证码识别库用法解析
2020/06/29 Python
浅谈HTML5新增和废弃的标签
2019/04/28 HTML / CSS
美国职棒大联盟的官方手套、球和头盔:Rawlings
2020/02/15 全球购物
高校学生干部的自我评价分享
2013/11/04 职场文书
安踏广告词改编版
2014/03/21 职场文书
法律意见书范文
2015/05/20 职场文书
阿里云服务器Ubuntu 20.04上安装Odoo 15
2022/05/20 Servers
使用Apache Camel表达REST服务的方法
2022/06/10 Servers