Search code examples
time-complexitygreedycoin-change

Greedy Coin Change Time Complexity


I'm trying to figure out the time complexity of a greedy coin changing algorithm. (I understand Dynamic Programming approach is better for this problem but I did that already). I'm not sure how to go about doing the while loop, but I do get the for loop.

I have the following where D[1...m] is how many denominations there are (which always includes a 1), and where n is how much you need to make change for.

This is my algorithm:

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

Solution

  • Let look at the edge cases.

    At the worse case D include only 1 element (when m=1) then you will loop n times in the while loop -> the complexity is O(n).

    If m>>n (m is a lot bigger then n, so D has a lot of element whom bigger then n) then you will loop on all m element till you get samller one then n (most work will be on the for-loop part) -> then it O(m).

    Button line: O(max(m,n))

    Hope that helps!