python - 贪心递归算法的时间复杂度

标签 python recursion time-complexity big-o greedy

我编写了一个贪婪递归算法来查找进行给定更改的最小硬币数量。现在我需要估计它的时间复杂度。由于该算法根据相同的 i (n * n) 嵌套了“if”,内部 block 将递归调用减半 (log(2)n),我相信正确的答案可能是 O(n*log(n) ),由以下计算得出:

n * log2(n) * O(1)

请告诉我您对我的分析是否正确的想法,并随时对我的贪婪递归算法提出改进建议。

这是我的递归算法:

coins = [1, 5, 10, 21, 25]
coinsArraySize = len(coins)
change = 63
pickedCoins = []

def findMin(change, i, pickedCoins):              
    if (i>=0):
        if (change >= coins[i]):               
           pickedCoins.append(coins[i])
           findMin(change - coins[i], i, pickedCoins)
        else:           
           findMin(change, i-1, pickedCoins)
findMin(change, coinsArraySize-1, pickedCoins)

最佳答案

每次递归调用都会减少至少 1 的变化,并且没有分支(也就是说,你的递归树实际上是一条直线,因此实际上不需要递归)。你的运行时间是O(n)

关于python - 贪心递归算法的时间复杂度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62240011/

相关文章:

python - 合并两行数据并连接值(如果唯一)-Pandas

python - 奇特的字典拆包

javascript - Var++ 在 JavaScript 中的递归函数参数中导致 RangeError

algorithm - 在计数排序中使用哈希表是否有效(代替数组)?

python - 将嵌套的 Json 转换为 Python 对象

python - Scrapy 立即写入 csv

java - 最长递增子序列的潜在 O(n) 解

算法复杂度最小值和最大值

javascript - 使用递归函数将两个整数相乘

algorithm - 递归函数的运行时