Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

REKURSION + ITERATION. Bemerkung: Die in den folgenden Folien angegebenen "Herleitungen" sind keine exakten Beweise, sondern Plausibilitätsbetrachtungen.

Ähnliche Präsentationen


Präsentation zum Thema: "REKURSION + ITERATION. Bemerkung: Die in den folgenden Folien angegebenen "Herleitungen" sind keine exakten Beweise, sondern Plausibilitätsbetrachtungen."—  Präsentation transkript:

1 REKURSION + ITERATION

2 Bemerkung: Die in den folgenden Folien angegebenen "Herleitungen" sind keine exakten Beweise, sondern Plausibilitätsbetrachtungen. Die exakten Beweise wurden dazu in einem anderen Dokument gemacht.

3 Berechnung des Werts einer Zeichenkette bzw. Terms

4 Alle folgenden Zeichenketten sollen aus dem Alphabet A = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, ), (, +, - } bestehen. D.h. eine beliebige Zeichenkette darf nur aus diesen Zeichen bestehen. Die Menge aller Terme, die aus dem Alphabet A hergestellt werden, bezeichnen wir mit X.

5 Unter einem mathematischen Term verstehen wir hier einen aus den Rechenzeichen + bzw. -und den Ziffern bzw. den Klammern zusammengesetzten Ausdruck. Also:

6 1) Die Zeichen von 0 bis 9 2) Zeichenketten der Form: (9+2), ((3-2)+3), ((5+7)+((4+(6-6))), usw.

7 Welche Werte haben die folgenden Zeichenketten bzw. Terme?

8 (8-9 7 (9-2) ((3-2)+3) ((5+7)+((4+(6+6))) Dies ist ein Term und hat den Wert 7 Dies ist ein Term und hat den Wert 4 Term mit Wert 28 7 ist eine Ziffer, also ein Term und soll den Wert 7 haben Diese Zeichenkette ist kein Term. Zahlen sind keine Terme (außer Ziffern). Dies ist kein Term.

9 Bemerkung: Eigentlich müsste man z.B. zwischen dem Term 7 und dem Wert 7 dieses Terms unterscheiden (unterschiedliche Bezeichnungen), also Term: "7" (also eine Zeichenkette) Wert: 7 (also eine Zahl) Dies wird hier aus Gründen der Vereinfachung nicht gemacht.

10 Erzeugung der Regeln: (Regelmenge), mit denen man Terme einschließlich ihrer Werte induktiv definieren kann.

11 Dies unterscheidet sich etwas in der Notation zu früher. Warum ?

12 Früher bestand ein Element nur aus z.B. einem Term. Jetzt ist es ein Term und ein Wert. Dies wird durch einen Zweier-Tupel (kurz: Tupel) dargestellt.

13 Hat eine Zeichenkette keinen Wert, also keine Zahl (weil sie kein Term ist), wird dieser Wert mit # dargestellt. Ein Tupel beginnt mit der Klammer ( und endet mit der Klammer ) Die Klammern, die bei der Termerzeugung - wie z.B. (3+5) - benötigt werden, werden im Gegensatz dazu mit schwarzer Farbe dargestellt.

14 (3+7, ?) (4-5, ?) ((3-9, ?) (2, ?) ((9+2), ?) (((3+2)-3), ?) (((5+7)+(4+(6+6))), ?) Für welche Werte stehen die Fragezeichen ?

15 (3+7, ) (4-5, ) ((3-9, ) (2, ) ((9+2), ) (((3+2)-3), ) (((5+7)+(4+(6+6))), ) Term 2 mit Wert 2 Term (9+2) mit Wert 11 Term ((3+2)-3) mit Wert 2 Term... mit Wert 28 Zeichenkette (kein Term) mit Wert # # # #

16 Aufgabe: Geben Sie die Regeln (Regelmenge) an, mit denen man Terme induktiv definieren, d.h. exakt formalisieren kann.

17 (0,0) (9,9) (z, #) Regel 1, kurz R1 Regel 10, kurz R10 Regel 11, kurz R11 wobei z X und z ist kein Term. Der Wert # bedeutet, daß z kein Term ist. R1 bis R11 sind die Regelaxiome.

18 {(T1,w1);(T2,w2)} ((T1+T2), add(w1,w2)) Regel 12, kurz R12 wobei T1 ein Term aus X und T2 auch ein Term aus X ist und w1 und w2 ganze Zahlen sind. add(w1,w2) bedeutet die Summe von w1 und w2. Warum schreibt man dann nicht einfach w1+w2 ? Weil das + schon für die Termbildung verwendet wird und dort einfach nur ein Zeichen bedeutet. Ganz wichtig: T1 und T2 sind Terme !!

19 {(T1,w1);(T2,w2)} ((T1-T2), sub(w1,w2)) Regel 13, kurz R13 wobei T1 ein Term aus X und T2 auch ein Term aus X ist und w1 und w2 ganze Zahlen sind. sub(w1,w2) bedeutet die Differenz von w1 und w2. Warum schreibt man dann nicht einfach w1-w2 ? Weil das - schon für die Termbildung verwendet wird und dort einfach nur ein Zeichen bedeutet. Ganz wichtig: T1 und T2 sind Terme !!

20 Aufgabe: Geben Sie die Mengen D0, D1, D2 an.

21 D0 =

22 D1 = { (0,0);...;(9,9) } {(z,-1) | z X z ist kein Term}

23 D2 = { (0,0) ;... ; (9,9) ; ((0+0),0) ; ((0+1),1) ; ((0+9),9) ;...; ((9+9),18)} { (0,0) ;... ; (9,9) ; ((0-0),0) ; ((0-1),-1) ; ((0-9),-9) ;...; ((9-9),0)} {(z,-1) | z X z ist kein Term}

24 oder in beschreibender Mengenschreibweise:

25 D2 = { (1,1) ;... ; (9,9) } {((d1+d2),add(d1,d2)) | d1 Z und d2 Z} { (1,1) ;... ; (9,9) } {((d1-d2),sub(d1,d2)) | d1 Z und d2 Z} {(z,#) | z X z ist kein Term} wobei Z = {0,1,..., 9}

26 Wie früher gilt: D = D0 D1 D2 D3...

27 Uns interessiert nun die 2. Komponente eines Tupels, also den Wert, d.h. den Nachbar eines Terms, also z.B: N(7) = 7 N( (9+2) ) = 11 N( ((3+2)+3) ) = 8 man schreibt: ((9+2),11) (7,7) (((3+2)+3),8) Der Nachbar von 7 Der Nachbar von (9+2) Der Nachbar von ((3+2)+3)

28 Wie kann N(z) rekursiv berechnet werden …?

29 Wie vorher kann man wieder die Kandidatenmenge angeben, d.h. die Menge der Kandidaten, die z.B. die Zeichenkette ((1+2)+(3+4)) produziert haben könnten. K(((1+2)+(3+4))) = {(1+2), (3+4)} Beachte: Regel R12 verlangt, daß die zerlegten Zeichenketten Terme sein müssen.

30 Angenommen, man will N(((1+2)+(3+4))) berechnen und man wüsste den Wert von (1+2) und von (3+4), also die Werte N((1+2)) und N((3+4)) wären bekannt. Wie wird dann N(((1+2)+(3+4))) berechnet?

31 Indem man die Werte N((1+2)) und N((3+4)) addiert, also: N(((1+2)+(3+4))) = add(N((1+2)), N((3+4)))

32 Wie berechnet man N(z), wobei z die 1. Komponente eines Atoms (Tupel) ist, wie z.B. N(6) ?

33 Indem man einfach die 2. Komponente des Atoms nimmt! Beispiele: N(6) = N(3++)+a) = 6 # weil (6,6) D 1 weil (3++)+a,#) D 1

34 Insgesamt ergibt dies die folgende mathematische Formel:

35 // Kandidatenmenge leer: Fall: K(x) = ==> N(z) = #, falls z kein Term N(z) = z, falls z eine Ziffer // x kommt direkt nach dem Urknall: Fall: K(T) ={(T1,T2)} ==> N(T) = g i (N(T1),N(T2)) wobei g i eine Funktion ist (wie z.B. add oder sub), die von T abhängt.

36 Beispiel

37 ((5+(6-7))+8) (5+(6-7)), 8 8 Wie groß ist jeweils N(…), d.h. welchen Wert haben die roten Blätter ? 12 5, (6-7) 5 4 6, 7 67 N((5+(6-7))) = = 4 N( ((5+(6-7))+8) ) = 12 N(7) = 7 N(6) = 6 N((6-7)) = sub(N(6),N(7)) = add(N(5),N((6-7))) = add(N((5+(6-7))),N(8)) = N(5) = 5 N(8) = 8

38 Also: Wie kann N(z) rekursiv berechnet werden …?

39 Zuerst braucht man eine Funktion, die feststellt, ob eine Zeichenkette ein Term ist. Das ist die von früher bekannte Funktion eRek(..). Zusätzlich soll diese Fuktion noch (falls die Zeichenkette ein Term ist) die 2 Teilterme zurückliefern, in die der Terme zerlegt wurde.

40 Weitere Anwendung aus der Spieltheorie: Optimale Strategie bei einem Spiel.

41 Das Nimm-Spiel

42 Auf dem Tisch liegt ein Haufen von anzahl Streichhölzern. Jeder Spieler muss eine Anzahl zwischen 1 und 3 Streichhölzern vom Tisch nehmen. Wer nicht mehr ziehen kann (weil kein Streichholz mehr da ist) hat verloren. Man kann das Spiel auch verallgemeinern: Statt maximal 3 Streichhölzer kann man maximal k Streichhölzer nehmen. =5

43 Möglicher Spielverlauf: 5-2=3 3-1=2 2-2=0 Spieler 2 hat verloren wer hat verloren ? Spieler1 zieht 2 Streichhölzer, also aktuelle Anzahl = Spieler2 zieht 1 Streichholz, also aktuelle Anzahl = Spieler1 zieht 2 Streichhölzer, also aktuelle Anzahl =

44 Frage Wie geht das Spiel aus, wenn der anziehende und der nachziehende Spieler jeweils den "besten Zug" machen ?

45 5 Streichhölzer liegen auf einem Haufen. Erstellen Sie den dazugehörigen Spielbaum. (d.h. zeichnen Sie alle möglichen Spielverläufe ein). Hilfestellung: Siehe angefangenen Spielbaum auf der nächsten Folie...

46 Wichtig: 2, 3, 4 nennt man die Nachfolger von 5. 0,1 nennt man die Nachfolger von 2, usw.

47 Gewinnwermittlung: Wie geht das Spiel aus, wenn alle 2 Spieler optimal spielen ?

48 Wir beginnen bei den Blättern des Baums und notieren in jedem Knoten den Gewinn (1: Gewinn, -1: Niederlage) des Spielers, der gerade am Zug ist:

49 Dort wo die 0 vorkommt, hat der anziehende Spieler verloren, also Gewinn (Auszahlung) =

50 wenn hier verloren wurde, wie groß ist dann die Auszahlung des davor ziehenden Spielers? 1

51 Was ist hier der optimale Zug für den anziehenden Spieler? Was ist sein max. Gewinn? 1 Da der anziehende Spieler so ziehen kann, daß der Nachfolgende verliert, ist sein maximaler Gewinn = 1 1

52 Was ist hier der optimale Zug für den anziehenden Spieler? Was ist sein max. Gewinn? 1 Da der anziehende Spieler so ziehen kann, daß der Nachfolgende verliert, ist sein maximaler Gewinn = 1 11

53 Was ist hier der optimale Zug für den anziehenden Spieler? Was ist sein max. Gewinn? 1 Da der anziehende Spieler so ziehen kann, daß der Nachfolgende verliert, ist sein maximaler Gewinn =

54 Was ist hier der optimale Zug für den anziehenden Spieler? Was ist sein max. Gewinn? 1 Da der anziehende Spieler so ziehen kann, daß der Nachfolgende verliert, ist sein maximaler Gewinn =

55 Was ist hier der optimale Zug für den anziehenden Spieler? Was ist sein max. Gewinn? Da der anziehende Spieler so ziehen kann, daß der Nachfolgende verliert, ist sein maximaler Gewinn = 1 1

56 Was ist hier der optimale Zug für den anziehenden Spieler? Was ist sein max. Gewinn? Da der anziehende Spieler so ziehen kann, daß der Nachfolgende verliert, ist sein maximaler Gewinn = 1 1 1

57 Was ist hier der optimale Zug für den anziehenden Spieler? Was ist sein max. Gewinn? Da der anziehende Spieler so ziehen kann, daß der Nachfolgende verliert, ist sein maximaler Gewinn =

58 Was ist hier der optimale Zug für den anziehenden Spieler? Was ist sein max. Gewinn? Da der anziehende Spieler so ziehen kann, daß der Nachfolgende verliert, ist sein maximaler Gewinn =

59 Was ist hier der optimale Zug für den anziehenden Spieler? Was ist sein max. Gewinn? Da der anziehende Spieler so ziehen kann, daß der Nachfolgende verliert, ist sein maximaler Gewinn =

60 Was ist hier der optimale Zug für den anziehenden Spieler? Was ist sein max. Gewinn? Da der anziehende Spieler so ziehen kann, daß der Nachfolgende verliert, ist sein maximaler Gewinn =

61 Was ist hier der optimale Zug für den anziehenden Spieler? Was ist sein max. Gewinn? Der nachfolgende Spieler gewinnt immer. Der maximale Gewinn des anziehenden Spielers ist also

62 Was ist hier der optimale Zug für den anziehenden Spieler? Was ist sein max. Gewinn? Da der anziehende Spieler so ziehen kann, daß der Nachfolgende verliert, ist sein maximaler Gewinn = 1 1

63 Was ist hier der optimale Zug für den anziehenden Spieler? Was ist sein max. Gewinn? Da der anziehende Spieler so ziehen kann, daß der Nachfolgende verliert, ist sein maximaler Gewinn = 1 11

64 Was ist hier der optimale Zug für den anziehenden Spieler? Was ist sein max. Gewinn? Da der anziehende Spieler so ziehen kann, daß der Nachfolgende verliert, ist sein maximaler Gewinn = 1 1

65 Angenommen, man würde die maximale Auszahlung (Gewinn, payout) p1max, p2max, p3max aller möglichen Spielzüge (Nachfolgeknoten) des Gegners kennen. Wie berechnet man daraus die maximale Auszahlung pmax des Vorgängerknotens?

66 Der anziehende Spieler zieht so, dass der nachfolgende Spieler eine minimale Auszahlung bekommt. Da dies ein Nullsummenspiel ist, ist die maximale Spielauszahlung des anziehenden Spielers, das negative Minimum der Auszahlungen aller nachfolgenden Spieler.

67 Als Formel: pmax = - Minimum(p1max, p2max, p3max) abgekürzt: pmax = g (p1max, p2max, p3max)

68 Berechnung des maximalen Gewinns (Auszahlung) bei einem Haufen von n Streichhölzern.

69 Erzeugung der Regeln: Regelmenge, mit denen man die Haufen (Anzahl der Streichhölzer) einschließlich ihrer maximalen Gewinne induktiv definieren kann.

70 (0,-1) (1,1) (2,1) Regel 1, kurz R1 (Atom) wenn 0 Streichhölzer da sind, hat der anziehende Spieler verloren Regel 2, kurz R2 (Atom) Bei einem Haufen mit 1 Streichholz nimmt der anziehende Spieler 1 Streichholz weg, dann hat er gewonnen (unabhängig vom Zug des nachfolgenden Spielers). Regel 3, kurz R3 (Atom) Bei einem Haufen mit 2 Streichhölzern nimmt der anziehende Spieler 2 Streichhölzer weg, dann hat er gewonnen (unabhängig vom Zug des nachfolgenden Spielers).

71 {(a-1,w1), (a-2,w2), (a-3,w3)} (a, -min(w1,w2,w3)) abgekürzt: {(a-1,w1), (a-2,w2), (a-3,w3)} (a, g(w1,w2,w3)) Regel 4, kurz R4 wobei a 3

72 Aufgabe: Geben Sie die Mengen D0, D1, D2 an.

73 D0 =

74 D1 = { (0,-1) ; (1,1) ; (2,1) }

75 Jetzt zur Berechnung von D2:

76 {(a-1,w1), (a-2,w2), (a-3,w3)} (a, g(w1,w2,w3)) angewendet auf: {(, ), (, ), (, )} (, g(,, )) was gibt g(-1.1.1), also -min(-1,1,1) = 1

77 {(a1,w1), (a2,w2), (a3,w3)} (a, g(w1,w2,w3)) angewendet auf: {(, ), (, ), (, )} (, )

78 D2 = { (0,-1) ; (1,1) ; (2,1) ; (3,1) }

79 Jetzt zur Berechnung von D3:

80 {(a-1,w1), (a-2,w2), (a-3,w3)} (a, g(w1,w2,w3)) angewendet auf: {(, ), (, ), (, )} (, g(,, )) was gibt g(1,1,1), also -min(1,1,1) = -1

81 {(a-1,w1), (a-2,w2), (a-3,w3)} (a, g(w1,w2,w3)) angewendet auf: {(, ), (, ), (, )} (, )

82 D3 = { (0,-1) ; (1,1) ; (2,1) ; (3,1) ; (4,-1) }

83 Wie früher gilt: D = D0 D1 D2 D3...

84 Also: Wie kann N(a) rekursiv berechnet werden …?

85 Wie berechnet man N(z), wobei z die 1. Komponente eines Atoms (Tupel) ist ? Also z.B. N(0) = N(1) = N(2) = 1 1 weil (0,-1) ein Atom ist weil (1,1) ein Atom ist weil (2,1) ein Atom ist

86 Wie kann dann N(a) berechnet werden, wenn a nicht 1. Komponente eines Atoms ist, also a 3 ist?

87 Wie vorher kann man wieder die Kandidatenmenge angeben, d.h. die Menge der Kandidaten, die z.B. die eine Menge von 8 Streichhölzern produziert haben könnten. K(8) = {(5,6,7)}

88 Angenommen, man will N(8) berechnen und man wüsste den maximalen Gewinn bei der Anzahl von 5, 6 und 7 Streichhölzern, also die Werte N(5), N(6) und N(7) wären bekannt. Wie wird dann N(8) berechnet?

89 Indem man das negative Minimum von N(5), N(6) und N(7) berechnet, also: N(8) = - min(N(5), N(6), N(7))

90 Aufgabe: Erstellen Sie die Funktion N(int anz), die im Nimm-Spiel den maximalen Gewinn des anziehenden Spielers berechnet.

91 #include "stdafx.h" int negMin(int z1, int z2, int z3); int N(int anz); int main(){ int erg; int i; for(i=0;i<20; i++){ erg = N(i); printf("i= %d erg =%d \n", i, erg); } return 0; }

92 int negMin(int z1, int z2, int z3){ int min; if(z1

93 int N(int anz){ int maxGewinn; if (anz==0) maxGewinn = -1; else if(anz==1) maxGewinn = 1; else if(anz==2) maxGewinn = 1; else maxGewinn= negMin(N(anz-3),N(anz-2),N(anz-1)); return maxGewinn; }


Herunterladen ppt "REKURSION + ITERATION. Bemerkung: Die in den folgenden Folien angegebenen "Herleitungen" sind keine exakten Beweise, sondern Plausibilitätsbetrachtungen."

Ähnliche Präsentationen


Google-Anzeigen