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 相关文章推荐
PHP4实际应用经验篇(9)
Oct 09 PHP
第十三节--对象串行化
Nov 16 PHP
php google或baidu分页代码
Nov 26 PHP
PHP 一个比较完善的简单文件上传
Mar 25 PHP
模板引擎正则表达式调试小技巧
Jul 20 PHP
基于PHP中的常用函数回顾
Jul 11 PHP
PHP安装memcached扩展笔记
May 28 PHP
php gd等比例缩放压缩图片函数
Jun 12 PHP
PHP+JQuery+Ajax实现分页方法详解
Aug 06 PHP
PHP策略模式定义与用法示例
Jul 27 PHP
PHP中-&gt;和=&gt;的含义及使用示例解析
Aug 06 PHP
关于PHP数组迭代器的使用方法实例
Nov 17 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
分页显示Oracle数据库记录的类之一
2006/10/09 PHP
Thinkphp的volist标签嵌套循环使用教程
2014/07/08 PHP
PHP开发注意事项总结
2015/02/04 PHP
ZendFramework2连接数据库操作实例
2017/04/18 PHP
prototype Element学习笔记(篇二)
2008/10/26 Javascript
jQuery checkbox全选/取消全选实现代码
2009/11/14 Javascript
JQuery扩展插件Validate 1 基本使用方法并打包下载
2011/09/05 Javascript
js用Date对象处理时间实现思路及代码
2013/01/31 Javascript
JQUERY dialog的用法详细解析
2013/12/19 Javascript
javascript中apply和call方法的作用及区别说明
2014/02/14 Javascript
Javascript学习笔记之 对象篇(四) : for in 循环
2014/06/24 Javascript
一个通过script自定义属性传递配置参数的方法
2014/09/15 Javascript
jquery实现的判断倒计时是否结束代码
2016/02/05 Javascript
jQuery移动端日期(datedropper)和时间(timedropper)选择器附源码下载
2016/04/19 Javascript
Bootstrap3制作图片轮播效果
2016/05/12 Javascript
当jquery ajax遇上401请求的解决方法
2016/05/19 Javascript
JS中的数组方法笔记整理
2016/07/26 Javascript
Node.js中流(stream)的使用方法示例
2017/07/16 Javascript
react-native-fs实现文件下载、文本存储的示例代码
2017/09/22 Javascript
Vue.js实现双向数据绑定方法(表单自动赋值、表单自动取值)
2018/08/27 Javascript
微信小程序 数据缓存实现方法详解
2019/08/26 Javascript
npm ci命令的基本使用方法
2020/09/20 Javascript
在python中使用正则表达式查找可嵌套字符串组
2017/10/24 Python
判断python字典中key是否存在的两种方法
2018/08/10 Python
设置python3为默认python的方法
2018/10/31 Python
python2与python3的print及字符串格式化小结
2018/11/30 Python
爬虫代理池Python3WebSpider源代码测试过程解析
2019/12/20 Python
PyTorch中的padding(边缘填充)操作方式
2020/01/03 Python
python使用docx模块读写docx文件的方法与docx模块常用方法详解
2020/02/17 Python
利用Python如何制作贪吃蛇及AI版贪吃蛇详解
2020/08/24 Python
matplotlib 使用 plt.savefig() 输出图片去除旁边的空白区域
2021/01/05 Python
详解Canvas 实现炫丽的粒子运动效果(粒子生成文字)
2018/02/01 HTML / CSS
临时租车协议范本
2014/09/23 职场文书
2014年感恩节活动策划方案
2014/10/06 职场文书
中学生运动会广播稿
2015/08/19 职场文书
python基于tkinter制作m3u8视频下载工具
2021/04/24 Python