ホームページ  >  記事  >  バックエンド開発  >  PHP貪欲アルゴリズムの原理と使い方

PHP貪欲アルゴリズムの原理と使い方

墨辰丷
墨辰丷オリジナル
2018-06-12 10:41:471820ブラウズ

この記事では、主に 0-1 ナップザック問題を解決するための 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,&#39; &#39;,$val->price;
    echo &#39;<br>&#39;;
  }
}
//按照价格和重量比排序
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 &#39;0-1背包最优解为:&#39;;
echo tanxin($x);

要約: 以上がこの記事の全内容です。皆さんの学習に役立つことを願っています。

関連する推奨事項:

php による再帰関数の走査とファイルの削除方法

php による 2 つの配列の減算方法

イースターの正確な日付を計算するためのphpメソッド##

以上がPHP貪欲アルゴリズムの原理と使い方の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。