Προσπαθούσα πριν από καιρό να λύσω ένα πρόβλημα στο py.checkio.org
py.checkio.org/mission/probably-dice/
και έγραψα ένα κώδικα που είχε μεγάλες απαιτήσεις σε χρόνο (πολύ μεγάλες)
Ο κώδικάς μου ήταν ο παρακάτω
def nominator (a,b,c):
if c<a:
return 0
if c>a*b:
return 0
if c==a*b or c==a:
return 1
if c<=0:
return 0
if a==1:
return 1
else:
suma=0
i=1
while i<=b:
suma+=(nominator(a-1,b,c-i))
i+=1
return suma
def probability(a, b, c):
denominator=b**a
nom=nominator (a,b,c)
return round(nom/denominator,4)
Λόγω της εξαιρετικά χαμηλής ταχύτητας αναγκάστηκα να αλλάξω τη συνάρτηση του nominator
σε ένα έκτρωμα που όμως δούλευε και ήταν γρήγορο (πολύ γρήγορο)
Δεν θα χρειαζόταν να το κάνω αν ήξερα την lru_cache την δοκίμασα σήμερα και είναι super
Άν δεν την γνωρίζετε και έχετε παρόμοια προβλήματα ταχύτητας λόγω recursion (συναρτήσεις που καλούν τον εαυτό τους) ρίξτε μια ματιά.
docs.python.org/3/library/functools.html...#functools.lru_cache