Plötzliche Verringerung der Python-Iterationsgeschwindigkeit nach 10 Sekunden
Posted: 11 Jan 2025, 13:07
Ich schreibe Code in Python, um die erste natürliche Zahl herauszufinden, die nicht in der ersten Milliarde Stellen von Pi vorkommt. Folgendes habe ich geschrieben:
Für kleine Zahlen funktioniert es gut, und als ich es mit der ersten Million natürlicher Zahlen versuchte, stand der Code plötzlich vor einer Blockade. In den ersten 10 Sekunden läuft es mit etwa 10.000 Iterationen/s, aber dann sinkt es plötzlich auf 1.000 Iterationen/s. Ich habe es mit einer größeren Eingabe von 10 Millionen versucht, und das Gleiche passiert, wenn ich nur 10 Sekunden lang mit 10k it/s laufe. Nach mehr als 30 Minuten Laufzeit sinkt die Geschwindigkeit auf 100 it/s.
Gibt es einen Engpass, der verhindert, dass zu viel Speicher oder Rechenleistung verbraucht wird? Oder stimmt etwas in meinem Code nicht?
Bearbeiten: Die Ursache scheint also in der ständig zunehmenden Länge der Zahl zu liegen, die durchsucht werden muss. Wie kann ich diese Suche optimieren, damit sie nicht mit jeder Erhöhung der Ziffernzahl langsamer wird?
Code: Select all
import datetime
from tqdm import tqdm
def findpi(end):
notin = []
stop = 0
s1 = datetime.datetime.now()
with open(r"C:\Users\shamm\Desktop\Text Documents\1 BILLION Digits of pi.txt", 'rt') as p:
pi = str(p.read())
for i in tqdm(range(1,end+1)):
if str(i) not in pi:
if notin == []:
stop = i
notin.append(i)
s2 = datetime.datetime.now()
tdelta = s2 - s1
ts = tdelta.total_seconds()
return [notin, stop, ts]
pi = findpi(1000000)
print("Not in:", pi[0])
print("Last:", pi[1])
print("Time taken:", pi[2])
Gibt es einen Engpass, der verhindert, dass zu viel Speicher oder Rechenleistung verbraucht wird? Oder stimmt etwas in meinem Code nicht?
Bearbeiten: Die Ursache scheint also in der ständig zunehmenden Länge der Zahl zu liegen, die durchsucht werden muss. Wie kann ich diese Suche optimieren, damit sie nicht mit jeder Erhöhung der Ziffernzahl langsamer wird?