Optimizations and Improvements

In this chapter, we'll look at some optimizations that we can make to create high-performance functional programs. We will look at the following topics:

  • We'll expand on using the @lru_cache decorator from Chapter 10, The Functools Module. We have a number of ways to implement the memoization algorithm.
  • We'll also discuss how to write our own decorators. More importantly, we'll see how to use a Callable object to cache memoized results.
  • We'll also look at some optimization techniques that were presented in Chapter 6, Recursions and Reductions. We'll review the general approach to tail recursion optimization. For some algorithms, we can combine memoization with a recursive implementation and achieve good performance. For other algorithms, memoization isn't really very helpful and we have to look elsewhere for performance improvements.
  • We'll look at an extensive case study in optimizing accuracy by using the Fraction class.

In most cases, small changes to a program will only lead to small improvements in performance. Replacing a function with a lambda object will have a tiny impact on performance. If we have a program that is unacceptably slow, we often have to locate a completely new algorithm or data structure. Replacing an  algorithm with one that's  is the best way to create a dramatic improvement in performance.

One place to start on redesign is http://www.algorist.com. This is a resource that may help to locate better algorithms for a given problem.

..................Content has been hidden....................

You can't read the all page of ebook, please click here login for view all page.
Reset