"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > ¿Hasta qué punto se puede optimizar un programa para calcular la secuencia de Fibonacci?

¿Hasta qué punto se puede optimizar un programa para calcular la secuencia de Fibonacci?

Publicado el 2024-08-23
Navegar:820

¿Hasta qué punto se puede optimizar un programa para calcular la secuencia de Fibonacci?

Introducción

Cuando estaba aprendiendo Python, nuestro maestro nos dio una tarea: calcular el enésimo número de la secuencia de Fibonacci.

Creo que es muy fácil, así que escribo este código:

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

Más tarde, sé que este tipo de solución cuesta demasiado tiempo.

Optimizar un programa

Cambio la solución a iteración.

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

    return ls[n-1]

Utilizo matplotlib para dibujar el tiempo que me costó:

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()

Resultado aquí:

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

El tiempo que costó es muy corto.

Pero escribo mentira (300000), cuesta 5,719049899998936 segundos. Es muy largo.

Cuando sea mayor, aprendo CACHE, así que cambio la solución para usar dict para almacenar el resultado.

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



O podemos escribir el CACHE nosotros mismos.

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




          

            
        
Declaración de liberación Este artículo se reproduce en: https://dev.to/mengqinyuan/how-far-can-you-optimize-a-program-to-compute-the-fibonacci-sequence-oa2?1 Si hay alguna infracción, por favor contacto Study_golang@163 .comeliminar
Último tutorial Más>

Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.

Copyright© 2022 湘ICP备2022001581号-3