PHP贪婪算法解决0-1背包问题实例分析

 更新时间:2015年03月23日 11:19:47   作者:疯狂一夏  
这篇文章主要介绍了PHP贪婪算法解决0-1背包问题,实例分析了贪婪算法的原理与背包问题的实现技巧,需要的朋友可以参考下

本文实例讲述了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_imagick_st-Q8.dll实现JPG合成GIF图片的方法

    PHP基于php_imagick_st-Q8.dll实现JPG合成GIF图片的方法

    这篇文章主要介绍了PHP基于php_imagick_st-Q8.dll实现JPG合成GIF图片的方法,需要的朋友可以参考下
    2014-07-07
  • Linux系统中设置多版本PHP共存配合Nginx服务器使用

    Linux系统中设置多版本PHP共存配合Nginx服务器使用

    这篇文章主要介绍了Linux系统中设置多版本PHP共存配合Nginx服务器使用的技巧,依靠php-fpm工具来进行管理,需要的朋友可以参考下
    2015-12-12
  • PHP动态分页函数,PHP开发分页必备啦

    PHP动态分页函数,PHP开发分页必备啦

    PHP动态分页函数,PHP开发分页必备啦。其实吧,这个是必用的,不说了,PHP动态分页函数还是不错,比较简单吧
    2011-11-11
  • PHP中strcmp()和strcasecmp()函数字符串比较用法分析

    PHP中strcmp()和strcasecmp()函数字符串比较用法分析

    这篇文章主要介绍了PHP中strcmp()和strcasecmp()函数字符串比较用法,结合实例形式较为详细的分析了strcmp()和strcasecmp()函数字的功能,使用方法与区别,需要的朋友可以参考下
    2016-01-01
  • php批量添加数据与批量更新数据的实现方法

    php批量添加数据与批量更新数据的实现方法

    这篇文章主要介绍了php批量添加数据与批量更新数据的实现方法,涉及针对表单的处理与sql语句的灵活使用,非常具有实用价值,需要的朋友可以参考下
    2014-12-12
  • PHP中ADODB类详解

    PHP中ADODB类详解

    1. 前言 ADODB 是 Active Data Objects Data Base 的简称,它是一种 PHP 存取数据库的函式组件。现在 SFS3 系统 (校园自由软件交流网学务系统) 计划的主持人陈莹光老师,决定采用此一组件,为了让更多有心参与该项目的伙伴们能够顺利加入发展的行列,小弟认为有必要把 ADODB 的中文入门介绍写出来,以方便伙伴们参考备查。
    2008-03-03
  • PHP array_combine() 函数内置函数

    PHP array_combine() 函数内置函数

    这篇文章主要介绍了PHP array_combine()函数内置函数,array_combine()是PHP中的一个内置函数,用于组合两个数组并通过使用一个数组作为键和另一个数组作为值来创建一个新数组
    2022-09-09
  • PHP中error_log()函数的使用方法

    PHP中error_log()函数的使用方法

    这篇文章主要介绍了PHP中error_log()函数的使用方法,实例分析了error_log自动生成相应的log文件的方法,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-01-01
  • PHP实现二维数组(或多维数组)转换成一维数组的常见方法总结

    PHP实现二维数组(或多维数组)转换成一维数组的常见方法总结

    这篇文章主要介绍了PHP实现二维数组(或多维数组)转换成一维数组的常见方法,结合实例形式总结分析了PHP数组遍历、转换所涉及的array_reduce、array_walk_recursive及array_map函数常见使用技巧,需要的朋友可以参考下
    2019-12-12
  • php计算指定目录下文件占用空间的方法

    php计算指定目录下文件占用空间的方法

    这篇文章主要介绍了php计算指定目录下文件占用空间的方法,实例分析了php操作目录及文件的技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-03-03

最新评论