Top Banner
Telecooperation/RBG Technische Universität Darmstadt Copyrighted material; for TUD student use only Grundlagen der Informatik 1 Thema 6: Generative Rekursion Prof. Dr. Max Mühlhäuser Dr. Guido Rößling
63

Telecooperation/RBG Technische Universität Darmstadt Copyrighted material; for TUD student use only Grundlagen der Informatik 1 Thema 6: Generative Rekursion.

Apr 05, 2015

Download

Documents

Xaver Strohman
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Telecooperation/RBG Technische Universität Darmstadt Copyrighted material; for TUD student use only Grundlagen der Informatik 1 Thema 6: Generative Rekursion.

Telecooperation/RBG

Technische Universität Darmstadt

Copyrighted material; for TUD student use only

Grundlagen der Informatik 1Thema 6: Generative Rekursion

Prof. Dr. Max MühlhäuserDr. Guido Rößling

Page 2: Telecooperation/RBG Technische Universität Darmstadt Copyrighted material; for TUD student use only Grundlagen der Informatik 1 Thema 6: Generative Rekursion.

Dr. G. RößlingProf. Dr. M. Mühlhäuser

RBG / Telekooperation©

Grundlagen der Informatik I: T6 Gru

nd

lag

en

der

Info

rmati

k 1

– T

6

Inhaltsverzeichnis

• Einführung in generativ rekursive Funktionen

• Sortieren mittels generativ rekursiver Prozeduren

• Richtlinien für den Entwurf von generativ rekursiven Prozeduren

• Strukturelle versus generative Rekursion• Backtracking-Algorithmen: Durchlaufen

von Graphen

2

Page 3: Telecooperation/RBG Technische Universität Darmstadt Copyrighted material; for TUD student use only Grundlagen der Informatik 1 Thema 6: Generative Rekursion.

Dr. G. RößlingProf. Dr. M. Mühlhäuser

RBG / Telekooperation©

Grundlagen der Informatik I: T6 Gru

nd

lag

en

der

Info

rmati

k 1

– T

6

Generative Rekursion

• Bisher haben wir strukturelle Rekursion verwendet, um strukturell rekursive Daten zu verarbeiten– Wir haben die Eingabedaten in ihre direkten

strukturellen Komponenten zerlegt– Wir haben die Komponenten verarbeitet und die

Ergebnisse kombiniert • Allerdings:

1. Nicht alle Probleme lassen sich mit strukturell rekursiven Funktionen lösen

2. Auch wenn es geht, ist strukturelle Rekursion nicht immer die beste Lösung

• In dieser Vorlesung werden wir eine neue Funktionsart kennen lernen– Generativ rekursive Funktionen 3

Page 4: Telecooperation/RBG Technische Universität Darmstadt Copyrighted material; for TUD student use only Grundlagen der Informatik 1 Thema 6: Generative Rekursion.

Dr. G. RößlingProf. Dr. M. Mühlhäuser

RBG / Telekooperation©

Grundlagen der Informatik I: T6 Gru

nd

lag

en

der

Info

rmati

k 1

– T

6

Generative Rekursion

• Teile und herrsche (Divide & Conquer)– Wenn das Problem trivial lösbar ist, wird die

entsprechende Lösung zurückgeliefert– Ansonsten:

• Teile das Problem in neue kleinere Teilprobleme (es werden kleinere Probleme generiert)

• Herrsche: Die kleineren Probleme werden gelöst• Kombiniere die Lösungen der kleineren Probleme zu

einer Lösung für das Ursprungsproblem

• Design von generativ rekursiven Funktionen (Algorithmen) ist eher eine kreative Aktivität, die einen Einblick braucht – ein “Heureka, ich hab‘s!”.

4

Page 5: Telecooperation/RBG Technische Universität Darmstadt Copyrighted material; for TUD student use only Grundlagen der Informatik 1 Thema 6: Generative Rekursion.

Dr. G. RößlingProf. Dr. M. Mühlhäuser

RBG / Telekooperation©

Grundlagen der Informatik I: T6 Gru

nd

lag

en

der

Info

rmati

k 1

– T

6

Modellieren eines Balls, der auf dem Tisch rollt…

Aufgabenbeschreibung– Der Ball rollt mit einer konstanten Geschwindigkeit, bis er

von der Tischkante herabfällt– Den Tisch stellen wir als einen Fläche mit einer

festgelegten Länge und Breite dar– Den Ball stellen wir als eine Scheibe dar, welche sich auf

der Fläche bewegt– Bewegung stellen wir durch die Wiederholung folgender

Schritte dar:• Zeichne die Scheibe in der aktuellen Position auf der Fläche• Warte eine bestimmte Zeitperiode• Lösche die Scheibe von der aktuellen Position• Verschiebe sie an die aktuelle Position

5

Page 6: Telecooperation/RBG Technische Universität Darmstadt Copyrighted material; for TUD student use only Grundlagen der Informatik 1 Thema 6: Generative Rekursion.

Dr. G. RößlingProf. Dr. M. Mühlhäuser

RBG / Telekooperation©

Grundlagen der Informatik I: T6 Gru

nd

lag

en

der

Info

rmati

k 1

– T

6

Ballstruktur und -operationen

6

;;TeachPack: draw.ss

;; structure: (make-ball number number number number)(define-struct ball (x y delta-x delta-y))

;; draw-and-clear : a-ball -> true(define (draw-and-clear a-ball) (and (draw-solid-disk (make-posn (ball-x a-ball) (ball-y a-ball)) 5 'red)

(sleep-for-a-while DELAY)

(clear-solid-disk (make-posn (ball-x a-ball) (ball-y a-ball)) 5 'red)))

Page 7: Telecooperation/RBG Technische Universität Darmstadt Copyrighted material; for TUD student use only Grundlagen der Informatik 1 Thema 6: Generative Rekursion.

Dr. G. RößlingProf. Dr. M. Mühlhäuser

RBG / Telekooperation©

Grundlagen der Informatik I: T6 Gru

nd

lag

en

der

Info

rmati

k 1

– T

6

Ballstruktur und -operationen

7

;; move-ball : ball -> ball(define (move-ball a-ball) (make-ball (+ (ball-x a-ball) (ball-delta-x a-ball)) (+ (ball-y a-ball) (ball-delta-y a-ball)) (ball-delta-x a-ball) (ball-delta-y a-ball)))

;; Dimension of surface (define WIDTH 100)(define HEIGHT 100)

;; Delay constant(define DELAY .1)

Page 8: Telecooperation/RBG Technische Universität Darmstadt Copyrighted material; for TUD student use only Grundlagen der Informatik 1 Thema 6: Generative Rekursion.

Dr. G. RößlingProf. Dr. M. Mühlhäuser

RBG / Telekooperation©

Grundlagen der Informatik I: T6 Gru

nd

lag

en

der

Info

rmati

k 1

– T

6

Das Rollen des Balls

8

Um den Ball einige Male zu verschieben, können wir schreiben:

Das wird nach einiger Zeit langweilig. Wir brauchen eine Funktion, die den Ball verschiebt, bis er außerhalb der Grenze ist.

(define the-ball (make-ball 10 20 -5 +17)) (and (draw-and-clear the-ball) (and (draw-and-clear (move-ball the-ball)) ...))

Page 9: Telecooperation/RBG Technische Universität Darmstadt Copyrighted material; for TUD student use only Grundlagen der Informatik 1 Thema 6: Generative Rekursion.

Dr. G. RößlingProf. Dr. M. Mühlhäuser

RBG / Telekooperation©

Grundlagen der Informatik I: T6 Gru

nd

lag

en

der

Info

rmati

k 1

– T

6

Das Rollen des Balls

9

Herausfinden, ob ein Ball außerhalb der Grenze ist:

Schablone für die Funktion, die den Ball verschiebt, bis er außerhalb der Grenze ist:

;; out-of-bounds? : a-ball -> boolean(define (out-of-bounds? a-ball) (not (and (<= 0 (ball-x a-ball) WIDTH) (<= 0 (ball-y a-ball) HEIGHT))))

;; move-until-out : a-ball -> true(define (move-until-out a-ball) (cond [(out-of-bounds? a-ball) ... ] [else ...]))

Der triviale Fall: wir geben true zurück

?true

Page 10: Telecooperation/RBG Technische Universität Darmstadt Copyrighted material; for TUD student use only Grundlagen der Informatik 1 Thema 6: Generative Rekursion.

Dr. G. RößlingProf. Dr. M. Mühlhäuser

RBG / Telekooperation©

Grundlagen der Informatik I: T6 Gru

nd

lag

en

der

Info

rmati

k 1

– T

6

Das Rollen des Balls

10

Nachdem der Ball gezeichnet und verschoben wurde, wenden wir move-until-out wieder an: rekursive Funktion

(define (move-until-out a-ball) (cond [(out-of-bounds? a-ball) true] [else (and (draw-and-clear a-ball) (move-until-out (move-ball a-ball)))]))

Wir können nun die Funktion wie folgt testen: Eine Fläche der richtigen Größe, und ein Ball, der sich nach links unten bewegt, werden erzeugt.

(start WIDTH HEIGHT) (move-until-out (make-ball 10 20 -5 +17)) (stop)

Page 11: Telecooperation/RBG Technische Universität Darmstadt Copyrighted material; for TUD student use only Grundlagen der Informatik 1 Thema 6: Generative Rekursion.

Dr. G. RößlingProf. Dr. M. Mühlhäuser

RBG / Telekooperation©

Grundlagen der Informatik I: T6 Gru

nd

lag

en

der

Info

rmati

k 1

– T

6

(define (move-until-out a-ball) (cond [(out-of-bounds? a-ball) true] [else (and (draw-and-clear a-ball) (move-until-out (move-ball a-ball)))]))

Neuer Typ von Rekursion

• Die Prozedur move-until-out verwendet einen neuen Typ von Rekursion – Bedingungen haben nichts mit den Eingabe-Daten zu

tun– Die rekursive Anwendung im Rumpf verarbeitet

keinen Teil der Eingabe• move-until-out generiert eine andere komplett neue

Ball-Struktur und benutzt diese für die Rekursion

11

Wir haben noch kein Designrezept dafür

Page 12: Telecooperation/RBG Technische Universität Darmstadt Copyrighted material; for TUD student use only Grundlagen der Informatik 1 Thema 6: Generative Rekursion.

Dr. G. RößlingProf. Dr. M. Mühlhäuser

RBG / Telekooperation©

Grundlagen der Informatik I: T6 Gru

nd

lag

en

der

Info

rmati

k 1

– T

6

Inhaltsverzeichnis

• Einführung in generativ rekursive Funktionen

• Sortieren mittels generativ rekursiver Prozeduren

• Richtlinien für den Entwurf von generativ rekursiven Prozeduren

• Strukturelle versus generative Rekursion• Backtracking: Durchlaufen von Graphen

12

Page 13: Telecooperation/RBG Technische Universität Darmstadt Copyrighted material; for TUD student use only Grundlagen der Informatik 1 Thema 6: Generative Rekursion.

Dr. G. RößlingProf. Dr. M. Mühlhäuser

RBG / Telekooperation©

Grundlagen der Informatik I: T6 Gru

nd

lag

en

der

Info

rmati

k 1

– T

6

Sortieren: Quicksort & Mergesort

Es geht erneut um das Sortieren der Elemente einer Liste…

– Wir haben schon insertion sort kennengelernt:• Eine strukturell rekursive Prozedur

– Nun werden wir zwei andere Algorithmen zum Sortieren kennen lernen: Quicksort & Mergesort

• Klassische Beispiele für generative Rekursion• Basieren auf der "Teile & Herrsche"-Idee

13

Page 14: Telecooperation/RBG Technische Universität Darmstadt Copyrighted material; for TUD student use only Grundlagen der Informatik 1 Thema 6: Generative Rekursion.

Dr. G. RößlingProf. Dr. M. Mühlhäuser

RBG / Telekooperation©

Grundlagen der Informatik I: T6 Gru

nd

lag

en

der

Info

rmati

k 1

– T

6

[Erinnerung: insertion sort]

14

;; sort : list-of-numbers  ->  list-of-numbers

;; creates a sorted list of numb. from numbers in alon

(define (insertion-sort alon)

(cond

[(empty? alon) empty]

[else (insert (first alon)

(sort (insertion-sort rest alon)))]))

anan

sortedunsorted

Page 15: Telecooperation/RBG Technische Universität Darmstadt Copyrighted material; for TUD student use only Grundlagen der Informatik 1 Thema 6: Generative Rekursion.

Dr. G. RößlingProf. Dr. M. Mühlhäuser

RBG / Telekooperation©

Grundlagen der Informatik I: T6 Gru

nd

lag

en

der

Info

rmati

k 1

– T

6

Quicksort: Die Idee• Der Verlauf eines beliebigen Zwischenschritts:

das Sortieren einer beliebigen Subliste L0 =(list elp…elr)– Teile: Partitioniere L0 in zwei (eventuell leere) Listen, L1 = (list elp…elq-1) und L2 = (list elq+1…elr), so dass jedes Element aus L1 kleiner gleich elq ist, und dieses wiederum kleiner gleich als jedes Element in L2 ist

– Herrsche: Wende die gleiche Prozedur rekursiv an, um L1 und L2 zu sortieren

– Kombiniere: Stelle die Elemente der sortierten Listen L1 und L2 einfach nebeneinander 15

<= elq >= elqelq

Drehpunkt

Page 16: Telecooperation/RBG Technische Universität Darmstadt Copyrighted material; for TUD student use only Grundlagen der Informatik 1 Thema 6: Generative Rekursion.

Dr. G. RößlingProf. Dr. M. Mühlhäuser

RBG / Telekooperation©

Grundlagen der Informatik I: T6 Gru

nd

lag

en

der

Info

rmati

k 1

– T

6

Quicksort: Die Idee

• Zwei offene Fragen bisher:

– Wie wählen wir das Drehpunktelement?• Wir nehmen das erste Element als Drehpunkt

– Wann hören wir auf? Mit anderen Worten: Was ist der Trivialfall für Quicksort?• Die leere Liste ist immer sortiert!

16

Page 17: Telecooperation/RBG Technische Universität Darmstadt Copyrighted material; for TUD student use only Grundlagen der Informatik 1 Thema 6: Generative Rekursion.

Dr. G. RößlingProf. Dr. M. Mühlhäuser

RBG / Telekooperation©

Grundlagen der Informatik I: T6 Gru

nd

lag

en

der

Info

rmati

k 1

– T

6

Quicksort at Work

17

Sortiere (list 11 8 7 14): – Das Drehpunkt-Element ist 11. Zwei Teillisten: (list 8 7) und

(list 14) – Sortiere (list 8 7) und (list 14) – Verbinde die sortierten Teillisten: (list 7 8), 11 und (list

14)

(list 8 7)

(list 7)

empty 7

empty

(list 7)

8

empty

(list 7 8)

11

(list 14)

empty 14

empty

(list 14)

(list 7 8 11 14)

Page 18: Telecooperation/RBG Technische Universität Darmstadt Copyrighted material; for TUD student use only Grundlagen der Informatik 1 Thema 6: Generative Rekursion.

Dr. G. RößlingProf. Dr. M. Mühlhäuser

RBG / Telekooperation©

Grundlagen der Informatik I: T6 Gru

nd

lag

en

der

Info

rmati

k 1

– T

6

Quicksort schematisch

18

Liste, die sortiert werden soll Sortierprozess für die Partition mit Elementen kleiner als Drehpunkt

Sortierprozess für die Partition mit Elementen größer als Drehpunkt

sortierte Liste

Drehpunkt(Pivot-

Element)

Page 19: Telecooperation/RBG Technische Universität Darmstadt Copyrighted material; for TUD student use only Grundlagen der Informatik 1 Thema 6: Generative Rekursion.

Dr. G. RößlingProf. Dr. M. Mühlhäuser

RBG / Telekooperation©

Grundlagen der Informatik I: T6 Gru

nd

lag

en

der

Info

rmati

k 1

– T

6

• quicksort unterscheidet zwei Fälle: – Ist die Eingabe leer, wird empty zurückgegeben – Ansonsten wird eine Rekursion durchgeführt.

• Jede Teilliste wird separat mit quicksort sortiert• Die beiden sortierten Versionen der zwei Listen werden

dann mit append kombiniert

;; quicksort : (listof number) -> (listof number)(define (quicksort alon) (cond [(empty? alon) empty] [else (append (quicksort (less-or-equal (rest alon)(first alon))) (list (first alon)) (quicksort (greater-than (rest alon) (first alon))) ) ]))

Quicksort Algorithmus

19

Page 20: Telecooperation/RBG Technische Universität Darmstadt Copyrighted material; for TUD student use only Grundlagen der Informatik 1 Thema 6: Generative Rekursion.

Dr. G. RößlingProf. Dr. M. Mühlhäuser

RBG / Telekooperation©

Grundlagen der Informatik I: T6 Gru

nd

lag

en

der

Info

rmati

k 1

– T

6

21

Auswertungsbeispiel Quicksort (quicksort (list 11 8 7 14))

= (append (quicksort (list 8 7)) (list 11) (quicksort (list 14)))

= (append (append (quicksort (list 7)) (list 8) (quicksort empty)) (list 11) (quicksort (list 14)))

= (append (append (append (quicksort empty) (list 7) (quicksort empty)) (list 8) (quicksort empty)) (list 11) (quicksort (list 14)))= ...

Page 21: Telecooperation/RBG Technische Universität Darmstadt Copyrighted material; for TUD student use only Grundlagen der Informatik 1 Thema 6: Generative Rekursion.

Dr. G. RößlingProf. Dr. M. Mühlhäuser

RBG / Telekooperation©

Grundlagen der Informatik I: T6 Gru

nd

lag

en

der

Info

rmati

k 1

– T

6

22

Auswertungsbeispiel Quicksort= (append (append (append empty (list 7) empty) (list 8) empty) (list 11) (quicksort (list 14)))

= (append (append (list 7) (list 8) empty) (list 11) (quicksort (list 14)))

= (append (list 7 8) (list 11) (quicksort (list 14)))

= ...

Page 22: Telecooperation/RBG Technische Universität Darmstadt Copyrighted material; for TUD student use only Grundlagen der Informatik 1 Thema 6: Generative Rekursion.

Dr. G. RößlingProf. Dr. M. Mühlhäuser

RBG / Telekooperation©

Grundlagen der Informatik I: T6 Gru

nd

lag

en

der

Info

rmati

k 1

– T

6

23

mergesort: Die IdeeIdee: 1. Teile die Liste in der Mitte2. Wende die Funktion rekursiv auf die zwei Teillisten

an3. Mische die sortierten Teillisten zu einer neuen

geordneten Liste zusammen

Page 23: Telecooperation/RBG Technische Universität Darmstadt Copyrighted material; for TUD student use only Grundlagen der Informatik 1 Thema 6: Generative Rekursion.

Dr. G. RößlingProf. Dr. M. Mühlhäuser

RBG / Telekooperation©

Grundlagen der Informatik I: T6 Gru

nd

lag

en

der

Info

rmati

k 1

– T

6

Zusammenmischen von zwei geordneten Listen

• Gegeben sind zwei geordnete Listen ls-1 und ls-2.• Wie kann man sie in einer geordneten Liste

zusammenmischen?

24

8

54

2

96

2 3

3

4 5

6

8 9

Page 24: Telecooperation/RBG Technische Universität Darmstadt Copyrighted material; for TUD student use only Grundlagen der Informatik 1 Thema 6: Generative Rekursion.

Dr. G. RößlingProf. Dr. M. Mühlhäuser

RBG / Telekooperation©

Grundlagen der Informatik I: T6 Gru

nd

lag

en

der

Info

rmati

k 1

– T

6

Zusammenmischen von zwei geordneten Listen

25

(define (merge ls1 ls2) (cond [(null? ls1) ls2] [(null? ls2) ls1] [(< (first ls1) (first ls2)) (cons (first ls1)

(merge (rest ls1) ls2)) ] [else (cons (first ls2)

(merge ls1 (rest ls2)))] ))

Page 25: Telecooperation/RBG Technische Universität Darmstadt Copyrighted material; for TUD student use only Grundlagen der Informatik 1 Thema 6: Generative Rekursion.

Dr. G. RößlingProf. Dr. M. Mühlhäuser

RBG / Telekooperation©

Grundlagen der Informatik I: T6 Gru

nd

lag

en

der

Info

rmati

k 1

– T

6

mergesort: der Algorithmus

26

(define (mergesort alon) (local ((define (merge-step left right) (cond [(>= left right) alon] [else (local ( (define mid (floor (/ (+ left right) 2)))

(define left-list (mergesort (extract alon left mid)))

(define right-list (mergesort (extract alon (+ mid 1) right)))) (merge left-list right-list) ) ] ))) (merge-step 1 (length alon))))

Page 26: Telecooperation/RBG Technische Universität Darmstadt Copyrighted material; for TUD student use only Grundlagen der Informatik 1 Thema 6: Generative Rekursion.

Dr. G. RößlingProf. Dr. M. Mühlhäuser

RBG / Telekooperation©

Grundlagen der Informatik I: T6 Gru

nd

lag

en

der

Info

rmati

k 1

– T

6

Inhaltsverzeichnis

• Einführung in generativ rekursive Funktionen

• Sortieren mittels generativ rekursiver Prozeduren

• Richtlinien für den Entwurf von generativ rekursiven Prozeduren

• Strukturelle versus generative Rekursion• Backtracking: Durchlaufen von Graphen

28

Page 27: Telecooperation/RBG Technische Universität Darmstadt Copyrighted material; for TUD student use only Grundlagen der Informatik 1 Thema 6: Generative Rekursion.

Dr. G. RößlingProf. Dr. M. Mühlhäuser

RBG / Telekooperation©

Grundlagen der Informatik I: T6 Gru

nd

lag

en

der

Info

rmati

k 1

– T

6

Richtlinien für den Entwurf vongenerativ rekursiven Prozeduren

• Verstehe die Natur der Daten der Prozedur• Beschreibe den Prozess bzgl. der Daten durch

Entwurf einer neuen Struktur oder Partitionieren einer Liste von Zahlen.

• Unterscheide zwischen den Eingabe-Daten– die trivial verarbeitet werden können, und denen, – die nicht trivial verarbeitet werden können.

• Die Generierung von Problemen ist der Schlüssel zum Entwurf von Algorithmen

• Die Lösungen der generierten Probleme müssen kombiniert werden

29

Page 28: Telecooperation/RBG Technische Universität Darmstadt Copyrighted material; for TUD student use only Grundlagen der Informatik 1 Thema 6: Generative Rekursion.

Dr. G. RößlingProf. Dr. M. Mühlhäuser

RBG / Telekooperation©

Grundlagen der Informatik I: T6 Gru

nd

lag

en

der

Info

rmati

k 1

– T

6

Zurück zu den 6 Stufen des Designs1. Datenanalyse und –entwurf

– Analysiere und bestimme Datensammlungen, welche das Problem darstellen

2. Vertrag, Absicht, Kopf (Header)– Lege fest, was die Funktion tut– Erkläre in natürlicher Sprache, wie sie funktioniert

3. Funktionsbeispiele– Zeige, wie der Algorithmus für bestimmte Eingaben

verfährt

4. Vorlage– Folge einer generellen Vorlage

5. Definition– Beantworte die Fragen, die die Vorlage vorgibt

6. Testen- Teste die fertig gestellten Funktionen- Beseitige die Fehler 30

Page 29: Telecooperation/RBG Technische Universität Darmstadt Copyrighted material; for TUD student use only Grundlagen der Informatik 1 Thema 6: Generative Rekursion.

Dr. G. RößlingProf. Dr. M. Mühlhäuser

RBG / Telekooperation©

Grundlagen der Informatik I: T6 Gru

nd

lag

en

der

Info

rmati

k 1

– T

6

Allgemeine Vorlage für generative Prozeduren

31

(define (generative-recursive-fun problem) (cond [(trivially-solvable? problem) (determine-solution problem)] [else (combine-solutions ... problem ... (generative-recursive-fun (generate-problem-1 problem)) ... (generative-recursive-fun (generate-problem-n problem)))]))

Page 30: Telecooperation/RBG Technische Universität Darmstadt Copyrighted material; for TUD student use only Grundlagen der Informatik 1 Thema 6: Generative Rekursion.

Dr. G. RößlingProf. Dr. M. Mühlhäuser

RBG / Telekooperation©

Grundlagen der Informatik I: T6 Gru

nd

lag

en

der

Info

rmati

k 1

– T

6

Prozedurdefinition

1. Was ist ein trivial lösbares Problem und die dazugehörige Lösung?

2. Wie generieren wir neue Probleme, die leichter zu lösen sind als das ursprüngliche Problem? • Gibt es ein neues Problem, das wir generieren, oder

gibt es viele?

3. Ist die Lösung für das gegebene Problem die gleiche wie für die (eines der) neuen Probleme? • Oder müssen wir die Lösungen kombinieren, um eine

Lösung für das ursprüngliche Problem zu erstellen? • Und wenn das so ist, benötigen wir dann Teile der

Daten des ursprünglichen Problems?

32

Page 31: Telecooperation/RBG Technische Universität Darmstadt Copyrighted material; for TUD student use only Grundlagen der Informatik 1 Thema 6: Generative Rekursion.

Dr. G. RößlingProf. Dr. M. Mühlhäuser

RBG / Telekooperation©

Grundlagen der Informatik I: T6 Gru

nd

lag

en

der

Info

rmati

k 1

– T

6

Terminierung strukturell rekursiver Prozeduren

• Bisher hat jede Funktion immer eine Ausgabe für eine gültige Eingabe produziert Die Evaluierung der strukturell rekursiven Prozeduren

hat immer terminiert. • Wesentliches Merkmal unseres Rezepts für

strukturell rekursive Prozeduren: – Jeder Schritt der natürlichen Rekursion konsumiert

eine direkte Komponente der Eingabe und nicht die Eingabe selbst

• Da die Daten hierarchisch konstruiert sind, ist es sicher, dass die Eingabe in jedem Schritt kleiner wird– Früher oder später wird die Prozedur ein atomares

Datum konsumieren und terminieren33

Page 32: Telecooperation/RBG Technische Universität Darmstadt Copyrighted material; for TUD student use only Grundlagen der Informatik 1 Thema 6: Generative Rekursion.

Dr. G. RößlingProf. Dr. M. Mühlhäuser

RBG / Telekooperation©

Grundlagen der Informatik I: T6 Gru

nd

lag

en

der

Info

rmati

k 1

– T

6

Terminierung generativ rekursiver Prozeduren

• Das gleiche Merkmal gilt nicht für generativ rekursive Funktionen– Die interne Rekursion konsumiert nicht eine direkte

Komponente der Eingabe, sondern irgendein neues Datum, das aus der Eingabe generiert wird

• Ein Rekursionsschritt kann potenziell immer wieder die ursprüngliche Eingabe generieren und somit die Evaluierung daran verhindern, jemals ein Ergebnis zu produzieren– Wir sagen, dass das Programm in eine endlose Schleife

gerät

34

Page 33: Telecooperation/RBG Technische Universität Darmstadt Copyrighted material; for TUD student use only Grundlagen der Informatik 1 Thema 6: Generative Rekursion.

Dr. G. RößlingProf. Dr. M. Mühlhäuser

RBG / Telekooperation©

Grundlagen der Informatik I: T6 Gru

nd

lag

en

der

Info

rmati

k 1

– T

6

Nicht terminierende Programme

• Was passiert, wenn wir die folgenden drei Ausdrücke ans Ende des Definition-Fensters von DrScheme setzen und dann auf execute klicken?

• Produziert der zweite Ausdruck jemals einen Wert, so dass der dritte Ausdruck evaluiert werden kann, um die Fläche verschwinden zu lassen?

35

(start WIDTH HEIGHT) (move-until-out (make-ball 10 20 0 0)) (stop)

Page 34: Telecooperation/RBG Technische Universität Darmstadt Copyrighted material; for TUD student use only Grundlagen der Informatik 1 Thema 6: Generative Rekursion.

Dr. G. RößlingProf. Dr. M. Mühlhäuser

RBG / Telekooperation©

Grundlagen der Informatik I: T6 Gru

nd

lag

en

der

Info

rmati

k 1

– T

6

36

Nicht terminierende Programme

;; smaller-items : (listof number) number -> (listof number)(define (below alon threshold) (cond [(empty? alon) empty] [else (if (<= (first alon) threshold) (cons (first alon) (below (rest alon) threshold)) (below (rest alon) threshold))]))

statt (rest alon)

(quick-sort (list 5))= (append (quicksort (below 5 (list 5))) (list 5) (quicksort (above 5 (list 5))))= (append (quicksort (list 5)) (list 5) (quicksort (above 5 (list 5))))

Kleine Fehler bei der Prozessdefinition können Endlosschleifen hervorrufen:

Quicksort terminiert nicht mit der neuen Funktion

Page 35: Telecooperation/RBG Technische Universität Darmstadt Copyrighted material; for TUD student use only Grundlagen der Informatik 1 Thema 6: Generative Rekursion.

Dr. G. RößlingProf. Dr. M. Mühlhäuser

RBG / Telekooperation©

Grundlagen der Informatik I: T6 Gru

nd

lag

en

der

Info

rmati

k 1

– T

6

Terminierungsargument

• Das Terminierungsargument ist ein zusätzlicher Schritt im Designrezept für generativ rekursive Funktionen

• Das Argument erklärt:– warum der Prozess für jede Eingabe eine Ausgabe

liefert– wie die Funktion diese Idee implementieren kann – wann der Prozess eventuell nicht terminieren würde

37

Page 36: Telecooperation/RBG Technische Universität Darmstadt Copyrighted material; for TUD student use only Grundlagen der Informatik 1 Thema 6: Generative Rekursion.

Dr. G. RößlingProf. Dr. M. Mühlhäuser

RBG / Telekooperation©

Grundlagen der Informatik I: T6 Gru

nd

lag

en

der

Info

rmati

k 1

– T

6

Terminierungsargument für Quicksort

38

Bei jedem Schritt teilt quicksort die Liste mit less-than und greater-than in zwei Teillisten.

Jede dieser Funktionen liefert eine Liste, die kleiner als die Eingabeliste (zweites Argument) ist, sogar dann, wenn das Drehpunktelement (erstes Argument) ein Element der Liste ist.

Somit verarbeitet jede rekursive Anwendung von quicksort eine Liste, die auf jeden Fall kürzer ist als die Eingabeliste.

Letztendlich bekommt quick-sort eine leere Liste und liefert empty.

Page 37: Telecooperation/RBG Technische Universität Darmstadt Copyrighted material; for TUD student use only Grundlagen der Informatik 1 Thema 6: Generative Rekursion.

Dr. G. RößlingProf. Dr. M. Mühlhäuser

RBG / Telekooperation©

Grundlagen der Informatik I: T6 Gru

nd

lag

en

der

Info

rmati

k 1

– T

6

39

;; quick-sort : (listof number) -> (listof number)(define (quick-sort alon) (cond [(empty? alon) empty] [(empty? (rest alon)) alon] [else (append (quick-sort (less-than alon (first alon))) (list (first alon)) (quick-sort (greater-than alon (first alon))) ) ]))

Neue Terminierungs-FälleDas Argument der Terminierung kann eventuell zusätzliche Terminierungs-Fälle aufdecken.

Dieses Wissen kann dem Algorithmus hinzugefügt werden:

z.B. liefert (less-than N (list N)) und(greater-than N (list N)) immer empty

Page 38: Telecooperation/RBG Technische Universität Darmstadt Copyrighted material; for TUD student use only Grundlagen der Informatik 1 Thema 6: Generative Rekursion.

Dr. G. RößlingProf. Dr. M. Mühlhäuser

RBG / Telekooperation©

Grundlagen der Informatik I: T6 Gru

nd

lag

en

der

Info

rmati

k 1

– T

6

Richtlinien für den Entwurf von generativen Prozeduren

40

Phase Ziel Weg

Beispiele Den Ein-/Ausgabe-Prozess und den Berechnungsvorgang mit Beispielen beschreiben

• Entwirf und zeige Beispiele trivial lösbarer Probleme

• Entwirf und zeige Beispiele, die rekursives Vorgehen erfordern

• Stelle dar, wie man die Beispiele durchgeht

Rumpf (Body) Einen Algorithmus definieren

• Formuliere Tests für trivial lösbare Probleme

• Formuliere Antworten für die trivialen Fälle

• Zeige, wie man aus den gegebenen Problemen neue generiert

• Zeige, wie man die Lösungen dieser Probleme zu einer Gesamtlösung für das gegebene Problem kombiniert

Terminierung Zeigen, dass der Algorithmus für alle möglichen Eingaben terminiert

Zeige, dass die Eingaben für die rekursive Anwendung kleiner als die gegebene Eingabe sind

Page 39: Telecooperation/RBG Technische Universität Darmstadt Copyrighted material; for TUD student use only Grundlagen der Informatik 1 Thema 6: Generative Rekursion.

Dr. G. RößlingProf. Dr. M. Mühlhäuser

RBG / Telekooperation©

Grundlagen der Informatik I: T6 Gru

nd

lag

en

der

Info

rmati

k 1

– T

6

Inhaltsverzeichnis

• Einführung in generativ rekursive Funktionen

• Sortieren mittels generativ rekursiver Prozeduren

• Richtlinien für den Entwurf von generativ rekursiven Prozeduren

• Strukturelle versus generative Rekursion• Backtracking: Durchlaufen von Graphen

41

Page 40: Telecooperation/RBG Technische Universität Darmstadt Copyrighted material; for TUD student use only Grundlagen der Informatik 1 Thema 6: Generative Rekursion.

Dr. G. RößlingProf. Dr. M. Mühlhäuser

RBG / Telekooperation©

Grundlagen der Informatik I: T6 Gru

nd

lag

en

der

Info

rmati

k 1

– T

6

42

Strukturelle Rekursion alsSpezialfall der generativen

Rekursion(define (generative-recursive-fun problem) (cond [(trivially-solvable? problem) (determine-solution problem)] [else (combine-solutions problem (generative-recursive-fun (generate-problem problem)))]))

(define (generative-recursive-fun problem) (cond [(empty? problem) (determine-solution problem)] [else (combine-solutions

problem(generative-recursive-fun (rest problem)))]))

Vorlage für generative Rekursion

Vorlage für Listenverarbeitung

trivially-solvable? empty?

generate-problem rest

Page 41: Telecooperation/RBG Technische Universität Darmstadt Copyrighted material; for TUD student use only Grundlagen der Informatik 1 Thema 6: Generative Rekursion.

Dr. G. RößlingProf. Dr. M. Mühlhäuser

RBG / Telekooperation©

Grundlagen der Informatik I: T6 Gru

nd

lag

en

der

Info

rmati

k 1

– T

6

Strukturelle vs. generative Rekursion

Gibt es einen Unterschied zwischen struktureller und generativer Rekursion?

– Strukturell rekursive Funktionen scheinen lediglich Spezialfälle generativer Rekursion zu sein

– Aber: Diese „alles ist gleich“-Einstellung hilft beim Verständnis des Entwurfsprozesses nicht weiter

• Strukturell und generativ rekursive Funktionen werden mit jeweils anderen Ansätzen entworfen und haben unterschiedliche Konsequenzen

43

Strukturelle Rekursion Generative Rekursion

Beruht auf systematischer Datenanalyse

Setzt tiefen Einblick in den Problem-lösungsprozess voraus

Führt zu naturgemäß terminierenden Funktionen

Benötigt ein Terminierungs-Argument

Page 42: Telecooperation/RBG Technische Universität Darmstadt Copyrighted material; for TUD student use only Grundlagen der Informatik 1 Thema 6: Generative Rekursion.

Dr. G. RößlingProf. Dr. M. Mühlhäuser

RBG / Telekooperation©

Grundlagen der Informatik I: T6 Gru

nd

lag

en

der

Info

rmati

k 1

– T

6

Größter gemeinsamer Teiler (GCD)

(GCD = engl. greatest common denominator)

• Beispiele:– 6 und 25 sind beides Zahlen mit mehreren Teilern:

• 6 ist ganzzahlig teilbar durch 1, 2, 3, und 6; • 25 ist ganzzahlig teilbar durch 1, 5, und 25. • Der größte gemeinsame Teiler von 25 und 6 ist 1.

– 18 und 24 haben viele gemeinsame Teiler: • 18 ist ganzzahlig teilbar durch 1, 2, 3, 6, 9, 18; • 24 ist ganzzahlig teilbar durch 1, 2, 3, 4, 6, 8, 12, 24.• Der größte gemeinsame Teiler ist 6.

44

Page 43: Telecooperation/RBG Technische Universität Darmstadt Copyrighted material; for TUD student use only Grundlagen der Informatik 1 Thema 6: Generative Rekursion.

Dr. G. RößlingProf. Dr. M. Mühlhäuser

RBG / Telekooperation©

Grundlagen der Informatik I: T6 Gru

nd

lag

en

der

Info

rmati

k 1

– T

6

GCD auf Basis struktureller Rekursion

45

;; gcd-structural : N[>= 1] N[>= 1] -> N;; structural recursion using data definition of N[>= 1] (define (gcd-structural n m) (local ((define (first-divisor i) (cond [(= i 1) 1] [(and (= (remainder n i) 0) (= (remainder m i) 0)) i] [else (first-divisor (- i 1))] ) ) ) (first-divisor (min m n))))

Ineffizient bei großen Zahlen!

Testet für jede Zahl, i = [min(n,m), …,1] ob sie n und m ganzzahlig teilt und liefert die erste solche Zahl.

Page 44: Telecooperation/RBG Technische Universität Darmstadt Copyrighted material; for TUD student use only Grundlagen der Informatik 1 Thema 6: Generative Rekursion.

Dr. G. RößlingProf. Dr. M. Mühlhäuser

RBG / Telekooperation©

Grundlagen der Informatik I: T6 Gru

nd

lag

en

der

Info

rmati

k 1

– T

6

Analyse der strukturellen Rekursion

• gcd-structural testet blind jede natürliche Zahl kleiner als min(n,m), ob sie sowohl n als auch m ganzzahlig teilt und gibt die erste solche Zahl zurück – Diese Strategie funktioniert nur für kleine Zahlen gut

• Für die folgende Berechnung muss gcd-structural 101135853 – 177 = 101135676 Zahlen testen!(gcd-structural 101135853 450146405) 177 – Selbst schnelle Rechner brauchen Minuten dafür

• Fügen Sie die Definition von gcd-structural in das Definition-Fenster ein und evaluieren Sie im Interaktions-Fenster folgenden Ausdruck … und gehen Sie dann eine Weile Kaffee trinken

(time (gcd-structural 101135853 450146405))46

Page 45: Telecooperation/RBG Technische Universität Darmstadt Copyrighted material; for TUD student use only Grundlagen der Informatik 1 Thema 6: Generative Rekursion.

Dr. G. RößlingProf. Dr. M. Mühlhäuser

RBG / Telekooperation©

Grundlagen der Informatik I: T6 Gru

nd

lag

en

der

Info

rmati

k 1

– T

6

Der Euklidische Algorithmus

• Der Euklidische Algorithmus zur Bestimmung der größten gemeinsamen Teiler (GCD) zweier ganzer Zahlen ist einer der ältesten bekannten Algorithmen,– Erscheint in Euklids Elementen ca. 300 v. Chr. – Der Algorithmus wurde aber wahrscheinlich nicht

von Euklid entdeckt; es könnte sein, dass der Algorithmus bereits 200 Jahre früher bekannt war.

47

Erkenntnis: Für zwei natürliche Zahlen n und m, n>m, GCD(n, m) = GCD(m,rest(n/m)).

(gcd larger smaller) = (gcd smaller (remainder larger smaller))

Beispiel: GCD(18, 24) = GCD(18, remainder(24/18)) = GCD(18, 6) = GCD(6,0) = 6

Page 46: Telecooperation/RBG Technische Universität Darmstadt Copyrighted material; for TUD student use only Grundlagen der Informatik 1 Thema 6: Generative Rekursion.

Dr. G. RößlingProf. Dr. M. Mühlhäuser

RBG / Telekooperation©

Grundlagen der Informatik I: T6 Gru

nd

lag

en

der

Info

rmati

k 1

– T

6

48

GCD: generativer Algorithmus

clever-gcd basiert auf generativer Rekursion:– Der trivial lösbare Fall ist wenn smaller = 0 ist.– Der generative Schritt ruft clever-gcd mit smaller und (remainder larger smaller) auf

;; gcd-generative : N[>= 1] N[>=1] -> N(define (gcd-generative n m) (local ((define (clever-gcd larger smaller) (cond [(= smaller 0) larger] [else (clever-gcd smaller (remainder larger smaller))])) ) (clever-gcd (max m n) (min m n))))

(gcd-generative 101135853 450146405) nur 9 Iterationen!

Page 47: Telecooperation/RBG Technische Universität Darmstadt Copyrighted material; for TUD student use only Grundlagen der Informatik 1 Thema 6: Generative Rekursion.

Dr. G. RößlingProf. Dr. M. Mühlhäuser

RBG / Telekooperation©

Grundlagen der Informatik I: T6 Gru

nd

lag

en

der

Info

rmati

k 1

– T

6

49

Der Euklidische AlgorithmusSei n = qm + r, dann teilt jede Zahl u, welche n und m teilt (n = su, m = tu), auch r

r = n – qm = su – qtu = (s – qt)u

Jede Zahl v, die m und r teilt (m = s’v, r = t’v ), teilt auch n

n = qm + r = qs´v + t´v = (s´q + t´)v

• Jeder gemeinsame Teiler von n und m ist auch ein gemeinsamer Teiler von m und r.

• gcd(n,m) = gcd(m,r) • Es reicht aus, den Prozess mit m und r weiterzuführen• Da der absolute Wert von r kleiner ist als m, werden wir

r = 0 nach endlich vielen Schritten erreichen

Page 48: Telecooperation/RBG Technische Universität Darmstadt Copyrighted material; for TUD student use only Grundlagen der Informatik 1 Thema 6: Generative Rekursion.

Dr. G. RößlingProf. Dr. M. Mühlhäuser

RBG / Telekooperation©

Grundlagen der Informatik I: T6 Gru

nd

lag

en

der

Info

rmati

k 1

– T

6

Was sollte man benutzen?

• Frage: Soll man daraus schließen, dass generative Rekursion besser ist als strukturelle Rekursion?

• Antwort: Nein, nicht automatisch.– Selbst eine gut entworfene generative Prozedur ist

nicht immer schneller als die strukturelle Rekursion• So gewinnt quicksort gegenüber insertion sort

nur für große Listen– Strukturelle Rekursion ist einfacher zu entwerfen

• Generativ rekursive Prozeduren zu entwerfen erfordert oft fundierte mathematische Kenntnisse

– Strukturelle Rekursion ist einfacher zu verstehen• Es könnte schwierig sein, die Idee des generativen

Schritts zu verinnerlichen.

50

Page 49: Telecooperation/RBG Technische Universität Darmstadt Copyrighted material; for TUD student use only Grundlagen der Informatik 1 Thema 6: Generative Rekursion.

Dr. G. RößlingProf. Dr. M. Mühlhäuser

RBG / Telekooperation©

Grundlagen der Informatik I: T6 Gru

nd

lag

en

der

Info

rmati

k 1

– T

6

Was sollte man benutzen?

51

Beginne mit struktureller Rekursion.

Wenn sie zu langsam ist, versuche generative Rekursion einzusetzen.

Dokumentiere die Problemgeneration mit guten Beispielen, finde ein gutes Terminierungs-Argument.

Page 50: Telecooperation/RBG Technische Universität Darmstadt Copyrighted material; for TUD student use only Grundlagen der Informatik 1 Thema 6: Generative Rekursion.

Dr. G. RößlingProf. Dr. M. Mühlhäuser

RBG / Telekooperation©

Grundlagen der Informatik I: T6 Gru

nd

lag

en

der

Info

rmati

k 1

– T

6

Inhaltsverzeichnis

• Einführung in generativ rekursive Funktionen

• Sortieren mittels generativ rekursiver Prozeduren

• Richtlinien für den Entwurf von generativ rekursiven Prozeduren

• Strukturelle versus generative Rekursion• Backtracking: Durchlaufen von Graphen

52

Page 51: Telecooperation/RBG Technische Universität Darmstadt Copyrighted material; for TUD student use only Grundlagen der Informatik 1 Thema 6: Generative Rekursion.

Dr. G. RößlingProf. Dr. M. Mühlhäuser

RBG / Telekooperation©

Grundlagen der Informatik I: T6 Gru

nd

lag

en

der

Info

rmati

k 1

– T

6

Graphen traversieren

• Ein Graph ist eine Sammlung von Knoten und Kanten. • Die Kanten repräsentieren gerichtete Verbindungen

zwischen den Knoten.• Kann benutzt werden, um folgendes zu beschreiben:

– Einen Plan von Einbahnstraßen in einer Stadt, – Beziehungen zwischen Personen,– Verbindungen im Internet, etc.

53

A

B

E

C

F

D

G

(define Graph '((A (B E)) (B (E F)) (C (D)) (D ()) (E (C)) (F (D G)) (G ())))

Scheme – ListenDarstellung

Page 52: Telecooperation/RBG Technische Universität Darmstadt Copyrighted material; for TUD student use only Grundlagen der Informatik 1 Thema 6: Generative Rekursion.

Dr. G. RößlingProf. Dr. M. Mühlhäuser

RBG / Telekooperation©

Grundlagen der Informatik I: T6 Gru

nd

lag

en

der

Info

rmati

k 1

– T

6

Graphen traversieren

54

;; find-route : node node graph -> (listof node);; to create a path from origination to destination in G;; false, if there is no path, (define (find-route origination destination G) ...)

(find-route 'C 'D Graph) = (list 'C 'D)(find-route 'E 'D Graph) = (list 'E 'C 'D)(find-route 'C 'G Graph) = false

A

B

E

C

F

D

G

Page 53: Telecooperation/RBG Technische Universität Darmstadt Copyrighted material; for TUD student use only Grundlagen der Informatik 1 Thema 6: Generative Rekursion.

Dr. G. RößlingProf. Dr. M. Mühlhäuser

RBG / Telekooperation©

Grundlagen der Informatik I: T6 Gru

nd

lag

en

der

Info

rmati

k 1

– T

6

Backtracking-Algorithmen

Ein Backtracking-Algorithmus folgt einer bestimmtenVorgehensweise:1. Verfolge einen (möglichen) Lösungsweg, bis

• die Lösung gefunden wurde (Erfolg! terminiere)• oder der Weg nicht fortgesetzt werden kann.

2. Wenn der Weg nicht fortgesetzt werden kann:• gehe den Weg zurück bis zur letzten

Verzweigungsmöglichkeit, wo es noch nicht gewählte Alternativen gibt,

• wähle dort eine noch nicht gewählte Alternative und mache weiter bei Schritt 1.

3. Wenn der Ausgangspunkt erreicht ist und es keine Alternativen mehr gibt: Misserfolg! terminiere

Anwendungen: – N-Damen-Problem, Wege in Graphen finden

55

Page 54: Telecooperation/RBG Technische Universität Darmstadt Copyrighted material; for TUD student use only Grundlagen der Informatik 1 Thema 6: Generative Rekursion.

Dr. G. RößlingProf. Dr. M. Mühlhäuser

RBG / Telekooperation©

Grundlagen der Informatik I: T6 Gru

nd

lag

en

der

Info

rmati

k 1

– T

6

56

Graphen traversieren - BeispielFinde den Weg von Knoten A nach G!

A

B

E

C

F

D

G

BACKTRACK !

Page 55: Telecooperation/RBG Technische Universität Darmstadt Copyrighted material; for TUD student use only Grundlagen der Informatik 1 Thema 6: Generative Rekursion.

Dr. G. RößlingProf. Dr. M. Mühlhäuser

RBG / Telekooperation©

Grundlagen der Informatik I: T6 Gru

nd

lag

en

der

Info

rmati

k 1

– T

6

Graphen traversieren• Ist der Startknoten gleich dem Zielknoten, ist das

Problem trivial; die Lösung lautet (list destination).

• Ansonsten: versuche einen Weg von allen Nachbarknoten des Startknotens aus zu finden

57

(define (find-route origination destination aGraph) (cond [(symbol=? origination destination) (list destination)]

[else ... (find-route/list (neighbors origination aGraph) destination aGraph) ...]))

Page 56: Telecooperation/RBG Technische Universität Darmstadt Copyrighted material; for TUD student use only Grundlagen der Informatik 1 Thema 6: Generative Rekursion.

Dr. G. RößlingProf. Dr. M. Mühlhäuser

RBG / Telekooperation©

Grundlagen der Informatik I: T6 Gru

nd

lag

en

der

Info

rmati

k 1

– T

6

Nachbarknoten

neighbors ist der Funktion contains-doll? ähnlich

58

;; neighbors : node graph -> (listof node);; to lookup the node in graph(define (neighbors node graph) (cond [(empty? graph)

(error 'neighbors "can't happen")] [(symbol=? (first (first graph)) node) (second (first graph))] [else (neighbors node (rest graph))]))

Page 57: Telecooperation/RBG Technische Universität Darmstadt Copyrighted material; for TUD student use only Grundlagen der Informatik 1 Thema 6: Generative Rekursion.

Dr. G. RößlingProf. Dr. M. Mühlhäuser

RBG / Telekooperation©

Grundlagen der Informatik I: T6 Gru

nd

lag

en

der

Info

rmati

k 1

– T

6

Graphen traversieren

• find-route/list – Verarbeitet eine Liste von Knoten – ermittelt für jeden von ihnen, ob ein Weg zum

Zielknoten in diesem Graphen existiert

59

;; find-route/list : ;; (listof node) node graph -> (listof node) or false(define (find-route/list lo-orig dest aGraph) ...)

Das Ergebnis von find-route hängt vom find-route/list Ergebnis ab, das eins der folgenden sein kann:

– Ein Weg von einem der Nachbarknoten zum Zielknoten– false, wenn kein Weg von einem der Nachbarn aus

gefunden werden konnte

Page 58: Telecooperation/RBG Technische Universität Darmstadt Copyrighted material; for TUD student use only Grundlagen der Informatik 1 Thema 6: Generative Rekursion.

Dr. G. RößlingProf. Dr. M. Mühlhäuser

RBG / Telekooperation©

Grundlagen der Informatik I: T6 Gru

nd

lag

en

der

Info

rmati

k 1

– T

6

Graphen traversieren

60

(define (find-route origination destination aGraph) (cond [(symbol=? origination destination) (list destination)]

[else (local ((define possible-route

(find-route/list (neighbors origination aGraph) destination aGraph))) (cond [(boolean? possible-route) ...] [else (cons? possible-route) ...]))]))

Page 59: Telecooperation/RBG Technische Universität Darmstadt Copyrighted material; for TUD student use only Grundlagen der Informatik 1 Thema 6: Generative Rekursion.

Dr. G. RößlingProf. Dr. M. Mühlhäuser

RBG / Telekooperation©

Grundlagen der Informatik I: T6 Gru

nd

lag

en

der

Info

rmati

k 1

– T

6

Graphen traversieren

61

(define (find-route origination destination aGraph) (cond [(symbol=? origination destination)

(list destination)] [else (local ((define possible-route

(find-route/list (neighbors origination aGraph)

destination aGraph)))

(cond [(boolean? possible-route) false] [else (cons origination possible-route)]))]))

Page 60: Telecooperation/RBG Technische Universität Darmstadt Copyrighted material; for TUD student use only Grundlagen der Informatik 1 Thema 6: Generative Rekursion.

Dr. G. RößlingProf. Dr. M. Mühlhäuser

RBG / Telekooperation©

Grundlagen der Informatik I: T6 Gru

nd

lag

en

der

Info

rmati

k 1

– T

6

Graphen traversieren - Beispiel

Finde den Weg von Knoten A nach G!

62

A

B

E

C

F

D

GNach

barn

von

A

Page 61: Telecooperation/RBG Technische Universität Darmstadt Copyrighted material; for TUD student use only Grundlagen der Informatik 1 Thema 6: Generative Rekursion.

Dr. G. RößlingProf. Dr. M. Mühlhäuser

RBG / Telekooperation©

Grundlagen der Informatik I: T6 Gru

nd

lag

en

der

Info

rmati

k 1

– T

6

63

Graphen traversieren

(define (find-route/list lo-Os dest aG) (cond [(empty? lo-Os) false] [else (local ((define possible-route (find-route (first lo-Os) dest aG)))

(cond [(boolean? possible-route)

(find-route/list (rest lo-Os) dest aG)] [else possible-route])

) ]))

A

B

E

C

F

D

G

A

B

E

C

F

D

G

Page 62: Telecooperation/RBG Technische Universität Darmstadt Copyrighted material; for TUD student use only Grundlagen der Informatik 1 Thema 6: Generative Rekursion.

Dr. G. RößlingProf. Dr. M. Mühlhäuser

RBG / Telekooperation©

Grundlagen der Informatik I: T6 Gru

nd

lag

en

der

Info

rmati

k 1

– T

6

64

Graphen traversieren

A

B

E

C

F

D

G

(find-route 'B 'D Cyclic-graph)= ... (find-route/list (list 'E 'F) 'D Cyclic-graph) ...= ... (find-route 'E 'D Cyclic-graph) ...= ... (find-route/list (list 'C 'F) 'D Cyclic-graph) ...= ... (find-route 'C 'D Cyclic-graph) ...= ... (find-route/list (list 'B 'D) 'D Cyclic-graph) ...= ... (find-route 'B 'D Cyclic-graph) ...= ...

Die Funktion terminiert nicht in einem Graph mit einem Zyklus:

B, E, C ist ein Zyklus

Page 63: Telecooperation/RBG Technische Universität Darmstadt Copyrighted material; for TUD student use only Grundlagen der Informatik 1 Thema 6: Generative Rekursion.

Dr. G. RößlingProf. Dr. M. Mühlhäuser

RBG / Telekooperation©

Grundlagen der Informatik I: T6 Gru

nd

lag

en

der

Info

rmati

k 1

– T

6

Zusammenfassung

• Es gibt Probleme, die mit der strukturellen Rekursion nicht oder nicht optimal gelöst werden

• Generative Rekursion basiert auf dem Prinzip: „Teile und Herrsche“

• Das Design Rezept muss für generativ rekursive Funktionen angepasst werden:– Insbesondere muss ein Terminierungsargument

mitgeliefert werden• Strukturell rekursive Funktionen sind eine

Teilmenge der generativ rekursiven Funktionen

• Falls beide Strategien möglich sind, muss die Auswahl fallbasiert getroffen werden– Man kann nicht sagen, eine Klasse ist besser als die

andere

65