Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Coin Change analysis

Tags:

algorithm

{1,3,5} denomination coins; Sum = 11. find minimum number of coins which can be used to make the sum (We can use any number of coins of each denomination)

I searched for Run Time complexity of this Coin change problem particularly using dynamic programming method. But was not able to find explanation anywhere.

How to calculate the complexity of non dynamic solution and then change it for the dynamic one? (not the greedy one)

Edit:

Here is an implementation for which analysis was asked.

public int findCoinChange(int[] coins, int sum,int count) {

    int ret = 0, maxRet = -1;
    if(sum ==0)maxRet = count;
    else if(sum < 0)maxRet = -1;
    else{
        for(int i:coins){
            ret = findCoinChange(coins, sum - i,count+1);
            if(maxRet< 0)maxRet = ret;
            else if(ret >=0 && ret < maxRet){
                    maxRet = ret;
                }
            }
    }
    if(maxRet < 0)return -1;
    else return maxRet;
}

Looks like Combinatorial explosion to me. However I am not sure how to deduce a run time complexity for this.

like image 980
arpit gautam Avatar asked Jun 21 '13 03:06

arpit gautam


People also ask

What is coin change algorithm?

You are given an array of coins with varying denominations and an integer sum representing the total amount of money; you must return the fewest coins required to make up that sum; if that sum cannot be constructed, return -1.

What is coin changing problem give example?

Example 1: Suppose you are given the coins 1 cent, 5 cents, and 10 cents with N = 8 cents, what are the total number of combinations of the coins you can arrange to obtain 8 cents. Input: N=8 Coins : 1, 5, 10 Output: 2 Explanation: 1 way: 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 = 8 cents. 2 way: 1 + 1 + 1 + 5 = 8 cents.

Is coin change same as knapsack?

Coin change problem is very similar to unbounded knapsack problem which can be solved easily and efficiently by using Dynamic Programming. General task is to find maximum number of ways to add the coins from the array for given amount.

Does the coin change problem have the optimal substructure property?

The coin changing problem has both optimal substructure, meaning that it can be easily divided to simpler problems and they can be solved to find the final solution. It also satisfies the property of overlapping sub problems, meaning previously solved sub problem results can be used multiple times.


1 Answers

The dynamic programming solution to this problem is clearly O(k * n) (nested loops, blah blah blah) where k is the number of coins and n is the amount of money that change is being made for.

I don't know what you mean by non-dynamic programming solution. Sorry, you're going to have specify what algorithm you mean. The greedy algorithm fails in some cases, so you shouldn't be referring to that. Do you mean the linear programming solution? That's a terrible approach to this problem because we don't know what the complexity is, and it's possible to make it run arbitrarily slowly.

I also don't know what you mean by "change it for the dynamic one."

like image 83
jason Avatar answered Sep 21 '22 05:09

jason