Здравствуйте. Я только что решил этот вопрос с кодом leetcode: https://leetcode.com/problems/coin-change-2/
Цель состоит в том, чтобы найти количество различных возможных комбинаций coins
, которые мы можем использовать для генерации amount
, предполагая, что у нас бесконечное числоколичество монет от каждого номинала.
Я знаю, что у этой проблемы есть решение DP, которое работает в O(amount*len(coins))
, и я могу добавить памятку к решению ниже для достижения этого.
Однако я изо всех силчтобы найти временную сложность наивного подхода ниже:
def change(amount, coins):
def helper(amount, coins, id):
if amount == 0:
return 1
res = 0
for i in range(id, len(coins)):
if coins[i] <= amount:
res += helper(amount - coins[i], coins, i)
return res
res = helper(amount, coins, 0)
return res
Итак, что я на самом деле делаю, так это DFS, где я стараюсь максимально использовать первую монету, прежде чем вернуться назад и перейти к следующей монете.Поэтому, как только я начинаю использовать следующую монету, я не могу снова использовать первую -> это позволяет мне не учитывать перестановки в моем результате.
Я знаю, что временная сложность этого решения O(exponential)
и я также знаю, что это O(V + E)
, потому что это DFS.
Может кто-нибудь дать точную форму сложности времени?Что такое экспоненциальный член точно?Или как подсчитать ребра и вершины в моем графике?