Programmierung und Modellierung
|
|
|
- Fritzi Waldfogel
- vor 9 Jahren
- Abrufe
Transkript
1 Programmierung und Modellierung Martin Wirsing in Zusammenarbeit mit Moritz Hammer SS 2009
2 2 2. Rekursive Funktionen und Induktion 1. Dateien laden, Kommentare und Fallunterscheidungen 2. Rekursive Funktionen Lineare, endständige, mehrfache, verschachtelte Rekursion, mögliche Nichtterminierung 3. Programmiermethodik für rekursive Funktionen Technik der Einbettung Beweis durch Induktion Beweis der Terminierung Abstiegsfunktion Wohlfundierte Relation
3 3 2.1 Dateien laden, Kommentare und Fallunterscheidungen
4 4 Dateien laden (einlesen) Eine Datei, die z.b. meine datei.sml heißt, kann wie folgt geladen werden: - use("meine_datei.sml"); val it = () : unit Dabei ist () (gesprochen "unity ) der einzige Wert eines besonderen Datentyps namens unit. Der Datentyp unit wird für Funktionen verwendet, die eigentlich keinen Wert berechnen, sondern einen Seiteneffekt bewirken (wie das Laden von Funktionsdeklarationen aus einer Datei). unit entspricht dem Typ void in Java.
5 5 Kommentare In SML sind Kommentare beliebige Texte, die mit (* anfangen und mit *) enden. Geschachtelte Kommentare sind erlaubt. Beispiel: (* fun Vorzeichen(x : int) = if x > 0 then 1 else if x < 0 then ~1 else (* x = 0 *) 0; *) Klare und präzise Kommentare sind in jedem Programm unabdingbar. Es ist naiv anzunehmen, dass ein Programm selbsterklärend sei.
6 6 Fallunterscheidung SML bietet zwei Möglichkeiten für Fallunterscheidungen: if-then-else (für 2 Fälle) Pattern Matching (für beliebig viele Fälle) If-then-else Eine Funktion vorzeichen kann z.b. wie folgt definiert werden: fun vorzeichen(x : int) = if x > 0 then 1 else if x < 0 then ~1 else (* x=0 *) 0; Das Konstrukt if Test then E1 else E2 stellt die Anwendung einer wie folgt definierten Funktion auf Test dar: (fn true => E1 false => E2) [ der Ausdruck if Test then E1 else E2 entspricht somit (fn true => E1 false => E2)(Test) ]
7 7 Bemerkungen: If-Then-Else Der else-teil von if-then-else-ausdrücken muss immer angegeben werden (im Gegensatz zu vielen (imperativen) Programmiersprachen)! Z.B. Ohne else-teil hat if B then A keinen Wert, wenn die Bedingung B den Wert false hat. in der funktionalen Programmierung unmöglich! In einem SML-Ausdruck if B then A1 else A2 müssen A1 und A2 denselben Typ besitzen.
8 8 Pattern Matching (Musterabgleich) In der Definition der obigen anonymen Funktion sind zwei Aspekte bemerkenswert: drückt eine Alternative aus. Die Ausdrücke true und false stellen Muster (patterns) dar. "Matcht der Wert des aktuellen Parameters das erste Muster, so wird der Wert des Ausdrucks E1 geliefert. Ansonsten wird getestet, ob der Wert des aktuellen Parameters mit dem zweiten Muster "matcht. Es können mehr als zwei Fälle in der Deklaration vorkommen: Die Muster werden sequenziell in der Reihenfolge der Definition probiert, bis eines den Wert des aktuellen Parameter matcht. Das Muster _ ( wildcard ) stellt einen Fangfall dar, d.h. matcht jeden möglichen Wert des aktuellen Parameters. Das Wildcard-Symbol wird nicht im Rumpf eines Falles (also hinter => ) verwendet.
9 9 Pattern Matching (Musterabgleich) Das folgende Prädikat liefert true, wenn es auf eine ganze Zahl angewandt wird, die eine (nicht-negierte) Ziffer ist: val Ziffer = fn 0 => true 1 => true 2 => true 3 => true 4 => true 5 => true 6 => true 7 => true 8 => true 9 => true _ => false; Vorsicht: Pattern sind keine Tests wie etwa (x > 0), sondern mögliche Werte des Parameters!
10 2.2 Rekursive Funktionen 10 Lineare Rekursion Beispiele: Summe der n ersten natürlichen Zahlen, Fakultät EndständigeRekursion Beispiel: Gerade Mehrfache Rekursion Beispiel: Fibonacci Verschachtelte Rekursion Beispiel: Ackermann Mögliche Nichtterminierung Rödelheim
11 Beispiel für Rekursion Rekursive Berechnung der Summe der n ersten natürlichen Zahlen 11 Die Funktion summe, die zu jeder natürlichen Zahl n die Summe aller natürlichen Zahlen von 0 bis einschließlich n liefert, kann z.b. wie folgt definiert weren: 0 falls n = 0 summe(n) = n + summe(n - 1) falls n > 0 In SML: fun summe(n) = if n = 0 then 0 else n + summe(n-1); oder val rec summe = fn 0 => 0 n => n + summe(n-1); Man beachte das Symbol rec! Bei rekursiven Funktionen muss rec nach val angegeben werden.
12 Lineare Rekursion Beispiel Fakultätsfunktion Die Fakultätsfunktion fak(n) = 1*2* *n läßt sich folgendermaßen rekursiv definieren fun fak(n) = if n=0 then 1 else n * fak(n-1); Die Fakultätsfunktion wächst sehr schnell: - fak 10; - fak(50); val it = uncaught exception Overflow [overflow] raised at: <file C:\sml\fak.sml> fak (~1); Das System terminiert nicht (bzw. erst nach Überlauf des Speichers mit Fehler). Lineare Rekursion Eine rekursive Fktsdeklaration f(x)= E(f,x) heißt linear rekursiv, wenn in jedem Zweig einer Fallunterscheidung des Rumpfes E(f,x) höchstens ein rekursiver Aufruf f(y) von f vorkommt. Beispiele für linear rek. Fktsdeklarationen sind fak und summe 12
13 13 Endständige Rekursion Eine rekursive Fktsdeklaration f(x)= E(f,x) heißt endständig rekursiv (tail recursive), wenn f linear rekursiv ist und jede Fallunterscheidung mit rekursivem Aufruf die Form f(g) hat; d.h. dass f das äußerste Funktionszeichen der Fallunterscheidung ist. Beispiel: Test auf gerade Zahl fun gerade(n) = if n = 0 then true else if n = 1 then false else gerade(n - 2); gerade ist linear rekursiv, wobei der rekursive Aufruf das äußerste Fkt.symbol im letzten else-zweig ist. Es gilt gerade(x) = (x mod 2=0).
14 Mehrfache Rekursion: Die Fibonacci-Zahlen fun fib(n) = if n = 0 orelse n = 1 then 1 Interpretation: fib(n) = else fib(n-1) + fib(n-2); Hasenpopulation nach n Monaten unter der Annahme, dass Hasenpaare jeden Monat ein Paar von Nachkommen haben; dies jeweils aber erst ab dem zweiten Lebensmonat. Mehrfache Rekursion Eine rekursive Fktsdeklaration f(x)= E(f,x) heißt mehrfach rekursiv, wenn in mindestens einem Zweig einer Fallunterscheidung des Rumpfes E(f,x) 2 oder mehr rek. Aufrufe von f vorkommen. Beispiel: Fibonaccifunktion fib 14 Leonardi Fibonacci Ca , Pisa Liber Abbaci, 1227 (Buch der Rechenkunst, Multiplikation, Dreisatz, [Wikipedia]
15 15 Fibonacci-Zahlen und Goldener Schnitt Goldener Schnitt x : 1 = (1-x) : x, d.h. x 2 + x -1 = 0; (Negative) Lösung φ ~ fib(n)/fib(n-1) konvergiert gegen φ: 1/1 = 1, 2/1 = 2, 3/2 = 1.5, 5/3 = , 8/5 = 1.6, 13/8 = 1.625, 21/13 =
16 Verschachtelte Rekursion: Ackermann Noch schneller als die Fakultätsfunktion wächst die Ackermann-Funktion (1926); vereinfachte Version von Rosza Peter (1955): fun ack(n, m) = if n = 0 then m+1 else if m = 0 then ack(n-1, 1) else ack(n-1, ack(n, m-1)); Es gilt ack(0, m) = m+1, ack(1, m) = m+2, ack(2, m) = 2m+3, ack(3, m) ~ 2 m, ack(4, 2) ist Zahl mit Stellen [ Verschachtelte Rekursion Eine rekursive Fktsdeklaration f(x)= E(f,x) heißt verschachtelt rekursiv, wenn im Rumpf E(f,x) mindestens ein rekursiver verschachtelter rek. Aufruf der Form f(h(f)) von f vorkommt, wobei H einen rek. Aufruf von f enthält. Beispiel: Ackermannfunktion 16 Wilhelm Ackermann , Diss 1924 bei Hilbert Mathelehrer in Lüdenscheid Prof. h.c. Münster [Wikipedia] Rósza Péter Mutter der Theorie der rek. Fkt , Diss Buch Recursive Functions [
17 17 Nichtterminierung: Rödelheim Beachte: Rekursion kann eine Quelle von Undefiniertheit sein: fun roedelheim(n) = if n = 0 then 1 else roedelheim(n + 1); Es gilt roedelheim(0) = 1 roedelheim(n) = undefiniert für alle n > 0; d.h. Definitionsbereich D(roedelsheim) = {0}
18 18 Weitere Beispiele: Collatz-Vermutung (auch Ulam-Funktion) fun col n = if n = 1 then 1 else if n mod 2 = 0 then col(n div 2) else col(3*n + 1); Beispiele col(3) = col(10) = col(5) = col(16) = col(8) = col(4) = col(2) = col(1) col(4) = col(2) = col(1) col(5) = col(16) = col(8) = col(4) = col(2) = col(1) col(n) terminiert für alle bisher untersuchten natürlichen Zahlen Allgemeiner Beweis der Terminierung ist bis jetzt unbekannt Preise für Lösung sind ausgesetzt von : Thwaites (1996) 1000 $, Coxeter (1970) 50 bzw. 100 $ Lothar Collatz , Prof. Uni Hamburg Funktionalanalysis, Num. Mathe. [Wikipedia, Foto-Studio Volksdorf]
19 Programmiermethodik für rekursive Funktionen Beweis durch vollständige Induktion Technik der Einbettung Beweis der Terminierung Abstiegsfunktion Wohlfundierte Relation
20 20 Effiziente Berechnung der Summe der n ersten natürlichen Zahlen Die Summe der ersten n nat. Zahlen kann auch explizit durch einen geschlossenen Ausdruck definiert werden: fun summe1(n) = (n * (n + 1) ) div 2; wesentlich effizientere Berechnung ohne Verwendung von Rekursion, bei der für jedes n nur drei Grundoperationen benötigt werden. Warum gilt die Eigenschaft summe(n) = n(n+1) div 2? Dies kann durch vollständige Induktion gezeigt werden.
21 21 Vollständige Induktion Sei P(n) eine Eigenschaft der natürlichen Zahlen. Prinzip der vollständigen Induktion Induktionsanfang: Beweise P(0) Induktionsannahme: P(k) Induktionsschluss k => k+1: Zeige P(k+1) unter der Annahme, dass P(k) gültig ist. Dann gilt die Eigenschaft P(n) für alle n N
22 22 Beweis durch vollständige Induktion Die Eigenschaft summe(n) = n(n+1) div 2 gilt für alle n N. Beweis durch vollständige Induktion: Induktionsanfang: Für n = 0 gilt die Gleichung summe(0) = 0 = 0(0+1) div 2. Induktionsannahme : Für k gelte summe(k) = k(k+1) div 2. Induktionsschritt: k => k+1 Nun zeigen wir, dass die Gleichung summe(k+1) = (k+1)(k+2) div 2 für die Nachfolgerzahl k + 1 gilt: summe(k + 1) = [Def. Summe] k summe(k) = [Ind.annahme] k (k(k+1) div 2) = [Algebraische Umformung] (2(k+1)+k(k+1)) div 2 = [Algebraische Umformung] (k+1)(k+2) div 2 qed
23 23 Technik der Einbettung Häufig muss man vor einer rekursiven Lösung das Problem generalisieren. Diese Technik bezeichnet man als Einbettung. Beispiel: Primzahlen Man soll bestimmen, ob n eine Primzahl ist. Gesucht istprim : nat -> bool mit istprim(n) = true gdw. n ist prim. Lösungsansatz durch Fallunterscheidung fun istprim(n) = if n = 0 orelse n = 1 then false else if n = 2 then true else???
24 24 Einbettung: Beispiel Primzahltest Zwei Schritte Bette die Operation istprim(n) durch einen zusätzlichen Parameter in eine Funktion keineteiler(n, k) ein, die prüft, ob die Zahl n keine Teiler im Bereich k,..., n-1 besitzt. Definiere den Zusammenhang zwischen istprim und der Einbettung: istprim(n) = n>1 keineteiler(n, 2) Lösung in SML fun keineteiler(n, k) : bool = if k >= n-1 then true else not((n mod k) = 0) andalso keineteiler(n, k+1); fun istprim(n) = n > 1 andalso keineteiler(n, 2);
25 25 Einbettung: Endständig rekursive Fakultätsfunktion Einbettung der Fakultätsfunktion in eine endständig rekursive Funktion fak1 fun fak1(n,res) = if n=0 then res else fak1(n-1, n * res); fun fak(n) = fak1(n, 1); Bemerkung Endständige Rekursion entspricht der Iteration mit einer while-schleife Beispiel: fak1(n1, res) entspricht while not(n1 = 0) {res = res*n1; n1 = n1-1;} return res; Damit entspricht fak(n) dem while-programm: n1=n; res=1; while not(n1 = 0) {res = res*n1; n1 = n1-1;} return res;
26 26 Induktionsbeweis Um die Äquivalenz der beiden Definitionen der Fakultät nachzuweisen, zeigen wir fak1(n, res) = 1! * res Beweis durch vollständige Induktion über k. Induktionsanfang: Für k = 0 gilt die Gleichung fak1(0,res) = res= 1*res = 1! *res wegen 1! = 1. Induktionsannahme : Für k gelte fak1(k,res) = k! * res Induktionsschritt: k => k+1 Nun zeigen wir, dass die Gleichung fak1(k+1) = (k+1)! * res für die Nachfolgerzahl k + 1 gilt: fak1(k+1, res) = [Def. fac1] fak1(k, (k+1)*res) = [Ind.annahme] k! * (k+1)*res = [wg. (k+1)! = k! * (k+1)] (k+1)! * res qed
27 Terminierungsbeweis mit Abstiegsfunktion 27 Um festzustellen, ob eine rekursiv definierte Funktion terminiert, kann man eine Abstiegsfunktion verwenden. Sei fun f(x) = E(f, x) eine rekursive Definition einer Funktion f : A > B Wir wollen zeigen, dass f(x) für alle x aus einer Teilmenge A0 von A terminiert. Abstiegsfunktion Eine Funktion m : A > N heißt Abstiegsfunktion (für f und A0), falls für alle x A0 gilt: Im Term E(f,x) wird f nur für solche y A0 aufgerufen, für die gilt: m(y) < m(x). Dann gilt f(x) terminiert für alle x A0
28 28 Beispiele für Abstiegsfunktionen Fakultät fun fac(n) = if n=0 then 1 else n * fac(n-1); Hier nehmen wir A0 = N und m(x) = x. Summe, Fibonacci Hier wählen wir jeweils ebenso A0 = N und m(x) = x keineteiler fun keineteiler(n, k) : bool = if k >= n-1 then true else not((n mod k) = 0) andalso Hier setzen wir keineteiler(n, k+1); A0 = {(n, k) N x N k <= n} und m(n, k) = if k=n then 0 else n-k.
29 29 Wohlfundierte Relationen Sei M eine Menge. Eine Relation R M x M heißt wohlfundiert, wenn es keine unendliche Folge a 1, a 2, a 3,... von Elementen in M gibt, so dass a i+1 R a i für alle i N. Ist R eine wohlfundierte Relation auf einer Menge M, so kann man anstelle einer Abstiegsfunktion m : A > N auch eine Abstiegsfunktion m : A > M wählen, derart dass immer m(y) R m(x) gilt, wenn f(y) im Rumpf E(f, x) aufgerufen wird.
30 30 Beispiele für wohlfundierte Relationen Kleiner-Relation auf natürlichen Zahlen M = N und xry gdw. x < y Nachfolger-Relation auf natürlichen Zahlen M = N und xry gdw. y = x + 1 Lexikographische Ordnung M lex = N x N und (x1, x2) R (y1, y2) gdw x1 < y1 oder (x1 = x2 und y1 < y2). Mit dieser wohlfundierten Relation kann man die Terminierung der Ackermannfunktion beweisen fun ack(n, m) = if n = 0 then m+1 else if m = 0 then ack(n-1, 1) else ack(n-1, ack(n, m-1)); Hier wählen wir die Abstiegsfunktion m: M = N x N-> M lex und m(x, y) = (x, y).
31 31 Induktionsprinzip für wohlfundierte Relationen Sei R eine wohlfundierte Relation auf einer Menge M, m : A > M eine Funktion, P eine Eigenschaft vom Elementen aus A. Induktionsprinzip Zeige für alle a A die Eigenschaft P(a) unter der Annahme, dass P(y) gilt für alle y A mit m(y) R m(a). Dann gilt P(a) für alle a A
32 32 Beispiel Induktion über natürlichen Zahlen 1. Nachfolger-Relation über nat. Zahlen d.h. A = M = N, m(n) = n und xry, falls y = x + 1 Dann ist das Induktionsprinzip äquivalent zur vollständigen Induktion, denn für die Gültigkeit von P(n) für alle n N muss man zeigen: P(0) ohne Voraussetzungen (da 0 keinen Vorgänger besitzt) und P(k+1) unter der Annahme, dass P(k) gilt. 2. Kleiner-Relation über nat. Zahlen d.h. A = M = N, m(n) = n und xry gdw. x < y Dann ist Folgendes für die Gültigkeit von P(n) für alle n N zu zeigen: P(0) ohne Voraussetzungen (da 0 keinen Vorgänger besitzt) und P(k) unter der Annahme, dass P(m) gilt für alle m<k.
33 33 Beispiel: Schnelle Potenzbildung Betrachte folgende Exponentialfunktion fun exp(x: real, n) = if n=0 then 1.0 else if gerade(n) then sq(exp(x, n div 2)) else x * sq(exp(x, n div 2)); Hier ist sq die Quadratfunktion sq(x:real) = x*x; Es gilt exp(x, n) = x n. Beweis: Nächste Folie
34 Beispiel: Schnelle Potenzbildung Es gilt exp(x, n) = x n. Beweis: Wähle als wohlfundierte Ordnung die Kleiner-Relation auf natürlichen Zahlen, d.h. M = N und xry gdw. x < y Zeige für alle n N: P(n) = ( x:real. exp(x, n) = x n ) Beweis: 1. Fall n=0: exp(x, 0) = 1.0 = x Fall n>0: Induktionsannahme: Es gilt exp(x, m) = x m für alle m<n a) n gerade: exp(x, n) = sq(exp(x, n div 2)) = [Ind.Ann. für n div 2] sq(x n div 2 ) = x n b) n ungerade: exp(x, n) = x *sq(exp(x, n div 2)) = [Ind.Ann. für n div 2] x * sq(x n div 2 ) = x n 34
35 Zusammenfassung Fallunterscheidung bildet man in SML mit If-then-else oder Pattern Matching Rekursive Funktionen Wichtige Typen rekursiver Funktionen sind lineare, mehrfache und verschachtelte Rekursion Beispiele für rek. Definitionen sind die Fakultät, Fibonacci, Ackermann und Collatz-Funktion Endständige Rekursion ist ein Spezialfall linearer Rekursion und entspricht der Iteration mit While-Schleifen Programmiermethodik für rekursive Funktionen Die Technik der Einbettung wird häufig zum Aufstellen rek. Gleichungen sowie zur Umformung in endständige Rekursion benötigt Eigenschaften von rek. Definitionen zeigt man meist durch Induktion Techniken dafür sind die vollständige Induktion und die allgemeinere Technik der wohlfundierten Induktion Die Terminierung rekursiver Definitionen wird zeigt man mittels Abstiegsfunktion bzgl. N oder allgemeiner einer wohlfundierten Relation 35
Inhalt Kapitel 2: Rekursion
Inhalt Kapitel 2: Rekursion 1 Beispiele und Definition 2 Partialität und Terminierung 3 Formen der Rekursion Endständige Rekursion 4 Einbettung 29 Beispiele und Definition Rekursion 30 Man kann eine Funktion
Rekursive Funktionen
Rekursive Funktionen Man kann eine Funktion f : A B durch einen Term definieren, der selbst Aufrufe von f enthält. Beispiel: fakultät = function(n)if n = 0 then 1 else n fakultät(n 1) Dies bezeichnet man
Inhalt Kapitel 3: Induktion und Termination
Inhalt Kapitel 3: Induktion und Termination 1 Wohlfundierte Relationen Ackermannfunktion 2 Untere Schranke für Türme von Hanoi Weitere Beispiele 52 Wohlfundierte Relationen Wohlfundierte Relationen Definition
Informatik I: Einführung in die Programmierung
Informatik I: Einführung in die Programmierung 7. Albert-Ludwigs-Universität Freiburg Bernhard Nebel 31. Oktober 2014 1 31. Oktober 2014 B. Nebel Info I 3 / 20 Um zu, muss man zuerst einmal. Abb. in Public
Stand der Vorlesung Komplexität von Algorithmen (Kapitel 3)
Stand der Vorlesung Komplexität von Algorithmen (Kapitel 3) Technische Universität München Motivation: IT gestützte Steuerung, Überwachung, Fertigung, Produktion,. : erfordert effiziente Berechnungsvorschriften
( )= c+t(n-1) n>1. Stand der Vorlesung Komplexität von Algorithmen (Kapitel 3)
Stand der Vorlesung Komplexität von Algorithmen (Kapitel 3) Motivation: IT gestützte Steuerung, Überwachung, Fertigung, Produktion,. : erfordert effiziente Berechnungsvorschriften Ziel: Methoden kennen
Kapitel 2: Einführung in die Programmierung mit SML
Ludwig Maximilians Universität München Institut für Informatik Lehr- und Forschungseinheit für Datenbanksysteme Skript zur Vorlesung Informatik I Wintersemester 2006 Kapitel 2: Einführung in die Programmierung
Einführung in die Funktionale Programmierung mit Haskell
Einführung in die Funktionale Programmierung mit Haskell Rekursion LFE Theoretische Informatik, Institut für Informatik, Ludwig-Maximilians Universität, München 25. April 2013 Planung Achtung: Nächste
Mathematische Rekursion
Rekursion Mathematische Rekursion o Viele mathematische Funktionen sind sehr natürlich rekursiv definierbar, d.h. o die Funktion erscheint in ihrer eigenen Definition. Mathematische Rekursion o Viele mathematische
Programmierung und Modellierung mit Haskell
Rekursion Terminierung Rekursionsarten Induktion Programmierung und Modellierung mit Haskell Rekursion, Terminierung, Induktion Martin Hofmann Steffen Jost LFE Theoretische Informatik, Institut für Informatik,
Logik für Informatiker
Vorlesung Logik für Informatiker 2. Induktion Bernhard Beckert Universität Koblenz-Landau Sommersemester 2006 Logik für Informatiker, SS 06 p.1 Induktion Zentrale Rolle Wesentliches Beweisprinzip in Mathematik
Verarbeitung unendlicher Datenstrukturen Jetzt können wir z.b. die unendliche Liste aller geraden Zahlen oder aller Quadratzahlen berechnen:
Verarbeitung unendlicher Datenstrukturen Jetzt können wir z.b. die unendliche Liste aller geraden Zahlen oder aller Quadratzahlen berechnen: take 1 0 ( f i l t e r ( fn x => x mod 2=0) nat ) ; val it =
6. Induktives Beweisen - Themenübersicht
6. Induktives Beweisen - Themenübersicht Ordnungsrelationen Partielle Ordnungen Quasiordnungen Totale Ordnungen Striktordnungen Ordnungen und Teilstrukturen Noethersche Induktion Anwendung: Terminierungsbeweise
1 Übersicht Induktion
Universität Koblenz-Landau FB 4 Informatik Prof. Dr. Viorica Sofronie-Stokkermans Dipl.-Inform. Markus Bender 0.11.01 (v1.3) 1 Übersicht Induktion 1.1 Allgemeines Unter einem induktiven Vorgehen versteht
Theoretische Informatik SS 03 Übung 3
Theoretische Informatik SS 03 Übung 3 Aufgabe 1 a) Sind die folgenden Funktionen f : partiell oder total: f(x, y) = x + y f(x, y) = x y f(x, y) = x y f(x, y) = x DIV y? Hierbei ist x DIV y = x y der ganzzahlige
Programmierung 1 (Wintersemester 2012/13) Lösungsblatt 1 (Kapitel 1)
Fachrichtung 6.2 Informatik Universität des Saarlandes Tutorenteam der Vorlesung Programmierung 1 Programmierung 1 (Wintersemester 2012/13) Lösungsblatt 1 (Kapitel 1) Hinweis: Dieses Übungsblatt enthält
Funktionale Programmierung Teil 2 Methodik: Spezifikation, Implementierung, Verifikation
Grundlagen der Programm- und Systementwicklung Funktionale Programmierung Teil 2 Methodik: Spezifikation, Implementierung, Verifikation Technische Universität München Institut für Informatik Software &
Vollständige Induktion
30. September 008 Gliederung 1 3 4 Die Peano Axiome für die Menge der Natürlichen Zahlen N I. 0 ist eine natürliche Zahl, d.h. 0 N. II. Jede natürliche Zahl hat genau einen Nachfolger d.h. n : (n N! n
Datenstruktur Baum und Rekursion Software Entwicklung 1
Datenstruktur Baum und Rekursion Software Entwicklung 1 Annette Bieniusa, Mathias Weber, Peter Zeller 1 Datenstruktur Baum Bäume gehören zu den wichtigsten in der Informatik auftretenden Datenstrukturen.
Vollständige Induktion
30. September 008 Gliederung 1 3 4 Gliederung 1 3 4 Gliederung 1 3 4 Gliederung 1 3 4 Die Peano Axiome für die Menge der Natürlichen Zahlen N I. 0 ist eine natürliche Zahl, d.h. 0 N. II. Jede natürliche
Programmierung 1 (Wintersemester 2015/16) Lösungsblatt: Aufgaben für die Übungsgruppen: 8 (Kapitel 9)
Fachrichtung 6. Informatik Universität des Saarlandes Tutorenteam der Vorlesung Programmierung Programmierung (Wintersemester 5/6) Lösungsblatt: Aufgaben für die Übungsgruppen: 8 (Kapitel 9) Hinweis: Dieses
Programmierung 1 - Repetitorium
WS 2002/2003 Programmierung 1 - Repetitorium Andreas Augustin und Marc Wagner Homepage: http://info1.marcwagner.info Donnerstag, den 10.04.03 Kapitel 7 Korrektheit 7.1 Abstrakte Prozeduren Abstrakte Prozedur
Lösungen zum Übungsblatt 3: Softwareentwicklung I (WS 2006/07)
Prof. Dr. A. Poetzsch-Heffter Dipl.-Inform. J.O. Blech Dipl.-Inform. M.J. Gawkowski Dipl.-Inform. N. Rauch Technische Universität Kaiserslautern Fachbereich Informatik AG Softwaretechnik Lösungen zum Übungsblatt
Programmieren lernen mit Groovy Rekursion Rekursion und Iteration
Programmieren lernen mit Groovy Rekursion Seite 1 Rekursion Rekursion Ursprung lat. recurrere ~ zurücklaufen rekursive Definition Definition mit Bezug auf sich selbst Beispiel Fakultätsfunktion n! 0! =
Programmieren für Fortgeschrittene
Technische Universität Braunschweig Dr. Werner Struckmann Institut für Programmierung und Reaktive Systeme Wintersemester 2011/12 Programmieren für Fortgeschrittene Rekursive Spezifikationen Die folgende
Logik für Informatiker
Logik für Informatiker 1. Grundlegende Beweisstrategien: Noethersche Induktion 23.04.2012 Viorica Sofronie-Stokkermans Universität Koblenz-Landau e-mail: [email protected] 1 Letzte Vorlesung 1. Grundlegende
Zweite Möglichkeit: Ausgabe direkt auf dem Bildschirm durchführen:
Ein- und Ausgabe Zweite Möglichkeit: Ausgabe direkt auf dem Bildschirm durchführen: fun p r i n t T r e e printa t = c a s e t o f Leaf a => ( p r i n t Leaf ; printa a ) Node ( l, a, r ) => ( p r i n
Übung zur Vorlesung Berechenbarkeit und Komplexität
RWTH Aachen Lehrgebiet Theoretische Informatik Reidl Ries Rossmanith Sanchez Tönnis WS 2012/13 Übungsblatt 7 26.11.2012 Übung zur Vorlesung Berechenbarkeit und Komplexität Aufgabe T15 Entwickeln Sie ein
Diskrete Strukturen Kapitel 2: Grundlagen (Beweise)
WS 2014/15 Diskrete Strukturen Kapitel 2: Grundlagen (Beweise) Hans-Joachim Bungartz Lehrstuhl für wissenschaftliches Rechnen Fakultät für Informatik Technische Universität München http://www5.in.tum.de/wiki/index.php/diskrete_strukturen_-_winter_14
Induktive Beweise und rekursive Definitionen
Induktive Beweise und rekursive Definitionen Vorlesung Logik in der Informatik, HU Berlin 1. Übungsstunde Beweis durch vollständige Induktion über N Aufgabe 1 Zeige, dass für alle n N gilt: n 2 i = 2 n+1
Elementare Beweistechniken
Elementare Beweistechniken Beispiel: Satzform (Pythagoras) Voraussetzung: Gegeben sei ein beliebiges rechtwinkeliges Dreieck, die Länge der Hypothenuse sei c und die Längen der anderen Seiten seien a und
Typen von Programmiersprachen
Typen von Programmiersprachen Berechenbarkeitstheorie: Formalisierung des intuitiven Berechenbarkeitsbegriffs man kann vier Typen von Programmiersprachen zum Berechnen von Zahlenfunktionen unterscheiden:
Vorkurs Mathematik und Informatik Mengen, natürliche Zahlen, Induktion
Vorkurs Mathematik und Informatik Mengen, natürliche Zahlen, Induktion Saskia Klaus 07.10.016 1 Motivation In den ersten beiden Vorträgen des Vorkurses haben wir gesehen, wie man aus schon bekannten Wahrheiten
Logik für Informatiker. 1. Grundlegende Beweisstrategien. Viorica Sofronie-Stokkermans Universität Koblenz-Landau
Logik für Informatiker 1. Grundlegende Beweisstrategien Viorica Sofronie-Stokkermans Universität Koblenz-Landau e-mail: [email protected] 1 Mathematisches Beweisen Mathematische ussagen - haben oft
Kapitel 1. Grundlagen Mengen
Kapitel 1. Grundlagen 1.1. Mengen Georg Cantor 1895 Eine Menge ist die Zusammenfassung bestimmter, wohlunterschiedener Objekte unserer Anschauung oder unseres Denkens, wobei von jedem dieser Objekte eindeutig
C.3 Funktionen und Prozeduren
C3 - Funktionen und Prozeduren Funktionsdeklarationen in Pascal auch in Pascal kann man selbstdefinierte Funktionen einführen: Funktionen und Prozeduren THEN sign:= 0 Funktion zur Bestimmung des Vorzeichens
Funktionale Programmierung ALP I. µ-rekursive Funktionen WS 2012/2013. Prof. Dr. Margarita Esponda. Prof. Dr. Margarita Esponda
ALP I µ-rekursive Funktionen WS 2012/2013 Primitiv-rekursive Funktionen Jede primitiv-rekursive Funktion ist Loop-berechenbar. Das bedeutet, dass jede PR-Funktion in der Loop-Programmiersprache formuliert
Lösungsmenge L I = {x R 3x + 5 = 9} = L II = {x R 3x = 4} = L III = { }
Zur Einleitung: Lineare Gleichungssysteme Wir untersuchen zunächst mit Methoden, die Sie vermutlich aus der Schule kennen, explizit einige kleine lineare Gleichungssysteme. Das Gleichungssystem I wird
Algorithmen & Programmierung. Steuerstrukturen im Detail Selektion und Iteration
Algorithmen & Programmierung Steuerstrukturen im Detail Selektion und Iteration Selektion Selektion Vollständige einfache Selektion Wir kennen schon eine Möglichkeit, Selektionen in C zu formulieren: if
Komplexität von Algorithmen
Komplexität von Algorithmen Prof. Dr. Christian Böhm WS 07/08 in Zusammenarbeit mit Gefei Zhang http://www.dbs.informatik.uni-muenchen.de/lehre/nfinfosw Ressourcenbedarf - Größenordnungen Prozesse verbrauchen
Algorithmenbegriff: Berechenbarkeit. Algorithmenanalyse. (Berechnung der Komplexität)
Über-/Rückblick Algorithmenbegriff: Berechenbarkeit Turing-Maschine RAM µ-rekursive Funktionen Zeit Platz Komplexität Algorithmentechniken Algorithmenanalyse (Berechnung der Komplexität) Rekursion Iteration
Kapitel 1. Grundlagen
Kapitel 1. Grundlagen 1.1. Mengen Georg Cantor 1895 Eine Menge ist die Zusammenfassung bestimmter, wohlunterschiedener Objekte unserer Anschauung oder unseres Denkens, wobei von jedem dieser Objekte eindeutig
Vollständige Induktion
Angenommen, wir wollen zeigen, dass eine Aussage P(n) für alle n N wahr ist. Anders ausgedrückt: Es gilt n N : P(n) Hierzu können wir die Technik der vollständigen Induktion verwenden. Wir zeigen, dass
Semantik von Programmiersprachen SS 2017
Lehrstuhl für Programmierparadigmen Denis Lohner Sebastian Ullrich [email protected] [email protected] Semantik von Programmiersprachen SS 2017 http://pp.ipd.kit.edu/lehre/ss2017/semantik Lösungen
Berechenbarkeit und Komplexität: Mächtigkeit von Programmiersprachen: WHILE- und LOOP-Programme
Berechenbarkeit und Komplexität: Mächtigkeit von Programmiersprachen: WHILE- und LOOP-Programme Prof. Dr. Berthold Vöcking Lehrstuhl Informatik 1 Algorithmen und Komplexität 29. November 2007 Turing-mächtige
Lösungsvorschlag Serie 2 Rekursion
(/) Lösungsvorschlag Serie Rekursion. Algorithmen-Paradigmen Es gibt verschiedene Algorithmen-Paradigmen, also grundsätzliche Arten, wie man einen Algorithmus formulieren kann. Im funktionalen Paradigma
Programmierung und Modellierung
Programmierung und Modellierung Terme, Suchbäume und Pattern Matching Martin Wirsing in Zusammenarbeit mit Moritz Hammer SS 2009 2 Inhalt Kap. 7 Benutzerdefinierte Datentypen 7. Binärer Suchbaum 8. Anwendung:
A N A L Y S I S I F Ü R T P H, U E ( ) 1. Übungstest (FR, ) (mit Lösung )
Institut für Analysis und Scientific Computing TU Wien W. Auzinger WS 05/6 A N A L Y S I S I F Ü R T P H, U E (03.088). Übungstest (FR, 6..05) (mit Lösung ) Aufgabe. a ) Wandeln Sie die periodische Dezimalzahl
Effiziente Algorithmen 2
Effiziente Algorithmen 2 Dr. Hanjo Täubig Lehrstuhl für Effiziente Algorithmen (Prof. Dr. Ernst W. Mayr) Institut für Informatik Technische Universität München Sommersemester 2009 Übersicht Algorithmen
Algorithmen und Datenstrukturen"
Lehrstuhl für Medieninformatik Universität Siegen Fakultät IV 9 Rekursion Version: WS 14/15 Fachgruppe Medieninformatik 9.1 9 Rekursion... Motivation: Rekursive Formulierung von Algorithmen führt in vielen
ALP I Induktion und Rekursion
ALP I Induktion und Rekursion WS 2012/2013 Vollständige Induktion (Mafi I) Die Vollständige Induktion ist eine mathematische Beweistechnik, die auf die Menge der natürlichen Zahlen spezialisiert ist. Vorgehensweise:
Algorithmen und Datenstrukturen"
Lehrstuhl für Medieninformatik Universität Siegen Fakultät IV 9 Rekursion Version: WS 14/15 Fachgruppe Medieninformatik 9.1 9 Rekursion... Motivation: Rekursive Formulierung von Algorithmen führt in vielen
Kapitel 1. Grundlegendes
Kapitel 1 Grundlegendes Abschnitt 1.4 Vollständige Induktion Charakterisierung der natürlichen Zahlen Die Menge N 0 = {0, 1, 2, 3,...} der natürlichen Zahlen läßt sich wie folgt charakterisieren: 1. 0
Beispiel: Fibonacci-Zahlen
Beispiel: Fibonacci-Zahlen Fibonacci Zahlen in der Natur Unendliche Reihe: 0, 1, 1, 2, 3, 5, 8, 13, 21, 34,... Fibonacci-Kaninchen: Pinienzapfen Blumenkohl L. P. Fibonacci (1170-1250) G. Zachmann Informatik
Strukturelle Rekursion und Induktion
Kapitel 2 Strukturelle Rekursion und Induktion Rekursion ist eine konstruktive Technik für die Beschreibung unendlicher Mengen (und damit insbesondere für die Beschreibung unendliche Funktionen). Induktion
Binary Decision Diagrams (Einführung)
Binary Decision Diagrams (Einführung) Binary Decision Diagrams (BDDs) sind bestimmte Graphen, die als Datenstruktur für die kompakte Darstellung von booleschen Funktionen benutzt werden. BDDs wurden von
Theoretische Informatik. Alphabete, Worte, Sprachen
Theoretische Informatik Alphabete, Worte, Sprachen Alphabete, Worte, Sprachen 1. Alphabete und Worte Definitionen, Beispiele Operationen mit Worten Induktionsbeweise 2. Sprachen Definition und Beispiele
12. Rekursion Grundlagen der Programmierung 1 (Java)
12. Rekursion Grundlagen der Programmierung 1 (Java) Fachhochschule Darmstadt Haardtring 100 D-64295 Darmstadt Prof. Dr. Bernhard Humm FH Darmstadt, 24. Januar 2006 Einordnung im Kontext der Vorlesung
Grundlagen: Algorithmen und Datenstrukturen
Technische Universität München Fakultät für Informatik Lehrstuhl für Effiziente Algorithmen Dr. Hanjo Täubig Tobias Lieber Sommersemester 2011 Übungsblatt 1 16. September 2011 Grundlagen: Algorithmen und
2.5 Listen. Kurzschreibweise: [42; 0; 16] Listen werden mithilfe von [] und :: konstruiert.
2.5 Listen Listen werden mithilfe von [] und :: konstruiert. Kurzschreibweise: [42; 0; 16] # let mt = [];; val mt : a list = [] # let l1 = 1::mt;; val l1 : int list = [1] # let l = [1;2;3];; val l : int
Kapitel 5: Applikative Programmierung
Kapitel 5: Applikative Programmierung In der applikativen Programmierung wird ein Programm als eine mathematische Funktion von Eingabe-in Ausgabewerte betrachtet. Das Ausführen eines Programms besteht
Der untypisierte Lambda-Kalkül als Programmiersprache
Der untypisierte Lambda-Kalkül als Programmiersprache November 29, 2006 betreut von Prof. Tobias Nipkow Einführung In den 1930er Jahren von Alonzo Church und Stephen Kleene eingeführt Der Lambda-Kalkül
Numerische Verfahren und Grundlagen der Analysis
Numerische Verfahren und Grundlagen der Analysis Rasa Steuding Hochschule RheinMain Wiesbaden Wintersemester 2011/12 R. Steuding (HS-RM) NumAna Wintersemester 2011/12 1 / 26 1. Folgen R. Steuding (HS-RM)
Programmieren 1 C Überblick
Programmieren 1 C Überblick 1. Einleitung 2. Graphische Darstellung von Algorithmen 3. Syntax und Semantik 4. Einstieg in C: Einfache Sprachkonstrukte und allgemeiner Programmaufbau 5. Skalare Standarddatentypen
! 1. Erste Schritte! 2. Einfache Datentypen! 3. Anweisungen und Kontrollstrukturen! 4. Verifikation! 5. Reihungen (Arrays) II.1.4. Verifikation - 1 -
! 1. Erste Schritte! 2. Einfache Datentypen! 3. Anweisungen und Kontrollstrukturen! 4. Verifikation! 5. Reihungen (Arrays) II.1.4. Verifikation - 1 - 4. Verifikation! Spezifikation: Angabe, was ein Programm
Einführung in die Programmierung für NF. Rückgabewerte, EBNF, Fallunterscheidung, Schleifen
Einführung in die Programmierung für NF Rückgabewerte, EBNF, Fallunterscheidung, Schleifen FUNKTIONEN UND PROZEDUREN 3 Rückgabewerte, EBNF, Fallunterscheidung, Schleifen 2 Funk@on und Prozedur Methoden
3. rekursive Definition einer Folge
3. rekursive Definition einer Folge In vielen Fällen ist eine explizite Formel für das n-te Glied nicht bekannt, es ist hingegen möglich, aus den gegebenen Gliedern das nächste Glied zu berechnen, d.h.
Induktive Beweise und rekursive Definitionen
Induktive Beweise und rekursive Definitionen Vorlesung Logik in der Informatik, HU Berlin 1. Übungsstunde Beweis durch vollständige Induktion über N Aufgabe 1 Zeige, dass für alle n N gilt: n 2 i = 2 n+1
Algorithmische Bioinformatik 1
Algorithmische Bioinformatik 1 Dr. Hanjo Täubig Lehrstuhl für Effiziente Algorithmen (Prof. Dr. Ernst W. Mayr) Institut für Informatik Technische Universität München Sommersemester 2009 Übersicht Algorithmen
Surjektive, injektive und bijektive Funktionen.
Kapitel 1: Aussagen, Mengen, Funktionen Surjektive, injektive und bijektive Funktionen. Definition. Sei f : M N eine Funktion. Dann heißt f surjektiv, falls die Gleichung f(x) = y für jedes y N mindestens
Induktion und Rekursion
Induktion und Rekursion Induktion und Rekursion Vorkurs Informatik Theoretischer Teil WS 013/14. Oktober 013 Vorkurs Informatik WS 013/14 1/1 Vollständige Induktion Vorkurs Informatik WS 013/14 /1 Ziel
1.2 Eigenschaften der ganzen Zahlen
Lineare Algebra I WS 2015/16 c Rudolf Scharlau 13 1.2 Eigenschaften der ganzen Zahlen Dieser Abschnitt handelt von den gewöhlichen ganzen Zahlen Z und ihren Verknüpfungen plus und mal. Man kann die natürlichen
Funktionale Programmierung. Funktionale Programmierung: Vorlesungsüberblick. Eigenschaften rein funktionaler Programmierung
Funktionale Programmierung 1 Funktionale Programmierung: Vorlesungsüberblick 1. Funktionale Programmierung Prinzipien funktionaler Programmierung Funktionale Programmierung in prozeduralen Sprachen Rekursive
Kapitel 5. Mathematische Semantik. 1 Motivation
Kapitel 5 Mathematische Semantik In diesem Kapitel werden wir nun eine weitere Technik zur Definition der Semantik einer Programmiersprache vorstellen: die mathematische bzw. denotationale Semantik. Außerdem
Einführung in die Informatik I
Einführung in die Informatik I Fortgeschrittene Rekursion Prof. Dr. Nikolaus Wulff Problematische Rekursion Mittels Rekursion lassen sich Spezifikationen recht elegant und einfach implementieren. Leider
Serie 4 2 = 10. ) ist). Dann gilt für alle n n 0
Serie 4. Aufgabe 336 Punkte) Gegeben seien zwei reelle Zahlenfolgen durch a n : 0 n, n N b n : n n, n N Bestimmen Sie die Grenzwerte a bzw. b der Folgen a n ) n N bzw. b n ) n N. Geben Sie jeweils zu gegebenem
Einführung in die Informatik 1
Einführung in die Informatik 1 Algorithmen und algorithmische Sprachkonzepte Sven Kosub AG Algorithmik/Theorie komplexer Systeme Universität Konstanz E 202 [email protected] Sprechstunde: Freitag,
Grundbegriffe der Informatik
Grundbegriffe der Informatik Einheit 4: Wörter (und vollständige Induktion) Thomas Worsch Universität Karlsruhe, Fakultät für Informatik Oktober 2008 1/29 Überblick Wörter Wörter Das leere Wort Mehr zu
Übersicht. Datenstrukturen und Algorithmen Vorlesung 5: Rekursionsgleichungen (K4) Übersicht. Binäre Suche. Joost-Pieter Katoen. 20.
Übersicht Datenstrukturen und Algorithmen Vorlesung 5: (K4) Joost-Pieter Katoen Lehrstuhl für Informatik 2 Software Modeling and Verification Group http://www-i2.informatik.rwth-aachen.de/i2/dsal12/ 20.
Kapitel 1. Grundlagen
Kapitel 1. Grundlagen 1.1. Mengen Georg Cantor 1895 Eine Menge ist die Zusammenfassung bestimmter, wohlunterschiedener Objekte unserer Anschauung oder unseres Denkens, wobei von jedem dieser Objekte eindeutig
Angewandte Mathematik und Programmierung
Angewandte Mathematik und Programmierung Einführung in das Konzept der objektorientierten Anwendungen zu mathematischen Rechnens WS 2013/14 Inhalt Übungserklärung* Beweis durch Vollständige Induktion 2
... direkte Umsetzung in Scheme. Prozeduren und von ihnen erzeugte Prozesse Gültigkeitsbereiche und Rekursion
Prozeduren und von ihnen erzeugte Prozesse Gültigkeitsbereiche und Rekursion Stand: Wir kennen Elementare ( primitive ) Operationen Kombination dieser Operationen Abstraktion zusammengesetzter Operationen
Theoretische Informatik SS 03 Übung 5
Theoretische Informatik SS 03 Übung 5 Aufgabe 1 Im Buch von Schöning ist auf S. 106-108 beschrieben, wie eine Turing-Maschine durch ein GOTO-Programm simuliert werden kann. Zeigen Sie, wie dabei die Anweisungen
Vollständige Induktion. Analysis I. Guofang Wang. Universität Freiburg
Universität Freiburg 26.10.2011 Vollständige Induktion Wir unterbrechen jetzt die Diskussion der Axiome der reellen Zahlen, um das Beweisverfahren der vollständigen Induktion kennenzulernen. Wir setzen
Grundlagen der Programmierung 2 (1.B)
Grundlagen der Programmierung 2 (1.B) Prof. Dr. Manfred Schmidt-Schauß Künstliche Intelligenz und Softwaretechnologie 27. April 2012 Beispiel: Aufrufhierarchie quadrat x = x*x quadratsumme x y = (quadrat
2. Imperative Programmierung und Berechenbarkeit - Registermaschinen -
2. Imperative Programmierung und Berechenbarkeit - Registermaschinen - 2.1 Definition 2.2 Loop-Programme 2.3 While Programme 2.4 While Programme und rekursive Funktionen Im Wesentlichen: Tafel! Maschinenmodell
1 Das Prinzip der vollständigen Induktion
1 1 Das Prinzip der vollständigen Induktion 1.1 Etwas Logik Wir nennen eine Formel oder einen Satz der Alltagssprache eine Aussage, wenn sie wahr oder falsch sein kann. Die Formeln 2 = 3, 2 4, 5 5 sind
Definition: (Kette, noethersche Ordnung)
3. Funktionales Programmieren 3.4 Semantik, Testen und Verifikation Definition: (Kette, noethersche Ordnung) Sei (M, ) eine Ordnung. Eine Folge ϕ : N M heißt eine (abzählbar unendliche) aufsteigende Kette,
