Lösungen Dynamisches Programmieren

Aus ProgrammingWiki

Wiki-Quelltext dieser Seite.

<language>Java</language>
=Lösungen zu Fibonacci=

Die ersten 2 Lösungen sind bereits aus der Vorlesung bekannt, werden hier aber der Vollständigkeit wegen nochmal aufgeführt.

==Fibonacci ohne Memoizing==

<code>
public int fib(int n)
{
    if(n<2)
    {
        return 1;
    }
    else
    {
        return fib(n-1)+fib(n-2);
    }
}
</code>
<eval>
System.out.println(""+fib(11));
</eval>

==Fibonacci mit Memoizing==

<code>
private java.util.HashMap memoliste = new java.util.HashMap();
 memoliste.put(0, java.math.BigInteger.ONE);
 memoliste.put(1, java.math.BigInteger.ONE);

    private java.math.BigInteger fibMemo(Integer n)
    {
        if(memoliste.containsKey(n))
        {
            return memoliste.get(n);
        }
        else
        {
            java.math.BigInteger fib1 = fibMemo(n - 1);
            memoliste.put(n-1, fib1);
            java.math.BigInteger fib2 = fibMemo(n - 2);
            return (fib1.add(fib2));
        }
    }
</code>
<eval>
System.out.println(""+fibMemo(250));
</eval>

==Iterative Lösung von Fibonacci==

<code>
java.math.BigInteger fibIterativ(int n)
{
    java.math.BigInteger erg = java.math.BigInteger.ONE;
    java.math.BigInteger save1 = java.math.BigInteger.ZERO;
    java.math.BigInteger save2 = java.math.BigInteger.ZERO;
    for(int i = 0; i <= n; i++)
    {
        save2 = new BigInteger(save1);//es müssen neue Werte erzeugt werden, sonst wird nur Referenz übergeben
        save1 = new BigInteger(erg);
        erg = save1.add(save2);
    }
    return erg;
}
</code>
<eval>
System.out.println(fibIterativ(200));
</eval>
==Zusatz: mit fast konstantem Speicheraufwand==