贪心算法是指在求解问题的过程中每一步总是做出在当前看来是最好的选择,以期望获得问题的全局最优解
即只“贪图”眼前的最大利益,不考虑全局的
所以贪心算法不一定能求出正确解,需要证明
贪心算法一般求解优化问题, 一般是最值问题
硬币找零
某种货币的硬币有如下几种的面值: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]