# include <iostream>
# include <iomanip>
namespace
{
{
std::cout << "Matrices: ";
for (
size_t i = 0; i + 1 < dims.
size(); ++i)
{
if (i > 0)
std::cout << " ";
std::cout << "A" << (i + 1)
<< "(" << dims[i] << "x" << dims[i + 1] << ")";
}
std::cout << "\n";
}
{
std::cout << title << "\n";
print_rule();
print_dims(dims);
const auto r = matrix_chain_order(dims);
std::cout << std::setw(26) << std::left << "Minimum multiplications"
<<
": " <<
r.min_multiplications <<
"\n";
std::cout << std::setw(26) << std::left << "Optimal parenthesization"
<<
": " <<
r.parenthesization <<
"\n";
print_rule();
std::cout << "\n";
}
}
{
std::cout << "\n=== Matrix-Chain Dynamic Programming ===\n\n";
run_case({30, 35, 15, 5, 10, 20, 25}, "Scenario A: CLRS reference chain");
run_case({10, 20, 30}, "Scenario B: Two matrices");
run_case({10, 30, 5, 60}, "Scenario C: Three matrices (high asymmetry)");
run_case({5, 5, 5, 5, 5}, "Scenario D: Uniform square matrices");
std::cout << "Scenario E: Cost-only helper\n";
print_dims(dims);
std::cout << std::setw(26) << std::left << "matrix_chain_min_cost"
std::cout << "\nDone.\n";
return 0;
}
Matrix-chain multiplication ordering via interval DP.
Simple dynamic array with automatic resizing and functional operations.
constexpr size_t size() const noexcept
Return the number of elements stored in the stack.
Main namespace for Aleph-w library functions.
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.