python - 这段代码关于递归算法的时间复杂度是多少
问题描述
我已经进行了货币兑换问题,例如,用尽可能少的硬币兑换一定数量的货币。可用的面额有:1,3 和 4。即使是 100 等少量面额也需要很长时间。复杂度是 2^n 吗?
def moneychange_rec(money,coins):
if money == 0:
return table[money]
else:
for coin in coins:
if money>=coin:
table[money] = min(table[money],1 + moneychange_rec(money-coin,coins))
return table[money]
money = 11
table = [0]+[money+1]*money
print(table)
coins = [1,3,4]
moneychange_rec(money,coins)
解决方案
输入大小n
与表示值需要多少位有关money
。但是,递归深度与值本身有关。因此,您的递归深度可能是指数的,因此算法是O(2**n)
.
换个角度看:将金额从 100 倍增至 200 倍,您的算法所花费的时间大约会增加一倍(或者至少,递归深度大约会增加一倍)。但一般来说,将一个值加倍会使表示该数字所需的位数最多增加 1。
推荐阅读
- ruby - 无法在 ubuntu vps 上通过 rbenv 安装 ruby 2.5.1
- c++ - Visual Studio 2019 上 Vcpkg 的 Boost.Tests vc142
- vba - DBF 文件不是有效的路径 - VBA
- sql - 用连接计数
- entity-framework-core - 如何找到导航属性的外键字段?
- python-3.x - 按数据框分组的多列排序
- java - 从数据库中删除数据后如何刷新我的活动(使用 DAO)
- c# - 为什么有些 XML 标签没有被反序列化
- r - 使用 purrr:map 和 ggplot
- c++ - 查找 3 个 C++ 中的 1 个集合唯一的单词