Reference Document: Rod Cutting Assignment.pdf

Task1

Length (i)12345678910
Price pi1589101717202430

Given above table of rod process, compute all possible solutions for rod of length 6.

First lets find out Optimal Solutions for lengths less than 6

Optimal Solution for LengthOptimal Length SplitRevenue
52, 313
42, 210
338
225
111

Following could be possible solutions for splitting the length 6 rod into difference lengths

Possible SolutionsRevenue
617
1, 51 + 13 = 14
2, 45 + 10 = 15
3, 38 + 8 = 16
1, 1, 41 + 1 + 10 = 12
1, 2, 31 + 5 + 8 = 14
2, 2, 25 + 5 + 5 = 15
1, 1, 2, 21 + 1 + 5 + 5 = 12
1, 1, 1, 31 + 1 + 1 + 8 = 11
1, 1, 1, 1, 21 + 1 + 1 + 1 + 5 = 9
1, 1, 1, 1, 1, 11 + 1 + 1 + 1 + 1 + 1 = 6

(No Repetition of Same Sequence)

The maximum revenue will be of 17​ with the original length that is 6

Task2

Length (i)12345678910
Price pi1589101717202430

Dry run Dynamic programming solution on above example for rod length 6. Show all computations using recursive equation and values in array

DP Top Down Recursive Algorithm

int Optimal_Price(int C[], int n) {
  if (MaxRevenue[n] != 0) {
    return MaxRevenue[n];
  }
 
  int max_revenue = C[n]; // initially the current price
  for(int i=1; i<=n; i++)
    max_revenue = MAX(max_revenue, C[i] + Optimal_Price(C, n-i));
 
  MaxRevenue[n] = max_revenue;
  return MaxRevenue[n];
}

C = [1, 5, 8, 9, 10, 17, 17, 20, 24, 30]

Initial Memoization

MaxRevenue = [0, 0, 0, 0, 0, 0]

Final Memoization

MaxRevenue = [1, 5, 8, 10, 13, 17]

Optimal_Price(6) - Initial Call to Function

MaxRevenue[6] =

Returns MaxRevenue(6) = 17

Optimal_Price(5)

MaxRevenue[5] =

Returns MaxRevenue(5) = 13

Optimal_Price(4)

MaxRevenue[4] =

Returns MaxRevenue(4) = 10

Optimal_Price(3)

MaxRevenue[3] =

Returns MaxRevenue(3) = 8

Optimal_Price(2)

MaxRevenue[2] =

Returns MaxRevenue(2) = 5

Optimal_Price(1)

MaxRevenue[1] =

Returns MaxRevenue(1) = 1

Hence, we get Optimal Price at Length 6 as 17​.

Task3

Compute the optimal solution (where should we cut the rod to get optimal revenue) by modifying the algorithm

Bottom Up Iterative Algorithm Modification

We can store the cut point where we get a maximum revenue into a variable only for the final iteration / the nth value we need to work on. This is done in line # 9​.

Rod-Cutting-DP(V, n){
	C[0] = 0
	cut = -1;
	for (i = 1 to n) {
		max = -∞
		for (k = 1 to i) {
			if (max < V[k] + C[i − k])
				max = V[k] + C[i − k]
				if (i == n) // Checking if we are working for n
					cut = k; // we need to store this cut point
			}
		C[i] = max
		// cut has the Optimal Cut Point for our Optimal Revenue
	}
}