Informatik 1 - Mitschriften von Klaas Ole Kürtz

Informatik 1 - Mitschriften von Klaas Ole Kürtz Informatik 1 - Mitschriften von Klaas Ole Kürtz

28.03.2014 Aufrufe

2.5 Prozeduren und Prozesse • Prozeduren: Muster zur Berechnung; Prozesse: dynamischer Rechenablauf, gesteuert durch Prozeduren; Frage: Ressourcenverbrauch (Speicher, Zeit) von Prozessen? 2.5.1 Iteration, Rekursion etc. • linearer rekursiver Prozeß – Beispiel Fakultät: n! = n · (n − 1) · (n − 2) · ...2 · 1 = n · (n − 1)! (falls n > 1). – (define (fak n) (if (= n 1) 1 (* n (fak (- n 1))))) – Berechnung von (fak 4): (fak 4) (* 4 (fak 3)) (* 4 (* 3 (fak 2))) (* 4 (* 3 (* 2 (fak 1)))) (* 4 (* 3 (* 2 1))) (* 4 (* 3 2)) (* 4 6) 24 – Beobachtung: »verzögert« Multiplikation • linear iterativer Prozeß – Beispiel Fakultät: Multipliziere 1*2, das Ergebnis mit 3, das Ergebnis mit 4, ..., das Ergebnis mit n. – Parameter in jedem Schritt: Zähler (1 bis n), Produkt (1 bis n!), n für den Abbruch – (define (fak n) (fak-iter 1 1 n)) (define (fak-iter p z max) ........(if (> z max) p ......................(fak-iter (* p z) (+ z 1) max))) – Berechnung von (fak 4): (fak 4) (fak-iter 1 1 4) (fak-iter 1 2 4) 12

(fak-iter 2 3 4) (fak-iter 6 4 4) (fak-iter 24 5 4) 24 – Beobachtung: eine feste Anzahl von Variablen beschreibt vololständig den Zustand eines jeden Schrittes (Zustandsvariablen) ⇒ beide Prozesse haben von der Größenordnung her die gleiche Länge (linearer Prozess); in der ersten Version ist der Platzbedarf linear zur Eingabe, Platzbedarf ist bei der zweiten Version konstant. ⊗ rekursiver Prozeß ≠ rekursive Prozedur! • Baumrekursion – Beispiel Fibonacci-Zahlen: Jede Zahl ist die Summe der beiden vorhergehenden (0 1 1 2 3 5 8 13 21 usw.) – fib(n) = fib(n − 1) + fib(n − 2), fib(0) = 0 ∧ fib(1) = 1) – (define (fib n) (cond ((= n 0) 0) ((= n 1) 1) (else (+ (fib (- n 1)) (fib (- n 2)))))) – Problem: Redundanz ((fib 2) doppelt berechnet)! Damit: schlechte Laufzeit, letztendlich werden fib(n) Einsen addiert, damit eine exponentielle Laufzeit – Abschätzung fib(n) = [ ( √ ) n 1+ 5 ] 2 √ 5 (mit Gaußklammer [.]). ⇒ Gefahr von Ineffizienz, trotzdem häufig geeignet, insbesondere bei sog. hierachischen Datenstrukturen) • iterativer Prozeß – Schrittweises Aufsummieren der Zahlen – Parameter: a, b (letzte und vorletzte Zahl) – in jedem Schritt: a = a + b und gleichzeitig b = a – (define (fib n) (fib-iter 1 0 n)) (define (fib-iter a b z) (if (= z 0) .............................0 .............................(fib-iter (+ a b) a (- z 1)))) – lineare Laufzeit, konstanter Speicherbedarf ⇒ Iteration ist effizient, benötigt genaue Überlegungen zu den Zustandsvariablen; Rekursion ist mit der Gefahr der Ineffizienz behaftet, aber natürlichere Formulierung 13

2.5 Prozeduren und Prozesse<br />

• Prozeduren: Muster zur Berechnung; Prozesse: dynamischer Rechenablauf,<br />

gesteuert durch Prozeduren; Frage: Ressourcenverbrauch (Speicher,<br />

Zeit) <strong>von</strong> Prozessen?<br />

2.5.1 Iteration, Rekursion etc.<br />

• linearer rekursiver Prozeß<br />

– Beispiel Fakultät: n! = n · (n − 1) · (n − 2) · ...2 · 1 = n · (n − 1)!<br />

(falls n > 1).<br />

– (define (fak n) (if (= n 1) 1 (* n (fak (- n 1)))))<br />

– Berechnung <strong>von</strong> (fak 4):<br />

(fak 4)<br />

(* 4 (fak 3))<br />

(* 4 (* 3 (fak 2)))<br />

(* 4 (* 3 (* 2 (fak 1))))<br />

(* 4 (* 3 (* 2 1)))<br />

(* 4 (* 3 2))<br />

(* 4 6)<br />

24<br />

– Beobachtung: »verzögert« Multiplikation<br />

• linear iterativer Prozeß<br />

– Beispiel Fakultät: Multipliziere 1*2, das Ergebnis mit 3, das Ergebnis<br />

mit 4, ..., das Ergebnis mit n.<br />

– Parameter in jedem Schritt: Zähler (1 bis n), Produkt (1 bis n!), n<br />

für den Abbruch<br />

– (define (fak n) (fak-iter 1 1 n))<br />

(define (fak-iter p z max)<br />

........(if (> z max) p<br />

......................(fak-iter (* p z) (+ z 1) max)))<br />

– Berechnung <strong>von</strong> (fak 4):<br />

(fak 4)<br />

(fak-iter 1 1 4)<br />

(fak-iter 1 2 4)<br />

12

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!