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
多一点