PHP貪婪算法解決0-1背包問(wèn)題實(shí)例分析
本文實(shí)例講述了PHP貪婪算法解決0-1背包問(wèn)題的方法。分享給大家供大家參考。具體分析如下:
貪心算法解決0-1背包問(wèn)題,全局最優(yōu)解通過(guò)局部最優(yōu)解來(lái)獲得!比動(dòng)態(tài)規(guī)劃解決背包問(wèn)題更靈活!
//0-1背包貪心算法問(wèn)題
class tanxin{
public $weight;
public $price;
public function __construct($weight=0,$price=0)
{
$this->weight=$weight;
$this->price=$price;
}
}
//生成數(shù)據(jù)
$n=10;
for($i=1;$i<=$n;$i++){
$weight=rand(1,20);
$price=rand(1,10);
$x[$i]=new tanxin($weight,$price);
}
//輸出結(jié)果
function display($x)
{
$len=count($x);
foreach($x as $val){
echo $val->weight,' ',$val->price;
echo '<br>';
}
}
//按照價(jià)格和重量比排序
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背包最優(yōu)解為:';
echo tanxin($x);
希望本文所述對(duì)大家的php程序設(shè)計(jì)有所幫助。
- PHP寫楊輝三角實(shí)例代碼
- 深入理解PHP幾個(gè)算法:PHP冒泡、PHP二分法、PHP求素?cái)?shù)、PHP乘法表
- PHP求最大子序列和的算法實(shí)現(xiàn)
- php 3行代碼的分頁(yè)算法(求起始頁(yè)和結(jié)束頁(yè))
- php實(shí)現(xiàn)猴子選大王問(wèn)題算法實(shí)例
- php約瑟夫問(wèn)題解決關(guān)于處死犯人的算法
- PHP基于回溯算法解決n皇后問(wèn)題的方法示例
- PHP使用棧解決約瑟夫環(huán)問(wèn)題算法示例
- PHP基于遞歸算法解決兔子生兔子問(wèn)題
- PHP實(shí)現(xiàn)的解漢諾塔問(wèn)題算法示例
- PHP實(shí)現(xiàn)的楊輝三角求解算法分析
相關(guān)文章
PHP基于php_imagick_st-Q8.dll實(shí)現(xiàn)JPG合成GIF圖片的方法
這篇文章主要介紹了PHP基于php_imagick_st-Q8.dll實(shí)現(xiàn)JPG合成GIF圖片的方法,需要的朋友可以參考下2014-07-07
Linux系統(tǒng)中設(shè)置多版本PHP共存配合Nginx服務(wù)器使用
這篇文章主要介紹了Linux系統(tǒng)中設(shè)置多版本PHP共存配合Nginx服務(wù)器使用的技巧,依靠php-fpm工具來(lái)進(jìn)行管理,需要的朋友可以參考下2015-12-12
PHP動(dòng)態(tài)分頁(yè)函數(shù),PHP開發(fā)分頁(yè)必備啦
PHP動(dòng)態(tài)分頁(yè)函數(shù),PHP開發(fā)分頁(yè)必備啦。其實(shí)吧,這個(gè)是必用的,不說(shuō)了,PHP動(dòng)態(tài)分頁(yè)函數(shù)還是不錯(cuò),比較簡(jiǎn)單吧2011-11-11
PHP中strcmp()和strcasecmp()函數(shù)字符串比較用法分析
這篇文章主要介紹了PHP中strcmp()和strcasecmp()函數(shù)字符串比較用法,結(jié)合實(shí)例形式較為詳細(xì)的分析了strcmp()和strcasecmp()函數(shù)字的功能,使用方法與區(qū)別,需要的朋友可以參考下2016-01-01
php批量添加數(shù)據(jù)與批量更新數(shù)據(jù)的實(shí)現(xiàn)方法
這篇文章主要介紹了php批量添加數(shù)據(jù)與批量更新數(shù)據(jù)的實(shí)現(xiàn)方法,涉及針對(duì)表單的處理與sql語(yǔ)句的靈活使用,非常具有實(shí)用價(jià)值,需要的朋友可以參考下2014-12-12
PHP?array_combine()?函數(shù)內(nèi)置函數(shù)
這篇文章主要介紹了PHP?array_combine()函數(shù)內(nèi)置函數(shù),array_combine()是PHP中的一個(gè)內(nèi)置函數(shù),用于組合兩個(gè)數(shù)組并通過(guò)使用一個(gè)數(shù)組作為鍵和另一個(gè)數(shù)組作為值來(lái)創(chuàng)建一個(gè)新數(shù)組2022-09-09
PHP實(shí)現(xiàn)二維數(shù)組(或多維數(shù)組)轉(zhuǎn)換成一維數(shù)組的常見方法總結(jié)
這篇文章主要介紹了PHP實(shí)現(xiàn)二維數(shù)組(或多維數(shù)組)轉(zhuǎn)換成一維數(shù)組的常見方法,結(jié)合實(shí)例形式總結(jié)分析了PHP數(shù)組遍歷、轉(zhuǎn)換所涉及的array_reduce、array_walk_recursive及array_map函數(shù)常見使用技巧,需要的朋友可以參考下2019-12-12

