change_polynomial, an Octave code which uses a polynomial multiplication algorithm to count the ways of making various sums using a given number of coins.
In this version of the change making problem, the order of the coins is significant. In other words, if we are using exactly 3 coins to make 16 cents, then we count 6 separate solutions: (1,5,10), (1,10,5), (5,1,10), (5,10,1), (10,1,5) and (10,5,1). Similarly, we count three essentialy equivalent solutions to forming the sum of 7 cents.
If the user wishes to determine the number of ways of forming sums using anywhere from 0 up to COIN_NUM coins, inclusive, then it is only necessary to include a coin of value 0 in the denomination list.
The computer code and data files described and made available on this web page are distributed under the MIT license
change_polynomial is available in a MATLAB version and an Octave version.
change_diophantine, an Octave code which sets up a Diophantine equation to solve the change making problem, which counts the number of ways a given sum can be formed using coins of various denominations.
change_dynamic, an Octave code which uses dynamic programming to solve the change making problem, which counts the number of ways a given sum can be formed using coins of various denominations.
change_greedy, an Octave code which uses the greedy method to seek a solution to the change making problem, which tries to match a given amount by selecting coins of various denominations.
combo, an Octave code which includes many combinatorial routines.
football_dynamic, an Octave code which uses dynamic programming to count the ways of achieving a given score in football.
knapsack_01, an Octave code which uses brute force to solve small versions of the 0/1 knapsack problem;
knapsack_greedy, an Octave code which uses a greedy algorithm to estimate a solution of the knapsack problem;
mcnuggets, an Octave code which counts M(N), the number of ways a given number N of Chicken McNuggets can be assembled, given that they are only available in packages of 6, 9, and 20.
partition_brute, an Octave code which uses brute force to seek solutions of the partition problem, splitting a set of integers into two subsets with equal sum.
polynomial_multiply, an Octave code which multiplies two polynomials p(x) and q(x).
satisfy, an Octave code which demonstrates, for a particular circuit, an exhaustive search for solutions of the circuit satisfiability problem.
subset, an Octave code which enumerates, generates, ranks and unranks combinatorial objects including combinations, partitions, subsets, index sets, and trees.
subset_sum, an Octave code which seeks solutions of the subset sum problem, in which it is desired to find a subset of a set of integers which has a given sum.
subset_sum_brute, an Octave code which uses brute force to solve the subset sum problem, to find a subset of a set of integers which has a given sum.
tsp_brute, an Octave code which is given a city-to-city distance table, and solves a (small) traveling salesperson problem (TSP), using brute force.
tsp_descent, an Octave code which is given a city-to-city distance table, chooses an initial tour at random, and then tries simple variations, seeking to quickly find a tour of lower cost for the traveling salesperson problem (TSP).
tsp_greedy, an Octave code which is given a city-to-city distance table,, and solves a small traveling salesperson problem (TSP) using the greedy algorithm. It picks a starting city at random, and then successively visits the nearest unvisited city.
tsp_random, an Octave code which is given a city-to-city distance table, seeks a solution of the Traveling Salesperson Problem (TSP), by randomly generating round trips that visit every city, returning the tour of shortest length.