Sie sind auf Seite 1von 1

Aufgabe 4

Rekursionsgleichung:
Sei n die Anzahl der Messbecher, l das Volumen in Litern des aufzufllenden Tanks, i die Zeilenlaufvariable und j die Spaltenlaufvariable, sowie v = {1, ,n} die Volumina der Messbecher zu M = {1, ,n}.

 

 



Pseudocode:
Min-#-Schttvorgnge(v, l, n) 1 A <- new Array[n+1][l] Initialisieren der letzten Zeile 2 for j<- 1 to l do 3 if j = v[j] then 4 A[n+1][j] <- 1 5 else 6 A[n+1][j]< Ausfllen der Tabelle 7 for i<- 1 to n do 8 for j <- 1 to l do 9 if j < v[i] then 10 A[i][j] <11 else if j = v[i] then 12 A[i][j]<-1 13 else 14 A[i][j]<- A[n+1][j v[i]] + 1 15 if A[i][j]<A[n+1][j] then 16 A[n+1][j] <- A[i][j] 17 return A[n+1][l]

Anmerkung: In diesem Algorithmus werden die Minimalwerte jeder Spalte, also fr die aktuelle Literangabe, in die Zeile A[n+1] eingetragen, um die Berechnung einfacher zu gestalten und vor allem um eine Laufzeit von O(n*l) zu erreichen. So muss am Ende z.B. nur A[n+1][l] ausgegeben werden. Die Zeile A[n+1] wird in den Zeilen 2-6 initialisiert. Beispiel: Seien v = {1,3,5,25}, n = 4, l = 10. Aufruf: ergebnis <- Min-#-Schttvorgnge(v, l, n) 1 2 3 4 v[1] = 1 1 1 2 2 3 v[2] = 2 2 1 2 2 v[3] = 5 3 v[n=4] = 25 4 n+1 1 1 2 2

5 3 3 1 1

6 2 3 2 2

7 3 2 2 2

8 3 3 3 3

9 4 3 3 3

l = 10 4 4 2 2

Laufzeit: Da nicht explizit verlangt, hier nur eine kurze Erluterung: Zunchst einmal dominiert die Laufzeit des Doppel-For-Konstrukts der Zeilen 7-16 die Laufzeit der Schleife in 2-6. Da i und j nicht verndert werden, laufen diese beiden Schleifen tatschlich jede Iteration durch. Da sich in ihren Schleifenbuchen auch nur konstante Operationen befinden, lsst sich die Gesamtlaufzeit ganz einfach auf O(n*l) zurckfhren.

Das könnte Ihnen auch gefallen