Time complexity 贪婪硬币变化时间复杂性

Time complexity 贪婪硬币变化时间复杂性,time-complexity,greedy,coin-change,Time Complexity,Greedy,Coin Change,我试图找出贪婪换币算法的时间复杂度。(我知道动态规划方法更适合这个问题,但我已经这样做了)。我不知道如何进行while循环,但我确实得到了for循环 我有下面的例子,其中D[1…m]是有多少面额(总是包括1),其中n是你需要兑换多少面额 这是我的算法: CoinChangeGreedy(D[1...m], n) numCoins = 0 for i = m to 1 while n ≥ D[i] n -= D[i]

我试图找出贪婪换币算法的时间复杂度。(我知道动态规划方法更适合这个问题,但我已经这样做了)。我不知道如何进行
while
循环,但我确实得到了
for
循环

我有下面的例子,其中
D[1…m]
是有多少面额(总是包括1),其中
n
是你需要兑换多少面额

这是我的算法:

CoinChangeGreedy(D[1...m], n)
    numCoins = 0
    for i = m to 1
        while n ≥ D[i]
            n -= D[i]
            numCoins += 1
    return numCoins

让我们看看边缘案例

在更坏的情况下,
D
仅包含1个元素(当
m=1
时),则在while循环中循环
n
次->复杂性为O(n)

如果
m>>n
m
n
大得多,那么
D
有很多元素比
n
大),那么您将循环所有
m
元素,直到得到一个相同的
n
(大多数工作将在for循环部分)->然后它是O(m)

按钮行:O(最大(m,n))


希望有帮助

谢谢你的帮助。我改变了我必须使用的算法,我可以很容易地计算时间复杂度。以下是我将其更改为:

CoinChangeGreedy(D[1...m], n)
    numCoins = 0
    for i = m to 1
        if n/D[i] ≥ 1
            numCoins = numCoins + (n/D[i])
            n = n - [(n/D[i]) * D[i]]
    return numCoins

我计算出的最坏情况=最佳情况
\in
\Theta(m)
我理解DP更好
在这种情况下DP是什么?@Amy动态编程我猜?是的,DP是动态编程。很抱歉造成混淆。我想我不明白当n被一个与面额
D[1…m]
数组相关的值递减时,如何循环
n
次。对于复杂性,我考虑了更糟糕的情况-如果
m=1
它将循环
n
次(尝试运行示例)。当然,如果
m
越大,那么复杂性就越低。好吧,这是有道理的。那么最好的情况是什么?@dgfrey102790 O(1)当
m=n
时。我猜当
m时,平均情况会比
n/m
多一点