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 相关文章推荐
在apache下限制每个虚拟主机的并发数!!!!
Oct 09 PHP
PHP 开源AJAX框架14种
Aug 24 PHP
从手册去理解分析PHP session机制
Jul 17 PHP
探讨如何在php168_cms中提取验证码
Jun 08 PHP
解析web文件操作常见安全漏洞(目录、文件名检测漏洞)
Jun 29 PHP
那些年我们错过的魔术方法(Magic Methods)
Jan 14 PHP
php判断类是否存在函数class_exists用法分析
Nov 14 PHP
PHP环境中Memcache的安装和使用
Nov 05 PHP
PHP中spl_autoload_register()函数用法实例详解
Jul 18 PHP
Laravel获取所有的数据库表及结构的方法
Oct 10 PHP
分享8个Laravel模型时间戳使用技巧小结
Feb 12 PHP
PHP7原生MySQL数据库操作实现代码
Jul 03 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/04 PHP
php使用smtp发送支持附件的邮件示例
2014/04/13 PHP
Laravel-添加后台模板AdminLte的实现方法
2019/10/08 PHP
laravel 解决crontab不执行的问题
2019/10/22 PHP
Javascript冒泡排序算法详解
2014/12/03 Javascript
jQuery的text()方法用法分析
2014/12/20 Javascript
详解AngularJS过滤器的使用
2016/03/11 Javascript
点击页面任何位置隐藏div的实现方法
2016/09/05 Javascript
jstree创建无限分级树的方法【基于ajax动态创建子节点】
2016/10/25 Javascript
Bootstrap笔记之缩略图、警告框实例详解
2017/03/09 Javascript
react native仿微信PopupWindow效果的实例代码
2017/08/07 Javascript
JS中利用FileReader实现上传图片前本地预览功能
2018/03/02 Javascript
jQuery实现简单复制json对象和json对象集合操作示例
2018/07/09 jQuery
解决layer弹出层中表单不起作用的问题
2019/09/09 Javascript
使用Vue.set()方法实现响应式修改数组数据步骤
2019/11/09 Javascript
微信小程序tab左右滑动切换功能的实现代码
2021/02/08 Javascript
Python中使用HTMLParser解析html实例
2015/02/08 Python
使用Python脚本和ADB命令实现卸载App
2017/02/10 Python
Python实现获取照片拍摄日期并重命名的方法
2017/09/30 Python
Python_查看sqlite3表结构,查询语句的示例代码
2019/07/17 Python
django-rest-framework解析请求参数过程详解
2019/07/18 Python
使用pytorch搭建AlexNet操作(微调预训练模型及手动搭建)
2020/01/18 Python
python中if及if-else如何使用
2020/06/02 Python
python利用os模块编写文件复制功能——copy()函数用法
2020/07/13 Python
Python析构函数__del__定义原理解析
2020/11/20 Python
森海塞尔美国官网:Sennheiser耳机与耳麦
2017/07/19 全球购物
建筑项目策划书
2014/01/13 职场文书
经典婚礼主持词
2014/03/13 职场文书
应用数学专业求职信
2014/03/14 职场文书
焦裕禄纪念馆观后感
2015/06/09 职场文书
大一新生军训新闻稿
2015/07/17 职场文书
2015年度工程师评职称工作总结
2015/10/14 职场文书
《猴王出世》教学反思
2016/02/23 职场文书
Go 实现英尺和米的简单单位换算方式
2021/04/29 Golang
浅谈Redis位图(Bitmap)及Redis二进制中的问题
2021/07/15 Redis
聊聊SpringBoot自动装配的魔力
2021/11/17 Java/Android