如何解释这种硬币改变算法

时间:2013-10-16 17:31:12

标签: algorithm greedy

我正试图找到一个简单问题的直接答案..这就是..

在d(1)= 1,d(2)= 7,d(3)= 10的面额系统中,你有一个n = 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;
    }
}

结果不会是:“使用10个面额1的硬币”?

这是因为当然,根据我的理解,denom [1] = 1,denom [2] = 7,denom [3] = 10.正确吗?

如果是这种情况,算法不会被认为是最佳的,对吗?

但是,代码上方有一个小语句,我不确定它是否应该作为代码的一部分,这里是:

  

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

1 个答案:

答案 0 :(得分:1)

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

表示输入中的项目应从最大到最小排序。

将其作为算法的前提条件(即,这对算法起作用是必要的)。

因此,如果给定1,7,10,则denom将为{10,7,1},并且会选择demon[1]中的1个。