2013-10-16 66 views
1

我試圖找到一個簡單的回答一個簡單的問題..這..如何解釋這個硬幣改變算法

說你有一個硬幣找零算法,N = 10的系統d(1)= 1,d(2)= 7,和d的面額(3)= 10。

現在給出該實施方式中從教科書的算法..

Greedy_coin_change(denom, A) 
{ 
    i = 1; 
    While (A > 0) { 
     c = A/denom[i]; 
print(「use 「+c+」coins of denomination」+denom[i]; 
     A = A – C * denom[i]; 
     i = i+1; 
    } 
} 

不會結果是:「使用面額1的10個硬幣」?

這是因爲從我的理解當然,denom [1] = 1,denom [2] = 7,denom [3] = 10.正確?

如果是這種情況,該算法不會被認爲是最優的,正確的?

然而,有一個我不知道上面的代碼中一個小的語句,如果它甚至應該被視爲代碼的一部分,那就是:

DENOM [1]> DENOM [2 ]> ...> DENOM [N] = 1

回答

1
denom[1] > denom[2] > ... > denom[n] = 1. 

意味着在輸入的項目,要責令從最大到最小。

把它作爲算法的前提條件(即,這對於算法工作是必需的)。

因此,如果給出1,7,10,denom將是{10,7,1}並且它將選擇demon[1]中的1個。

+0

謝謝! d(1)= 1,d(2)= 7和d(3)= 10是混淆的根源。所以它必須按降序排序,然後冷卻。就是我的想法。我很快就會接受你的回答。 – GelatinFox