Beschleunigung der Berechnung der Fibonacci-Sequenz (Python-Version)

Ich habe auch versucht, Fibonacci-Sequenzberechnung beschleunigen (Ruby-Version) in Python.

Die Definitionen sind gleich.

python


#normale Version
def fib1(n):
    if n <= 1:
        return n
    n0, n1 = 0, 1
    for _ in range(n):
        n0, n1 = n1, n0+n1
    return n0

#Hochgeschwindigkeitsversion
def fib2(n):
    if n <= 1:
        return n
    result = [1, 0, 0, 1]
    matrix = [1, 1, 1, 0]
    while n > 0:
        if n % 2:
            result = mul(matrix, result)
        matrix = mul(matrix, matrix)
        n //= 2
    return result[2]

def mul(a, b):
    return [a[0]*b[0] + a[1]*b[2],
            a[0]*b[1] + a[1]*b[3],
            a[2]*b[0] + a[3]*b[2],
            a[2]*b[1] + a[3]*b[3]]

Ich kann es richtig machen.

python


print([fib1(i) for i in range(11)])
print([fib2(i) for i in range(11)])
>>>
[0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55]
[0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55]

Zeitmessung.

python


%timeit fib1(100000)
%timeit fib2(100000)
%timeit fib1(1000000)
%timeit fib2(1000000)
>>>
10 loops, best of 3: 75.7 ms per loop
100 loops, best of 3: 10.6 ms per loop
1 loops, best of 3: 6.9 s per loop
1 loops, best of 3: 374 ms per loop

Mehr als 10 mal schneller als Ruby!

Mit numpy konnte ich übrigens nur bis zu 1476 (≒ 1.3e309) berechnen.

das ist alles

Recommended Posts

Beschleunigung der Berechnung der Fibonacci-Sequenz (Python-Version)
Fibonacci-Sequenz mit Python
Ich habe versucht, mit Python ② (Fibonacci-Zahlenfolge) aufzuklären.
PYTHON2.7 64-Bit-Version
Pythons schneller Fibonatch
Implementierung der Fibonacci-Sequenz
Überprüfen Sie die Version mit Python
[Version 2020] Lassen Sie Python alle Steuer- und Take-Home-Berechnungen durchführen
Wiederholung der Memorisierung und dynamische Planungsmethode, bekannt aus der Python Fibonacci-Sequenz
[Python] Verwenden Sie eine Zeichenfolgenfolge
Suche nach Breitenpriorität / bidirektionale Suche (Python Edition)
Upgrade von Python Anaconda
Python-Version wechselt nicht
Überprüfen Sie die OpenSSL-Version von Python 2.6
Implementierung von Fibonacci und Primzahlen (Python)
Schnellerer Python-Release-Zyklus!
Beschleunigen Sie das Laden von Python-Bildern
Einführung in Python (Python-Version APG4b)
So ändern Sie die Python-Version
Geben Sie die Python-Version mit virtualenv an
tesseract-OCR für Python [japanische Version]
Fehlerbehebung Python-Versionsprüfung