找零問題之貪心演算法求解Python

2021-10-23 20:54:38 字數 893 閱讀 5697

貪心演算法是基於區域性最優原理,將問題分割成若干個小的子問題,然後求解子問題的最優解,這樣歸併子問題的解,從而求得整個問題的解。當然這個解並不是最優解,只能說是近似最優解,因為區域性最優的合併並不一定是全域性最優。(貪心演算法還有驗證解的步驟,這個比較簡單,就是把解帶入即可)

找零問題,比如說售貨員需要找給顧客11元,那麼當前有10元,5元和1元面值的紙幣,如何找給顧客,使得紙幣數量最少。

思路:顯而易見,找的紙幣面值越大,那麼在(找錢)數值一定的情況下,紙幣數量越少。所以,問題就是使得面值越大的紙幣的數量較多,面值較小的紙幣的數量較少。這樣就可以將問題分解成若干個子問題了,先找面值最大的紙幣,數量盡可能多,再找面值次大的,以此類推。

def change(valuelist, change):

numdic = {}

# 注意要排序,保證面值較大的在前面

valuelist.sort(reverse=true)

num = 0

for c in [i for i in valuelist if i <= change]:

num += change // c

newchange = change % c

numdic[str(c)] = change // c

if newchange == 0:

break

else:

change = newchange

return num, numdic

num, dic = change([1,2,5,10], 16)

print(num)

print(dic)

注意,這解只能是次優解,不一定是最優解。

貪心演算法找零問題

找零問題 假設商店老闆需要找零n元錢,錢幣的面額有 100元 50元 20元 5元 1元,如何找零使得所需錢幣的數量最少?greedy algorithm money 100,50,20,5,1 defchange money x change 0,0,0,0,0 for i,m in enumer...

javaScript貪心演算法 找零問題

貪心演算法遵循一種近似解決問題的技術,期盼通過每個階段的區域性最優選擇 當前最好的解 從而達到全域性的最優 全域性最優解 最少硬幣找零問題 最少硬幣找零是給出要找零的錢數,以及可以用硬幣的額度數量,找出有多少種找零方法。如 美國面額硬幣有 1,5,10,25 我們給36美分的零錢,看能得怎樣的結果?...

硬幣找零問題 貪心演算法

問題 有1元 2元 5元 10元的硬幣無限多枚。現在要用這些硬幣來支付a 輸入 元,返回需要多少枚硬幣的找零序列。能找回高面值硬幣就先找回高面值硬幣。include include using namespace std class sulotion 用來儲存結果 int p coins.size ...