# borzunov/cpmoptimize

Optimizes loops calculating linear recurrences (Python 2)
Python
Switch branches/tags
Nothing to show
Fetching latest commit…
Cannot retrieve the latest commit at this time.

# cpmoptimize

A decorator for automatic algorithms optimization via fast matrix exponentiation

## Installation

You can install the stable version of the library using pip:

```sudo pip install cpmoptimize
```

```sudo python setup.py install
```

## Basic Example

Suppose we want to calculate the ten millionth Fibonacci number using a program in Python. The function with a trivial algorithm is rather slow:

```def fib(n):
a = 0
b = 1
for i in xrange(n):
a, b = b, a + b
return a

result = fib(10 ** 7)

# Time: 25 min 31 sec```

But if we apply the optimizing decorator, the function will give you the answer much faster:

```from cpmoptimize import cpmoptimize

@cpmoptimize()
def fib(n):
a = 0
b = 1
for i in xrange(n):
a, b = b, a + b
return a

result = fib(10 ** 7)

# Time: 18 sec (85x faster)```

## Description

Actually, the decorator disassembles bytecode of a function using pretty `byteplay` library, analyzes the code, and tries to reduce time complexity of the algorithm used in it using fast matrix exponentiation.

The decorator uses a method implemented by Alexander Skidanov in his simple optimizing interpreter.

A detailed description of the library (including an idea explanation and an interface reference) is available in English and Russian.

## Author

Copyright (c) 2014, 2015 Alexander Borzunov