Почему существует такое большое изменение времени вычислений для генерации Фибоначчи между соседними значениями n?Python

Программы на Python
Anonymous
 Почему существует такое большое изменение времени вычислений для генерации Фибоначчи между соседними значениями n?

Сообщение Anonymous »

Каждый метод получает большие изменения во время вычисления, даже с большим количеством повторений (для получения среднего). Эффект, по -видимому, ухудшается с большим n .
График результатов (25 повторений)
Это мой код времени.

Код: Выделить всё

def timeBlock(func, n, rep):
start = time.perf_counter()
for i in range(rep):
func(n)
end = time.perf_counter()
return (end - start)/rep

def worker(args):
func, n, rep = args
try:
elapsed = timeBlock(func, n, rep)
return n, elapsed, None
except Exception as e:
return n, float("inf"), traceback.format_exc()

def trackFuncs(funcs):
results = {name: [] for name in funcs.keys()}
numProcesses = max(1, cpu_count() - 1)
pool = Pool(processes=numProcesses)
try:
for name, func in funcs.items():
n = 0
progressBar = tqdm(desc=f"Tracking {name}", unit="", dynamic_ncols=True)
while True:
tasks = [(func, n + i, REPEATS) for i in range(numProcesses)]
try:
asyncResults = pool.imap_unordered(worker, tasks)
for result in asyncResults:
n, elapsed, error = result
if error:
print(f"Error for {name} at n={n}:\n{error}")
continue
results[name].append((n, elapsed))
if elapsed > MAXT:
progressBar.close()
print(f"Reached {MAXT}s for {name} at n={n}")
raise StopIteration
except StopIteration:
break
n += numProcesses
progressBar.update(numProcesses)
progressBar.close()
except KeyboardInterrupt:
print("\nProcess interrupted by user")
finally:
pool.close()
pool.terminate()
pool.join()
return results
< /code>
funcs
в Trackfuncs находится словарь функций Fibonacci, с ключом как имя функции. Результаты не всегда показывают, что из -за больших шипов, превышающих порог времени вычисления. Похоже, ухудшается с большим количеством повторений.
Любые идеи, почему это происходит и как, если возможно, это может быть исправлено?

Подробнее здесь: https://stackoverflow.com/questions/793 ... neration-b

Вернуться в «Python»