• 欢迎访问开心洋葱网站,在线教程,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站,欢迎加入开心洋葱 QQ群
  • 为方便开心洋葱网用户,开心洋葱官网已经开启复制功能!
  • 欢迎访问开心洋葱网站,手机也能访问哦~欢迎加入开心洋葱多维思维学习平台 QQ群
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏开心洋葱吧~~~~~~~~~~~~~!
  • 由于近期流量激增,小站的ECS没能经的起亲们的访问,本站依然没有盈利,如果各位看如果觉着文字不错,还请看官给小站打个赏~~~~~~~~~~~~~!

PHP贪婪算法解决0-1背包问题代码

PHP 水墨上仙 2590次浏览

贪心算法解决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贪婪算法解决0-1背包问题代码
喜欢 (0)
加载中……