貪心算法
貪心算法遵循一種近似解決問題的技術,期盼通過每個階段的局部最優選擇(當前最好的解),從而達到全局的最優(全局最優解)。
最少硬幣找零問題
最少硬幣找零是給出要找零的錢數,以及可以用硬幣的額度數量,找出有多少種找零方法。
如:美國面額硬幣有:1,5,10,25
我們給36美分的零錢,看能得怎樣的結果?
function MinCoinChange(coins){
var coins = coins;
var cache = {};
this.makeChange = function(amount) {
var change = [],
total = 0;
for (var i=coins.length; i>=0; i--){
var coin = coins[i];
while (total + coin <= amount) {
change.push(coin);
total += coin;
}
}
return change;
};
}
var minCoinChange = new MinCoinChange([1, 5, 10, 25]);
minCoinChange.makeChange(36);
//一個25, 一個10, 一個1
得到結果是一個25, 一個10, 一個1。貪心得到結果是一個可以接受的解,不一定總是得到最優的解,因爲規劃上沒有考慮到大。
步驟如下圖: