Hi,
vorweg: Ich weiß wie man die Fibonacci Zahlen berechnet 😛
Ich versuche gerade einen möglichst schnellen Algorithmus zu entwerfen, die Fibonacci Zahlen zu berechnen. Ok fangen wir an.
Die Standard-Methode:
Der Nachteil liegt auf der Hand: Für jedes n werden die Vorgängerwerte immer neu berechnet, was extrem ineffizient ist.
Memory-Methode (Quelle):
Diese Methode ist wesentlich schneller, da sie die Vorgängerwerte nicht jedesmal neu berechnet. Nachteil ist allerdings, dass ab einer gewissen Fibonacci Zahl ( bei mir ca. f(1000000)) der schon auf 1,6 gb vergrößerte Java Heap Space überläuft.
Ein weiterer in Python geschriebener Algorithmus der sehr schnell sein soll ist hier zu finden: http://krenzel.info/?p=85
Den bekomm ich aber nicht nach Java portiert. Kann mir da jemand helfen?
Insgesamt meine Frage an euch:
Kennt jemand einen schnelleres Verfahren zur Berechnung der Fibonacci Zahlen als die beiden oben genannten?
Hat jemand Verbesserungsvorschläge zu den oben genannten Algorithmen?
vorweg: Ich weiß wie man die Fibonacci Zahlen berechnet 😛
Ich versuche gerade einen möglichst schnellen Algorithmus zu entwerfen, die Fibonacci Zahlen zu berechnen. Ok fangen wir an.
Die Standard-Methode:
Code:
public static int fib(int n){
if (n <= 2){
return 1;
}
else{
return (fib(n-1) + fib(n-2));
}
}
Memory-Methode (Quelle):
Code:
private static ArrayList<BigInteger> fibCache = new ArrayList<BigInteger>();
static {
fibCache.add(BigInteger.ZERO);
fibCache.add(BigInteger.ONE);
}
public static BigInteger fib(int n) {
if (n >= fibCache.size()) {
fibCache.add(n, fib(n-1).add(fib(n-2)));
}
return fibCache.get(n);
}
Ein weiterer in Python geschriebener Algorithmus der sehr schnell sein soll ist hier zu finden: http://krenzel.info/?p=85
Den bekomm ich aber nicht nach Java portiert. Kann mir da jemand helfen?
Insgesamt meine Frage an euch:
Kennt jemand einen schnelleres Verfahren zur Berechnung der Fibonacci Zahlen als die beiden oben genannten?
Hat jemand Verbesserungsvorschläge zu den oben genannten Algorithmen?