„Wenn ein Arbeiter seine Arbeit gut machen will, muss er zuerst seine Werkzeuge schärfen.“ – Konfuzius, „Die Gespräche des Konfuzius. Lu Linggong“
Titelseite > Programmierung > Wie weit können Sie ein Programm zur Berechnung der Fibonacci-Folge optimieren?

Wie weit können Sie ein Programm zur Berechnung der Fibonacci-Folge optimieren?

Veröffentlicht am 23.08.2024
Durchsuche:137

Wie weit können Sie ein Programm zur Berechnung der Fibonacci-Folge optimieren?

Einführung

Als ich Python lernte, gab uns unser Lehrer eine Hausaufgabe: Berechnen Sie die N-te Zahl der Fibonacci-Folge.

Ich denke, es ist sehr einfach, also schreibe ich diesen Code:

def fib(n):
    if n == 0:
        return 0
    elif n == 1:
        return 1
    else:
        return fib(n - 1)   fib(n - 2)

Später weiß ich, dass diese Art von Lösung zu viel Zeit kostet.

Optimieren Sie ein Programm

Ich ändere die Lösung in Iteration.

def fib(n):
    ls = [1,1]
    for i in range(2,n):
        ls.append(ls[i-1] ls[i-2])

    return ls[n-1]

Ich verwende Matplotlib, um die Zeit zu zeichnen, die es kostet:

import time
import matplotlib.pyplot as plt


def bench_mark(func, *args):
    # calculate the time
    start = time.perf_counter()
    result = func(*args)
    end = time.perf_counter()

    return end - start, result  # return the time and the result

def fib(n):
    ls = [1,1]
    for i in range(2,n):
        ls.append(ls[i-1] ls[i-2])

    return ls[n-1]

mark_list = []

for i in range(1,10000):
    mark = bench_mark(fib,i)
    mark_list.append(mark[0])
    print(f"size : {i} , time : {mark[0]}")

plt.plot(range(1, 10000), mark_list)
plt.xlabel('Input Size')
plt.ylabel('Execution Time (seconds)')
plt.title('Test fot fibonacci')
plt.grid(True)
plt.show()

Ergebnis hier:

How Far You Can Optimize a Program to Compute the Fibonacci Sequence?

Die Zeit, die es kostet, ist sehr kurz.

Aber ich schreibe fib(300000), kostet 5,719049899998936 Sekunden. Es ist zu lang.

Wenn ich groß bin, lerne ich CACHE, also ändere ich die Lösung, um dict zum Speichern des Ergebnisses zu verwenden.

from functools import lru_cache
@lru_cache(maxsize=None)
def fib(n):
    if n 



Oder wir können den CACHE selbst schreiben.

def fib(n, cache={}):
    if n in cache:
        return cache[n]
    elif n 




          

            
        
Freigabeerklärung Dieser Artikel ist abgedruckt unter: https://dev.to/mengqinyuan/how-far-can-you-optimize-a-program-to-compute-the-fibonacci-sequence-oa2?1 Wenn es einen Verstoß gibt, bitte Kontaktieren Sie Study_golang@163 .comdelete
Neuestes Tutorial Mehr>

Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.

Copyright© 2022 湘ICP备2022001581号-3