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

5年以前  |  阅读数:839 次  |  编程语言:PHP 

本文实例讲述了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分页显示制作详细讲解
SSH 登录失败:Host key verification failed
获取IMSI
将二进制数据转为16进制以便显示
获取IMEI
文件下载
贪吃蛇
双位运算符
PHP自定义函数获取搜索引擎来源关键字的方法
Java生成UUID
发送邮件
年的日历图
提取后缀名
在Zeus Web Server中安装PHP语言支持
让你成为最历害的git提交人
Yii2汉字转拼音类的实例代码
再谈PHP中单双引号的区别详解
指定应用ID以获取对应的应用名称
Python 2与Python 3版本和编码的对比
php封装的page分页类完整实例