Program the following algorithms that we covered in the class:
a. Classical matrix multiplication
b. Divide-and-conquer matrix multiplication
c. Strassen’s matrix multiplication
In order to obtain more accurate results, the algorithms should be tested with the same matrices of different sizes many times. The total time spent is then divided by the number of times the algorithm is performed to obtain the time taken to solve the given instance. Let the matrix size be n x n. Carry out a complete test of your algorithms with n = 2, 4, 8, 16, 32, 64, 128, 256, â€¦ (up to the largest size of n that your computer can handle)
Write a detailed report together with graphs explaining the data sets, test strategies and explanation of the results. What are the theoretical complexity comparisons of the three algorithms? Is the classical matrix multiplication always faster than the divide-and-conquer matrix multiplication? Conclude your report with the strength and constraints of your work.