Dimitris έγραψε:Γράψε εσύ τώρα σε java ένα πρόγραμμα που να υπολογιζει το 2800 παραγοντικό (όχι προσεγγιστικά) σε 1-2 δευτερόλεπτα.
τελικά το fibonacci ζητάς ή το factorial ;
@lostinmyworld
Τι εννοείς ; σου βγαίνουν εσφαλμένα αποτελέσματα; μήπως χρησιμοποιείς λάθος data type (και δεν χωράνε)
;
Σημειώση :δεν ξέρω java προς το παρών πέρα από κάτι λίγα...
Για την ακολουθία fibonacci σε python
πάντως σε python με
memoization όντως μπορείς να πετύχεις μεγαλύτερη ταχύτητα
πχ
- Κώδικας: Επιλογή όλων
memo = {0:0, 1:1}
def fib(n):
if not n in memo:
memo[n] = fib(n-1) + fib(n-2)
return memo[n]
Ο Dijkstra έχει κάνει ένα πολύ γρήγορο αλγόριθμο (υπάρχουν και γρηγορότεροι γιατί αυτός έχει το overhead από τις πολαπλές συναρτήσεις αλλά
παρά τ' αυτα
http://en.wikipedia.org/wiki/Fibonacci_ ... kstra78-15σε python είναι κάπως έτσι
- Κώδικας: Επιλογή όλων
fibs = {0: 0, 1: 1}
def fib(n):
if n in fibs: return fibs[n]
if n % 2 == 0:
fibs[n] = ((2 * fib((n / 2) - 1)) + fib(n / 2)) * fib(n / 2)
return fibs[n]
else:
fibs[n] = (fib((n - 1) / 2) ** 2) + (fib((n+1) / 2) ** 2)
return fibs[n]
ΠηγήΣτο μηχάνημα μου ( hp laptop 2.13 Ghz)
η συνάρτηση
fib(2800000) κάνει κάτι λιγότερο από 3 δευτερόλεπτα (2.756 sec)
μιλάμε για την θέση
2 εκατομμύρια οχτακόσιες χιλιάδες στην ακολουθία Fibonacci
Έχω περιέργια να δώ πόσο χρόνο θα κάνει στην java αυτός ο αλγόριθμος
ψήνεται κανείς να δοκιμάσει ;
(αντε να δούμε θα γκαζώσει η java
)
Για το παραγοντικό σε Python (Με memoization)
- Κώδικας: Επιλογή όλων
import sys
sys.setrecursionlimit(1000000)
def factorial(n,memo={}):
def ClassicFac(n):
if n == 0:
return 1
else:
return n * ClassicFac(n-1)
if n not in memo:
memo[n] = ClassicFac(n)
return memo[n]
print factorial(2800)
στο laptop μου κάνει ~82 miliseconds (ενώ η έκδοση από το math module κάνει ~75 miliseconds)
αυτά
Περιμένω java εκδόσεις