?

Python貪心算法

2020-12-31 07:26陳新龍
電腦報 2020年49期
關鍵詞:幣值面值收銀員

陳新龍

所謂貪心算法是指在對問題求解時,總是做出在當前看來是最好的選擇。也就是說,不從整體最優加以考慮,它所做出的僅僅是在某種意義上的局部最優解。下面讓我們來看一個經典的例題。

假設超市的收銀柜中有1分、2分、5分、1角、2角、5角、1元的硬幣。顧客結賬如果需要找零錢時,收銀員希望將最少的硬幣數找出給顧客,那么,給定需要找的零錢數目,如何求得最少的硬幣數呢?

這個找零錢的基本思路:每次都選擇面值不超過需要找給顧客的錢最大面值的硬幣。我們可以從面值最大的硬幣開始,然后依次遞減(圖1)。

首先定義列表d存儲已有幣值。并且定義d_num存儲每種幣值的數量。通過循環遍歷的方法計算出收銀員擁有錢的總金額并保存在變量S中,要找的零錢變量為sum。

當找零的金額比收銀員的總金額多時,無法進行找零,提示報錯。要想用的錢幣數量最少,我們從面值最大的幣值開始遍歷。這里也就是我們貪心算法的核心步驟。計算出每種硬幣所需要的數量,不斷地更新硬幣個數與硬幣面值,最終獲得一個符合要求的組合(圖2)。

貪心算法在對問題求解時,不是對所有問題都能得到整體最優解,也不是從整體上去考慮,做出的只是在某種意義上的局部最優解。從面值最大的硬幣開始依次遞減,尋找可用的方法。一般貪心算法并不能保證是最佳的解決方法,這是因為:總是從局部出發沒有從整體考慮,只能確定某些問題是有解的,優點是算法簡單。常用來解決求最大值或最小值的問題。

猜你喜歡
幣值面值收銀員
第一套人民幣共有12種面值
在哪只手中
百萬“大”鈔
對人民幣幣值扭曲的研究與我國進行幣值追趕的必要性
對人民幣幣值扭曲的研究與我國進行幣值追趕的必要性
超市收銀員
無名火
掉錢
歐洲央行不再發行500元面值歐元
小老鼠當收銀員
91香蕉高清国产线观看免费-97夜夜澡人人爽人人喊a-99久久久无码国产精品9-国产亚洲日韩欧美综合