贪婪算法
贪婪算法的基本思路是,从局部的解最优来得到全局的最优解,从问题的某一个初始解开始,逐步逼近给定的目标,尽可能的求得更好的解。当算法的某一布不能继续前进时,就停止算法给出近似解。
贪婪算法存在以下问题:
1、不能保证最后的解是最优的(因为可能是近似值)
2、不能用来求最大或最小解问题
3、只能求满足某些约束条件的可行解的范围。
例题:换零钱。人民币有
100、50、20、10、5、2、1、0.5、0.1
等面值,找零钱时有多种方案,使用贪婪算法,将尽可能快速的得出组合方案,所以从局部开始,从最大面值开始然后向下。
解:
function exchange($n)
{
$money = [100, 50, 20, 10, 5, 2, 1, 0.5, 0.1];
for ($i = 0; $i < count($money) - 1; $i++) {
if ($n >= $money[$i])
break;
}
$sum = 0;
$res = [];
while ($n - $sum >= 0) {
if ($sum + $money[$i] < $n) {
$sum += $money[$i];
if (isset($res[$i]))
$res[$i] += 1;
else
$res[$i] = 1;
} elseif ($sum + $money[$i] == $n) {
if (isset($res[$i]))
$res[$i] += 1;
else
$res[$i] = 1;
break;
} else {
$i++;
}
}
foreach($res as $key =>$val){
echo "需要{$money[$key]}面值的{$val}张 <br>";
}
}

本文介绍了贪婪算法的基本思路,即通过选择局部最优解来逼近全局最优解,并以换零钱问题为例,详细展示了如何利用PHP实现这一过程。
4291

被折叠的 条评论
为什么被折叠?



