algorithm design techniques ( , , )( , , ( , , )( , , ( , , )( , , ( , , ) , , ( , , , ( , , ( , , ) , once the multiplications are performedthe final answer can be obtained with eight more additions , , , , it is straightforward to verify that this tricky ordering produces the desired values the running time now satisfies the recurrence ( ( / ( the solution of this recurrence is (no(nlog ( as usualthere are details to considersuch as the case when is not power of but these are basically minor nuisances strassen' algorithm is worse than the straightforward algorithm until is fairly large it does not generalize for the case where the matrices are sparse (contain many zero entries)and it does not easily parallelize when run with floating-point entriesit is less stable numerically than the classic algorithm thusuntil recently it had only limited applicability neverthelessit has always represented an important theoretical milestone and certainly shows that in computer scienceas in many other fieldseven though problem seems to have an intrinsic complexitynothing is certain until proven dynamic programming in the previous sectionwe saw that problem that can be mathematically expressed recursively can also be expressed as recursive algorithmin many cases yielding significant performance improvement over more naive exhaustive search any recursive mathematical formula could be directly translated to recursive algorithmbut the underlying reality is that often the compiler will not do justice to the recursive algorithmand an inefficient program results when we suspect that this is likely to be the casewe must provide little more help to the compilerby rewriting the recursive algorithm as nonrecursive algorithm that systematically records the answers to the subproblems in table one technique that makes use of this approach is known as dynamic programming