貪心算法是指在求解問題的過程中每一步總是做出在當前看來是最好的選擇,以期望獲得問題的全局最優解
即只“貪圖”眼前的最大利益,不考慮全局的
所以貪心算法不一定能求出正確解,需要證明
貪心算法一般求解優化問題, 一般是最值問題
硬幣找零
某種貨幣的硬幣有如下幾種的面值:1元, 5元,10元,25元, 100元,且數量不限
找零的數額為amount_rem,那么如何組合該貨幣的幾種面值,從而使得客戶所得的找零數最少
如找零72元
def get_min_coins(amount_rem): #貪心算法 coin_combinations = [1, 5, 10, 25, 100] #面值 coin_list = [] sorted_coin_combinations = sorted(coin_combinations, reverse = True) #將面值從大到小排序 for coin_val in sorted_coin_combinations: coin_count = int(amount_rem/coin_val) #計算每個面值的個數(換成零錢時) coin_list += [coin_val]*coin_count #將零錢放入輸出列表 amount_rem -= coin_val * coin_count #找零之后,剩下的錢 if amount_rem <= 0: break return coin_list if __name__ == "__main__": print(get_min_coins(72))
輸出結果
[25, 25, 10, 10, 1, 1]
