57 std::cout <<
"Matrices: ";
58 for (
size_t i = 0; i + 1 <
dims.size(); ++i)
62 std::cout <<
"A" << (i + 1)
63 <<
"(" <<
dims[i] <<
"x" <<
dims[i + 1] <<
")";
81 std::cout << title <<
"\n";
85 std::cout << std::setw(26) << std::left <<
"Minimum multiplications"
86 <<
": " <<
r.min_multiplications <<
"\n";
87 std::cout << std::setw(26) << std::left <<
"Optimal parenthesization"
88 <<
": " <<
r.parenthesization <<
"\n";
107 std::cout <<
"\n=== Matrix-Chain Dynamic Programming ===\n\n";
109 run_case({30, 35, 15, 5, 10, 20, 25},
"Scenario A: CLRS reference chain");
110 run_case({10, 20, 30},
"Scenario B: Two matrices");
111 run_case({10, 30, 5, 60},
"Scenario C: Three matrices (high asymmetry)");
112 run_case({5, 5, 5, 5, 5},
"Scenario D: Uniform square matrices");
114 std::cout <<
"Scenario E: Cost-only helper\n";
118 std::cout << std::setw(26) << std::left <<
"matrix_chain_min_cost"
122 std::cout <<
"\nDone.\n";
Matrix-chain multiplication ordering via interval DP.
Simple dynamic array with automatic resizing and functional operations.
int main()
Example driver demonstrating matrix-chain dynamic programming routines.
Main namespace for Aleph-w library functions.
Matrix_Chain_Result matrix_chain_order(const Array< size_t > &dims)
Compute optimal matrix-chain multiplication order.
Divide_Conquer_DP_Result< Cost > divide_and_conquer_partition_dp(const size_t groups, const size_t n, Transition_Cost_Fn transition_cost, const Cost inf=dp_optimization_detail::default_inf< Cost >())
Optimize partition DP using divide-and-conquer optimization.
void print_rule()
Prints a horizontal rule for example output separation.
size_t matrix_chain_min_cost(const Array< size_t > &dims)
Compute only the minimum multiplication cost.