ALP I Induktion und Rekursion

Ähnliche Dokumente
Funktionale Programmierung ALP I. Die Natur rekursiver Funktionen SS Prof. Dr. Margarita Esponda. Prof. Dr.

Funktionale Programmierung ALP I. Funktionen höherer Ordnung. Teil 2 SS Prof. Dr. Margarita Esponda. Prof. Dr.

Programmieren in Haskell. Stefan Janssen. Strukturelle Rekursion. Universität Bielefeld AG Praktische Informatik. 10.

Theorie der Informatik

Programmieren in Haskell

Strukturelle Rekursion und Induktion

Informationsblatt Induktionsbeweis

Fachwissenschaftliche Grundlagen

Induktion und Rekursion

Programmierung 1 - Repetitorium

Formale Methoden in der Informatik Wiederholung klassische Logik Konkrete Datentypen (algebraische Strukturen) Abstrakte Datentypen

Zusammenfassung: Beweisverfahren

Vollständige Induktion

Vollständige Induktion

Vorlesung. Vollständige Induktion 1

3. Vortrag: Arithmetische Relationen und Gödelisierung

4. Kreis- und Wegeprobleme

Vollständige Induktion

Programmieren in Haskell Programmiermethodik

Induktion und Rekursion

Tutoraufgabe 1 (Suchen in Graphen):

( )= c+t(n-1) n>1. Stand der Vorlesung Komplexität von Algorithmen (Kapitel 3)

Einführung in die Informatik 2

Vollständige Induktion. Analysis I. Guofang Wang. Universität Freiburg

Stand der Vorlesung Komplexität von Algorithmen (Kapitel 3)

Was bisher geschah. deklarative Programmierung. funktionale Programmierung (Haskell):

aus der Bedingung/Annahme A folgt ein Widerspruch ), so ist A falsch!

Eulerweg, Eulerkreis. Das Königsberger Brückenproblem. Definition 3.1. Ein Weg, der jede Kante von G genau einmal

Lösung: InfA - Übungsblatt 07

Informatik-Seminar Thema 6: Bäume

Elementare Beweistechniken

Grundlagen der Mathematik

4. Jeder Knoten hat höchstens zwei Kinder, ein linkes und ein rechtes.

Kapitel 1. Grundlegendes

Abschnitt 18: Effizientes Suchen in Mengen

Beweistechniken. Vorkurs Informatik - SoSe April 2014

Vorkurs Beweisführung

Beispiel 27 (Beweis durch Widerspruch) Satz 28 3 ist irrational, d. h. Beweis: Widerspruchsannahme: 3 Q.

Lösungen zur Klausur zur Vorlesung. Mathematik für Informatiker I. (Dr. Frank Hoffmann) Wintersemester 2011/ Februar 2012

Vorkurs: Mathematik für Informatiker

Serie 2: Relationen, Abbildungen, Mächtigkeit, Gruppen

Agenda. 1 Einleitung. 2 Binäre Bäume. 3 Binäre Suchbäume. 4 Rose Trees. 5 Zusammenfassung & Ausblick. Haskell Bäume. Einleitung.

Induktive Beweise und rekursive Definitionen

WS 2009/10. Diskrete Strukturen

Algorithmen und Datenstrukturen"

Vorbereitungskurs Mathematik zum Sommersemester 2015 Aussagen, Logik und Beweistechniken

Vollständige Induktion

Grundbegriffe der Informatik Musterlösung zu Aufgabenblatt 1

1 Das Prinzip der vollständigen Induktion

Mathematische Grundlagen der Computerlinguistik

Praktische Informatik 3: Einführung in die Funktionale Programmierung Vorlesung vom : Rekursive Datentypen

Funktionale Programmierung. ALP I Lambda-Kalkül. Teil IVb WS 2012/2013. Prof. Dr. Margarita Esponda. Prof. Dr. Margarita Esponda

Vorkurs Mathematik und Informatik Mengen, natürliche Zahlen, Induktion

Diskrete Strukturen Kapitel 2: Grundlagen (Beweise)

: das Bild von ) unter der Funktion ist gegeben durch

Aufgaben und Lösungen zum Vorkurs Mathematik: Beweismethoden Für Mittwoch den

Induktive Beweise und rekursive Definitionen

Algorithmen und Programmieren 1 Funktionale Programmierung - Musterlösung zu Übung 8 -

9 Algebraische Datentypen

Logik und Beweise. Logik und Beweise. Vorsemesterkurs SoSe März 2016

Definition 77 Sei n N. Der Median (das mittlere Element) einer total geordneten Menge von n Elementen ist deren i-kleinstes Element, wobei n i =.

Logik und Beweise. Logik und Beweise. Vorsemesterkurs SoSe März 2015

Balancierte Bäume. Minimale Knotenanzahl von AVL-Bäumen. AVL-Bäume. Definition für "balanciert":

Aufgaben und Lösungen zum Vorkurs Mathematik: Beweismethoden Für Donnerstag den x > 1 3x > 3 3x + 3 > 6 6x + 3 > 3x + 6.

Elementare Beweismethoden

Freie Bäume und Wälder

Handout zu Beweistechniken

Elemente der Mathematik - Winter 2016/2017

Aufgabe 24 Die Wahrheitswerte von A A B und B sind immer gleich:

Clausthal C G C C G C. Informatik II Bäume. G. Zachmann Clausthal University, Germany Beispiele.

Lernziele: Ausgleichstechniken für binäre Bäume verstehen und einsetzen können.

Analysis I: Übungsblatt 1 Lösungen

mathe plus Aussagenlogik Seite 1

Surjektive, injektive und bijektive Funktionen.

Logik/Beweistechniken

Übung: Algorithmen und Datenstrukturen SS 2007

1. Grundlagen. Gliederung 1.1 Was ist Analysis? 1.2 Aussagen und Mengen 1.3 Natürliche Zahlen 1.4 Ganze Zahlen, rationale Zahlen

1. Grundlagen. 1.1 Was ist Analysis? 1.2 Aussagen und Mengen

INFORMATIK FÜR BIOLOGEN

Rekursion und Induktion

Beweistechniken. Beweistechniken. Vorsemesterkurs Informatik Theoretischer Teil Wintersemester 2013/ Oktober Vorsemesterkurs WS 2013/1

Algorithmen und Datenstrukturen

Grundlagen der Theoretischen Informatik

3 Die natürlichen Zahlen. Themen: Vollständige Induktion Varianten des Induktionsprinzips Induktion über den rekursiven Aufbau Die ganzen Zahlen

Lineare Algebra I. Probeklausur - Lösungshinweise

Diskrete Strukturen. Hausaufgabe 1 (5 Punkte) Hausaufgabe 2 (5 Punkte) Wintersemester 2007/08 Lösungsblatt Januar 2008

2 i. i=0. und beweisen Sie mittels eines geeigneten Verfahrens die Korrektheit der geschlossenen Form.

Fachwissenschaftliche Grundlagen

Übung Grundbegriffe der Informatik

Lösungen 4.Übungsblatt

Angewandte Mathematik und Programmierung

Transkript:

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: 1. Induktionsanfang Text Text Man zeigt die Behauptung für k = 1 bzw. k = 0 2. Induktionsschritt Man nimmt an, die Aussage sei für dass die Aussage für k+1 wahr ist. wahr und zeigt damit, Wenn beide Schritte erfolgreich durchgeführt wurden, ist die Behauptung für alle natürlichen Zahlen gezeigt.

Beispiel: Vollständige Induktion Vermutung: Die Summe der ersten n ungeraden Zahlen ist gleich n 2 n i=1 Motivation: 2(i 1) + 1 = n 2 n i=1 2i 1 = n 2 1 = 1 + 3 = 1 + 3 + 5 = 1 + 3 + 5 + 7 =... 1 2 2 2 3 2 4 2

Vollständige Induktion (Mafi I) Beweis per vollständiger Induktion: Induktionsanfang: für n = 1 Induktionsschritt: wir nehmen an, dass für n = k dann für n = k+1: k +1 i=1 1 i=1 2i 1 = 2 i 1 = 2 1 1 = 1 = 1 2 k i=1 k i=1 2i 1 = k 2 = k 2 + 2 k + 2 1 = k 2 + 2 k + 1 = (k + 1) 2 2i 1 + 2 (k + 1) 1 daraus folgt, dass die Vermutung für alle n gilt.

Baumeigenschaften und Vollständige Induktion Definition: a) Ein einzelner Blatt-Knoten ist ein Baum o b) Falls t 1, t 2,,t m Bäume sind, dann ist ihre Verknüpfung unter einem Knoten o auch ein Baum ( o t 1, t 2,,t m ) o t 1 t 2... t m Ein Baum ist balanciert, falls er ein Blatt oder von der Form ( o t 1, t 2,,t m ) ist, wobei t 1, t 2,,t m balanciert und von derselben Tiefe sind.

Behauptung: Induktion über Bäume Ein balancierter m-baum (Baum mit maximal m Kindern pro Knoten) mit m>1 und Tiefe n hat Motivation: Tiefe 0 o Tiefe 1 o o o Tiefe 2 Tiefe n t 1 t 2...t m... t 1 t 2... t m.

Induktion über Bäume 1. Induktionsanfang mit Tiefe n = 0 K = Knoten = 2. Induktionsannahme mit Tiefe n = k, K = mk +1 1 m 1 3. Induktionsschritt Tiefe n = k+1 K = mk +1 1 m 1 +m k m = mk +1 1+ (m k +1 ) (m 1) m 1 = mk +2 1 m 1 = m(k +1)+1 1 m 1 = mk +1 1 m 1 + mk +1 = mk +1 1+ m k +2 m k +1 m 1 K = mn+1 1 m 1

Vollständige Induktion Weitere Beispiele an der Tafel!

Vollständige Induktion factorial 0 = 1 factorial n = n * factorial (n-1) endrecfactorial n = fact_helper 1 n where fact_helper a 0 = a fact_helper a n = fact_helper (a*n) (n-1)? factorial = endrecfactorial

Zu beweisen ist: factorial = endrecfactorial Für unseren Beweis müssen wir folgende Eigenschaft der fact_helper-funktion per Induktion über n zeigen. fact_helper c n = c * factorial n e.1 Induktionsanfang: für n = 0 fact_helper c 0 = c = c * 1 = c * factorial 0 fact_helper.1 factorial.1 Induktionsannahme: fact_helper c k = c * factorial k Induktionsschritt: für n = k+1 fact_helper c (k+1) = fact_helper (c*(k+1)) k = c* (k+1) * factorial k = c * factorial (k+1)

fact_helper c n = c * factorial n e.1 factorial 0 = 1 factorial n = n * factorial (n-1). factorial.1. factorial.2 endrecfactorial n = fact_helper 1 n where fact_helper a 0 = a endrecfactorial.1 fact_helper a n = fact_helper (a*n) (n-1) fact_helper.1.. fact_helper.2 1. Induktionsanfang n = 0? factorial 0 = endrecfactorial 0 factorial 0 = 1 factorial.1 = factorial_helper 1 0 factorial_helper.1 = endrecfactorial 0 endrecfactorial.1

fact_helper c n = c * factorial n e.1 factorial 0 = 1 factorial n = n * factorial (n-1). factorial.1. factorial.2 endrecfactorial n = fact_helper 1 n where fact_helper a 0 = a endrecfactorial.1 fact_helper a n = fact_helper (a*n) (n-1) fact_helper.1.. fact_helper.2 Induktions-Annahme factorial k = endrecfactorial k 2. Induktionsschritt factorial (k+1) für n = k+1 = (k+1) * factorial k factorial.2 = fact_helper (1*(k+1)) k e.1 = fact_helper 1 (k+1) fact_helper.2 = endrecfactorial (k+1) endrecfactorial.1 factorial = endrecfactorial

Berechnung der Fibonacci-Zahlen 1. Lösung fib 0 = 0 fib.0 fib 1 = 1 fib.1 fib n = fib (n-2) + fib (n-1) fib.2 2. Lösung Endrekursive Funktion fib' n = quickfib 0 1 n where quickfib.1 quickfib a b 0 = a quickfib a b n = quickfib b (a+b) (n-1) quickfib.2

Zu beweisen ist: Vollständige Induktion? fib = fib' fib' n = quickfib 0 1 n fib.1 where quickfib.1 quickfib a b 0 = a quickfib a b n = quickfib b (a+b) (n-1) quickfib.2 Für unseren Beweis müssen wir folgende Eigenschaft der quickfib- Funktion per Induktion über n zeigen. quickfib (fib i) (fib (i+1)) n = fib (i+n) ze.1 Induktionsanfang: für n = 0 quickfib (fib i) (fib (i+1)) 0 = fib i quickfib.1 = fib (i+0)

Induktions-Annahme: n = k quickfib (fib i) (fib (i+1)) k = fib (i+k) Induktionsschritt: quickfib (fib i) (fib (i+1)) (k+1) = fib (i+(k+1)) quickfib (fib i) (fib (i+1)) (k+1)? quickfib.2 fib.2 = quickfib fib (i+1) (fib (i) + fib (i+1)) k = quickfib fib (i+1) (fib ((i+1)+1) k = fib ((i+1) + k) Induktions-Annahme = fib (i + (k+1)) quickfib (fib i) (fib (i+1)) n = fib (i+n) ze.1

Sind fib und fib' äquivalent? Behauptung:? fib = fib' fib' n = quickfib 0 1 n fib.1 where quickfib.1 quickfib a b 0 = a quickfib a b n = quickfib b (a+b) (n-1) quickfib.2 1. Induktionsanfang: n = 0 fib 0 = 0 fib.0 2. Induktionsanfang: n = 1 fib 1 = 1 fib' 0 = quickfib 0 1 0 fib.1 quickfib.2 fib' 1 = quickfib 0 1 1 fib'.1 = 0 quickfib.1 = quickfib 1 1 0 = 1 quickfib.1

Induktionsannahme: ze.1 quickfib (fib i) (fib (i+1)) n = fib (i+n) fib k = fib' k 3. Induktionsschritt:? fib (k+1) = fib' (k+1) fib' (k+1) = quickfib 0 1 (k+1) fib'.1 = quickfib (fib 0) (fib 1) (k+1) fib.0 und fib.1 = fib (0+(k+1)) aus ze.1 = fib (k+1) fib n = fib' n

Strukturelle Induktion Die Strukturelle Induktion ist eine allgemeinere Form der Vollständigen Induktion. Mit diesem mathematischen Beweisverfahren lassen sich Aussagen über die Elemente von rekursiv aufgebauten Datenmengen wie zum Beispiel Listen, Bäumen oder Graphen beweisen. Die Datenmengen, die damit behandelt werden, müssen aus einer endlichen Anzahl von Konstruktionsschritten aus Grundelementen entstehen.

Induktion über Listen Vorgehensweise: 1. Induktionsanfang Man zeigt eine bestimmte Eigenschaft P für die leere Liste [] 2. Induktionsschritt Man zeigt die Eigenschaft P(x:xs) unter der Annahme, dass P(xs) gilt.

Beispiel: Induktion über Listen Nehmen wir an, wir möchten zeigen, dass die Verkettung über Listen assoziativ ist. Definition von (++): (++) :: [a] -> [a] -> [a] (++) [] ys = ys (++) (x:xs) ys = x : (++) xs ys

Behauptung: Induktion über Listen Für alle Listen xs, zs und ys über den Datentyp a gilt die Assoziativität-Eigenschaft: (++) ((++) xs ys) zs = (++) xs ((++) ys zs) oder (xs ++ ys) ++ zs = xs ++ (ys ++ zs)

Definition von (++): Induktion über Listen (++) :: [a] -> [a] -> [a] (++) [] ys = ys (++).1 (++) (x:xs) ys = x : (++) xs ys (++).2 Behauptung: (++) ((++) xs ys) zs = (++) xs ((++) ys zs) Beweis: (Induktion über xs) Induktionsanfang: xs = [] (++) ((++) [] ys) zs = (++) ys zs (++).1 = (++) [] ((++) ys zs) (++).1

Induktionsschritt: Induktion über Listen (++) :: [a] -> [a] -> [a] (++) [] ys = ys (++).1 (++) (x:xs) ys = x : (++) xs ys (++).2? (++) (x:xs) ((++) ys zs) = (++) ((++) (x:xs) ys) zs (++) (x:xs) ((++) ys zs) = x : (++) xs ((++) ys zs) (++).2 = x : (++) ((++) xs ys) zs i.a. = (++) (x:((++) xs ys)) zs (++).2 = (++) ((++) (x:xs) ys) zs (++).2

Vollständige Induktion Weitere Beispiele an der Tafel!

Beispiele endrekursiver Funktionen Klassisches Beispiel einer nicht endrekursiven Definition ist: Die Standarddefinition der reverse-funktion rev :: [a] -> [a] rev [] = [] rev (x:xs) = rev xs ++ [x] (++) :: [a] -> [a] -> [a] (++) [] ys = ys (++) (x:xs) ys = x:(xs ++ ys) Eine effizientere Version von rev: quickrev xs = rev_helper xs [] where rev_helper [] ys = ys rev_helper (x:xs) ys = rev_helper xs (x:ys)

Sind rev und quickrev äquivalent? Zu beweisen ist: Für alle endlichen Listen xs :: [a] gilt: rev = quickrev

Beispiel: Strukturelle Induktion über Bäume data Tree a = Nil Leaf a Node (Tree a) (Tree a) Vorgehensweise: 1. Induktionsanfang 1.1 Wir zeigen eine bestimmte Eigenschaft P für den leeren Baum Nil 1.2 Wir zeigen die Eigenschaft P für ein Blatt (Leaf a) 2. Induktionsschritt Wir zeigen die Eigenschaft P für ( Node l r ) unter der Annahme, dass P für den Teilbaum l und für den Teilbaum r gilt.

Das allgemeine Induktionsschema data T a 1 a 2... a m = C 1 t 11 t 1n1 C 2 t 21 t 2n2... Vorgehensweise: C k t k1 t knk 1. Induktionsanfang 1.1 Wir zeigen eine bestimmte Eigenschaft P für alle Basis-Daten (alle C i ohne Rekursion) 2. Induktionsschritt Wir zeigen die Eigenschaft P für jede rekursive Definition (C i t i1 t ini ) unter der Annahme, dass P für t i1 t ini gilt.