+ All Categories
Home > Documents > Sommersemester 2019 - Goethe University...

Sommersemester 2019 - Goethe University...

Date post: 08-Dec-2020
Category:
Upload: others
View: 10 times
Download: 0 times
Share this document with a friend
493
Datenstrukturen 1 Sommersemester 2019 1 Basierend auf Folien von Prof. Georg Schnitger und Prof. Ulrich Meyer Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 1 / 79
Transcript
Page 1: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Datenstrukturen1

Sommersemester 2019

Herzlich willkommen!

1Basierend auf Folien von Prof. Georg Schnitger und Prof. Ulrich MeyerMartin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 1 / 79

Page 2: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Datenstrukturen1

Sommersemester 2019

Herzlich willkommen!

1Basierend auf Folien von Prof. Georg Schnitger und Prof. Ulrich MeyerMartin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 1 / 79

Page 3: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Wer ist wer?

Wir: Professur für Algorithmen und Komplexität

Martin Hoefer (Vorlesungen)R 115 – RMS 11–15, [email protected]

Niklas Hahn (Übungskoordination)R106 – RMS 11–15, [email protected]

Karl Fehrs, Marius Hagemann, Melvin Kallmayer, Rene Meier, AdrianMusella, Elias Pitschmann, Leonard Priester, Jonas Strauch, Tolga Tel,Yauheniya Zhdanovich (Tutoren)

algo.cs.uni-frankfurt.de→ Sommer 2019→ Datenstrukturen

Wer sind Sie?

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 2 / 79

Page 4: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Wer ist wer?

Wir: Professur für Algorithmen und Komplexität

Martin Hoefer (Vorlesungen)R 115 – RMS 11–15, [email protected]

Niklas Hahn (Übungskoordination)R106 – RMS 11–15, [email protected]

Karl Fehrs, Marius Hagemann, Melvin Kallmayer, Rene Meier, AdrianMusella, Elias Pitschmann, Leonard Priester, Jonas Strauch, Tolga Tel,Yauheniya Zhdanovich (Tutoren)

algo.cs.uni-frankfurt.de→ Sommer 2019→ Datenstrukturen

Wer sind Sie?

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 2 / 79

Page 5: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Wer ist wer?

Wir: Professur für Algorithmen und Komplexität

Martin Hoefer (Vorlesungen)R 115 – RMS 11–15, [email protected]

Niklas Hahn (Übungskoordination)R106 – RMS 11–15, [email protected]

Karl Fehrs, Marius Hagemann, Melvin Kallmayer, Rene Meier, AdrianMusella, Elias Pitschmann, Leonard Priester, Jonas Strauch, Tolga Tel,Yauheniya Zhdanovich (Tutoren)

algo.cs.uni-frankfurt.de→ Sommer 2019→ Datenstrukturen

Wer sind Sie?

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 2 / 79

Page 6: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Wer ist wer?

Wir: Professur für Algorithmen und Komplexität

Martin Hoefer (Vorlesungen)R 115 – RMS 11–15, [email protected]

Niklas Hahn (Übungskoordination)R106 – RMS 11–15, [email protected]

Karl Fehrs, Marius Hagemann, Melvin Kallmayer, Rene Meier, AdrianMusella, Elias Pitschmann, Leonard Priester, Jonas Strauch, Tolga Tel,Yauheniya Zhdanovich (Tutoren)

algo.cs.uni-frankfurt.de→ Sommer 2019→ Datenstrukturen

Wer sind Sie?

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 2 / 79

Page 7: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Wer ist wer?

Wir: Professur für Algorithmen und Komplexität

Martin Hoefer (Vorlesungen)R 115 – RMS 11–15, [email protected]

Niklas Hahn (Übungskoordination)R106 – RMS 11–15, [email protected]

Karl Fehrs, Marius Hagemann, Melvin Kallmayer, Rene Meier, AdrianMusella, Elias Pitschmann, Leonard Priester, Jonas Strauch, Tolga Tel,Yauheniya Zhdanovich (Tutoren)

algo.cs.uni-frankfurt.de→ Sommer 2019→ Datenstrukturen

Wer sind Sie?

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 2 / 79

Page 8: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Worum geht’s?

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 3 / 79

Page 9: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Abstrakte Datentypen und Datenstrukturen

Ein abstrakter Datentyp ist eine Sammlung von Operationen auf einer Menge vonObjekten. Eine Datenstruktur ist eine Implementation eines abstrakten Datentyps

Ein Beispiel für häufig auftretende Operationen:

das Einfügen und Entfernen von Schlüsseln nach ihrem Alter.

Wenn der jüngste Schlüssel zu entfernen ist:Wähle die Datenstruktur „Stack“.

Wenn der älteste Schlüssel zu entfernen ist:Wähle die Datenstruktur „Schlange“ (engl. „Queue“).

Wenn Schlüssel Prioritäten besitzen und der Schlüssel mit höchster Priorität zuentfernen ist: Wähle die Datenstruktur Heap.

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 4 / 79

Page 10: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Abstrakte Datentypen und Datenstrukturen

Ein abstrakter Datentyp ist eine Sammlung von Operationen auf einer Menge vonObjekten. Eine Datenstruktur ist eine Implementation eines abstrakten Datentyps

Ein Beispiel für häufig auftretende Operationen:

das Einfügen und Entfernen von Schlüsseln nach ihrem Alter.

Wenn der jüngste Schlüssel zu entfernen ist:Wähle die Datenstruktur

„Stack“.

Wenn der älteste Schlüssel zu entfernen ist:Wähle die Datenstruktur „Schlange“ (engl. „Queue“).

Wenn Schlüssel Prioritäten besitzen und der Schlüssel mit höchster Priorität zuentfernen ist: Wähle die Datenstruktur Heap.

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 4 / 79

Page 11: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Abstrakte Datentypen und Datenstrukturen

Ein abstrakter Datentyp ist eine Sammlung von Operationen auf einer Menge vonObjekten. Eine Datenstruktur ist eine Implementation eines abstrakten Datentyps

Ein Beispiel für häufig auftretende Operationen:

das Einfügen und Entfernen von Schlüsseln nach ihrem Alter.

Wenn der jüngste Schlüssel zu entfernen ist:Wähle die Datenstruktur „Stack“.

Wenn der älteste Schlüssel zu entfernen ist:Wähle die Datenstruktur „Schlange“ (engl. „Queue“).

Wenn Schlüssel Prioritäten besitzen und der Schlüssel mit höchster Priorität zuentfernen ist: Wähle die Datenstruktur Heap.

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 4 / 79

Page 12: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Abstrakte Datentypen und Datenstrukturen

Ein abstrakter Datentyp ist eine Sammlung von Operationen auf einer Menge vonObjekten. Eine Datenstruktur ist eine Implementation eines abstrakten Datentyps

Ein Beispiel für häufig auftretende Operationen:

das Einfügen und Entfernen von Schlüsseln nach ihrem Alter.

Wenn der jüngste Schlüssel zu entfernen ist:Wähle die Datenstruktur „Stack“.

Wenn der älteste Schlüssel zu entfernen ist:Wähle die Datenstruktur

„Schlange“ (engl. „Queue“).

Wenn Schlüssel Prioritäten besitzen und der Schlüssel mit höchster Priorität zuentfernen ist: Wähle die Datenstruktur Heap.

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 4 / 79

Page 13: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Abstrakte Datentypen und Datenstrukturen

Ein abstrakter Datentyp ist eine Sammlung von Operationen auf einer Menge vonObjekten. Eine Datenstruktur ist eine Implementation eines abstrakten Datentyps

Ein Beispiel für häufig auftretende Operationen:

das Einfügen und Entfernen von Schlüsseln nach ihrem Alter.

Wenn der jüngste Schlüssel zu entfernen ist:Wähle die Datenstruktur „Stack“.

Wenn der älteste Schlüssel zu entfernen ist:Wähle die Datenstruktur „Schlange“ (engl. „Queue“).

Wenn Schlüssel Prioritäten besitzen und der Schlüssel mit höchster Priorität zuentfernen ist: Wähle die Datenstruktur Heap.

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 4 / 79

Page 14: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Abstrakte Datentypen und Datenstrukturen

Ein abstrakter Datentyp ist eine Sammlung von Operationen auf einer Menge vonObjekten. Eine Datenstruktur ist eine Implementation eines abstrakten Datentyps

Ein Beispiel für häufig auftretende Operationen:

das Einfügen und Entfernen von Schlüsseln nach ihrem Alter.

Wenn der jüngste Schlüssel zu entfernen ist:Wähle die Datenstruktur „Stack“.

Wenn der älteste Schlüssel zu entfernen ist:Wähle die Datenstruktur „Schlange“ (engl. „Queue“).

Wenn Schlüssel Prioritäten besitzen und der Schlüssel mit höchster Priorität zuentfernen ist: Wähle die Datenstruktur

Heap.

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 4 / 79

Page 15: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Abstrakte Datentypen und Datenstrukturen

Ein abstrakter Datentyp ist eine Sammlung von Operationen auf einer Menge vonObjekten. Eine Datenstruktur ist eine Implementation eines abstrakten Datentyps

Ein Beispiel für häufig auftretende Operationen:

das Einfügen und Entfernen von Schlüsseln nach ihrem Alter.

Wenn der jüngste Schlüssel zu entfernen ist:Wähle die Datenstruktur „Stack“.

Wenn der älteste Schlüssel zu entfernen ist:Wähle die Datenstruktur „Schlange“ (engl. „Queue“).

Wenn Schlüssel Prioritäten besitzen und der Schlüssel mit höchster Priorität zuentfernen ist: Wähle die Datenstruktur Heap.

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 4 / 79

Page 16: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Worum geht’s?

Gegeben sei ein abstrakter Datentyp. Entwerfe eine möglichst effiziente Datenstruktur.

Welche abstrakten Datentypen?

I Stack:Einfügen und Entfernen des jüngsten Schlüssels.

I Warteschlange:Einfügen und Entfernen des ältesten Schlüssels.

I Prioritätswarteschlange:Einfügen und Entfernen des wichtigsten Schlüssels.

I Wörterbuch:Einfügen, Entfernen (eines beliebigen Schlüssels) und Suche.

Was heißt Effizienz?I Minimiere die Laufzeit und den Speicherplatzverbrauch der einzelnen

Operationen.

I Wie skalieren die Ressourcen mit wachsender Eingabelänge?→ Asymptotische Analyse von Laufzeit und Speicherplatzverbrauch

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 5 / 79

Page 17: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Worum geht’s?

Gegeben sei ein abstrakter Datentyp. Entwerfe eine möglichst effiziente Datenstruktur.

Welche abstrakten Datentypen?I Stack:

Einfügen und Entfernen des jüngsten Schlüssels.I Warteschlange:

Einfügen und Entfernen des ältesten Schlüssels.I Prioritätswarteschlange:

Einfügen und Entfernen des wichtigsten Schlüssels.I Wörterbuch:

Einfügen, Entfernen (eines beliebigen Schlüssels) und Suche.

Was heißt Effizienz?I Minimiere die Laufzeit und den Speicherplatzverbrauch der einzelnen

Operationen.

I Wie skalieren die Ressourcen mit wachsender Eingabelänge?→ Asymptotische Analyse von Laufzeit und Speicherplatzverbrauch

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 5 / 79

Page 18: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Worum geht’s?

Gegeben sei ein abstrakter Datentyp. Entwerfe eine möglichst effiziente Datenstruktur.

Welche abstrakten Datentypen?I Stack:

Einfügen und Entfernen des jüngsten Schlüssels.I Warteschlange:

Einfügen und Entfernen des ältesten Schlüssels.I Prioritätswarteschlange:

Einfügen und Entfernen des wichtigsten Schlüssels.I Wörterbuch:

Einfügen, Entfernen (eines beliebigen Schlüssels) und Suche.

Was heißt Effizienz?

I Minimiere die Laufzeit und den Speicherplatzverbrauch der einzelnenOperationen.

I Wie skalieren die Ressourcen mit wachsender Eingabelänge?→ Asymptotische Analyse von Laufzeit und Speicherplatzverbrauch

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 5 / 79

Page 19: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Worum geht’s?

Gegeben sei ein abstrakter Datentyp. Entwerfe eine möglichst effiziente Datenstruktur.

Welche abstrakten Datentypen?I Stack:

Einfügen und Entfernen des jüngsten Schlüssels.I Warteschlange:

Einfügen und Entfernen des ältesten Schlüssels.I Prioritätswarteschlange:

Einfügen und Entfernen des wichtigsten Schlüssels.I Wörterbuch:

Einfügen, Entfernen (eines beliebigen Schlüssels) und Suche.

Was heißt Effizienz?I Minimiere die Laufzeit und den Speicherplatzverbrauch der einzelnen

Operationen.

I Wie skalieren die Ressourcen mit wachsender Eingabelänge?→ Asymptotische Analyse von Laufzeit und Speicherplatzverbrauch

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 5 / 79

Page 20: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Worum geht’s?

Gegeben sei ein abstrakter Datentyp. Entwerfe eine möglichst effiziente Datenstruktur.

Welche abstrakten Datentypen?I Stack:

Einfügen und Entfernen des jüngsten Schlüssels.I Warteschlange:

Einfügen und Entfernen des ältesten Schlüssels.I Prioritätswarteschlange:

Einfügen und Entfernen des wichtigsten Schlüssels.I Wörterbuch:

Einfügen, Entfernen (eines beliebigen Schlüssels) und Suche.

Was heißt Effizienz?I Minimiere die Laufzeit und den Speicherplatzverbrauch der einzelnen

Operationen.

I Wie skalieren die Ressourcen mit wachsender Eingabelänge?→ Asymptotische Analyse von Laufzeit und Speicherplatzverbrauch

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 5 / 79

Page 21: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Worauf wird aufgebaut?

(1) Diskrete Modellierung (bzw. Vorkurs):I Vollständige Induktion und allgemeine Beweismethoden.I Siehe hierzu auch die Seite des Vorkurs Informatik mit Folien zu

Beweistechniken, Induktion und Rekursion undAsymptotik und Laufzeitanalyse.

(2) Grundlagen der Programmierung 1:I Kenntnis der elementaren Datenstrukturen

(3) Lineare Algebra und Analysis:- Logarithmen,- Grenzwerte und- asymptotische Notation.

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 6 / 79

Page 22: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Literatur (1/2)

- Skript und Folien zur Vorlesung finden Sie auf der Webseite derVeranstaltung.

- Kapitel 3-5, 10-12 und 18 in T.H. Cormen, C.E. Leiserson, R.L. Rivest, C.Stein, “Introduction to Algorithms”, second edition, 1990.

- M. T. Goodrich, R. Tamassia, D. M. Mount, “Data Structures andAlgorithms in C++”, 2003.

- M. Dietzfelbinger, K. Mehlhorn, P. Sanders, “Algorithmen undDatenstrukturen, die Grundwerkzeuge”, Springer Vieweg, 2014.

- R. Sedgewick, “Algorithmen in C++”, Kapitel 1-7 im Grundlagenteil.- Kapitel 1-3 in J. Kleinberg, E. Tardos, “Algorithm Design” (GL-1

Textbuch), Pearson New International Edition, 2013.- Für mathematische Grundlagen:

I N. Schweikardt, Diskrete Modellierung, eine Einführung in grundlegendeBegriffe und Methoden der Theoretischen Informatik, 2013. (Kapitel 2,5)

I D. Grieser, Mathematisches Problemlösen und Beweisen, eineEntdeckungsreise in die Mathematik, Springer Vieweg 2012.

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 7 / 79

Page 23: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Literatur (2/2)

Sämtliche Textbücher befinden sich auch in der Bibliothek im

Semesterapparat der Veranstaltung “Datenstrukturen”.

Die Bibliothek befindet sich im 1. Stock in der Robert-Mayer Strasse 11-15.

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 8 / 79

Page 24: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Organisatorisches

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 9 / 79

Page 25: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Übungsbetrieb

Alle Details auf der Webseite!Anmeldung zu Übungen im AUGE-System bis Donnerstag, 18.04.Übungsblätter erscheinen im 2-Wochen Rhythmus auf der Webseite.Lösungen (zusammengetackert, mit vollem Namen, Matrikelnummer, undNummer der Übungsgruppe versehen) sind nach 2-wöchigerBearbeitungszeit abzugeben:

I Entweder im H V vor Beginn der Vorlesung oderI in den Briefkasten einwerfen zwischen Büros 114 und 115,

Robert-Mayer-Str. 11-15.

Übungsgruppen treffen sich ab nächste Woche Dienstag, 23.04.Bis Ende April freie Wahl der Gruppe, ab Mai gemäß Zuordnung.Heute Ausgabe 0. Übungsblatt (ohne Abgabe) und 1. Übungsblatt(Abgabe bis 30.04.)Übungsaufgaben sollten mit Anderen besprochen werden, aberLösungen müssen eigenständig aufgeschrieben werden!

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 10 / 79

Page 26: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Übungsbetrieb

Alle Details auf der Webseite!Anmeldung zu Übungen im AUGE-System bis Donnerstag, 18.04.Übungsblätter erscheinen im 2-Wochen Rhythmus auf der Webseite.Lösungen (zusammengetackert, mit vollem Namen, Matrikelnummer, undNummer der Übungsgruppe versehen) sind nach 2-wöchigerBearbeitungszeit abzugeben:

I Entweder im H V vor Beginn der Vorlesung oderI in den Briefkasten einwerfen zwischen Büros 114 und 115,

Robert-Mayer-Str. 11-15.

Übungsgruppen treffen sich ab nächste Woche Dienstag, 23.04.Bis Ende April freie Wahl der Gruppe, ab Mai gemäß Zuordnung.

Heute Ausgabe 0. Übungsblatt (ohne Abgabe) und 1. Übungsblatt(Abgabe bis 30.04.)Übungsaufgaben sollten mit Anderen besprochen werden, aberLösungen müssen eigenständig aufgeschrieben werden!

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 10 / 79

Page 27: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Übungsbetrieb

Alle Details auf der Webseite!Anmeldung zu Übungen im AUGE-System bis Donnerstag, 18.04.Übungsblätter erscheinen im 2-Wochen Rhythmus auf der Webseite.Lösungen (zusammengetackert, mit vollem Namen, Matrikelnummer, undNummer der Übungsgruppe versehen) sind nach 2-wöchigerBearbeitungszeit abzugeben:

I Entweder im H V vor Beginn der Vorlesung oderI in den Briefkasten einwerfen zwischen Büros 114 und 115,

Robert-Mayer-Str. 11-15.

Übungsgruppen treffen sich ab nächste Woche Dienstag, 23.04.Bis Ende April freie Wahl der Gruppe, ab Mai gemäß Zuordnung.Heute Ausgabe 0. Übungsblatt (ohne Abgabe) und 1. Übungsblatt(Abgabe bis 30.04.)

Übungsaufgaben sollten mit Anderen besprochen werden, aberLösungen müssen eigenständig aufgeschrieben werden!

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 10 / 79

Page 28: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Übungsbetrieb

Alle Details auf der Webseite!Anmeldung zu Übungen im AUGE-System bis Donnerstag, 18.04.Übungsblätter erscheinen im 2-Wochen Rhythmus auf der Webseite.Lösungen (zusammengetackert, mit vollem Namen, Matrikelnummer, undNummer der Übungsgruppe versehen) sind nach 2-wöchigerBearbeitungszeit abzugeben:

I Entweder im H V vor Beginn der Vorlesung oderI in den Briefkasten einwerfen zwischen Büros 114 und 115,

Robert-Mayer-Str. 11-15.

Übungsgruppen treffen sich ab nächste Woche Dienstag, 23.04.Bis Ende April freie Wahl der Gruppe, ab Mai gemäß Zuordnung.Heute Ausgabe 0. Übungsblatt (ohne Abgabe) und 1. Übungsblatt(Abgabe bis 30.04.)Übungsaufgaben sollten mit Anderen besprochen werden, aberLösungen müssen eigenständig aufgeschrieben werden!

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 10 / 79

Page 29: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Klausur

Hauptklausur: Montag, 22. Juli 2019, ab 9:00 Uhr.

Zweitklausur: Dienstag, 01. Oktober 2019, ab 9:00 Uhr.

Die in den Übungen erreichten Punkte werden mit einem Maximalgewichtvon 10% zu den Klausurpunkten hinzugezählt:

Werden in der Klausur x% und in den Übungen y% erzielt,dann ist z = x + (y/10) die Gesamtpunktzahl.

Die Veranstaltung ist bestanden, wenn die Klausur bestanden ist(i.d.R. wenn x ≥ 50).

Wenn die Klausur bestanden ist, hängt die Note von derGesamtpunktzahl z ab.

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 11 / 79

Page 30: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Bevor es losgeht . . .

Vor- und Nachbereitung der VorlesungenUnbedingt am Übungsbetrieb teilnehmen und Aufgaben bearbeiten!

Von den Teilnehmern, die 50% der Übungspunkte erreichen, bestehennahezu 100% auch die Klausur!

Teamarbeit vs. EinzelkämpferStudieren lernen – der richtige Umgang mit den Freiheiten

Sprechstunde vereinbaren per Email.Oder versuchen Sie es auf gut Glück (Raum 115).

Helfen Sie uns durch

ihre Fragen,Kommentareund Antworten!

Die Veranstaltung kann nur durch Interaktion interessant werden.

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 12 / 79

Page 31: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Bevor es losgeht . . .

Vor- und Nachbereitung der VorlesungenUnbedingt am Übungsbetrieb teilnehmen und Aufgaben bearbeiten!

Von den Teilnehmern, die 50% der Übungspunkte erreichen, bestehennahezu 100% auch die Klausur!

Teamarbeit vs. EinzelkämpferStudieren lernen – der richtige Umgang mit den Freiheiten

Sprechstunde vereinbaren per Email.Oder versuchen Sie es auf gut Glück (Raum 115).

Helfen Sie uns durch

ihre Fragen,Kommentareund Antworten!

Die Veranstaltung kann nur durch Interaktion interessant werden.

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 12 / 79

Page 32: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Bevor es losgeht . . .

Vor- und Nachbereitung der VorlesungenUnbedingt am Übungsbetrieb teilnehmen und Aufgaben bearbeiten!

Von den Teilnehmern, die 50% der Übungspunkte erreichen, bestehennahezu 100% auch die Klausur!

Teamarbeit vs. EinzelkämpferStudieren lernen – der richtige Umgang mit den Freiheiten

Sprechstunde vereinbaren per Email.Oder versuchen Sie es auf gut Glück (Raum 115).

Helfen Sie uns durch

ihre Fragen,Kommentareund Antworten!

Die Veranstaltung kann nur durch Interaktion interessant werden.

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 12 / 79

Page 33: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Mathematische Grundlagen

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 13 / 79

Page 34: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Vollständige Induktion

Ziel: Zeige die Aussage A(n) für alle natürlichen Zahlen n ≥ n0.

Die Methode der vollständigen Induktion

1. Zeige im INDUKTIONSANFANG die Aussage A(n0) und2. im INDUKTIONSSCHRITT die Implikation

(A(n0) ∧ A(n0 + 1) ∧ · · · ∧ A(n))⇒ A(n + 1)

für jede Zahl n mit n ≥ n0.

A(n0) ∧ A(n0 + 1) ∧ · · · ∧ A(n) heißt Induktionsannahme.

Häufig nimmt man „nur“ die Aussage A(n) in der Induktionsannahme an.

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 14 / 79

Page 35: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Vollständige Induktion

Ziel: Zeige die Aussage A(n) für alle natürlichen Zahlen n ≥ n0.

Die Methode der vollständigen Induktion

1. Zeige im INDUKTIONSANFANG die Aussage A(n0) und

2. im INDUKTIONSSCHRITT die Implikation

(A(n0) ∧ A(n0 + 1) ∧ · · · ∧ A(n))⇒ A(n + 1)

für jede Zahl n mit n ≥ n0.

A(n0) ∧ A(n0 + 1) ∧ · · · ∧ A(n) heißt Induktionsannahme.

Häufig nimmt man „nur“ die Aussage A(n) in der Induktionsannahme an.

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 14 / 79

Page 36: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Vollständige Induktion

Ziel: Zeige die Aussage A(n) für alle natürlichen Zahlen n ≥ n0.

Die Methode der vollständigen Induktion

1. Zeige im INDUKTIONSANFANG die Aussage A(n0) und2. im INDUKTIONSSCHRITT die Implikation

(A(n0) ∧ A(n0 + 1) ∧ · · · ∧ A(n))⇒ A(n + 1)

für jede Zahl n mit n ≥ n0.

A(n0) ∧ A(n0 + 1) ∧ · · · ∧ A(n) heißt Induktionsannahme.

Häufig nimmt man „nur“ die Aussage A(n) in der Induktionsannahme an.

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 14 / 79

Page 37: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Vollständige Induktion

Ziel: Zeige die Aussage A(n) für alle natürlichen Zahlen n ≥ n0.

Die Methode der vollständigen Induktion

1. Zeige im INDUKTIONSANFANG die Aussage A(n0) und2. im INDUKTIONSSCHRITT die Implikation

(A(n0) ∧ A(n0 + 1) ∧ · · · ∧ A(n))⇒ A(n + 1)

für jede Zahl n mit n ≥ n0.

A(n0) ∧ A(n0 + 1) ∧ · · · ∧ A(n) heißt Induktionsannahme.

Häufig nimmt man „nur“ die Aussage A(n) in der Induktionsannahme an.

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 14 / 79

Page 38: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Wiederholung? (1) demogr.

Mathematische Grundlagen:

Gesucht ist eine kurze Formel fürn∑

i=1

i

(1) n(n−1)2

(2) n(n+1)2

(3) n2−12

(4) Hab ich mal irgendwann gelernt...(5) Zahlen als Buchstaben!?!?

Auflösung: (2) n(n+1)2 (wie beweist man das?)

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 15 / 79

Page 39: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Wiederholung? (1) demogr.

Mathematische Grundlagen:

Gesucht ist eine kurze Formel fürn∑

i=1

i

(1) n(n−1)2

(2) n(n+1)2

(3) n2−12

(4) Hab ich mal irgendwann gelernt...(5) Zahlen als Buchstaben!?!?

Auflösung:

(2) n(n+1)2 (wie beweist man das?)

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 15 / 79

Page 40: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Wiederholung? (1) demogr.

Mathematische Grundlagen:

Gesucht ist eine kurze Formel fürn∑

i=1

i

(1) n(n−1)2

(2) n(n+1)2

(3) n2−12

(4) Hab ich mal irgendwann gelernt...(5) Zahlen als Buchstaben!?!?

Auflösung: (2) n(n+1)2

(wie beweist man das?)

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 15 / 79

Page 41: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Wiederholung? (1) demogr.

Mathematische Grundlagen:

Gesucht ist eine kurze Formel fürn∑

i=1

i

(1) n(n−1)2

(2) n(n+1)2

(3) n2−12

(4) Hab ich mal irgendwann gelernt...(5) Zahlen als Buchstaben!?!?

Auflösung: (2) n(n+1)2 (wie beweist man das?)

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 15 / 79

Page 42: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Die Summe der ersten n Zahlen

n∑i=1

i = 1 + 2 + . . .+ n =n · (n + 1)

2.

Vollständige Induktion nach n:Induktionsanfang für n = 1:

∑1i=1 i = 1 und 1·(1+1)

2 = 1. XInduktionsschritt von n auf n + 1:

I Wir nehmen an, dass∑n

i=1 i = n·(n+1)2 gilt.

I∑n+1

i=1 i =∑n

i=1 i + (n + 1) = n·(n+1)2 + (n + 1) = n·(n+1)+2·(n+1)

2 = (n+2)·(n+1)2 =

(n+1)·(n+2)2 und das war zu zeigen. X

Ein direkter Beweis:I Betrachte ein Gitter mit n Zeilen und n Spalten: n2 Gitterpunkte.I Wir müssen die Gitterpunkte unterhalb der Hauptdiagonale und auf der

Hauptdiagonale zählen.I Die Hauptdiagonale besitzt n Gitterpunkte und unterhalb der

Hauptdiagonale befindet sich die Hälfte der verbleibenden n2 − nGitterpunkte. Also folgt

∑ni=1 i = n + n2−n

2 = n·(n+1)2 .

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 16 / 79

Page 43: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Die Summe der ersten n Zahlen

n∑i=1

i = 1 + 2 + . . .+ n =n · (n + 1)

2.

Vollständige Induktion nach n:

Induktionsanfang für n = 1:∑1

i=1 i = 1 und 1·(1+1)2 = 1. X

Induktionsschritt von n auf n + 1:I Wir nehmen an, dass

∑ni=1 i = n·(n+1)

2 gilt.I∑n+1

i=1 i =∑n

i=1 i + (n + 1) = n·(n+1)2 + (n + 1) = n·(n+1)+2·(n+1)

2 = (n+2)·(n+1)2 =

(n+1)·(n+2)2 und das war zu zeigen. X

Ein direkter Beweis:I Betrachte ein Gitter mit n Zeilen und n Spalten: n2 Gitterpunkte.I Wir müssen die Gitterpunkte unterhalb der Hauptdiagonale und auf der

Hauptdiagonale zählen.I Die Hauptdiagonale besitzt n Gitterpunkte und unterhalb der

Hauptdiagonale befindet sich die Hälfte der verbleibenden n2 − nGitterpunkte. Also folgt

∑ni=1 i = n + n2−n

2 = n·(n+1)2 .

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 16 / 79

Page 44: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Die Summe der ersten n Zahlen

n∑i=1

i = 1 + 2 + . . .+ n =n · (n + 1)

2.

Vollständige Induktion nach n:Induktionsanfang für n = 1:

∑1i=1 i = 1 und 1·(1+1)

2 = 1. XInduktionsschritt von n auf n + 1:

I Wir nehmen an, dass∑n

i=1 i = n·(n+1)2 gilt.

I∑n+1

i=1 i =∑n

i=1 i + (n + 1) = n·(n+1)2 + (n + 1) = n·(n+1)+2·(n+1)

2 = (n+2)·(n+1)2 =

(n+1)·(n+2)2 und das war zu zeigen. X

Ein direkter Beweis:I Betrachte ein Gitter mit n Zeilen und n Spalten: n2 Gitterpunkte.I Wir müssen die Gitterpunkte unterhalb der Hauptdiagonale und auf der

Hauptdiagonale zählen.I Die Hauptdiagonale besitzt n Gitterpunkte und unterhalb der

Hauptdiagonale befindet sich die Hälfte der verbleibenden n2 − nGitterpunkte. Also folgt

∑ni=1 i = n + n2−n

2 = n·(n+1)2 .

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 16 / 79

Page 45: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Die Summe der ersten n Zahlen

n∑i=1

i = 1 + 2 + . . .+ n =n · (n + 1)

2.

Vollständige Induktion nach n:Induktionsanfang für n = 1:

∑1i=1 i = 1

und 1·(1+1)2 = 1. X

Induktionsschritt von n auf n + 1:I Wir nehmen an, dass

∑ni=1 i = n·(n+1)

2 gilt.I∑n+1

i=1 i =∑n

i=1 i + (n + 1) = n·(n+1)2 + (n + 1) = n·(n+1)+2·(n+1)

2 = (n+2)·(n+1)2 =

(n+1)·(n+2)2 und das war zu zeigen. X

Ein direkter Beweis:I Betrachte ein Gitter mit n Zeilen und n Spalten: n2 Gitterpunkte.I Wir müssen die Gitterpunkte unterhalb der Hauptdiagonale und auf der

Hauptdiagonale zählen.I Die Hauptdiagonale besitzt n Gitterpunkte und unterhalb der

Hauptdiagonale befindet sich die Hälfte der verbleibenden n2 − nGitterpunkte. Also folgt

∑ni=1 i = n + n2−n

2 = n·(n+1)2 .

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 16 / 79

Page 46: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Die Summe der ersten n Zahlen

n∑i=1

i = 1 + 2 + . . .+ n =n · (n + 1)

2.

Vollständige Induktion nach n:Induktionsanfang für n = 1:

∑1i=1 i = 1 und 1·(1+1)

2 = 1.

XInduktionsschritt von n auf n + 1:

I Wir nehmen an, dass∑n

i=1 i = n·(n+1)2 gilt.

I∑n+1

i=1 i =∑n

i=1 i + (n + 1) = n·(n+1)2 + (n + 1) = n·(n+1)+2·(n+1)

2 = (n+2)·(n+1)2 =

(n+1)·(n+2)2 und das war zu zeigen. X

Ein direkter Beweis:I Betrachte ein Gitter mit n Zeilen und n Spalten: n2 Gitterpunkte.I Wir müssen die Gitterpunkte unterhalb der Hauptdiagonale und auf der

Hauptdiagonale zählen.I Die Hauptdiagonale besitzt n Gitterpunkte und unterhalb der

Hauptdiagonale befindet sich die Hälfte der verbleibenden n2 − nGitterpunkte. Also folgt

∑ni=1 i = n + n2−n

2 = n·(n+1)2 .

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 16 / 79

Page 47: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Die Summe der ersten n Zahlen

n∑i=1

i = 1 + 2 + . . .+ n =n · (n + 1)

2.

Vollständige Induktion nach n:Induktionsanfang für n = 1:

∑1i=1 i = 1 und 1·(1+1)

2 = 1. X

Induktionsschritt von n auf n + 1:I Wir nehmen an, dass

∑ni=1 i = n·(n+1)

2 gilt.I∑n+1

i=1 i =∑n

i=1 i + (n + 1) = n·(n+1)2 + (n + 1) = n·(n+1)+2·(n+1)

2 = (n+2)·(n+1)2 =

(n+1)·(n+2)2 und das war zu zeigen. X

Ein direkter Beweis:I Betrachte ein Gitter mit n Zeilen und n Spalten: n2 Gitterpunkte.I Wir müssen die Gitterpunkte unterhalb der Hauptdiagonale und auf der

Hauptdiagonale zählen.I Die Hauptdiagonale besitzt n Gitterpunkte und unterhalb der

Hauptdiagonale befindet sich die Hälfte der verbleibenden n2 − nGitterpunkte. Also folgt

∑ni=1 i = n + n2−n

2 = n·(n+1)2 .

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 16 / 79

Page 48: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Die Summe der ersten n Zahlen

n∑i=1

i = 1 + 2 + . . .+ n =n · (n + 1)

2.

Vollständige Induktion nach n:Induktionsanfang für n = 1:

∑1i=1 i = 1 und 1·(1+1)

2 = 1. XInduktionsschritt von n auf n + 1:

I Wir nehmen an, dass∑n

i=1 i = n·(n+1)2 gilt.

I∑n+1

i=1 i =∑n

i=1 i + (n + 1) = n·(n+1)2 + (n + 1) = n·(n+1)+2·(n+1)

2 = (n+2)·(n+1)2 =

(n+1)·(n+2)2 und das war zu zeigen. X

Ein direkter Beweis:I Betrachte ein Gitter mit n Zeilen und n Spalten: n2 Gitterpunkte.I Wir müssen die Gitterpunkte unterhalb der Hauptdiagonale und auf der

Hauptdiagonale zählen.I Die Hauptdiagonale besitzt n Gitterpunkte und unterhalb der

Hauptdiagonale befindet sich die Hälfte der verbleibenden n2 − nGitterpunkte. Also folgt

∑ni=1 i = n + n2−n

2 = n·(n+1)2 .

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 16 / 79

Page 49: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Die Summe der ersten n Zahlen

n∑i=1

i = 1 + 2 + . . .+ n =n · (n + 1)

2.

Vollständige Induktion nach n:Induktionsanfang für n = 1:

∑1i=1 i = 1 und 1·(1+1)

2 = 1. XInduktionsschritt von n auf n + 1:

I Wir nehmen an, dass∑n

i=1 i = n·(n+1)2 gilt.

I∑n+1

i=1 i =∑n

i=1 i + (n + 1) = n·(n+1)2 + (n + 1) = n·(n+1)+2·(n+1)

2 = (n+2)·(n+1)2 =

(n+1)·(n+2)2 und das war zu zeigen. X

Ein direkter Beweis:I Betrachte ein Gitter mit n Zeilen und n Spalten: n2 Gitterpunkte.I Wir müssen die Gitterpunkte unterhalb der Hauptdiagonale und auf der

Hauptdiagonale zählen.I Die Hauptdiagonale besitzt n Gitterpunkte und unterhalb der

Hauptdiagonale befindet sich die Hälfte der verbleibenden n2 − nGitterpunkte. Also folgt

∑ni=1 i = n + n2−n

2 = n·(n+1)2 .

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 16 / 79

Page 50: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Die Summe der ersten n Zahlen

n∑i=1

i = 1 + 2 + . . .+ n =n · (n + 1)

2.

Vollständige Induktion nach n:Induktionsanfang für n = 1:

∑1i=1 i = 1 und 1·(1+1)

2 = 1. XInduktionsschritt von n auf n + 1:

I Wir nehmen an, dass∑n

i=1 i = n·(n+1)2 gilt.

I∑n+1

i=1 i =

∑ni=1 i + (n + 1) = n·(n+1)

2 + (n + 1) = n·(n+1)+2·(n+1)2 = (n+2)·(n+1)

2 =(n+1)·(n+2)

2 und das war zu zeigen. X

Ein direkter Beweis:I Betrachte ein Gitter mit n Zeilen und n Spalten: n2 Gitterpunkte.I Wir müssen die Gitterpunkte unterhalb der Hauptdiagonale und auf der

Hauptdiagonale zählen.I Die Hauptdiagonale besitzt n Gitterpunkte und unterhalb der

Hauptdiagonale befindet sich die Hälfte der verbleibenden n2 − nGitterpunkte. Also folgt

∑ni=1 i = n + n2−n

2 = n·(n+1)2 .

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 16 / 79

Page 51: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Die Summe der ersten n Zahlen

n∑i=1

i = 1 + 2 + . . .+ n =n · (n + 1)

2.

Vollständige Induktion nach n:Induktionsanfang für n = 1:

∑1i=1 i = 1 und 1·(1+1)

2 = 1. XInduktionsschritt von n auf n + 1:

I Wir nehmen an, dass∑n

i=1 i = n·(n+1)2 gilt.

I∑n+1

i=1 i =∑n

i=1 i + (n + 1) =

n·(n+1)2 + (n + 1) = n·(n+1)+2·(n+1)

2 = (n+2)·(n+1)2 =

(n+1)·(n+2)2 und das war zu zeigen. X

Ein direkter Beweis:I Betrachte ein Gitter mit n Zeilen und n Spalten: n2 Gitterpunkte.I Wir müssen die Gitterpunkte unterhalb der Hauptdiagonale und auf der

Hauptdiagonale zählen.I Die Hauptdiagonale besitzt n Gitterpunkte und unterhalb der

Hauptdiagonale befindet sich die Hälfte der verbleibenden n2 − nGitterpunkte. Also folgt

∑ni=1 i = n + n2−n

2 = n·(n+1)2 .

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 16 / 79

Page 52: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Die Summe der ersten n Zahlen

n∑i=1

i = 1 + 2 + . . .+ n =n · (n + 1)

2.

Vollständige Induktion nach n:Induktionsanfang für n = 1:

∑1i=1 i = 1 und 1·(1+1)

2 = 1. XInduktionsschritt von n auf n + 1:

I Wir nehmen an, dass∑n

i=1 i = n·(n+1)2 gilt.

I∑n+1

i=1 i =∑n

i=1 i + (n + 1) = n·(n+1)2 + (n + 1) =

n·(n+1)+2·(n+1)2 = (n+2)·(n+1)

2 =(n+1)·(n+2)

2 und das war zu zeigen. X

Ein direkter Beweis:I Betrachte ein Gitter mit n Zeilen und n Spalten: n2 Gitterpunkte.I Wir müssen die Gitterpunkte unterhalb der Hauptdiagonale und auf der

Hauptdiagonale zählen.I Die Hauptdiagonale besitzt n Gitterpunkte und unterhalb der

Hauptdiagonale befindet sich die Hälfte der verbleibenden n2 − nGitterpunkte. Also folgt

∑ni=1 i = n + n2−n

2 = n·(n+1)2 .

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 16 / 79

Page 53: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Die Summe der ersten n Zahlen

n∑i=1

i = 1 + 2 + . . .+ n =n · (n + 1)

2.

Vollständige Induktion nach n:Induktionsanfang für n = 1:

∑1i=1 i = 1 und 1·(1+1)

2 = 1. XInduktionsschritt von n auf n + 1:

I Wir nehmen an, dass∑n

i=1 i = n·(n+1)2 gilt.

I∑n+1

i=1 i =∑n

i=1 i + (n + 1) = n·(n+1)2 + (n + 1) = n·(n+1)+2·(n+1)

2 =

(n+2)·(n+1)2 =

(n+1)·(n+2)2 und das war zu zeigen. X

Ein direkter Beweis:I Betrachte ein Gitter mit n Zeilen und n Spalten: n2 Gitterpunkte.I Wir müssen die Gitterpunkte unterhalb der Hauptdiagonale und auf der

Hauptdiagonale zählen.I Die Hauptdiagonale besitzt n Gitterpunkte und unterhalb der

Hauptdiagonale befindet sich die Hälfte der verbleibenden n2 − nGitterpunkte. Also folgt

∑ni=1 i = n + n2−n

2 = n·(n+1)2 .

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 16 / 79

Page 54: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Die Summe der ersten n Zahlen

n∑i=1

i = 1 + 2 + . . .+ n =n · (n + 1)

2.

Vollständige Induktion nach n:Induktionsanfang für n = 1:

∑1i=1 i = 1 und 1·(1+1)

2 = 1. XInduktionsschritt von n auf n + 1:

I Wir nehmen an, dass∑n

i=1 i = n·(n+1)2 gilt.

I∑n+1

i=1 i =∑n

i=1 i + (n + 1) = n·(n+1)2 + (n + 1) = n·(n+1)+2·(n+1)

2 = (n+2)·(n+1)2 =

(n+1)·(n+2)2 und das war zu zeigen. X

Ein direkter Beweis:I Betrachte ein Gitter mit n Zeilen und n Spalten: n2 Gitterpunkte.I Wir müssen die Gitterpunkte unterhalb der Hauptdiagonale und auf der

Hauptdiagonale zählen.I Die Hauptdiagonale besitzt n Gitterpunkte und unterhalb der

Hauptdiagonale befindet sich die Hälfte der verbleibenden n2 − nGitterpunkte. Also folgt

∑ni=1 i = n + n2−n

2 = n·(n+1)2 .

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 16 / 79

Page 55: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Die Summe der ersten n Zahlen

n∑i=1

i = 1 + 2 + . . .+ n =n · (n + 1)

2.

Vollständige Induktion nach n:Induktionsanfang für n = 1:

∑1i=1 i = 1 und 1·(1+1)

2 = 1. XInduktionsschritt von n auf n + 1:

I Wir nehmen an, dass∑n

i=1 i = n·(n+1)2 gilt.

I∑n+1

i=1 i =∑n

i=1 i + (n + 1) = n·(n+1)2 + (n + 1) = n·(n+1)+2·(n+1)

2 = (n+2)·(n+1)2 =

(n+1)·(n+2)2

und das war zu zeigen. X

Ein direkter Beweis:I Betrachte ein Gitter mit n Zeilen und n Spalten: n2 Gitterpunkte.I Wir müssen die Gitterpunkte unterhalb der Hauptdiagonale und auf der

Hauptdiagonale zählen.I Die Hauptdiagonale besitzt n Gitterpunkte und unterhalb der

Hauptdiagonale befindet sich die Hälfte der verbleibenden n2 − nGitterpunkte. Also folgt

∑ni=1 i = n + n2−n

2 = n·(n+1)2 .

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 16 / 79

Page 56: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Die Summe der ersten n Zahlen

n∑i=1

i = 1 + 2 + . . .+ n =n · (n + 1)

2.

Vollständige Induktion nach n:Induktionsanfang für n = 1:

∑1i=1 i = 1 und 1·(1+1)

2 = 1. XInduktionsschritt von n auf n + 1:

I Wir nehmen an, dass∑n

i=1 i = n·(n+1)2 gilt.

I∑n+1

i=1 i =∑n

i=1 i + (n + 1) = n·(n+1)2 + (n + 1) = n·(n+1)+2·(n+1)

2 = (n+2)·(n+1)2 =

(n+1)·(n+2)2 und das war zu zeigen. X

Ein direkter Beweis:I Betrachte ein Gitter mit n Zeilen und n Spalten: n2 Gitterpunkte.I Wir müssen die Gitterpunkte unterhalb der Hauptdiagonale und auf der

Hauptdiagonale zählen.I Die Hauptdiagonale besitzt n Gitterpunkte und unterhalb der

Hauptdiagonale befindet sich die Hälfte der verbleibenden n2 − nGitterpunkte. Also folgt

∑ni=1 i = n + n2−n

2 = n·(n+1)2 .

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 16 / 79

Page 57: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Die Summe der ersten n Zahlen

n∑i=1

i = 1 + 2 + . . .+ n =n · (n + 1)

2.

Vollständige Induktion nach n:Induktionsanfang für n = 1:

∑1i=1 i = 1 und 1·(1+1)

2 = 1. XInduktionsschritt von n auf n + 1:

I Wir nehmen an, dass∑n

i=1 i = n·(n+1)2 gilt.

I∑n+1

i=1 i =∑n

i=1 i + (n + 1) = n·(n+1)2 + (n + 1) = n·(n+1)+2·(n+1)

2 = (n+2)·(n+1)2 =

(n+1)·(n+2)2 und das war zu zeigen. X

Ein direkter Beweis:

I Betrachte ein Gitter mit n Zeilen und n Spalten: n2 Gitterpunkte.I Wir müssen die Gitterpunkte unterhalb der Hauptdiagonale und auf der

Hauptdiagonale zählen.I Die Hauptdiagonale besitzt n Gitterpunkte und unterhalb der

Hauptdiagonale befindet sich die Hälfte der verbleibenden n2 − nGitterpunkte. Also folgt

∑ni=1 i = n + n2−n

2 = n·(n+1)2 .

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 16 / 79

Page 58: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Die Summe der ersten n Zahlen

n∑i=1

i = 1 + 2 + . . .+ n =n · (n + 1)

2.

Vollständige Induktion nach n:Induktionsanfang für n = 1:

∑1i=1 i = 1 und 1·(1+1)

2 = 1. XInduktionsschritt von n auf n + 1:

I Wir nehmen an, dass∑n

i=1 i = n·(n+1)2 gilt.

I∑n+1

i=1 i =∑n

i=1 i + (n + 1) = n·(n+1)2 + (n + 1) = n·(n+1)+2·(n+1)

2 = (n+2)·(n+1)2 =

(n+1)·(n+2)2 und das war zu zeigen. X

Ein direkter Beweis:I Betrachte ein Gitter mit n Zeilen und n Spalten:

n2 Gitterpunkte.I Wir müssen die Gitterpunkte unterhalb der Hauptdiagonale und auf der

Hauptdiagonale zählen.I Die Hauptdiagonale besitzt n Gitterpunkte und unterhalb der

Hauptdiagonale befindet sich die Hälfte der verbleibenden n2 − nGitterpunkte. Also folgt

∑ni=1 i = n + n2−n

2 = n·(n+1)2 .

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 16 / 79

Page 59: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Die Summe der ersten n Zahlen

n∑i=1

i = 1 + 2 + . . .+ n =n · (n + 1)

2.

Vollständige Induktion nach n:Induktionsanfang für n = 1:

∑1i=1 i = 1 und 1·(1+1)

2 = 1. XInduktionsschritt von n auf n + 1:

I Wir nehmen an, dass∑n

i=1 i = n·(n+1)2 gilt.

I∑n+1

i=1 i =∑n

i=1 i + (n + 1) = n·(n+1)2 + (n + 1) = n·(n+1)+2·(n+1)

2 = (n+2)·(n+1)2 =

(n+1)·(n+2)2 und das war zu zeigen. X

Ein direkter Beweis:I Betrachte ein Gitter mit n Zeilen und n Spalten: n2 Gitterpunkte.

I Wir müssen die Gitterpunkte unterhalb der Hauptdiagonale und auf derHauptdiagonale zählen.

I Die Hauptdiagonale besitzt n Gitterpunkte und unterhalb derHauptdiagonale befindet sich die Hälfte der verbleibenden n2 − nGitterpunkte. Also folgt

∑ni=1 i = n + n2−n

2 = n·(n+1)2 .

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 16 / 79

Page 60: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Die Summe der ersten n Zahlen

n∑i=1

i = 1 + 2 + . . .+ n =n · (n + 1)

2.

Vollständige Induktion nach n:Induktionsanfang für n = 1:

∑1i=1 i = 1 und 1·(1+1)

2 = 1. XInduktionsschritt von n auf n + 1:

I Wir nehmen an, dass∑n

i=1 i = n·(n+1)2 gilt.

I∑n+1

i=1 i =∑n

i=1 i + (n + 1) = n·(n+1)2 + (n + 1) = n·(n+1)+2·(n+1)

2 = (n+2)·(n+1)2 =

(n+1)·(n+2)2 und das war zu zeigen. X

Ein direkter Beweis:I Betrachte ein Gitter mit n Zeilen und n Spalten: n2 Gitterpunkte.I Wir müssen die Gitterpunkte unterhalb der Hauptdiagonale und auf der

Hauptdiagonale zählen.

I Die Hauptdiagonale besitzt n Gitterpunkte und unterhalb derHauptdiagonale befindet sich die Hälfte der verbleibenden n2 − nGitterpunkte. Also folgt

∑ni=1 i = n + n2−n

2 = n·(n+1)2 .

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 16 / 79

Page 61: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Die Summe der ersten n Zahlen

n∑i=1

i = 1 + 2 + . . .+ n =n · (n + 1)

2.

Vollständige Induktion nach n:Induktionsanfang für n = 1:

∑1i=1 i = 1 und 1·(1+1)

2 = 1. XInduktionsschritt von n auf n + 1:

I Wir nehmen an, dass∑n

i=1 i = n·(n+1)2 gilt.

I∑n+1

i=1 i =∑n

i=1 i + (n + 1) = n·(n+1)2 + (n + 1) = n·(n+1)+2·(n+1)

2 = (n+2)·(n+1)2 =

(n+1)·(n+2)2 und das war zu zeigen. X

Ein direkter Beweis:I Betrachte ein Gitter mit n Zeilen und n Spalten: n2 Gitterpunkte.I Wir müssen die Gitterpunkte unterhalb der Hauptdiagonale und auf der

Hauptdiagonale zählen.I Die Hauptdiagonale besitzt n Gitterpunkte

und unterhalb derHauptdiagonale befindet sich die Hälfte der verbleibenden n2 − nGitterpunkte. Also folgt

∑ni=1 i = n + n2−n

2 = n·(n+1)2 .

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 16 / 79

Page 62: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Die Summe der ersten n Zahlen

n∑i=1

i = 1 + 2 + . . .+ n =n · (n + 1)

2.

Vollständige Induktion nach n:Induktionsanfang für n = 1:

∑1i=1 i = 1 und 1·(1+1)

2 = 1. XInduktionsschritt von n auf n + 1:

I Wir nehmen an, dass∑n

i=1 i = n·(n+1)2 gilt.

I∑n+1

i=1 i =∑n

i=1 i + (n + 1) = n·(n+1)2 + (n + 1) = n·(n+1)+2·(n+1)

2 = (n+2)·(n+1)2 =

(n+1)·(n+2)2 und das war zu zeigen. X

Ein direkter Beweis:I Betrachte ein Gitter mit n Zeilen und n Spalten: n2 Gitterpunkte.I Wir müssen die Gitterpunkte unterhalb der Hauptdiagonale und auf der

Hauptdiagonale zählen.I Die Hauptdiagonale besitzt n Gitterpunkte und unterhalb der

Hauptdiagonale befindet sich die Hälfte der verbleibenden n2 − nGitterpunkte.

Also folgt∑n

i=1 i = n + n2−n2 = n·(n+1)

2 .

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 16 / 79

Page 63: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Die Summe der ersten n Zahlen

n∑i=1

i = 1 + 2 + . . .+ n =n · (n + 1)

2.

Vollständige Induktion nach n:Induktionsanfang für n = 1:

∑1i=1 i = 1 und 1·(1+1)

2 = 1. XInduktionsschritt von n auf n + 1:

I Wir nehmen an, dass∑n

i=1 i = n·(n+1)2 gilt.

I∑n+1

i=1 i =∑n

i=1 i + (n + 1) = n·(n+1)2 + (n + 1) = n·(n+1)+2·(n+1)

2 = (n+2)·(n+1)2 =

(n+1)·(n+2)2 und das war zu zeigen. X

Ein direkter Beweis:I Betrachte ein Gitter mit n Zeilen und n Spalten: n2 Gitterpunkte.I Wir müssen die Gitterpunkte unterhalb der Hauptdiagonale und auf der

Hauptdiagonale zählen.I Die Hauptdiagonale besitzt n Gitterpunkte und unterhalb der

Hauptdiagonale befindet sich die Hälfte der verbleibenden n2 − nGitterpunkte. Also folgt

∑ni=1 i =

n + n2−n2 = n·(n+1)

2 .

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 16 / 79

Page 64: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Die Summe der ersten n Zahlen

n∑i=1

i = 1 + 2 + . . .+ n =n · (n + 1)

2.

Vollständige Induktion nach n:Induktionsanfang für n = 1:

∑1i=1 i = 1 und 1·(1+1)

2 = 1. XInduktionsschritt von n auf n + 1:

I Wir nehmen an, dass∑n

i=1 i = n·(n+1)2 gilt.

I∑n+1

i=1 i =∑n

i=1 i + (n + 1) = n·(n+1)2 + (n + 1) = n·(n+1)+2·(n+1)

2 = (n+2)·(n+1)2 =

(n+1)·(n+2)2 und das war zu zeigen. X

Ein direkter Beweis:I Betrachte ein Gitter mit n Zeilen und n Spalten: n2 Gitterpunkte.I Wir müssen die Gitterpunkte unterhalb der Hauptdiagonale und auf der

Hauptdiagonale zählen.I Die Hauptdiagonale besitzt n Gitterpunkte und unterhalb der

Hauptdiagonale befindet sich die Hälfte der verbleibenden n2 − nGitterpunkte. Also folgt

∑ni=1 i = n +

n2−n2 = n·(n+1)

2 .

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 16 / 79

Page 65: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Die Summe der ersten n Zahlen

n∑i=1

i = 1 + 2 + . . .+ n =n · (n + 1)

2.

Vollständige Induktion nach n:Induktionsanfang für n = 1:

∑1i=1 i = 1 und 1·(1+1)

2 = 1. XInduktionsschritt von n auf n + 1:

I Wir nehmen an, dass∑n

i=1 i = n·(n+1)2 gilt.

I∑n+1

i=1 i =∑n

i=1 i + (n + 1) = n·(n+1)2 + (n + 1) = n·(n+1)+2·(n+1)

2 = (n+2)·(n+1)2 =

(n+1)·(n+2)2 und das war zu zeigen. X

Ein direkter Beweis:I Betrachte ein Gitter mit n Zeilen und n Spalten: n2 Gitterpunkte.I Wir müssen die Gitterpunkte unterhalb der Hauptdiagonale und auf der

Hauptdiagonale zählen.I Die Hauptdiagonale besitzt n Gitterpunkte und unterhalb der

Hauptdiagonale befindet sich die Hälfte der verbleibenden n2 − nGitterpunkte. Also folgt

∑ni=1 i = n + n2−n

2

= n·(n+1)2 .

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 16 / 79

Page 66: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Die Summe der ersten n Zahlen

n∑i=1

i = 1 + 2 + . . .+ n =n · (n + 1)

2.

Vollständige Induktion nach n:Induktionsanfang für n = 1:

∑1i=1 i = 1 und 1·(1+1)

2 = 1. XInduktionsschritt von n auf n + 1:

I Wir nehmen an, dass∑n

i=1 i = n·(n+1)2 gilt.

I∑n+1

i=1 i =∑n

i=1 i + (n + 1) = n·(n+1)2 + (n + 1) = n·(n+1)+2·(n+1)

2 = (n+2)·(n+1)2 =

(n+1)·(n+2)2 und das war zu zeigen. X

Ein direkter Beweis:I Betrachte ein Gitter mit n Zeilen und n Spalten: n2 Gitterpunkte.I Wir müssen die Gitterpunkte unterhalb der Hauptdiagonale und auf der

Hauptdiagonale zählen.I Die Hauptdiagonale besitzt n Gitterpunkte und unterhalb der

Hauptdiagonale befindet sich die Hälfte der verbleibenden n2 − nGitterpunkte. Also folgt

∑ni=1 i = n + n2−n

2 = n·(n+1)2 .

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 16 / 79

Page 67: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Wiederholung? (2) demogr.

Mathematische Grundlagen:

Gesucht ist eine kurze Formel fürn∑

i=1

ai mit a 6= 1.

(1) 2 · an

(2) an+2−1n

(3) an+1−1a−1

(4) a·n·(n−1)2

(5) Keine Ahnung...

Auflösung: (3) an+1−1a−1 (wie beweist man das?)

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 17 / 79

Page 68: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Wiederholung? (2) demogr.

Mathematische Grundlagen:

Gesucht ist eine kurze Formel fürn∑

i=1

ai mit a 6= 1.

(1) 2 · an

(2) an+2−1n

(3) an+1−1a−1

(4) a·n·(n−1)2

(5) Keine Ahnung...

Auflösung:

(3) an+1−1a−1 (wie beweist man das?)

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 17 / 79

Page 69: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Wiederholung? (2) demogr.

Mathematische Grundlagen:

Gesucht ist eine kurze Formel fürn∑

i=1

ai mit a 6= 1.

(1) 2 · an

(2) an+2−1n

(3) an+1−1a−1

(4) a·n·(n−1)2

(5) Keine Ahnung...

Auflösung: (3) an+1−1a−1

(wie beweist man das?)

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 17 / 79

Page 70: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Wiederholung? (2) demogr.

Mathematische Grundlagen:

Gesucht ist eine kurze Formel fürn∑

i=1

ai mit a 6= 1.

(1) 2 · an

(2) an+2−1n

(3) an+1−1a−1

(4) a·n·(n−1)2

(5) Keine Ahnung...

Auflösung: (3) an+1−1a−1 (wie beweist man das?)

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 17 / 79

Page 71: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Die geometrische Reihe

n∑i=0

ai =an+1 − 1

a− 1falls a 6= 1.

Vollständige Induktion nach n:Induktionsanfang für n = 0:

∑0i=0 ai = 1 und a0+1−1

a−1 = 1. XInduktionsschritt von n auf n + 1:

I Wir können annehmen, dass∑n

i=0 ai = an+1−1a−1 gilt. Dann ist

I∑n+1

i=0 ai =∑n

i=0 ai + an+1 = an+1−1a−1 + an+1 = an+1−1+an+2−an+1

a−1 = an+2−1a−1 und

das war zu zeigen. X

Ein direkter Beweis:

(a− 1) ·∑n

i=0 ai = a ·∑n

i=0 ai −∑n

i=0 ai

=∑n+1

i=0 ai −∑n

i=0 ai = an+1 − a0 = an+1 − 1

und das war zu zeigen. X

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 18 / 79

Page 72: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Die geometrische Reihe

n∑i=0

ai =an+1 − 1

a− 1falls a 6= 1.

Vollständige Induktion nach n:

Induktionsanfang für n = 0:∑0

i=0 ai = 1 und a0+1−1a−1 = 1. X

Induktionsschritt von n auf n + 1:I Wir können annehmen, dass

∑ni=0 ai = an+1−1

a−1 gilt. Dann istI∑n+1

i=0 ai =∑n

i=0 ai + an+1 = an+1−1a−1 + an+1 = an+1−1+an+2−an+1

a−1 = an+2−1a−1 und

das war zu zeigen. X

Ein direkter Beweis:

(a− 1) ·∑n

i=0 ai = a ·∑n

i=0 ai −∑n

i=0 ai

=∑n+1

i=0 ai −∑n

i=0 ai = an+1 − a0 = an+1 − 1

und das war zu zeigen. X

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 18 / 79

Page 73: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Die geometrische Reihe

n∑i=0

ai =an+1 − 1

a− 1falls a 6= 1.

Vollständige Induktion nach n:Induktionsanfang für n = 0:

∑0i=0 ai = 1 und a0+1−1

a−1 = 1. XInduktionsschritt von n auf n + 1:

I Wir können annehmen, dass∑n

i=0 ai = an+1−1a−1 gilt. Dann ist

I∑n+1

i=0 ai =∑n

i=0 ai + an+1 = an+1−1a−1 + an+1 = an+1−1+an+2−an+1

a−1 = an+2−1a−1 und

das war zu zeigen. X

Ein direkter Beweis:

(a− 1) ·∑n

i=0 ai = a ·∑n

i=0 ai −∑n

i=0 ai

=∑n+1

i=0 ai −∑n

i=0 ai = an+1 − a0 = an+1 − 1

und das war zu zeigen. X

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 18 / 79

Page 74: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Die geometrische Reihe

n∑i=0

ai =an+1 − 1

a− 1falls a 6= 1.

Vollständige Induktion nach n:Induktionsanfang für n = 0:

∑0i=0 ai = 1

und a0+1−1a−1 = 1. X

Induktionsschritt von n auf n + 1:I Wir können annehmen, dass

∑ni=0 ai = an+1−1

a−1 gilt. Dann istI∑n+1

i=0 ai =∑n

i=0 ai + an+1 = an+1−1a−1 + an+1 = an+1−1+an+2−an+1

a−1 = an+2−1a−1 und

das war zu zeigen. X

Ein direkter Beweis:

(a− 1) ·∑n

i=0 ai = a ·∑n

i=0 ai −∑n

i=0 ai

=∑n+1

i=0 ai −∑n

i=0 ai = an+1 − a0 = an+1 − 1

und das war zu zeigen. X

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 18 / 79

Page 75: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Die geometrische Reihe

n∑i=0

ai =an+1 − 1

a− 1falls a 6= 1.

Vollständige Induktion nach n:Induktionsanfang für n = 0:

∑0i=0 ai = 1 und a0+1−1

a−1 = 1. X

Induktionsschritt von n auf n + 1:I Wir können annehmen, dass

∑ni=0 ai = an+1−1

a−1 gilt. Dann istI∑n+1

i=0 ai =∑n

i=0 ai + an+1 = an+1−1a−1 + an+1 = an+1−1+an+2−an+1

a−1 = an+2−1a−1 und

das war zu zeigen. X

Ein direkter Beweis:

(a− 1) ·∑n

i=0 ai = a ·∑n

i=0 ai −∑n

i=0 ai

=∑n+1

i=0 ai −∑n

i=0 ai = an+1 − a0 = an+1 − 1

und das war zu zeigen. X

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 18 / 79

Page 76: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Die geometrische Reihe

n∑i=0

ai =an+1 − 1

a− 1falls a 6= 1.

Vollständige Induktion nach n:Induktionsanfang für n = 0:

∑0i=0 ai = 1 und a0+1−1

a−1 = 1. XInduktionsschritt von n auf n + 1:

I Wir können annehmen, dass∑n

i=0 ai = an+1−1a−1 gilt. Dann ist

I∑n+1

i=0 ai =∑n

i=0 ai + an+1 = an+1−1a−1 + an+1 = an+1−1+an+2−an+1

a−1 = an+2−1a−1 und

das war zu zeigen. X

Ein direkter Beweis:

(a− 1) ·∑n

i=0 ai = a ·∑n

i=0 ai −∑n

i=0 ai

=∑n+1

i=0 ai −∑n

i=0 ai = an+1 − a0 = an+1 − 1

und das war zu zeigen. X

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 18 / 79

Page 77: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Die geometrische Reihe

n∑i=0

ai =an+1 − 1

a− 1falls a 6= 1.

Vollständige Induktion nach n:Induktionsanfang für n = 0:

∑0i=0 ai = 1 und a0+1−1

a−1 = 1. XInduktionsschritt von n auf n + 1:

I Wir können annehmen, dass∑n

i=0 ai = an+1−1a−1 gilt.

Dann istI∑n+1

i=0 ai =∑n

i=0 ai + an+1 = an+1−1a−1 + an+1 = an+1−1+an+2−an+1

a−1 = an+2−1a−1 und

das war zu zeigen. X

Ein direkter Beweis:

(a− 1) ·∑n

i=0 ai = a ·∑n

i=0 ai −∑n

i=0 ai

=∑n+1

i=0 ai −∑n

i=0 ai = an+1 − a0 = an+1 − 1

und das war zu zeigen. X

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 18 / 79

Page 78: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Die geometrische Reihe

n∑i=0

ai =an+1 − 1

a− 1falls a 6= 1.

Vollständige Induktion nach n:Induktionsanfang für n = 0:

∑0i=0 ai = 1 und a0+1−1

a−1 = 1. XInduktionsschritt von n auf n + 1:

I Wir können annehmen, dass∑n

i=0 ai = an+1−1a−1 gilt. Dann ist

I∑n+1

i=0 ai

=∑n

i=0 ai + an+1 = an+1−1a−1 + an+1 = an+1−1+an+2−an+1

a−1 = an+2−1a−1 und

das war zu zeigen. X

Ein direkter Beweis:

(a− 1) ·∑n

i=0 ai = a ·∑n

i=0 ai −∑n

i=0 ai

=∑n+1

i=0 ai −∑n

i=0 ai = an+1 − a0 = an+1 − 1

und das war zu zeigen. X

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 18 / 79

Page 79: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Die geometrische Reihe

n∑i=0

ai =an+1 − 1

a− 1falls a 6= 1.

Vollständige Induktion nach n:Induktionsanfang für n = 0:

∑0i=0 ai = 1 und a0+1−1

a−1 = 1. XInduktionsschritt von n auf n + 1:

I Wir können annehmen, dass∑n

i=0 ai = an+1−1a−1 gilt. Dann ist

I∑n+1

i=0 ai =∑n

i=0 ai + an+1

= an+1−1a−1 + an+1 = an+1−1+an+2−an+1

a−1 = an+2−1a−1 und

das war zu zeigen. X

Ein direkter Beweis:

(a− 1) ·∑n

i=0 ai = a ·∑n

i=0 ai −∑n

i=0 ai

=∑n+1

i=0 ai −∑n

i=0 ai = an+1 − a0 = an+1 − 1

und das war zu zeigen. X

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 18 / 79

Page 80: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Die geometrische Reihe

n∑i=0

ai =an+1 − 1

a− 1falls a 6= 1.

Vollständige Induktion nach n:Induktionsanfang für n = 0:

∑0i=0 ai = 1 und a0+1−1

a−1 = 1. XInduktionsschritt von n auf n + 1:

I Wir können annehmen, dass∑n

i=0 ai = an+1−1a−1 gilt. Dann ist

I∑n+1

i=0 ai =∑n

i=0 ai + an+1 = an+1−1a−1 + an+1

= an+1−1+an+2−an+1

a−1 = an+2−1a−1 und

das war zu zeigen. X

Ein direkter Beweis:

(a− 1) ·∑n

i=0 ai = a ·∑n

i=0 ai −∑n

i=0 ai

=∑n+1

i=0 ai −∑n

i=0 ai = an+1 − a0 = an+1 − 1

und das war zu zeigen. X

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 18 / 79

Page 81: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Die geometrische Reihe

n∑i=0

ai =an+1 − 1

a− 1falls a 6= 1.

Vollständige Induktion nach n:Induktionsanfang für n = 0:

∑0i=0 ai = 1 und a0+1−1

a−1 = 1. XInduktionsschritt von n auf n + 1:

I Wir können annehmen, dass∑n

i=0 ai = an+1−1a−1 gilt. Dann ist

I∑n+1

i=0 ai =∑n

i=0 ai + an+1 = an+1−1a−1 + an+1 = an+1−1+an+2−an+1

a−1

= an+2−1a−1 und

das war zu zeigen. X

Ein direkter Beweis:

(a− 1) ·∑n

i=0 ai = a ·∑n

i=0 ai −∑n

i=0 ai

=∑n+1

i=0 ai −∑n

i=0 ai = an+1 − a0 = an+1 − 1

und das war zu zeigen. X

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 18 / 79

Page 82: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Die geometrische Reihe

n∑i=0

ai =an+1 − 1

a− 1falls a 6= 1.

Vollständige Induktion nach n:Induktionsanfang für n = 0:

∑0i=0 ai = 1 und a0+1−1

a−1 = 1. XInduktionsschritt von n auf n + 1:

I Wir können annehmen, dass∑n

i=0 ai = an+1−1a−1 gilt. Dann ist

I∑n+1

i=0 ai =∑n

i=0 ai + an+1 = an+1−1a−1 + an+1 = an+1−1+an+2−an+1

a−1 = an+2−1a−1 und

das war zu zeigen. X

Ein direkter Beweis:

(a− 1) ·∑n

i=0 ai = a ·∑n

i=0 ai −∑n

i=0 ai

=∑n+1

i=0 ai −∑n

i=0 ai = an+1 − a0 = an+1 − 1

und das war zu zeigen. X

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 18 / 79

Page 83: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Die geometrische Reihe

n∑i=0

ai =an+1 − 1

a− 1falls a 6= 1.

Vollständige Induktion nach n:Induktionsanfang für n = 0:

∑0i=0 ai = 1 und a0+1−1

a−1 = 1. XInduktionsschritt von n auf n + 1:

I Wir können annehmen, dass∑n

i=0 ai = an+1−1a−1 gilt. Dann ist

I∑n+1

i=0 ai =∑n

i=0 ai + an+1 = an+1−1a−1 + an+1 = an+1−1+an+2−an+1

a−1 = an+2−1a−1 und

das war zu zeigen. X

Ein direkter Beweis:

(a− 1) ·∑n

i=0 ai = a ·∑n

i=0 ai −∑n

i=0 ai

=∑n+1

i=0 ai −∑n

i=0 ai = an+1 − a0 = an+1 − 1

und das war zu zeigen. X

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 18 / 79

Page 84: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Die geometrische Reihe

n∑i=0

ai =an+1 − 1

a− 1falls a 6= 1.

Vollständige Induktion nach n:Induktionsanfang für n = 0:

∑0i=0 ai = 1 und a0+1−1

a−1 = 1. XInduktionsschritt von n auf n + 1:

I Wir können annehmen, dass∑n

i=0 ai = an+1−1a−1 gilt. Dann ist

I∑n+1

i=0 ai =∑n

i=0 ai + an+1 = an+1−1a−1 + an+1 = an+1−1+an+2−an+1

a−1 = an+2−1a−1 und

das war zu zeigen. X

Ein direkter Beweis:

(a− 1) ·∑n

i=0 ai = a ·∑n

i=0 ai −∑n

i=0 ai

=∑n+1

i=0 ai −∑n

i=0 ai = an+1 − a0 = an+1 − 1

und das war zu zeigen. X

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 18 / 79

Page 85: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Die geometrische Reihe

n∑i=0

ai =an+1 − 1

a− 1falls a 6= 1.

Vollständige Induktion nach n:Induktionsanfang für n = 0:

∑0i=0 ai = 1 und a0+1−1

a−1 = 1. XInduktionsschritt von n auf n + 1:

I Wir können annehmen, dass∑n

i=0 ai = an+1−1a−1 gilt. Dann ist

I∑n+1

i=0 ai =∑n

i=0 ai + an+1 = an+1−1a−1 + an+1 = an+1−1+an+2−an+1

a−1 = an+2−1a−1 und

das war zu zeigen. X

Ein direkter Beweis:

(a− 1) ·∑n

i=0 ai = a ·∑n

i=0 ai −∑n

i=0 ai

=∑n+1

i=0 ai −∑n

i=0 ai =

an+1 − a0 = an+1 − 1

und das war zu zeigen. X

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 18 / 79

Page 86: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Die geometrische Reihe

n∑i=0

ai =an+1 − 1

a− 1falls a 6= 1.

Vollständige Induktion nach n:Induktionsanfang für n = 0:

∑0i=0 ai = 1 und a0+1−1

a−1 = 1. XInduktionsschritt von n auf n + 1:

I Wir können annehmen, dass∑n

i=0 ai = an+1−1a−1 gilt. Dann ist

I∑n+1

i=0 ai =∑n

i=0 ai + an+1 = an+1−1a−1 + an+1 = an+1−1+an+2−an+1

a−1 = an+2−1a−1 und

das war zu zeigen. X

Ein direkter Beweis:

(a− 1) ·∑n

i=0 ai = a ·∑n

i=0 ai −∑n

i=0 ai

=∑n+1

i=0 ai −∑n

i=0 ai = an+1 − a0

= an+1 − 1

und das war zu zeigen. X

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 18 / 79

Page 87: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Die geometrische Reihe

n∑i=0

ai =an+1 − 1

a− 1falls a 6= 1.

Vollständige Induktion nach n:Induktionsanfang für n = 0:

∑0i=0 ai = 1 und a0+1−1

a−1 = 1. XInduktionsschritt von n auf n + 1:

I Wir können annehmen, dass∑n

i=0 ai = an+1−1a−1 gilt. Dann ist

I∑n+1

i=0 ai =∑n

i=0 ai + an+1 = an+1−1a−1 + an+1 = an+1−1+an+2−an+1

a−1 = an+2−1a−1 und

das war zu zeigen. X

Ein direkter Beweis:

(a− 1) ·∑n

i=0 ai = a ·∑n

i=0 ai −∑n

i=0 ai

=∑n+1

i=0 ai −∑n

i=0 ai = an+1 − a0 = an+1 − 1

und das war zu zeigen. X

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 18 / 79

Page 88: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Binärsuche

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 19 / 79

Page 89: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Binärsuche

Ein ArrayA = (A[1], . . . ,A[n])

von n Zahlen und eine Zahlx

ist gegeben: Wir möchten wissen, ob und wenn ja wo die Zahl x in Avorkommt.

Wenn A nicht sortiert ist, dann wird die lineare Suche bis zu n Zellen desArrays inspizieren.Wenn das Array aber aufsteigend sortiert ist, dann können wirBinärsuche anwenden.

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 20 / 79

Page 90: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Binärsuche

Ein ArrayA = (A[1], . . . ,A[n])

von n Zahlen und eine Zahlx

ist gegeben: Wir möchten wissen, ob und wenn ja wo die Zahl x in Avorkommt.

Wenn A nicht sortiert ist, dann wird die lineare Suche bis zu n Zellen desArrays inspizieren.Wenn das Array aber aufsteigend sortiert ist, dann können wirBinärsuche anwenden.

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 20 / 79

Page 91: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Binärsuche: Das Programm

void Binärsuche( int unten, int oben)if (oben < unten)

std::cout « x « “ wurde nicht gefunden.“« std::endl;

int mitte = (unten+oben)/2;if (A[mitte] == x)

std::cout « x « “ wurde in Position “ « mitte « “ gefunden.“ « std::endl;else

if (x < A[mitte])Binärsuche(unten, mitte-1);

elseBinärsuche(mitte+1,oben);

Wir sagen, dass Zelle

A[mitte]

im ersten Aufruf inspiziert wird.

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 21 / 79

Page 92: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Binärsuche: Das Programm

void Binärsuche( int unten, int oben)if (oben < unten)

std::cout « x « “ wurde nicht gefunden.“« std::endl;int mitte = (unten+oben)/2;if (A[mitte] == x)

std::cout « x « “ wurde in Position “ « mitte « “ gefunden.“ « std::endl;

else if (x < A[mitte])

Binärsuche(unten, mitte-1);else

Binärsuche(mitte+1,oben);

Wir sagen, dass Zelle

A[mitte]

im ersten Aufruf inspiziert wird.

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 21 / 79

Page 93: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Binärsuche: Das Programm

void Binärsuche( int unten, int oben)if (oben < unten)

std::cout « x « “ wurde nicht gefunden.“« std::endl;int mitte = (unten+oben)/2;if (A[mitte] == x)

std::cout « x « “ wurde in Position “ « mitte « “ gefunden.“ « std::endl;else

if (x < A[mitte])Binärsuche(unten, mitte-1);

elseBinärsuche(mitte+1,oben);

Wir sagen, dass Zelle

A[mitte]

im ersten Aufruf inspiziert wird.

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 21 / 79

Page 94: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Binärsuche: Korrektheit

Wir zeigen durch vollständige Induktion nach

n = oben − unten + 1,

dass der Aufruf Binärsuche(unten,oben) das korrekte Ergebnis liefert.

Induktionsanfang für n = 0:

Es ist n = oben − unten + 1 = 0⇒ oben < unten.

Binärsuche(unten,oben) bricht ab mit der Antwort„x wurde nicht gefunden“. XInduktionsschritt n→ n + 1: Es ist oben − unten + 1 = n + 1.

I Wenn A(mitte) = x , dann wird mit Erfolgsmeldung abgebrochen. X

I Ansonsten, wenn x < A[mitte], sucht Binärsuche richtigerweise in der linkenHälfte und sonst in der rechten Hälfte.

I Die rekursive Suche in der linken bzw. rechten Hälfte verläuft aber nachInduktionsannahme korrekt. X

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 22 / 79

Page 95: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Binärsuche: Korrektheit

Wir zeigen durch vollständige Induktion nach

n = oben − unten + 1,

dass der Aufruf Binärsuche(unten,oben) das korrekte Ergebnis liefert.

Induktionsanfang für n = 0: Es ist n = oben − unten + 1 = 0⇒ oben < unten.

Binärsuche(unten,oben) bricht ab mit der Antwort„x wurde nicht gefunden“. X

Induktionsschritt n→ n + 1: Es ist oben − unten + 1 = n + 1.I Wenn A(mitte) = x , dann wird mit Erfolgsmeldung abgebrochen. X

I Ansonsten, wenn x < A[mitte], sucht Binärsuche richtigerweise in der linkenHälfte und sonst in der rechten Hälfte.

I Die rekursive Suche in der linken bzw. rechten Hälfte verläuft aber nachInduktionsannahme korrekt. X

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 22 / 79

Page 96: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Binärsuche: Korrektheit

Wir zeigen durch vollständige Induktion nach

n = oben − unten + 1,

dass der Aufruf Binärsuche(unten,oben) das korrekte Ergebnis liefert.

Induktionsanfang für n = 0: Es ist n = oben − unten + 1 = 0⇒ oben < unten.

Binärsuche(unten,oben) bricht ab mit der Antwort„x wurde nicht gefunden“. XInduktionsschritt n→ n + 1: Es ist oben − unten + 1 = n + 1.

I Wenn A(mitte) = x , dann wird mit Erfolgsmeldung abgebrochen. X

I Ansonsten, wenn x < A[mitte], sucht Binärsuche richtigerweise in der linkenHälfte und sonst in der rechten Hälfte.

I Die rekursive Suche in der linken bzw. rechten Hälfte verläuft aber nachInduktionsannahme korrekt. X

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 22 / 79

Page 97: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Binärsuche: Korrektheit

Wir zeigen durch vollständige Induktion nach

n = oben − unten + 1,

dass der Aufruf Binärsuche(unten,oben) das korrekte Ergebnis liefert.

Induktionsanfang für n = 0: Es ist n = oben − unten + 1 = 0⇒ oben < unten.

Binärsuche(unten,oben) bricht ab mit der Antwort„x wurde nicht gefunden“. XInduktionsschritt n→ n + 1: Es ist oben − unten + 1 = n + 1.

I Wenn A(mitte) = x , dann

wird mit Erfolgsmeldung abgebrochen. X

I Ansonsten, wenn x < A[mitte], sucht Binärsuche richtigerweise in der linkenHälfte und sonst in der rechten Hälfte.

I Die rekursive Suche in der linken bzw. rechten Hälfte verläuft aber nachInduktionsannahme korrekt. X

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 22 / 79

Page 98: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Binärsuche: Korrektheit

Wir zeigen durch vollständige Induktion nach

n = oben − unten + 1,

dass der Aufruf Binärsuche(unten,oben) das korrekte Ergebnis liefert.

Induktionsanfang für n = 0: Es ist n = oben − unten + 1 = 0⇒ oben < unten.

Binärsuche(unten,oben) bricht ab mit der Antwort„x wurde nicht gefunden“. XInduktionsschritt n→ n + 1: Es ist oben − unten + 1 = n + 1.

I Wenn A(mitte) = x , dann wird mit Erfolgsmeldung abgebrochen. X

I Ansonsten, wenn x < A[mitte],

sucht Binärsuche richtigerweise in der linkenHälfte und sonst in der rechten Hälfte.

I Die rekursive Suche in der linken bzw. rechten Hälfte verläuft aber nachInduktionsannahme korrekt. X

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 22 / 79

Page 99: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Binärsuche: Korrektheit

Wir zeigen durch vollständige Induktion nach

n = oben − unten + 1,

dass der Aufruf Binärsuche(unten,oben) das korrekte Ergebnis liefert.

Induktionsanfang für n = 0: Es ist n = oben − unten + 1 = 0⇒ oben < unten.

Binärsuche(unten,oben) bricht ab mit der Antwort„x wurde nicht gefunden“. XInduktionsschritt n→ n + 1: Es ist oben − unten + 1 = n + 1.

I Wenn A(mitte) = x , dann wird mit Erfolgsmeldung abgebrochen. X

I Ansonsten, wenn x < A[mitte], sucht Binärsuche richtigerweise in der linkenHälfte und sonst in der rechten Hälfte.

I Die rekursive Suche in der linken bzw. rechten Hälfte verläuft aber nachInduktionsannahme korrekt. X

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 22 / 79

Page 100: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Wiederholung? (3) demogr.

Wie groß ist die maximale Anzahl inspizierter Zellen in der Binärsuche ineinem Array mit n = 2k − 1 Zellen?

(1) n(2) n · k(3) d

√ke

(4) k(5) Nur Kleingeister suchen, das Genie beherrscht das Chaos!

Auflösung: (4) k (wie beweist man das?)

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 23 / 79

Page 101: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Wiederholung? (3) demogr.

Wie groß ist die maximale Anzahl inspizierter Zellen in der Binärsuche ineinem Array mit n = 2k − 1 Zellen?

(1) n(2) n · k(3) d

√ke

(4) k(5) Nur Kleingeister suchen, das Genie beherrscht das Chaos!

Auflösung:

(4) k (wie beweist man das?)

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 23 / 79

Page 102: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Wiederholung? (3) demogr.

Wie groß ist die maximale Anzahl inspizierter Zellen in der Binärsuche ineinem Array mit n = 2k − 1 Zellen?

(1) n(2) n · k(3) d

√ke

(4) k(5) Nur Kleingeister suchen, das Genie beherrscht das Chaos!

Auflösung: (4) k

(wie beweist man das?)

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 23 / 79

Page 103: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Wiederholung? (3) demogr.

Wie groß ist die maximale Anzahl inspizierter Zellen in der Binärsuche ineinem Array mit n = 2k − 1 Zellen?

(1) n(2) n · k(3) d

√ke

(4) k(5) Nur Kleingeister suchen, das Genie beherrscht das Chaos!

Auflösung: (4) k (wie beweist man das?)

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 23 / 79

Page 104: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Binärsuche: Die LaufzeitWie groß ist

T (n) := maximale Anzahl inspizierter Zellen für ein Array mit n Zellen,

für n = 2k − 1?

Hier ist eine rekursive Definition von T (n):- Rekursionsanfang: T (0) :=

0.- Rekursionsschritt: T (n) := T ( n−1

2 ) + 1.

1. Wir haben n = 2k − 1 gefordert. Beachte: n−12 = 2k−2

2 = 2k−1 − 1.

2. Wir zeigen T (2k − 1) = k mit vollständiger Induktion nach k .Induktionsanfang: T (20 − 1) = T (0) = 0. XInduktionsschritt: T (2k+1 − 1) = T (2k − 1) + 1 Induktionsannahme

= k + 1. X

Binärsuche muss höchstens k Zahlen inspizieren gegenüber 2k −1 Zahlen fürdie lineare Suche: Lineare Suche ist exponentiell langsamer als Binärsuche.

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 24 / 79

Page 105: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Binärsuche: Die LaufzeitWie groß ist

T (n) := maximale Anzahl inspizierter Zellen für ein Array mit n Zellen,

für n = 2k − 1?

Hier ist eine rekursive Definition von T (n):- Rekursionsanfang: T (0) := 0.- Rekursionsschritt: T (n) :=

T ( n−12 ) + 1.

1. Wir haben n = 2k − 1 gefordert. Beachte: n−12 = 2k−2

2 = 2k−1 − 1.

2. Wir zeigen T (2k − 1) = k mit vollständiger Induktion nach k .Induktionsanfang: T (20 − 1) = T (0) = 0. XInduktionsschritt: T (2k+1 − 1) = T (2k − 1) + 1 Induktionsannahme

= k + 1. X

Binärsuche muss höchstens k Zahlen inspizieren gegenüber 2k −1 Zahlen fürdie lineare Suche: Lineare Suche ist exponentiell langsamer als Binärsuche.

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 24 / 79

Page 106: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Binärsuche: Die LaufzeitWie groß ist

T (n) := maximale Anzahl inspizierter Zellen für ein Array mit n Zellen,

für n = 2k − 1?

Hier ist eine rekursive Definition von T (n):- Rekursionsanfang: T (0) := 0.- Rekursionsschritt: T (n) := T ( n−1

2 ) + 1.

1. Wir haben n = 2k − 1 gefordert. Beachte: n−12 = 2k−2

2 = 2k−1 − 1.

2. Wir zeigen T (2k − 1) = k mit vollständiger Induktion nach k .Induktionsanfang: T (20 − 1) = T (0) = 0. XInduktionsschritt: T (2k+1 − 1) = T (2k − 1) + 1 Induktionsannahme

= k + 1. X

Binärsuche muss höchstens k Zahlen inspizieren gegenüber 2k −1 Zahlen fürdie lineare Suche: Lineare Suche ist exponentiell langsamer als Binärsuche.

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 24 / 79

Page 107: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Binärsuche: Die LaufzeitWie groß ist

T (n) := maximale Anzahl inspizierter Zellen für ein Array mit n Zellen,

für n = 2k − 1?

Hier ist eine rekursive Definition von T (n):- Rekursionsanfang: T (0) := 0.- Rekursionsschritt: T (n) := T ( n−1

2 ) + 1.

1. Wir haben n = 2k − 1 gefordert. Beachte: n−12 = 2k−2

2 = 2k−1 − 1.

2. Wir zeigen T (2k − 1) =

k mit vollständiger Induktion nach k .Induktionsanfang: T (20 − 1) = T (0) = 0. XInduktionsschritt: T (2k+1 − 1) = T (2k − 1) + 1 Induktionsannahme

= k + 1. X

Binärsuche muss höchstens k Zahlen inspizieren gegenüber 2k −1 Zahlen fürdie lineare Suche: Lineare Suche ist exponentiell langsamer als Binärsuche.

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 24 / 79

Page 108: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Binärsuche: Die LaufzeitWie groß ist

T (n) := maximale Anzahl inspizierter Zellen für ein Array mit n Zellen,

für n = 2k − 1?

Hier ist eine rekursive Definition von T (n):- Rekursionsanfang: T (0) := 0.- Rekursionsschritt: T (n) := T ( n−1

2 ) + 1.

1. Wir haben n = 2k − 1 gefordert. Beachte: n−12 = 2k−2

2 = 2k−1 − 1.

2. Wir zeigen T (2k − 1) = k mit vollständiger Induktion nach k .Induktionsanfang: T (20 − 1) = T (0) = 0. X

Induktionsschritt: T (2k+1 − 1) = T (2k − 1) + 1 Induktionsannahme= k + 1. X

Binärsuche muss höchstens k Zahlen inspizieren gegenüber 2k −1 Zahlen fürdie lineare Suche: Lineare Suche ist exponentiell langsamer als Binärsuche.

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 24 / 79

Page 109: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Binärsuche: Die LaufzeitWie groß ist

T (n) := maximale Anzahl inspizierter Zellen für ein Array mit n Zellen,

für n = 2k − 1?

Hier ist eine rekursive Definition von T (n):- Rekursionsanfang: T (0) := 0.- Rekursionsschritt: T (n) := T ( n−1

2 ) + 1.

1. Wir haben n = 2k − 1 gefordert. Beachte: n−12 = 2k−2

2 = 2k−1 − 1.

2. Wir zeigen T (2k − 1) = k mit vollständiger Induktion nach k .Induktionsanfang: T (20 − 1) = T (0) = 0. XInduktionsschritt: T (2k+1 − 1) =

T (2k − 1) + 1 Induktionsannahme= k + 1. X

Binärsuche muss höchstens k Zahlen inspizieren gegenüber 2k −1 Zahlen fürdie lineare Suche: Lineare Suche ist exponentiell langsamer als Binärsuche.

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 24 / 79

Page 110: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Binärsuche: Die LaufzeitWie groß ist

T (n) := maximale Anzahl inspizierter Zellen für ein Array mit n Zellen,

für n = 2k − 1?

Hier ist eine rekursive Definition von T (n):- Rekursionsanfang: T (0) := 0.- Rekursionsschritt: T (n) := T ( n−1

2 ) + 1.

1. Wir haben n = 2k − 1 gefordert. Beachte: n−12 = 2k−2

2 = 2k−1 − 1.

2. Wir zeigen T (2k − 1) = k mit vollständiger Induktion nach k .Induktionsanfang: T (20 − 1) = T (0) = 0. XInduktionsschritt: T (2k+1 − 1) = T (2k − 1) + 1

Induktionsannahme= k + 1. X

Binärsuche muss höchstens k Zahlen inspizieren gegenüber 2k −1 Zahlen fürdie lineare Suche: Lineare Suche ist exponentiell langsamer als Binärsuche.

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 24 / 79

Page 111: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Binärsuche: Die LaufzeitWie groß ist

T (n) := maximale Anzahl inspizierter Zellen für ein Array mit n Zellen,

für n = 2k − 1?

Hier ist eine rekursive Definition von T (n):- Rekursionsanfang: T (0) := 0.- Rekursionsschritt: T (n) := T ( n−1

2 ) + 1.

1. Wir haben n = 2k − 1 gefordert. Beachte: n−12 = 2k−2

2 = 2k−1 − 1.

2. Wir zeigen T (2k − 1) = k mit vollständiger Induktion nach k .Induktionsanfang: T (20 − 1) = T (0) = 0. XInduktionsschritt: T (2k+1 − 1) = T (2k − 1) + 1 Induktionsannahme

= k + 1. X

Binärsuche muss höchstens k Zahlen inspizieren gegenüber 2k −1 Zahlen fürdie lineare Suche: Lineare Suche ist exponentiell langsamer als Binärsuche.

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 24 / 79

Page 112: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Binärsuche: Die LaufzeitWie groß ist

T (n) := maximale Anzahl inspizierter Zellen für ein Array mit n Zellen,

für n = 2k − 1?

Hier ist eine rekursive Definition von T (n):- Rekursionsanfang: T (0) := 0.- Rekursionsschritt: T (n) := T ( n−1

2 ) + 1.

1. Wir haben n = 2k − 1 gefordert. Beachte: n−12 = 2k−2

2 = 2k−1 − 1.

2. Wir zeigen T (2k − 1) = k mit vollständiger Induktion nach k .Induktionsanfang: T (20 − 1) = T (0) = 0. XInduktionsschritt: T (2k+1 − 1) = T (2k − 1) + 1 Induktionsannahme

= k + 1. X

Binärsuche muss höchstens k Zahlen inspizieren gegenüber 2k −1 Zahlen fürdie lineare Suche: Lineare Suche ist exponentiell langsamer als Binärsuche.

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 24 / 79

Page 113: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Unser Freund, der Logarithmus

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 25 / 79

Page 114: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Rechnen mit Logarithmen

Seien a > 1 und x > 0 reelle Zahlen. loga(x) ist der Logarithmus von x zurBasis a und stimmt mit z genau dann überein, wenn

az = x .

(a) aloga(x) = x .(b) loga(x · y) = loga x + loga y .(c) loga(xy ) = y · loga(x).

(d) loga x = (loga b) · (logb x). Wir „übersetzen“ von Basis a in Basis b.

Was ist 4log2 n?

log2 n = (log2 4) · (log4 n) mit (d).4log2 n = 4(log2 4)·(log4 n) = (4log4 n)log2 4 = n2 mit (a).

Was ist bloga x?loga x = (loga b) · (logb x) mit (d).bloga x = b(loga b)·(logb x) = (blogb x )loga b = x loga b mit (a).

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 26 / 79

Page 115: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Rechnen mit Logarithmen

Seien a > 1 und x > 0 reelle Zahlen. loga(x) ist der Logarithmus von x zurBasis a und stimmt mit z genau dann überein, wenn az = x .

(a) aloga(x) = x .(b) loga(x · y) = loga x + loga y .(c) loga(xy ) = y · loga(x).

(d) loga x = (loga b) · (logb x). Wir „übersetzen“ von Basis a in Basis b.

Was ist 4log2 n?

log2 n = (log2 4) · (log4 n) mit (d).4log2 n = 4(log2 4)·(log4 n) = (4log4 n)log2 4 = n2 mit (a).

Was ist bloga x?loga x = (loga b) · (logb x) mit (d).bloga x = b(loga b)·(logb x) = (blogb x )loga b = x loga b mit (a).

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 26 / 79

Page 116: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Rechnen mit Logarithmen

Seien a > 1 und x > 0 reelle Zahlen. loga(x) ist der Logarithmus von x zurBasis a und stimmt mit z genau dann überein, wenn az = x .

(a) aloga(x) = x .(b) loga(x · y) =

loga x + loga y .(c) loga(xy ) = y · loga(x).

(d) loga x = (loga b) · (logb x). Wir „übersetzen“ von Basis a in Basis b.

Was ist 4log2 n?

log2 n = (log2 4) · (log4 n) mit (d).4log2 n = 4(log2 4)·(log4 n) = (4log4 n)log2 4 = n2 mit (a).

Was ist bloga x?loga x = (loga b) · (logb x) mit (d).bloga x = b(loga b)·(logb x) = (blogb x )loga b = x loga b mit (a).

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 26 / 79

Page 117: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Rechnen mit Logarithmen

Seien a > 1 und x > 0 reelle Zahlen. loga(x) ist der Logarithmus von x zurBasis a und stimmt mit z genau dann überein, wenn az = x .

(a) aloga(x) = x .(b) loga(x · y) = loga x + loga y .(c) loga(xy ) =

y · loga(x).

(d) loga x = (loga b) · (logb x). Wir „übersetzen“ von Basis a in Basis b.

Was ist 4log2 n?

log2 n = (log2 4) · (log4 n) mit (d).4log2 n = 4(log2 4)·(log4 n) = (4log4 n)log2 4 = n2 mit (a).

Was ist bloga x?loga x = (loga b) · (logb x) mit (d).bloga x = b(loga b)·(logb x) = (blogb x )loga b = x loga b mit (a).

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 26 / 79

Page 118: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Rechnen mit Logarithmen

Seien a > 1 und x > 0 reelle Zahlen. loga(x) ist der Logarithmus von x zurBasis a und stimmt mit z genau dann überein, wenn az = x .

(a) aloga(x) = x .(b) loga(x · y) = loga x + loga y .(c) loga(xy ) = y · loga(x).

(d) loga x = (loga b) ·

(logb x). Wir „übersetzen“ von Basis a in Basis b.

Was ist 4log2 n?

log2 n = (log2 4) · (log4 n) mit (d).4log2 n = 4(log2 4)·(log4 n) = (4log4 n)log2 4 = n2 mit (a).

Was ist bloga x?loga x = (loga b) · (logb x) mit (d).bloga x = b(loga b)·(logb x) = (blogb x )loga b = x loga b mit (a).

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 26 / 79

Page 119: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Rechnen mit Logarithmen

Seien a > 1 und x > 0 reelle Zahlen. loga(x) ist der Logarithmus von x zurBasis a und stimmt mit z genau dann überein, wenn az = x .

(a) aloga(x) = x .(b) loga(x · y) = loga x + loga y .(c) loga(xy ) = y · loga(x).

(d) loga x = (loga b) · (logb x). Wir „übersetzen“ von Basis a in Basis b.

Was ist 4log2 n?

log2 n =

(log2 4) · (log4 n) mit (d).4log2 n = 4(log2 4)·(log4 n) = (4log4 n)log2 4 = n2 mit (a).

Was ist bloga x?loga x = (loga b) · (logb x) mit (d).bloga x = b(loga b)·(logb x) = (blogb x )loga b = x loga b mit (a).

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 26 / 79

Page 120: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Rechnen mit Logarithmen

Seien a > 1 und x > 0 reelle Zahlen. loga(x) ist der Logarithmus von x zurBasis a und stimmt mit z genau dann überein, wenn az = x .

(a) aloga(x) = x .(b) loga(x · y) = loga x + loga y .(c) loga(xy ) = y · loga(x).

(d) loga x = (loga b) · (logb x). Wir „übersetzen“ von Basis a in Basis b.

Was ist 4log2 n?

log2 n = (log2 4) · (log4 n) mit (d).

4log2 n = 4(log2 4)·(log4 n) = (4log4 n)log2 4 = n2 mit (a).

Was ist bloga x?loga x = (loga b) · (logb x) mit (d).bloga x = b(loga b)·(logb x) = (blogb x )loga b = x loga b mit (a).

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 26 / 79

Page 121: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Rechnen mit Logarithmen

Seien a > 1 und x > 0 reelle Zahlen. loga(x) ist der Logarithmus von x zurBasis a und stimmt mit z genau dann überein, wenn az = x .

(a) aloga(x) = x .(b) loga(x · y) = loga x + loga y .(c) loga(xy ) = y · loga(x).

(d) loga x = (loga b) · (logb x). Wir „übersetzen“ von Basis a in Basis b.

Was ist 4log2 n?

log2 n = (log2 4) · (log4 n) mit (d).4log2 n = 4(log2 4)·(log4 n)

= (4log4 n)log2 4 = n2 mit (a).

Was ist bloga x?loga x = (loga b) · (logb x) mit (d).bloga x = b(loga b)·(logb x) = (blogb x )loga b = x loga b mit (a).

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 26 / 79

Page 122: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Rechnen mit Logarithmen

Seien a > 1 und x > 0 reelle Zahlen. loga(x) ist der Logarithmus von x zurBasis a und stimmt mit z genau dann überein, wenn az = x .

(a) aloga(x) = x .(b) loga(x · y) = loga x + loga y .(c) loga(xy ) = y · loga(x).

(d) loga x = (loga b) · (logb x). Wir „übersetzen“ von Basis a in Basis b.

Was ist 4log2 n?

log2 n = (log2 4) · (log4 n) mit (d).4log2 n = 4(log2 4)·(log4 n) = (4log4 n)log2 4

= n2 mit (a).

Was ist bloga x?loga x = (loga b) · (logb x) mit (d).bloga x = b(loga b)·(logb x) = (blogb x )loga b = x loga b mit (a).

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 26 / 79

Page 123: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Rechnen mit Logarithmen

Seien a > 1 und x > 0 reelle Zahlen. loga(x) ist der Logarithmus von x zurBasis a und stimmt mit z genau dann überein, wenn az = x .

(a) aloga(x) = x .(b) loga(x · y) = loga x + loga y .(c) loga(xy ) = y · loga(x).

(d) loga x = (loga b) · (logb x). Wir „übersetzen“ von Basis a in Basis b.

Was ist 4log2 n?

log2 n = (log2 4) · (log4 n) mit (d).4log2 n = 4(log2 4)·(log4 n) = (4log4 n)log2 4 = n2 mit (a).

Was ist bloga x?loga x = (loga b) · (logb x) mit (d).bloga x = b(loga b)·(logb x) = (blogb x )loga b = x loga b mit (a).

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 26 / 79

Page 124: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Rechnen mit Logarithmen

Seien a > 1 und x > 0 reelle Zahlen. loga(x) ist der Logarithmus von x zurBasis a und stimmt mit z genau dann überein, wenn az = x .

(a) aloga(x) = x .(b) loga(x · y) = loga x + loga y .(c) loga(xy ) = y · loga(x).

(d) loga x = (loga b) · (logb x). Wir „übersetzen“ von Basis a in Basis b.

Was ist 4log2 n?

log2 n = (log2 4) · (log4 n) mit (d).4log2 n = 4(log2 4)·(log4 n) = (4log4 n)log2 4 = n2 mit (a).

Was ist bloga x?

loga x = (loga b) · (logb x) mit (d).bloga x = b(loga b)·(logb x) = (blogb x )loga b = x loga b mit (a).

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 26 / 79

Page 125: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Rechnen mit Logarithmen

Seien a > 1 und x > 0 reelle Zahlen. loga(x) ist der Logarithmus von x zurBasis a und stimmt mit z genau dann überein, wenn az = x .

(a) aloga(x) = x .(b) loga(x · y) = loga x + loga y .(c) loga(xy ) = y · loga(x).

(d) loga x = (loga b) · (logb x). Wir „übersetzen“ von Basis a in Basis b.

Was ist 4log2 n?

log2 n = (log2 4) · (log4 n) mit (d).4log2 n = 4(log2 4)·(log4 n) = (4log4 n)log2 4 = n2 mit (a).

Was ist bloga x?loga x = (loga b) · (logb x) mit (d).

bloga x = b(loga b)·(logb x) = (blogb x )loga b = x loga b mit (a).

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 26 / 79

Page 126: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Rechnen mit Logarithmen

Seien a > 1 und x > 0 reelle Zahlen. loga(x) ist der Logarithmus von x zurBasis a und stimmt mit z genau dann überein, wenn az = x .

(a) aloga(x) = x .(b) loga(x · y) = loga x + loga y .(c) loga(xy ) = y · loga(x).

(d) loga x = (loga b) · (logb x). Wir „übersetzen“ von Basis a in Basis b.

Was ist 4log2 n?

log2 n = (log2 4) · (log4 n) mit (d).4log2 n = 4(log2 4)·(log4 n) = (4log4 n)log2 4 = n2 mit (a).

Was ist bloga x?loga x = (loga b) · (logb x) mit (d).bloga x = b(loga b)·(logb x)

= (blogb x )loga b = x loga b mit (a).

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 26 / 79

Page 127: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Rechnen mit Logarithmen

Seien a > 1 und x > 0 reelle Zahlen. loga(x) ist der Logarithmus von x zurBasis a und stimmt mit z genau dann überein, wenn az = x .

(a) aloga(x) = x .(b) loga(x · y) = loga x + loga y .(c) loga(xy ) = y · loga(x).

(d) loga x = (loga b) · (logb x). Wir „übersetzen“ von Basis a in Basis b.

Was ist 4log2 n?

log2 n = (log2 4) · (log4 n) mit (d).4log2 n = 4(log2 4)·(log4 n) = (4log4 n)log2 4 = n2 mit (a).

Was ist bloga x?loga x = (loga b) · (logb x) mit (d).bloga x = b(loga b)·(logb x) = (blogb x )loga b

= x loga b mit (a).

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 26 / 79

Page 128: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Rechnen mit Logarithmen

Seien a > 1 und x > 0 reelle Zahlen. loga(x) ist der Logarithmus von x zurBasis a und stimmt mit z genau dann überein, wenn az = x .

(a) aloga(x) = x .(b) loga(x · y) = loga x + loga y .(c) loga(xy ) = y · loga(x).

(d) loga x = (loga b) · (logb x). Wir „übersetzen“ von Basis a in Basis b.

Was ist 4log2 n?

log2 n = (log2 4) · (log4 n) mit (d).4log2 n = 4(log2 4)·(log4 n) = (4log4 n)log2 4 = n2 mit (a).

Was ist bloga x?loga x = (loga b) · (logb x) mit (d).bloga x = b(loga b)·(logb x) = (blogb x )loga b = x loga b mit (a).

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 26 / 79

Page 129: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Binomialkoeffizienten

(nk

)=

n·(n−1)···(n−k+1)

1·2···k =

n!k!·(n−k)! falls 1 ≤ k ≤ n − 1,

1 falls k = 0 oder k = n.

Sei S eine Menge von n Elementen. Dann hat S genau(n

k

)Teilmengen

der Größe k .Binomischer Lehrsatz: Es gilt (a + b)n =

∑nk=0

(nk

)ak bn−k . Also ist

n∑i=0

(ni

)= 2n: eine n-elementige Menge hat 2n Teilmengen.

Sei Perm(S) die Menge aller Permutationen von S. Dann ist|Perm(S)| = n!

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 27 / 79

Page 130: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Binomialkoeffizienten

(nk

)=

n·(n−1)···(n−k+1)

1·2···k = n!k!·(n−k)! falls 1 ≤ k ≤ n − 1,

1 falls k = 0 oder k = n.

Sei S eine Menge von n Elementen. Dann hat S genau(n

k

)Teilmengen

der Größe k .Binomischer Lehrsatz: Es gilt (a + b)n =

∑nk=0

(nk

)ak bn−k . Also ist

n∑i=0

(ni

)= 2n: eine n-elementige Menge hat 2n Teilmengen.

Sei Perm(S) die Menge aller Permutationen von S. Dann ist|Perm(S)| = n!

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 27 / 79

Page 131: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Binomialkoeffizienten

(nk

)=

n·(n−1)···(n−k+1)

1·2···k = n!k!·(n−k)! falls 1 ≤ k ≤ n − 1,

1 falls k = 0 oder k = n.

Sei S eine Menge von n Elementen. Dann hat S genau(n

k

)Teilmengen

der Größe k .Binomischer Lehrsatz: Es gilt (a + b)n =

∑nk=0

(nk

)ak bn−k . Also ist

n∑i=0

(ni

)= 2n: eine n-elementige Menge hat 2n Teilmengen.

Sei Perm(S) die Menge aller Permutationen von S. Dann ist|Perm(S)| = n!

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 27 / 79

Page 132: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Binomialkoeffizienten

(nk

)=

n·(n−1)···(n−k+1)

1·2···k = n!k!·(n−k)! falls 1 ≤ k ≤ n − 1,

1 falls k = 0 oder k = n.

Sei S eine Menge von n Elementen. Dann hat S genau(n

k

)Teilmengen

der Größe k .

Binomischer Lehrsatz: Es gilt (a + b)n =∑n

k=0

(nk

)ak bn−k . Also ist

n∑i=0

(ni

)= 2n: eine n-elementige Menge hat 2n Teilmengen.

Sei Perm(S) die Menge aller Permutationen von S. Dann ist|Perm(S)| = n!

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 27 / 79

Page 133: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Binomialkoeffizienten

(nk

)=

n·(n−1)···(n−k+1)

1·2···k = n!k!·(n−k)! falls 1 ≤ k ≤ n − 1,

1 falls k = 0 oder k = n.

Sei S eine Menge von n Elementen. Dann hat S genau(n

k

)Teilmengen

der Größe k .Binomischer Lehrsatz: Es gilt (a + b)n =

∑nk=0

(nk

)ak bn−k .

Also istn∑

i=0

(ni

)= 2n: eine n-elementige Menge hat 2n Teilmengen.

Sei Perm(S) die Menge aller Permutationen von S. Dann ist|Perm(S)| = n!

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 27 / 79

Page 134: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Binomialkoeffizienten

(nk

)=

n·(n−1)···(n−k+1)

1·2···k = n!k!·(n−k)! falls 1 ≤ k ≤ n − 1,

1 falls k = 0 oder k = n.

Sei S eine Menge von n Elementen. Dann hat S genau(n

k

)Teilmengen

der Größe k .Binomischer Lehrsatz: Es gilt (a + b)n =

∑nk=0

(nk

)ak bn−k . Also ist

n∑i=0

(ni

)= 2n:

eine n-elementige Menge hat 2n Teilmengen.

Sei Perm(S) die Menge aller Permutationen von S. Dann ist|Perm(S)| = n!

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 27 / 79

Page 135: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Binomialkoeffizienten

(nk

)=

n·(n−1)···(n−k+1)

1·2···k = n!k!·(n−k)! falls 1 ≤ k ≤ n − 1,

1 falls k = 0 oder k = n.

Sei S eine Menge von n Elementen. Dann hat S genau(n

k

)Teilmengen

der Größe k .Binomischer Lehrsatz: Es gilt (a + b)n =

∑nk=0

(nk

)ak bn−k . Also ist

n∑i=0

(ni

)= 2n: eine n-elementige Menge hat 2n Teilmengen.

Sei Perm(S) die Menge aller Permutationen von S. Dann ist|Perm(S)| = n!

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 27 / 79

Page 136: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Binomialkoeffizienten

(nk

)=

n·(n−1)···(n−k+1)

1·2···k = n!k!·(n−k)! falls 1 ≤ k ≤ n − 1,

1 falls k = 0 oder k = n.

Sei S eine Menge von n Elementen. Dann hat S genau(n

k

)Teilmengen

der Größe k .Binomischer Lehrsatz: Es gilt (a + b)n =

∑nk=0

(nk

)ak bn−k . Also ist

n∑i=0

(ni

)= 2n: eine n-elementige Menge hat 2n Teilmengen.

Sei Perm(S) die Menge aller Permutationen von S. Dann ist|Perm(S)| = n!

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 27 / 79

Page 137: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

k -elementige Teilmengen der Menge 1, . . . ,n

Wieviele k -elementige Teilmengen von 1, . . . ,n gibt es?Wir führen eine Induktion nach n.

Induktionsanfang für n = 1:I(1

0

)=(1

1

)= 1.

I Es gibt genau eine Teilmenge von 1 mit keinem Element sowie genau eineTeilmenge mit einem Element.

Induktionsschritt: Wir wissen, dass 1, . . . ,n genau(n

k

)Teilmengen mit

genau k Elementen hat.I Wieviele k -elementige Teilmengen von 1, . . . , n, n + 1 besitzen das

Element n + 1 nicht?Nach Induktionsannahme genau

(nk

)Teilmengen.

I Wieviele k -elementige Teilmengen von 1, . . . , n, n + 1 besitzen dasElement n + 1?Nach Induktionsannahme genau

( nk−1

)Teilmengen.

I Es ist(n

k

)+( n

k−1

)= n!

k!(n−k)! + n!(k−1)!(n−(k−1))! = n!(k−1)!(n−(k−1))!+n!k!(n−k)!

k!(k−1)!(n−k)!(n−(k−1))! =n!(n−(k−1))+n!k

k!(n−(k−1))! = n!(n+1)k!(n+1−k)! = (n+1)!

k!(n+1−k)! =(n+1

k

)und das war zu zeigen.

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 28 / 79

Page 138: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

k -elementige Teilmengen der Menge 1, . . . ,n

Wieviele k -elementige Teilmengen von 1, . . . ,n gibt es?Wir führen eine Induktion nach n.

Induktionsanfang für n = 1:

I(1

0

)=(1

1

)= 1.

I Es gibt genau eine Teilmenge von 1 mit keinem Element sowie genau eineTeilmenge mit einem Element.

Induktionsschritt: Wir wissen, dass 1, . . . ,n genau(n

k

)Teilmengen mit

genau k Elementen hat.I Wieviele k -elementige Teilmengen von 1, . . . , n, n + 1 besitzen das

Element n + 1 nicht?Nach Induktionsannahme genau

(nk

)Teilmengen.

I Wieviele k -elementige Teilmengen von 1, . . . , n, n + 1 besitzen dasElement n + 1?Nach Induktionsannahme genau

( nk−1

)Teilmengen.

I Es ist(n

k

)+( n

k−1

)= n!

k!(n−k)! + n!(k−1)!(n−(k−1))! = n!(k−1)!(n−(k−1))!+n!k!(n−k)!

k!(k−1)!(n−k)!(n−(k−1))! =n!(n−(k−1))+n!k

k!(n−(k−1))! = n!(n+1)k!(n+1−k)! = (n+1)!

k!(n+1−k)! =(n+1

k

)und das war zu zeigen.

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 28 / 79

Page 139: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

k -elementige Teilmengen der Menge 1, . . . ,n

Wieviele k -elementige Teilmengen von 1, . . . ,n gibt es?Wir führen eine Induktion nach n.

Induktionsanfang für n = 1:I(1

0

)=(1

1

)= 1.

I Es gibt genau eine Teilmenge von 1 mit keinem Element sowie genau eineTeilmenge mit einem Element.

Induktionsschritt: Wir wissen, dass 1, . . . ,n genau(n

k

)Teilmengen mit

genau k Elementen hat.I Wieviele k -elementige Teilmengen von 1, . . . , n, n + 1 besitzen das

Element n + 1 nicht?Nach Induktionsannahme genau

(nk

)Teilmengen.

I Wieviele k -elementige Teilmengen von 1, . . . , n, n + 1 besitzen dasElement n + 1?Nach Induktionsannahme genau

( nk−1

)Teilmengen.

I Es ist(n

k

)+( n

k−1

)= n!

k!(n−k)! + n!(k−1)!(n−(k−1))! = n!(k−1)!(n−(k−1))!+n!k!(n−k)!

k!(k−1)!(n−k)!(n−(k−1))! =n!(n−(k−1))+n!k

k!(n−(k−1))! = n!(n+1)k!(n+1−k)! = (n+1)!

k!(n+1−k)! =(n+1

k

)und das war zu zeigen.

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 28 / 79

Page 140: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

k -elementige Teilmengen der Menge 1, . . . ,n

Wieviele k -elementige Teilmengen von 1, . . . ,n gibt es?Wir führen eine Induktion nach n.

Induktionsanfang für n = 1:I(1

0

)=(1

1

)= 1.

I Es gibt genau eine Teilmenge von 1 mit keinem Element sowie genau eineTeilmenge mit einem Element.

Induktionsschritt: Wir wissen, dass 1, . . . ,n genau(n

k

)Teilmengen mit

genau k Elementen hat.I Wieviele k -elementige Teilmengen von 1, . . . , n, n + 1 besitzen das

Element n + 1 nicht?Nach Induktionsannahme genau

(nk

)Teilmengen.

I Wieviele k -elementige Teilmengen von 1, . . . , n, n + 1 besitzen dasElement n + 1?Nach Induktionsannahme genau

( nk−1

)Teilmengen.

I Es ist(n

k

)+( n

k−1

)= n!

k!(n−k)! + n!(k−1)!(n−(k−1))! = n!(k−1)!(n−(k−1))!+n!k!(n−k)!

k!(k−1)!(n−k)!(n−(k−1))! =n!(n−(k−1))+n!k

k!(n−(k−1))! = n!(n+1)k!(n+1−k)! = (n+1)!

k!(n+1−k)! =(n+1

k

)und das war zu zeigen.

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 28 / 79

Page 141: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

k -elementige Teilmengen der Menge 1, . . . ,n

Wieviele k -elementige Teilmengen von 1, . . . ,n gibt es?Wir führen eine Induktion nach n.

Induktionsanfang für n = 1:I(1

0

)=(1

1

)= 1.

I Es gibt genau eine Teilmenge von 1 mit keinem Element sowie genau eineTeilmenge mit einem Element.

Induktionsschritt:

Wir wissen, dass 1, . . . ,n genau(n

k

)Teilmengen mit

genau k Elementen hat.I Wieviele k -elementige Teilmengen von 1, . . . , n, n + 1 besitzen das

Element n + 1 nicht?Nach Induktionsannahme genau

(nk

)Teilmengen.

I Wieviele k -elementige Teilmengen von 1, . . . , n, n + 1 besitzen dasElement n + 1?Nach Induktionsannahme genau

( nk−1

)Teilmengen.

I Es ist(n

k

)+( n

k−1

)= n!

k!(n−k)! + n!(k−1)!(n−(k−1))! = n!(k−1)!(n−(k−1))!+n!k!(n−k)!

k!(k−1)!(n−k)!(n−(k−1))! =n!(n−(k−1))+n!k

k!(n−(k−1))! = n!(n+1)k!(n+1−k)! = (n+1)!

k!(n+1−k)! =(n+1

k

)und das war zu zeigen.

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 28 / 79

Page 142: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

k -elementige Teilmengen der Menge 1, . . . ,n

Wieviele k -elementige Teilmengen von 1, . . . ,n gibt es?Wir führen eine Induktion nach n.

Induktionsanfang für n = 1:I(1

0

)=(1

1

)= 1.

I Es gibt genau eine Teilmenge von 1 mit keinem Element sowie genau eineTeilmenge mit einem Element.

Induktionsschritt: Wir wissen, dass 1, . . . ,n genau(n

k

)Teilmengen mit

genau k Elementen hat.

I Wieviele k -elementige Teilmengen von 1, . . . , n, n + 1 besitzen dasElement n + 1 nicht?Nach Induktionsannahme genau

(nk

)Teilmengen.

I Wieviele k -elementige Teilmengen von 1, . . . , n, n + 1 besitzen dasElement n + 1?Nach Induktionsannahme genau

( nk−1

)Teilmengen.

I Es ist(n

k

)+( n

k−1

)= n!

k!(n−k)! + n!(k−1)!(n−(k−1))! = n!(k−1)!(n−(k−1))!+n!k!(n−k)!

k!(k−1)!(n−k)!(n−(k−1))! =n!(n−(k−1))+n!k

k!(n−(k−1))! = n!(n+1)k!(n+1−k)! = (n+1)!

k!(n+1−k)! =(n+1

k

)und das war zu zeigen.

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 28 / 79

Page 143: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

k -elementige Teilmengen der Menge 1, . . . ,n

Wieviele k -elementige Teilmengen von 1, . . . ,n gibt es?Wir führen eine Induktion nach n.

Induktionsanfang für n = 1:I(1

0

)=(1

1

)= 1.

I Es gibt genau eine Teilmenge von 1 mit keinem Element sowie genau eineTeilmenge mit einem Element.

Induktionsschritt: Wir wissen, dass 1, . . . ,n genau(n

k

)Teilmengen mit

genau k Elementen hat.I Wieviele k -elementige Teilmengen von 1, . . . , n, n + 1 besitzen das

Element n + 1 nicht?

Nach Induktionsannahme genau(n

k

)Teilmengen.

I Wieviele k -elementige Teilmengen von 1, . . . , n, n + 1 besitzen dasElement n + 1?Nach Induktionsannahme genau

( nk−1

)Teilmengen.

I Es ist(n

k

)+( n

k−1

)= n!

k!(n−k)! + n!(k−1)!(n−(k−1))! = n!(k−1)!(n−(k−1))!+n!k!(n−k)!

k!(k−1)!(n−k)!(n−(k−1))! =n!(n−(k−1))+n!k

k!(n−(k−1))! = n!(n+1)k!(n+1−k)! = (n+1)!

k!(n+1−k)! =(n+1

k

)und das war zu zeigen.

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 28 / 79

Page 144: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

k -elementige Teilmengen der Menge 1, . . . ,n

Wieviele k -elementige Teilmengen von 1, . . . ,n gibt es?Wir führen eine Induktion nach n.

Induktionsanfang für n = 1:I(1

0

)=(1

1

)= 1.

I Es gibt genau eine Teilmenge von 1 mit keinem Element sowie genau eineTeilmenge mit einem Element.

Induktionsschritt: Wir wissen, dass 1, . . . ,n genau(n

k

)Teilmengen mit

genau k Elementen hat.I Wieviele k -elementige Teilmengen von 1, . . . , n, n + 1 besitzen das

Element n + 1 nicht?Nach Induktionsannahme genau

(nk

)Teilmengen.

I Wieviele k -elementige Teilmengen von 1, . . . , n, n + 1 besitzen dasElement n + 1?Nach Induktionsannahme genau

( nk−1

)Teilmengen.

I Es ist(n

k

)+( n

k−1

)= n!

k!(n−k)! + n!(k−1)!(n−(k−1))! = n!(k−1)!(n−(k−1))!+n!k!(n−k)!

k!(k−1)!(n−k)!(n−(k−1))! =n!(n−(k−1))+n!k

k!(n−(k−1))! = n!(n+1)k!(n+1−k)! = (n+1)!

k!(n+1−k)! =(n+1

k

)und das war zu zeigen.

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 28 / 79

Page 145: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

k -elementige Teilmengen der Menge 1, . . . ,n

Wieviele k -elementige Teilmengen von 1, . . . ,n gibt es?Wir führen eine Induktion nach n.

Induktionsanfang für n = 1:I(1

0

)=(1

1

)= 1.

I Es gibt genau eine Teilmenge von 1 mit keinem Element sowie genau eineTeilmenge mit einem Element.

Induktionsschritt: Wir wissen, dass 1, . . . ,n genau(n

k

)Teilmengen mit

genau k Elementen hat.I Wieviele k -elementige Teilmengen von 1, . . . , n, n + 1 besitzen das

Element n + 1 nicht?Nach Induktionsannahme genau

(nk

)Teilmengen.

I Wieviele k -elementige Teilmengen von 1, . . . , n, n + 1 besitzen dasElement n + 1?

Nach Induktionsannahme genau( n

k−1

)Teilmengen.

I Es ist(n

k

)+( n

k−1

)= n!

k!(n−k)! + n!(k−1)!(n−(k−1))! = n!(k−1)!(n−(k−1))!+n!k!(n−k)!

k!(k−1)!(n−k)!(n−(k−1))! =n!(n−(k−1))+n!k

k!(n−(k−1))! = n!(n+1)k!(n+1−k)! = (n+1)!

k!(n+1−k)! =(n+1

k

)und das war zu zeigen.

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 28 / 79

Page 146: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

k -elementige Teilmengen der Menge 1, . . . ,n

Wieviele k -elementige Teilmengen von 1, . . . ,n gibt es?Wir führen eine Induktion nach n.

Induktionsanfang für n = 1:I(1

0

)=(1

1

)= 1.

I Es gibt genau eine Teilmenge von 1 mit keinem Element sowie genau eineTeilmenge mit einem Element.

Induktionsschritt: Wir wissen, dass 1, . . . ,n genau(n

k

)Teilmengen mit

genau k Elementen hat.I Wieviele k -elementige Teilmengen von 1, . . . , n, n + 1 besitzen das

Element n + 1 nicht?Nach Induktionsannahme genau

(nk

)Teilmengen.

I Wieviele k -elementige Teilmengen von 1, . . . , n, n + 1 besitzen dasElement n + 1?Nach Induktionsannahme genau

( nk−1

)Teilmengen.

I Es ist(n

k

)+( n

k−1

)= n!

k!(n−k)! + n!(k−1)!(n−(k−1))! = n!(k−1)!(n−(k−1))!+n!k!(n−k)!

k!(k−1)!(n−k)!(n−(k−1))! =n!(n−(k−1))+n!k

k!(n−(k−1))! = n!(n+1)k!(n+1−k)! = (n+1)!

k!(n+1−k)! =(n+1

k

)und das war zu zeigen.

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 28 / 79

Page 147: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

k -elementige Teilmengen der Menge 1, . . . ,n

Wieviele k -elementige Teilmengen von 1, . . . ,n gibt es?Wir führen eine Induktion nach n.

Induktionsanfang für n = 1:I(1

0

)=(1

1

)= 1.

I Es gibt genau eine Teilmenge von 1 mit keinem Element sowie genau eineTeilmenge mit einem Element.

Induktionsschritt: Wir wissen, dass 1, . . . ,n genau(n

k

)Teilmengen mit

genau k Elementen hat.I Wieviele k -elementige Teilmengen von 1, . . . , n, n + 1 besitzen das

Element n + 1 nicht?Nach Induktionsannahme genau

(nk

)Teilmengen.

I Wieviele k -elementige Teilmengen von 1, . . . , n, n + 1 besitzen dasElement n + 1?Nach Induktionsannahme genau

( nk−1

)Teilmengen.

I Es ist(n

k

)+( n

k−1

)= n!

k!(n−k)! + n!(k−1)!(n−(k−1))!

= n!(k−1)!(n−(k−1))!+n!k!(n−k)!k!(k−1)!(n−k)!(n−(k−1))! =

n!(n−(k−1))+n!kk!(n−(k−1))! = n!(n+1)

k!(n+1−k)! = (n+1)!k!(n+1−k)! =

(n+1k

)und das war zu zeigen.

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 28 / 79

Page 148: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

k -elementige Teilmengen der Menge 1, . . . ,n

Wieviele k -elementige Teilmengen von 1, . . . ,n gibt es?Wir führen eine Induktion nach n.

Induktionsanfang für n = 1:I(1

0

)=(1

1

)= 1.

I Es gibt genau eine Teilmenge von 1 mit keinem Element sowie genau eineTeilmenge mit einem Element.

Induktionsschritt: Wir wissen, dass 1, . . . ,n genau(n

k

)Teilmengen mit

genau k Elementen hat.I Wieviele k -elementige Teilmengen von 1, . . . , n, n + 1 besitzen das

Element n + 1 nicht?Nach Induktionsannahme genau

(nk

)Teilmengen.

I Wieviele k -elementige Teilmengen von 1, . . . , n, n + 1 besitzen dasElement n + 1?Nach Induktionsannahme genau

( nk−1

)Teilmengen.

I Es ist(n

k

)+( n

k−1

)= n!

k!(n−k)! + n!(k−1)!(n−(k−1))! = n!(k−1)!(n−(k−1))!+n!k!(n−k)!

k!(k−1)!(n−k)!(n−(k−1))!

=n!(n−(k−1))+n!k

k!(n−(k−1))! = n!(n+1)k!(n+1−k)! = (n+1)!

k!(n+1−k)! =(n+1

k

)und das war zu zeigen.

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 28 / 79

Page 149: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

k -elementige Teilmengen der Menge 1, . . . ,n

Wieviele k -elementige Teilmengen von 1, . . . ,n gibt es?Wir führen eine Induktion nach n.

Induktionsanfang für n = 1:I(1

0

)=(1

1

)= 1.

I Es gibt genau eine Teilmenge von 1 mit keinem Element sowie genau eineTeilmenge mit einem Element.

Induktionsschritt: Wir wissen, dass 1, . . . ,n genau(n

k

)Teilmengen mit

genau k Elementen hat.I Wieviele k -elementige Teilmengen von 1, . . . , n, n + 1 besitzen das

Element n + 1 nicht?Nach Induktionsannahme genau

(nk

)Teilmengen.

I Wieviele k -elementige Teilmengen von 1, . . . , n, n + 1 besitzen dasElement n + 1?Nach Induktionsannahme genau

( nk−1

)Teilmengen.

I Es ist(n

k

)+( n

k−1

)= n!

k!(n−k)! + n!(k−1)!(n−(k−1))! = n!(k−1)!(n−(k−1))!+n!k!(n−k)!

k!(k−1)!(n−k)!(n−(k−1))! =n!(n−(k−1))+n!k

k!(n−(k−1))!

= n!(n+1)k!(n+1−k)! = (n+1)!

k!(n+1−k)! =(n+1

k

)und das war zu zeigen.

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 28 / 79

Page 150: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

k -elementige Teilmengen der Menge 1, . . . ,n

Wieviele k -elementige Teilmengen von 1, . . . ,n gibt es?Wir führen eine Induktion nach n.

Induktionsanfang für n = 1:I(1

0

)=(1

1

)= 1.

I Es gibt genau eine Teilmenge von 1 mit keinem Element sowie genau eineTeilmenge mit einem Element.

Induktionsschritt: Wir wissen, dass 1, . . . ,n genau(n

k

)Teilmengen mit

genau k Elementen hat.I Wieviele k -elementige Teilmengen von 1, . . . , n, n + 1 besitzen das

Element n + 1 nicht?Nach Induktionsannahme genau

(nk

)Teilmengen.

I Wieviele k -elementige Teilmengen von 1, . . . , n, n + 1 besitzen dasElement n + 1?Nach Induktionsannahme genau

( nk−1

)Teilmengen.

I Es ist(n

k

)+( n

k−1

)= n!

k!(n−k)! + n!(k−1)!(n−(k−1))! = n!(k−1)!(n−(k−1))!+n!k!(n−k)!

k!(k−1)!(n−k)!(n−(k−1))! =n!(n−(k−1))+n!k

k!(n−(k−1))! = n!(n+1)k!(n+1−k)! = (n+1)!

k!(n+1−k)! =(n+1

k

)

und das war zu zeigen.

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 28 / 79

Page 151: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

k -elementige Teilmengen der Menge 1, . . . ,n

Wieviele k -elementige Teilmengen von 1, . . . ,n gibt es?Wir führen eine Induktion nach n.

Induktionsanfang für n = 1:I(1

0

)=(1

1

)= 1.

I Es gibt genau eine Teilmenge von 1 mit keinem Element sowie genau eineTeilmenge mit einem Element.

Induktionsschritt: Wir wissen, dass 1, . . . ,n genau(n

k

)Teilmengen mit

genau k Elementen hat.I Wieviele k -elementige Teilmengen von 1, . . . , n, n + 1 besitzen das

Element n + 1 nicht?Nach Induktionsannahme genau

(nk

)Teilmengen.

I Wieviele k -elementige Teilmengen von 1, . . . , n, n + 1 besitzen dasElement n + 1?Nach Induktionsannahme genau

( nk−1

)Teilmengen.

I Es ist(n

k

)+( n

k−1

)= n!

k!(n−k)! + n!(k−1)!(n−(k−1))! = n!(k−1)!(n−(k−1))!+n!k!(n−k)!

k!(k−1)!(n−k)!(n−(k−1))! =n!(n−(k−1))+n!k

k!(n−(k−1))! = n!(n+1)k!(n+1−k)! = (n+1)!

k!(n+1−k)! =(n+1

k

)und das war zu zeigen.

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 28 / 79

Page 152: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Laufzeitmessung

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 29 / 79

Page 153: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Eingabelänge

Wie gut skaliert ein Programm, d.h.wie stark nimmt die Laufzeit zu, wenn die Eingabelänge vergrößert wird?

Was ist denn überhaupt die Länge einer Eingabe?

→ Definiere Eingabelänge abhängig von der Problemstellung. Zum Beispiel:

(a) Wenn ein Array mit n „Schlüsseln“ zu sortieren ist, dann ist

die Anzahl n der Schlüssel

ein vernünftiges Maß für die Eingabelänge.(b) Wenn ein algorithmisches Problem für einen Graphen mit Knotenmenge

V und Kantenmenge E zu lösen ist, dann ist die Summe

|V |+ |E |

der Knoten- und Kantenzahl sinnvoll.

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 30 / 79

Page 154: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Eingabelänge

Wie gut skaliert ein Programm, d.h.wie stark nimmt die Laufzeit zu, wenn die Eingabelänge vergrößert wird?

Was ist denn überhaupt die Länge einer Eingabe?

→ Definiere Eingabelänge abhängig von der Problemstellung. Zum Beispiel:

(a) Wenn ein Array mit n „Schlüsseln“ zu sortieren ist, dann ist

die Anzahl n der Schlüssel

ein vernünftiges Maß für die Eingabelänge.(b) Wenn ein algorithmisches Problem für einen Graphen mit Knotenmenge

V und Kantenmenge E zu lösen ist, dann ist

die Summe

|V |+ |E |

der Knoten- und Kantenzahl sinnvoll.

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 30 / 79

Page 155: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Eingabelänge

Wie gut skaliert ein Programm, d.h.wie stark nimmt die Laufzeit zu, wenn die Eingabelänge vergrößert wird?

Was ist denn überhaupt die Länge einer Eingabe?

→ Definiere Eingabelänge abhängig von der Problemstellung. Zum Beispiel:

(a) Wenn ein Array mit n „Schlüsseln“ zu sortieren ist, dann ist

die Anzahl n der Schlüssel

ein vernünftiges Maß für die Eingabelänge.(b) Wenn ein algorithmisches Problem für einen Graphen mit Knotenmenge

V und Kantenmenge E zu lösen ist, dann ist die Summe

|V |+ |E |

der Knoten- und Kantenzahl sinnvoll.

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 30 / 79

Page 156: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Die worst-case Laufzeit

Sei P ein Programm. Für jede Eingabelänge n setze

ZeitP(n) = größte Laufzeit von P auf einer Eingabe der Länge n.

Wenn also die Funktion

Länge : Menge aller möglichen Eingaben→ N

einer Eingabe x die Eingabelänge „Länge(x)“ zuweist, dann ist

ZeitP(n) =

maxEingabe x

Länge(x)=n

Anzahl der Schritte von Programm P für Eingabe x

die „worst-case Laufzeit“ von P für Eingaben der Länge n.

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 31 / 79

Page 157: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Die worst-case Laufzeit

Sei P ein Programm. Für jede Eingabelänge n setze

ZeitP(n) = größte Laufzeit von P auf einer Eingabe der Länge n.

Wenn also die Funktion

Länge : Menge aller möglichen Eingaben→ N

einer Eingabe x die Eingabelänge „Länge(x)“ zuweist, dann ist

ZeitP(n) = maxEingabe x

Länge(x)=n

Anzahl der Schritte von Programm P für Eingabe x

die „worst-case Laufzeit“ von P für Eingaben der Länge n.

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 31 / 79

Page 158: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Laufzeitmessung

Für welchen Rechner sollen wir die Laufzeit berechnen?

Analysiere die Laufzeit auf einem abstrakten Rechner:I Der Speicher besteht aus Registern, die eine ganze Zahl speichern können.I Eine CPU führt einfache boolesche und arithmetische Operationen aus.I Daten werden zwischen CPU und Speicher durch (indirekte) Lade- und

Speicherbefehle ausgetauscht.

Damit ist die Laufzeitberechnung für jeden modernen sequentiellenRechner gültig, aber wir erhalten für einen speziellen Rechner nur eine

bis auf einen konstanten Faktor

exakte Schätzung.

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 32 / 79

Page 159: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Laufzeitmessung

Für welchen Rechner sollen wir die Laufzeit berechnen?

Analysiere die Laufzeit auf einem abstrakten Rechner:I Der Speicher besteht aus Registern, die eine ganze Zahl speichern können.I Eine CPU führt einfache boolesche und arithmetische Operationen aus.I Daten werden zwischen CPU und Speicher durch (indirekte) Lade- und

Speicherbefehle ausgetauscht.

Damit ist die Laufzeitberechnung für jeden modernen sequentiellenRechner gültig, aber wir erhalten für einen speziellen Rechner nur eine

bis auf einen konstanten Faktor

exakte Schätzung.

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 32 / 79

Page 160: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Laufzeitmessung

Für welchen Rechner sollen wir die Laufzeit berechnen?

Analysiere die Laufzeit auf einem abstrakten Rechner:I Der Speicher besteht aus Registern, die eine ganze Zahl speichern können.I Eine CPU führt einfache boolesche und arithmetische Operationen aus.I Daten werden zwischen CPU und Speicher durch (indirekte) Lade- und

Speicherbefehle ausgetauscht.

Damit ist die Laufzeitberechnung für jeden modernen sequentiellenRechner gültig, aber

wir erhalten für einen speziellen Rechner nur eine

bis auf einen konstanten Faktor

exakte Schätzung.

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 32 / 79

Page 161: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Laufzeitmessung

Für welchen Rechner sollen wir die Laufzeit berechnen?

Analysiere die Laufzeit auf einem abstrakten Rechner:I Der Speicher besteht aus Registern, die eine ganze Zahl speichern können.I Eine CPU führt einfache boolesche und arithmetische Operationen aus.I Daten werden zwischen CPU und Speicher durch (indirekte) Lade- und

Speicherbefehle ausgetauscht.

Damit ist die Laufzeitberechnung für jeden modernen sequentiellenRechner gültig, aber wir erhalten für einen speziellen Rechner nur eine

bis auf einen konstanten Faktor

exakte Schätzung.

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 32 / 79

Page 162: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Laufzeitmessung für welche Programmierspracheund welchen Compiler?

Wir „sollten“ mit einer Assemblersprache arbeiten: Wir sind vom Compilerunabhängig und die Anzahl der Anweisungen ist relativ klein.

Aber die Programmierung ist viel zu umständlich und wir wählen deshalbC++ bzw. Pseudocode.

Die Anzahl ausgeführter C++ Befehle ist nur eine Schätzung dertatsächlichen Anzahl ausgeführter Assembler Anweisungen.Unsere Schätzung ist auch hier nur

bis auf einen konstanten Faktor

exakt.

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 33 / 79

Page 163: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Laufzeitmessung für welche Programmierspracheund welchen Compiler?

Wir „sollten“ mit einer Assemblersprache arbeiten: Wir sind vom Compilerunabhängig und die Anzahl der Anweisungen ist relativ klein.Aber die Programmierung ist viel zu umständlich und wir wählen deshalbC++ bzw. Pseudocode.

Die Anzahl ausgeführter C++ Befehle ist nur eine Schätzung dertatsächlichen Anzahl ausgeführter Assembler Anweisungen.Unsere Schätzung ist auch hier nur

bis auf einen konstanten Faktor

exakt.

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 33 / 79

Page 164: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Pseudocode

1 Was ist ein Algorithmus?Eine präzise definierte Rechenvorschrift, formuliert in „Pseudocode“.

2 Und was ist Pseudocode?Eine Mischung von Umgangssprache, Programmiersprache und ma-thematischer Notation.

Typischerweise ist Pseudocode kompakter, aber gleichzeitig auch leichterzu verstehen als entsprechender Code einer Programmiersprache.

Pseudocode folgt keinen klaren Regeln, aber natürlich muss einenachfolgende Implementierung trivial sein!

Beispiele und Aufgaben zu Pseudocode auf der Vorlesungshomepage!

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 34 / 79

Page 165: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Pseudocode

1 Was ist ein Algorithmus?Eine präzise definierte Rechenvorschrift, formuliert in „Pseudocode“.

2 Und was ist Pseudocode?Eine Mischung von Umgangssprache, Programmiersprache und ma-thematischer Notation.

Typischerweise ist Pseudocode kompakter, aber gleichzeitig auch leichterzu verstehen als entsprechender Code einer Programmiersprache.

Pseudocode folgt keinen klaren Regeln, aber natürlich muss einenachfolgende Implementierung trivial sein!

Beispiele und Aufgaben zu Pseudocode auf der Vorlesungshomepage!

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 34 / 79

Page 166: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Pseudocode

1 Was ist ein Algorithmus?Eine präzise definierte Rechenvorschrift, formuliert in „Pseudocode“.

2 Und was ist Pseudocode?Eine Mischung von Umgangssprache, Programmiersprache und ma-thematischer Notation.

Typischerweise ist Pseudocode kompakter, aber gleichzeitig auch leichterzu verstehen als entsprechender Code einer Programmiersprache.

Pseudocode folgt keinen klaren Regeln, aber natürlich muss einenachfolgende Implementierung trivial sein!

Beispiele und Aufgaben zu Pseudocode auf der Vorlesungshomepage!

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 34 / 79

Page 167: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Laufzeit: Skalierung bei wachsender Eingabelänge

Wie skaliert die Laufzeit eines Algorithmus oder einer Datenstruktur wenn dieEingabelänge wächst?

Eine exakte Laufzeitbestimmung für alle Eingaben ist oft schwierig.Wir betrachten die worst-case Laufzeit in Abhängigkeit von derEingabelänge.

I Unsere Laufzeitbestimmung ist letztlich nur eine, bis auf einen konstantenFaktor exakte Schätzung.

I Wir interessieren uns vor allen Dingen für die Laufzeit „großer“ Eingabenund „unterschlagen“ konstante Faktoren.

Wir erhalten eine von der jeweiligen Rechnerumgebung unabhängigeLaufzeitanalyse, die das

Wachstumverhalten

der tatsächlichen Laufzeit verlässlich voraussagt.

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 35 / 79

Page 168: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Laufzeit: Skalierung bei wachsender Eingabelänge

Wie skaliert die Laufzeit eines Algorithmus oder einer Datenstruktur wenn dieEingabelänge wächst?

Eine exakte Laufzeitbestimmung für alle Eingaben ist oft schwierig.Wir betrachten die worst-case Laufzeit in Abhängigkeit von derEingabelänge.

I Unsere Laufzeitbestimmung ist letztlich nur eine, bis auf einen konstantenFaktor exakte Schätzung.

I Wir interessieren uns vor allen Dingen für die Laufzeit „großer“ Eingabenund „unterschlagen“ konstante Faktoren.

Wir erhalten eine von der jeweiligen Rechnerumgebung unabhängigeLaufzeitanalyse, die das

Wachstumverhalten

der tatsächlichen Laufzeit verlässlich voraussagt.

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 35 / 79

Page 169: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Laufzeit: Skalierung bei wachsender Eingabelänge

Wie skaliert die Laufzeit eines Algorithmus oder einer Datenstruktur wenn dieEingabelänge wächst?

Eine exakte Laufzeitbestimmung für alle Eingaben ist oft schwierig.Wir betrachten die worst-case Laufzeit in Abhängigkeit von derEingabelänge.

I Unsere Laufzeitbestimmung ist letztlich nur eine, bis auf einen konstantenFaktor exakte Schätzung.

I Wir interessieren uns vor allen Dingen für die Laufzeit „großer“ Eingabenund „unterschlagen“ konstante Faktoren.

Wir erhalten eine von der jeweiligen Rechnerumgebung unabhängigeLaufzeitanalyse, die das

Wachstumverhalten

der tatsächlichen Laufzeit verlässlich voraussagt.

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 35 / 79

Page 170: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Laufzeit: Skalierung bei wachsender Eingabelänge

Wie skaliert die Laufzeit eines Algorithmus oder einer Datenstruktur wenn dieEingabelänge wächst?

Eine exakte Laufzeitbestimmung für alle Eingaben ist oft schwierig.Wir betrachten die worst-case Laufzeit in Abhängigkeit von derEingabelänge.

I Unsere Laufzeitbestimmung ist letztlich nur eine, bis auf einen konstantenFaktor exakte Schätzung.

I Wir interessieren uns vor allen Dingen für die Laufzeit „großer“ Eingabenund „unterschlagen“ konstante Faktoren.

Wir erhalten eine von der jeweiligen Rechnerumgebung unabhängigeLaufzeitanalyse, die das

Wachstumverhalten

der tatsächlichen Laufzeit verlässlich voraussagt.

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 35 / 79

Page 171: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Ein Beispiel: Das Teilfolgenproblem

Die Eingabe besteht aus n ganzen Zahlen a1, . . . ,an.Definiere f (i , j) = ai + ai+1 + · · ·+ aj für 1 ≤ i ≤ j ≤ n.Das Ziel ist die Berechnung von

maxf (i , j)|1 ≤ i ≤ j ≤ n,

also die maximale Teilfolgensumme.

Anwendungbeispiel für Aktien: Berechne den größten Gewinn für einZeitintervall.

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 36 / 79

Page 172: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Ein Beispiel: Das Teilfolgenproblem

Die Eingabe besteht aus n ganzen Zahlen a1, . . . ,an.Definiere f (i , j) = ai + ai+1 + · · ·+ aj für 1 ≤ i ≤ j ≤ n.Das Ziel ist die Berechnung von

maxf (i , j)|1 ≤ i ≤ j ≤ n,

also die maximale Teilfolgensumme.

Anwendungbeispiel für Aktien: Berechne den größten Gewinn für einZeitintervall.

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 36 / 79

Page 173: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Algorithmen für das Teilfolgenproblem

Wir betrachten nur Algorithmen A, die ausschließlich

Additionen und/oder Vergleichsoperationen

auf den Daten ausführen.

AdditionenA(n) =maxa1,...an∈Z Anzahl Additionen von A für Eingabe (a1, . . . ,an)

VergleicheA(n) =maxa1,...,an∈Z Anzahl Vergleiche von A für Eingabe (a1, . . . ,an).ZeitA(n) = AdditionenA(n) + VergleicheA(n) ist die worst-case Rechenzeitvon Algorithmus A.

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 37 / 79

Page 174: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Algorithmen für das Teilfolgenproblem

Wir betrachten nur Algorithmen A, die ausschließlich

Additionen und/oder Vergleichsoperationen

auf den Daten ausführen.

AdditionenA(n) =maxa1,...an∈Z Anzahl Additionen von A für Eingabe (a1, . . . ,an)VergleicheA(n) =

maxa1,...,an∈Z Anzahl Vergleiche von A für Eingabe (a1, . . . ,an).

ZeitA(n) = AdditionenA(n) + VergleicheA(n) ist die worst-case Rechenzeitvon Algorithmus A.

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 37 / 79

Page 175: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Algorithmen für das Teilfolgenproblem

Wir betrachten nur Algorithmen A, die ausschließlich

Additionen und/oder Vergleichsoperationen

auf den Daten ausführen.

AdditionenA(n) =maxa1,...an∈Z Anzahl Additionen von A für Eingabe (a1, . . . ,an)VergleicheA(n) =

maxa1,...,an∈Z Anzahl Vergleiche von A für Eingabe (a1, . . . ,an).ZeitA(n) = AdditionenA(n) + VergleicheA(n) ist die worst-case Rechenzeitvon Algorithmus A.

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 37 / 79

Page 176: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Das Teilfolgenproblem: Algorithmus A1

Max = −∞;for (i=1 ; i <= n; i++)

for (j=i ; j <= n; j++)Berechne f (i , j) mit j − i Additionen;Max = maxf (i , j),Max;

Wir benötigen j − i Additionen zur Berechnung von f (i , j). Also ist

AdditionenA1 (n) =n∑

i=1

n∑j=i

(j − i).

Eine obere Schranke: AdditionenA1 (n) ≤∑n

i=1∑n

j=1 n = n3.

Eine untere Schranke: AdditionenA1 (n) ≥∑n/4

i=1∑n

j=3n/4+1n2 (warum??) ,

also AdditionenA1 (n) ≥ n4 ·

n4 ·

n2 = n3

32 folgt.

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 38 / 79

Page 177: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Das Teilfolgenproblem: Algorithmus A1

Max = −∞;for (i=1 ; i <= n; i++)

for (j=i ; j <= n; j++)Berechne f (i , j) mit j − i Additionen;Max = maxf (i , j),Max;

Wir benötigen j − i Additionen zur Berechnung von f (i , j).

Also ist

AdditionenA1 (n) =n∑

i=1

n∑j=i

(j − i).

Eine obere Schranke: AdditionenA1 (n) ≤∑n

i=1∑n

j=1 n = n3.

Eine untere Schranke: AdditionenA1 (n) ≥∑n/4

i=1∑n

j=3n/4+1n2 (warum??) ,

also AdditionenA1 (n) ≥ n4 ·

n4 ·

n2 = n3

32 folgt.

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 38 / 79

Page 178: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Das Teilfolgenproblem: Algorithmus A1

Max = −∞;for (i=1 ; i <= n; i++)

for (j=i ; j <= n; j++)Berechne f (i , j) mit j − i Additionen;Max = maxf (i , j),Max;

Wir benötigen j − i Additionen zur Berechnung von f (i , j). Also ist

AdditionenA1 (n) =

n∑i=1

n∑j=i

(j − i).

Eine obere Schranke: AdditionenA1 (n) ≤∑n

i=1∑n

j=1 n = n3.

Eine untere Schranke: AdditionenA1 (n) ≥∑n/4

i=1∑n

j=3n/4+1n2 (warum??) ,

also AdditionenA1 (n) ≥ n4 ·

n4 ·

n2 = n3

32 folgt.

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 38 / 79

Page 179: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Das Teilfolgenproblem: Algorithmus A1

Max = −∞;for (i=1 ; i <= n; i++)

for (j=i ; j <= n; j++)Berechne f (i , j) mit j − i Additionen;Max = maxf (i , j),Max;

Wir benötigen j − i Additionen zur Berechnung von f (i , j). Also ist

AdditionenA1 (n) =n∑

i=1

n∑j=i

(j − i).

Eine obere Schranke: AdditionenA1 (n) ≤∑n

i=1∑n

j=1 n = n3.

Eine untere Schranke: AdditionenA1 (n) ≥∑n/4

i=1∑n

j=3n/4+1n2 (warum??) ,

also AdditionenA1 (n) ≥ n4 ·

n4 ·

n2 = n3

32 folgt.

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 38 / 79

Page 180: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Das Teilfolgenproblem: Algorithmus A1

Max = −∞;for (i=1 ; i <= n; i++)

for (j=i ; j <= n; j++)Berechne f (i , j) mit j − i Additionen;Max = maxf (i , j),Max;

Wir benötigen j − i Additionen zur Berechnung von f (i , j). Also ist

AdditionenA1 (n) =n∑

i=1

n∑j=i

(j − i).

Eine obere Schranke: AdditionenA1 (n) ≤∑n

i=1∑n

j=1 n = n3.

Eine untere Schranke: AdditionenA1 (n) ≥∑n/4

i=1∑n

j=3n/4+1n2 (warum??) ,

also AdditionenA1 (n) ≥ n4 ·

n4 ·

n2 = n3

32 folgt.

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 38 / 79

Page 181: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Das Teilfolgenproblem: Algorithmus A1

Max = −∞;for (i=1 ; i <= n; i++)

for (j=i ; j <= n; j++)Berechne f (i , j) mit j − i Additionen;Max = maxf (i , j),Max;

Wir benötigen j − i Additionen zur Berechnung von f (i , j). Also ist

AdditionenA1 (n) =n∑

i=1

n∑j=i

(j − i).

Eine obere Schranke: AdditionenA1 (n) ≤∑n

i=1∑n

j=1 n = n3.

Eine untere Schranke: AdditionenA1 (n) ≥∑n/4

i=1∑n

j=3n/4+1n2 (warum??) ,

also AdditionenA1 (n) ≥ n4 ·

n4 ·

n2 = n3

32 folgt.

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 38 / 79

Page 182: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Das Teilfolgenproblem: Algorithmus A1

Max = −∞;for (i=1 ; i <= n; i++)

for (j=i ; j <= n; j++)Berechne f (i , j) mit j − i Additionen;Max = maxf (i , j),Max;

Wir benötigen j − i Additionen zur Berechnung von f (i , j). Also ist

AdditionenA1 (n) =n∑

i=1

n∑j=i

(j − i).

Eine obere Schranke:

AdditionenA1 (n) ≤∑n

i=1∑n

j=1 n = n3.

Eine untere Schranke: AdditionenA1 (n) ≥∑n/4

i=1∑n

j=3n/4+1n2 (warum??) ,

also AdditionenA1 (n) ≥ n4 ·

n4 ·

n2 = n3

32 folgt.

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 38 / 79

Page 183: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Das Teilfolgenproblem: Algorithmus A1

Max = −∞;for (i=1 ; i <= n; i++)

for (j=i ; j <= n; j++)Berechne f (i , j) mit j − i Additionen;Max = maxf (i , j),Max;

Wir benötigen j − i Additionen zur Berechnung von f (i , j). Also ist

AdditionenA1 (n) =n∑

i=1

n∑j=i

(j − i).

Eine obere Schranke: AdditionenA1 (n) ≤∑n

i=1

∑nj=1 n = n3.

Eine untere Schranke: AdditionenA1 (n) ≥∑n/4

i=1∑n

j=3n/4+1n2 (warum??) ,

also AdditionenA1 (n) ≥ n4 ·

n4 ·

n2 = n3

32 folgt.

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 38 / 79

Page 184: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Das Teilfolgenproblem: Algorithmus A1

Max = −∞;for (i=1 ; i <= n; i++)

for (j=i ; j <= n; j++)Berechne f (i , j) mit j − i Additionen;Max = maxf (i , j),Max;

Wir benötigen j − i Additionen zur Berechnung von f (i , j). Also ist

AdditionenA1 (n) =n∑

i=1

n∑j=i

(j − i).

Eine obere Schranke: AdditionenA1 (n) ≤∑n

i=1∑n

j=1

n = n3.

Eine untere Schranke: AdditionenA1 (n) ≥∑n/4

i=1∑n

j=3n/4+1n2 (warum??) ,

also AdditionenA1 (n) ≥ n4 ·

n4 ·

n2 = n3

32 folgt.

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 38 / 79

Page 185: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Das Teilfolgenproblem: Algorithmus A1

Max = −∞;for (i=1 ; i <= n; i++)

for (j=i ; j <= n; j++)Berechne f (i , j) mit j − i Additionen;Max = maxf (i , j),Max;

Wir benötigen j − i Additionen zur Berechnung von f (i , j). Also ist

AdditionenA1 (n) =n∑

i=1

n∑j=i

(j − i).

Eine obere Schranke: AdditionenA1 (n) ≤∑n

i=1∑n

j=1 n

= n3.

Eine untere Schranke: AdditionenA1 (n) ≥∑n/4

i=1∑n

j=3n/4+1n2 (warum??) ,

also AdditionenA1 (n) ≥ n4 ·

n4 ·

n2 = n3

32 folgt.

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 38 / 79

Page 186: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Das Teilfolgenproblem: Algorithmus A1

Max = −∞;for (i=1 ; i <= n; i++)

for (j=i ; j <= n; j++)Berechne f (i , j) mit j − i Additionen;Max = maxf (i , j),Max;

Wir benötigen j − i Additionen zur Berechnung von f (i , j). Also ist

AdditionenA1 (n) =n∑

i=1

n∑j=i

(j − i).

Eine obere Schranke: AdditionenA1 (n) ≤∑n

i=1∑n

j=1 n = n3.

Eine untere Schranke: AdditionenA1 (n) ≥∑n/4

i=1∑n

j=3n/4+1n2 (warum??) ,

also AdditionenA1 (n) ≥ n4 ·

n4 ·

n2 = n3

32 folgt.

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 38 / 79

Page 187: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Das Teilfolgenproblem: Algorithmus A1

Max = −∞;for (i=1 ; i <= n; i++)

for (j=i ; j <= n; j++)Berechne f (i , j) mit j − i Additionen;Max = maxf (i , j),Max;

Wir benötigen j − i Additionen zur Berechnung von f (i , j). Also ist

AdditionenA1 (n) =n∑

i=1

n∑j=i

(j − i).

Eine obere Schranke: AdditionenA1 (n) ≤∑n

i=1∑n

j=1 n = n3.

Eine untere Schranke:

AdditionenA1 (n) ≥∑n/4

i=1∑n

j=3n/4+1n2 (warum??) ,

also AdditionenA1 (n) ≥ n4 ·

n4 ·

n2 = n3

32 folgt.

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 38 / 79

Page 188: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Das Teilfolgenproblem: Algorithmus A1

Max = −∞;for (i=1 ; i <= n; i++)

for (j=i ; j <= n; j++)Berechne f (i , j) mit j − i Additionen;Max = maxf (i , j),Max;

Wir benötigen j − i Additionen zur Berechnung von f (i , j). Also ist

AdditionenA1 (n) =n∑

i=1

n∑j=i

(j − i).

Eine obere Schranke: AdditionenA1 (n) ≤∑n

i=1∑n

j=1 n = n3.

Eine untere Schranke: AdditionenA1 (n) ≥∑n/4

i=1

∑nj=3n/4+1

n2 (warum??) ,

also AdditionenA1 (n) ≥ n4 ·

n4 ·

n2 = n3

32 folgt.

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 38 / 79

Page 189: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Das Teilfolgenproblem: Algorithmus A1

Max = −∞;for (i=1 ; i <= n; i++)

for (j=i ; j <= n; j++)Berechne f (i , j) mit j − i Additionen;Max = maxf (i , j),Max;

Wir benötigen j − i Additionen zur Berechnung von f (i , j). Also ist

AdditionenA1 (n) =n∑

i=1

n∑j=i

(j − i).

Eine obere Schranke: AdditionenA1 (n) ≤∑n

i=1∑n

j=1 n = n3.

Eine untere Schranke: AdditionenA1 (n) ≥∑n/4

i=1∑n

j=3n/4+1

n2 (warum??) ,

also AdditionenA1 (n) ≥ n4 ·

n4 ·

n2 = n3

32 folgt.

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 38 / 79

Page 190: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Das Teilfolgenproblem: Algorithmus A1

Max = −∞;for (i=1 ; i <= n; i++)

for (j=i ; j <= n; j++)Berechne f (i , j) mit j − i Additionen;Max = maxf (i , j),Max;

Wir benötigen j − i Additionen zur Berechnung von f (i , j). Also ist

AdditionenA1 (n) =n∑

i=1

n∑j=i

(j − i).

Eine obere Schranke: AdditionenA1 (n) ≤∑n

i=1∑n

j=1 n = n3.

Eine untere Schranke: AdditionenA1 (n) ≥∑n/4

i=1∑n

j=3n/4+1n2 (warum??)

,

also AdditionenA1 (n) ≥ n4 ·

n4 ·

n2 = n3

32 folgt.

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 38 / 79

Page 191: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Das Teilfolgenproblem: Algorithmus A1

Max = −∞;for (i=1 ; i <= n; i++)

for (j=i ; j <= n; j++)Berechne f (i , j) mit j − i Additionen;Max = maxf (i , j),Max;

Wir benötigen j − i Additionen zur Berechnung von f (i , j). Also ist

AdditionenA1 (n) =n∑

i=1

n∑j=i

(j − i).

Eine obere Schranke: AdditionenA1 (n) ≤∑n

i=1∑n

j=1 n = n3.

Eine untere Schranke: AdditionenA1 (n) ≥∑n/4

i=1∑n

j=3n/4+1n2 (warum??) ,

also AdditionenA1 (n) ≥ n4

· n4 ·

n2 = n3

32 folgt.

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 38 / 79

Page 192: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Das Teilfolgenproblem: Algorithmus A1

Max = −∞;for (i=1 ; i <= n; i++)

for (j=i ; j <= n; j++)Berechne f (i , j) mit j − i Additionen;Max = maxf (i , j),Max;

Wir benötigen j − i Additionen zur Berechnung von f (i , j). Also ist

AdditionenA1 (n) =n∑

i=1

n∑j=i

(j − i).

Eine obere Schranke: AdditionenA1 (n) ≤∑n

i=1∑n

j=1 n = n3.

Eine untere Schranke: AdditionenA1 (n) ≥∑n/4

i=1∑n

j=3n/4+1n2 (warum??) ,

also AdditionenA1 (n) ≥ n4 ·

n4

· n2 = n3

32 folgt.

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 38 / 79

Page 193: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Das Teilfolgenproblem: Algorithmus A1

Max = −∞;for (i=1 ; i <= n; i++)

for (j=i ; j <= n; j++)Berechne f (i , j) mit j − i Additionen;Max = maxf (i , j),Max;

Wir benötigen j − i Additionen zur Berechnung von f (i , j). Also ist

AdditionenA1 (n) =n∑

i=1

n∑j=i

(j − i).

Eine obere Schranke: AdditionenA1 (n) ≤∑n

i=1∑n

j=1 n = n3.

Eine untere Schranke: AdditionenA1 (n) ≥∑n/4

i=1∑n

j=3n/4+1n2 (warum??) ,

also AdditionenA1 (n) ≥ n4 ·

n4 ·

n2 = n3

32 folgt.

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 38 / 79

Page 194: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Die worst-case Laufzeit von A1

Wieviele Vergleiche werden für die n Zahlen a1, . . . ,an ausgeführt?

VergleicheA1(n) =

n∑i=1

n∑j=i

1 =n∑

i=1

(n − i + 1)

= n + (n − 1) + · · ·+ 1

=n∑

i=1

i =n · (n + 1)

2.

Und die worst-case Laufzeit?I ZeitA1 (n) = AdditionenA1 (n) + VergleicheA1

(n).

I n3

32 ≤ AdditionenA1 (n) ≤ n3. Also istn3

32 + n·(n+1)2 ≤ ZeitA1 (n) ≤ n3 + n·(n+1)

2 .

Die Laufzeit von A1 ist kubisch :-((

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 39 / 79

Page 195: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Die worst-case Laufzeit von A1

Wieviele Vergleiche werden für die n Zahlen a1, . . . ,an ausgeführt?

VergleicheA1(n)

=n∑

i=1

n∑j=i

1 =n∑

i=1

(n − i + 1)

= n + (n − 1) + · · ·+ 1

=n∑

i=1

i =n · (n + 1)

2.

Und die worst-case Laufzeit?I ZeitA1 (n) = AdditionenA1 (n) + VergleicheA1

(n).

I n3

32 ≤ AdditionenA1 (n) ≤ n3. Also istn3

32 + n·(n+1)2 ≤ ZeitA1 (n) ≤ n3 + n·(n+1)

2 .

Die Laufzeit von A1 ist kubisch :-((

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 39 / 79

Page 196: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Die worst-case Laufzeit von A1

Wieviele Vergleiche werden für die n Zahlen a1, . . . ,an ausgeführt?

VergleicheA1(n) =

n∑i=1

n∑j=i

1 =n∑

i=1

(n − i + 1)

= n + (n − 1) + · · ·+ 1

=n∑

i=1

i =n · (n + 1)

2.

Und die worst-case Laufzeit?I ZeitA1 (n) = AdditionenA1 (n) + VergleicheA1

(n).

I n3

32 ≤ AdditionenA1 (n) ≤ n3. Also istn3

32 + n·(n+1)2 ≤ ZeitA1 (n) ≤ n3 + n·(n+1)

2 .

Die Laufzeit von A1 ist kubisch :-((

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 39 / 79

Page 197: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Die worst-case Laufzeit von A1

Wieviele Vergleiche werden für die n Zahlen a1, . . . ,an ausgeführt?

VergleicheA1(n) =

n∑i=1

n∑j=i

1

=n∑

i=1

(n − i + 1)

= n + (n − 1) + · · ·+ 1

=n∑

i=1

i =n · (n + 1)

2.

Und die worst-case Laufzeit?I ZeitA1 (n) = AdditionenA1 (n) + VergleicheA1

(n).

I n3

32 ≤ AdditionenA1 (n) ≤ n3. Also istn3

32 + n·(n+1)2 ≤ ZeitA1 (n) ≤ n3 + n·(n+1)

2 .

Die Laufzeit von A1 ist kubisch :-((

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 39 / 79

Page 198: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Die worst-case Laufzeit von A1

Wieviele Vergleiche werden für die n Zahlen a1, . . . ,an ausgeführt?

VergleicheA1(n) =

n∑i=1

n∑j=i

1 =n∑

i=1

(n − i + 1)

= n + (n − 1) + · · ·+ 1

=n∑

i=1

i =n · (n + 1)

2.

Und die worst-case Laufzeit?I ZeitA1 (n) = AdditionenA1 (n) + VergleicheA1

(n).

I n3

32 ≤ AdditionenA1 (n) ≤ n3. Also istn3

32 + n·(n+1)2 ≤ ZeitA1 (n) ≤ n3 + n·(n+1)

2 .

Die Laufzeit von A1 ist kubisch :-((

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 39 / 79

Page 199: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Die worst-case Laufzeit von A1

Wieviele Vergleiche werden für die n Zahlen a1, . . . ,an ausgeführt?

VergleicheA1(n) =

n∑i=1

n∑j=i

1 =n∑

i=1

(n − i + 1)

= n + (n − 1) + · · ·+ 1

=n∑

i=1

i =n · (n + 1)

2.

Und die worst-case Laufzeit?I ZeitA1 (n) = AdditionenA1 (n) + VergleicheA1

(n).

I n3

32 ≤ AdditionenA1 (n) ≤ n3. Also istn3

32 + n·(n+1)2 ≤ ZeitA1 (n) ≤ n3 + n·(n+1)

2 .

Die Laufzeit von A1 ist kubisch :-((

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 39 / 79

Page 200: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Die worst-case Laufzeit von A1

Wieviele Vergleiche werden für die n Zahlen a1, . . . ,an ausgeführt?

VergleicheA1(n) =

n∑i=1

n∑j=i

1 =n∑

i=1

(n − i + 1)

= n + (n − 1) + · · ·+ 1

=n∑

i=1

i

=n · (n + 1)

2.

Und die worst-case Laufzeit?I ZeitA1 (n) = AdditionenA1 (n) + VergleicheA1

(n).

I n3

32 ≤ AdditionenA1 (n) ≤ n3. Also istn3

32 + n·(n+1)2 ≤ ZeitA1 (n) ≤ n3 + n·(n+1)

2 .

Die Laufzeit von A1 ist kubisch :-((

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 39 / 79

Page 201: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Die worst-case Laufzeit von A1

Wieviele Vergleiche werden für die n Zahlen a1, . . . ,an ausgeführt?

VergleicheA1(n) =

n∑i=1

n∑j=i

1 =n∑

i=1

(n − i + 1)

= n + (n − 1) + · · ·+ 1

=n∑

i=1

i =n · (n + 1)

2.

Und die worst-case Laufzeit?I ZeitA1 (n) = AdditionenA1 (n) + VergleicheA1

(n).

I n3

32 ≤ AdditionenA1 (n) ≤ n3. Also istn3

32 + n·(n+1)2 ≤ ZeitA1 (n) ≤ n3 + n·(n+1)

2 .

Die Laufzeit von A1 ist kubisch :-((

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 39 / 79

Page 202: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Die worst-case Laufzeit von A1

Wieviele Vergleiche werden für die n Zahlen a1, . . . ,an ausgeführt?

VergleicheA1(n) =

n∑i=1

n∑j=i

1 =n∑

i=1

(n − i + 1)

= n + (n − 1) + · · ·+ 1

=n∑

i=1

i =n · (n + 1)

2.

Und die worst-case Laufzeit?

I ZeitA1 (n) = AdditionenA1 (n) + VergleicheA1(n).

I n3

32 ≤ AdditionenA1 (n) ≤ n3. Also istn3

32 + n·(n+1)2 ≤ ZeitA1 (n) ≤ n3 + n·(n+1)

2 .

Die Laufzeit von A1 ist kubisch :-((

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 39 / 79

Page 203: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Die worst-case Laufzeit von A1

Wieviele Vergleiche werden für die n Zahlen a1, . . . ,an ausgeführt?

VergleicheA1(n) =

n∑i=1

n∑j=i

1 =n∑

i=1

(n − i + 1)

= n + (n − 1) + · · ·+ 1

=n∑

i=1

i =n · (n + 1)

2.

Und die worst-case Laufzeit?I ZeitA1 (n) = AdditionenA1 (n) + VergleicheA1

(n).

I n3

32 ≤ AdditionenA1 (n) ≤ n3. Also istn3

32 + n·(n+1)2 ≤ ZeitA1 (n) ≤ n3 + n·(n+1)

2 .

Die Laufzeit von A1 ist kubisch :-((

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 39 / 79

Page 204: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Die worst-case Laufzeit von A1

Wieviele Vergleiche werden für die n Zahlen a1, . . . ,an ausgeführt?

VergleicheA1(n) =

n∑i=1

n∑j=i

1 =n∑

i=1

(n − i + 1)

= n + (n − 1) + · · ·+ 1

=n∑

i=1

i =n · (n + 1)

2.

Und die worst-case Laufzeit?I ZeitA1 (n) = AdditionenA1 (n) + VergleicheA1

(n).

I n3

32 ≤ AdditionenA1 (n) ≤ n3.

Also istn3

32 + n·(n+1)2 ≤ ZeitA1 (n) ≤ n3 + n·(n+1)

2 .

Die Laufzeit von A1 ist kubisch :-((

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 39 / 79

Page 205: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Die worst-case Laufzeit von A1

Wieviele Vergleiche werden für die n Zahlen a1, . . . ,an ausgeführt?

VergleicheA1(n) =

n∑i=1

n∑j=i

1 =n∑

i=1

(n − i + 1)

= n + (n − 1) + · · ·+ 1

=n∑

i=1

i =n · (n + 1)

2.

Und die worst-case Laufzeit?I ZeitA1 (n) = AdditionenA1 (n) + VergleicheA1

(n).

I n3

32 ≤ AdditionenA1 (n) ≤ n3. Also istn3

32 + n·(n+1)2 ≤ ZeitA1 (n)

≤ n3 + n·(n+1)2 .

Die Laufzeit von A1 ist kubisch :-((

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 39 / 79

Page 206: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Die worst-case Laufzeit von A1

Wieviele Vergleiche werden für die n Zahlen a1, . . . ,an ausgeführt?

VergleicheA1(n) =

n∑i=1

n∑j=i

1 =n∑

i=1

(n − i + 1)

= n + (n − 1) + · · ·+ 1

=n∑

i=1

i =n · (n + 1)

2.

Und die worst-case Laufzeit?I ZeitA1 (n) = AdditionenA1 (n) + VergleicheA1

(n).

I n3

32 ≤ AdditionenA1 (n) ≤ n3. Also istn3

32 + n·(n+1)2 ≤ ZeitA1 (n) ≤ n3 + n·(n+1)

2 .

Die Laufzeit von A1 ist kubisch :-((

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 39 / 79

Page 207: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Die worst-case Laufzeit von A1

Wieviele Vergleiche werden für die n Zahlen a1, . . . ,an ausgeführt?

VergleicheA1(n) =

n∑i=1

n∑j=i

1 =n∑

i=1

(n − i + 1)

= n + (n − 1) + · · ·+ 1

=n∑

i=1

i =n · (n + 1)

2.

Und die worst-case Laufzeit?I ZeitA1 (n) = AdditionenA1 (n) + VergleicheA1

(n).

I n3

32 ≤ AdditionenA1 (n) ≤ n3. Also istn3

32 + n·(n+1)2 ≤ ZeitA1 (n) ≤ n3 + n·(n+1)

2 .

Die Laufzeit von A1 ist kubisch :-((

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 39 / 79

Page 208: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Die asymptotische Notation

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 40 / 79

Page 209: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Die asymptotische Notation (WICHTIG!!!)

f ,g : N→ R≥0 seien Funktionen, die einer Eingabelänge n ∈ N einenicht-negative Laufzeit f (n), bzw. g(n) zuweisen.

Die Groß-Oh Notation: f = O(g)⇔ Es gibt eine positive Konstante c > 0und eine natürliche Zahl n0 ∈ N, so dass

f (n) ≤ c · g(n)

für alle n ≥ n0 gilt: f wächst höchstens so schnell wie g.f = Ω(g)⇔ g = O(f ) : f wächst mindestens so schnell wie g.f = Θ(g)⇔ f = O(g) und g = O(f ) : f und g wachsen gleich schnell.

Klein-Oh Notation: f = o(g)⇔ limn→∞

f (n)g(n) = 0: f wächst langsamer als g.

Klein-Omega: f = ω(g)⇔ limn→∞

g(n)f (n) = 0: f wächst schneller als g.

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 41 / 79

Page 210: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Die asymptotische Notation (WICHTIG!!!)

f ,g : N→ R≥0 seien Funktionen, die einer Eingabelänge n ∈ N einenicht-negative Laufzeit f (n), bzw. g(n) zuweisen.

Die Groß-Oh Notation: f = O(g)⇔ Es gibt eine positive Konstante c > 0und eine natürliche Zahl n0 ∈ N, so dass

f (n) ≤ c · g(n)

für alle n ≥ n0 gilt:

f wächst höchstens so schnell wie g.f = Ω(g)⇔ g = O(f ) : f wächst mindestens so schnell wie g.f = Θ(g)⇔ f = O(g) und g = O(f ) : f und g wachsen gleich schnell.

Klein-Oh Notation: f = o(g)⇔ limn→∞

f (n)g(n) = 0: f wächst langsamer als g.

Klein-Omega: f = ω(g)⇔ limn→∞

g(n)f (n) = 0: f wächst schneller als g.

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 41 / 79

Page 211: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Die asymptotische Notation (WICHTIG!!!)

f ,g : N→ R≥0 seien Funktionen, die einer Eingabelänge n ∈ N einenicht-negative Laufzeit f (n), bzw. g(n) zuweisen.

Die Groß-Oh Notation: f = O(g)⇔ Es gibt eine positive Konstante c > 0und eine natürliche Zahl n0 ∈ N, so dass

f (n) ≤ c · g(n)

für alle n ≥ n0 gilt: f wächst höchstens so schnell wie g.

f = Ω(g)⇔ g = O(f ) : f wächst mindestens so schnell wie g.f = Θ(g)⇔ f = O(g) und g = O(f ) : f und g wachsen gleich schnell.

Klein-Oh Notation: f = o(g)⇔ limn→∞

f (n)g(n) = 0: f wächst langsamer als g.

Klein-Omega: f = ω(g)⇔ limn→∞

g(n)f (n) = 0: f wächst schneller als g.

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 41 / 79

Page 212: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Die asymptotische Notation (WICHTIG!!!)

f ,g : N→ R≥0 seien Funktionen, die einer Eingabelänge n ∈ N einenicht-negative Laufzeit f (n), bzw. g(n) zuweisen.

Die Groß-Oh Notation: f = O(g)⇔ Es gibt eine positive Konstante c > 0und eine natürliche Zahl n0 ∈ N, so dass

f (n) ≤ c · g(n)

für alle n ≥ n0 gilt: f wächst höchstens so schnell wie g.f = Ω(g)⇔ g = O(f ) :

f wächst mindestens so schnell wie g.f = Θ(g)⇔ f = O(g) und g = O(f ) : f und g wachsen gleich schnell.

Klein-Oh Notation: f = o(g)⇔ limn→∞

f (n)g(n) = 0: f wächst langsamer als g.

Klein-Omega: f = ω(g)⇔ limn→∞

g(n)f (n) = 0: f wächst schneller als g.

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 41 / 79

Page 213: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Die asymptotische Notation (WICHTIG!!!)

f ,g : N→ R≥0 seien Funktionen, die einer Eingabelänge n ∈ N einenicht-negative Laufzeit f (n), bzw. g(n) zuweisen.

Die Groß-Oh Notation: f = O(g)⇔ Es gibt eine positive Konstante c > 0und eine natürliche Zahl n0 ∈ N, so dass

f (n) ≤ c · g(n)

für alle n ≥ n0 gilt: f wächst höchstens so schnell wie g.f = Ω(g)⇔ g = O(f ) : f wächst mindestens so schnell wie g.

f = Θ(g)⇔ f = O(g) und g = O(f ) : f und g wachsen gleich schnell.

Klein-Oh Notation: f = o(g)⇔ limn→∞

f (n)g(n) = 0: f wächst langsamer als g.

Klein-Omega: f = ω(g)⇔ limn→∞

g(n)f (n) = 0: f wächst schneller als g.

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 41 / 79

Page 214: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Die asymptotische Notation (WICHTIG!!!)

f ,g : N→ R≥0 seien Funktionen, die einer Eingabelänge n ∈ N einenicht-negative Laufzeit f (n), bzw. g(n) zuweisen.

Die Groß-Oh Notation: f = O(g)⇔ Es gibt eine positive Konstante c > 0und eine natürliche Zahl n0 ∈ N, so dass

f (n) ≤ c · g(n)

für alle n ≥ n0 gilt: f wächst höchstens so schnell wie g.f = Ω(g)⇔ g = O(f ) : f wächst mindestens so schnell wie g.f = Θ(g)⇔ f = O(g) und g = O(f ) :

f und g wachsen gleich schnell.

Klein-Oh Notation: f = o(g)⇔ limn→∞

f (n)g(n) = 0: f wächst langsamer als g.

Klein-Omega: f = ω(g)⇔ limn→∞

g(n)f (n) = 0: f wächst schneller als g.

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 41 / 79

Page 215: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Die asymptotische Notation (WICHTIG!!!)

f ,g : N→ R≥0 seien Funktionen, die einer Eingabelänge n ∈ N einenicht-negative Laufzeit f (n), bzw. g(n) zuweisen.

Die Groß-Oh Notation: f = O(g)⇔ Es gibt eine positive Konstante c > 0und eine natürliche Zahl n0 ∈ N, so dass

f (n) ≤ c · g(n)

für alle n ≥ n0 gilt: f wächst höchstens so schnell wie g.f = Ω(g)⇔ g = O(f ) : f wächst mindestens so schnell wie g.f = Θ(g)⇔ f = O(g) und g = O(f ) : f und g wachsen gleich schnell.

Klein-Oh Notation: f = o(g)⇔ limn→∞

f (n)g(n) = 0: f wächst langsamer als g.

Klein-Omega: f = ω(g)⇔ limn→∞

g(n)f (n) = 0: f wächst schneller als g.

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 41 / 79

Page 216: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Die asymptotische Notation (WICHTIG!!!)

f ,g : N→ R≥0 seien Funktionen, die einer Eingabelänge n ∈ N einenicht-negative Laufzeit f (n), bzw. g(n) zuweisen.

Die Groß-Oh Notation: f = O(g)⇔ Es gibt eine positive Konstante c > 0und eine natürliche Zahl n0 ∈ N, so dass

f (n) ≤ c · g(n)

für alle n ≥ n0 gilt: f wächst höchstens so schnell wie g.f = Ω(g)⇔ g = O(f ) : f wächst mindestens so schnell wie g.f = Θ(g)⇔ f = O(g) und g = O(f ) : f und g wachsen gleich schnell.

Klein-Oh Notation: f = o(g)⇔ limn→∞

f (n)g(n) = 0:

f wächst langsamer als g.

Klein-Omega: f = ω(g)⇔ limn→∞

g(n)f (n) = 0: f wächst schneller als g.

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 41 / 79

Page 217: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Die asymptotische Notation (WICHTIG!!!)

f ,g : N→ R≥0 seien Funktionen, die einer Eingabelänge n ∈ N einenicht-negative Laufzeit f (n), bzw. g(n) zuweisen.

Die Groß-Oh Notation: f = O(g)⇔ Es gibt eine positive Konstante c > 0und eine natürliche Zahl n0 ∈ N, so dass

f (n) ≤ c · g(n)

für alle n ≥ n0 gilt: f wächst höchstens so schnell wie g.f = Ω(g)⇔ g = O(f ) : f wächst mindestens so schnell wie g.f = Θ(g)⇔ f = O(g) und g = O(f ) : f und g wachsen gleich schnell.

Klein-Oh Notation: f = o(g)⇔ limn→∞

f (n)g(n) = 0: f wächst langsamer als g.

Klein-Omega: f = ω(g)⇔ limn→∞

g(n)f (n) = 0:

f wächst schneller als g.

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 41 / 79

Page 218: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Die asymptotische Notation (WICHTIG!!!)

f ,g : N→ R≥0 seien Funktionen, die einer Eingabelänge n ∈ N einenicht-negative Laufzeit f (n), bzw. g(n) zuweisen.

Die Groß-Oh Notation: f = O(g)⇔ Es gibt eine positive Konstante c > 0und eine natürliche Zahl n0 ∈ N, so dass

f (n) ≤ c · g(n)

für alle n ≥ n0 gilt: f wächst höchstens so schnell wie g.f = Ω(g)⇔ g = O(f ) : f wächst mindestens so schnell wie g.f = Θ(g)⇔ f = O(g) und g = O(f ) : f und g wachsen gleich schnell.

Klein-Oh Notation: f = o(g)⇔ limn→∞

f (n)g(n) = 0: f wächst langsamer als g.

Klein-Omega: f = ω(g)⇔ limn→∞

g(n)f (n) = 0: f wächst schneller als g.

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 41 / 79

Page 219: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Die Laufzeit von A1 ist kubisch

Wir müssen ZeitA1 (n) = O(n3) und n3 = O(ZeitA1 (n)) zeigen.

Warum gilt ZeitA1 (n) = O(n3)?I Wir wissen ZeitA1 (n) ≤ n3 + n·(n+1)

2 .I Also ist ZeitA1 (n) ≤ n3 + n·2n

2 ≤ n3 + 2n3

2 = 2 · n3.I ZeitA1 (n) = O(n3): Setze c = 2 und n0 = 0.

Warum gilt n3 = O(ZeitA1 (n))?I Wir wissen n3

32 + n·(n+1)2 ≤ ZeitA1 (n).

I Also ist n3

32 ≤ ZeitA1 (n) und deshalb folgt n3 ≤ 32 · ZeitA1 (n).I n3 = O(ZeitA1 (n)): Setze c = 32 und n0 = 0.

ZeitA1 (n) = Θ(n3): Die Laufzeit wächst (ungefähr) um den Faktor 8, wenn wirdie Eingabelänge verdoppeln.

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 42 / 79

Page 220: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Die Laufzeit von A1 ist kubisch

Wir müssen ZeitA1 (n) = O(n3) und n3 = O(ZeitA1 (n)) zeigen.

Warum gilt ZeitA1 (n) = O(n3)?

I Wir wissen ZeitA1 (n) ≤ n3 + n·(n+1)2 .

I Also ist ZeitA1 (n) ≤ n3 + n·2n2 ≤ n3 + 2n3

2 = 2 · n3.I ZeitA1 (n) = O(n3): Setze c = 2 und n0 = 0.

Warum gilt n3 = O(ZeitA1 (n))?I Wir wissen n3

32 + n·(n+1)2 ≤ ZeitA1 (n).

I Also ist n3

32 ≤ ZeitA1 (n) und deshalb folgt n3 ≤ 32 · ZeitA1 (n).I n3 = O(ZeitA1 (n)): Setze c = 32 und n0 = 0.

ZeitA1 (n) = Θ(n3): Die Laufzeit wächst (ungefähr) um den Faktor 8, wenn wirdie Eingabelänge verdoppeln.

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 42 / 79

Page 221: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Die Laufzeit von A1 ist kubisch

Wir müssen ZeitA1 (n) = O(n3) und n3 = O(ZeitA1 (n)) zeigen.

Warum gilt ZeitA1 (n) = O(n3)?I Wir wissen ZeitA1 (n) ≤ n3 + n·(n+1)

2 .

I Also ist ZeitA1 (n) ≤ n3 + n·2n2 ≤ n3 + 2n3

2 = 2 · n3.I ZeitA1 (n) = O(n3): Setze c = 2 und n0 = 0.

Warum gilt n3 = O(ZeitA1 (n))?I Wir wissen n3

32 + n·(n+1)2 ≤ ZeitA1 (n).

I Also ist n3

32 ≤ ZeitA1 (n) und deshalb folgt n3 ≤ 32 · ZeitA1 (n).I n3 = O(ZeitA1 (n)): Setze c = 32 und n0 = 0.

ZeitA1 (n) = Θ(n3): Die Laufzeit wächst (ungefähr) um den Faktor 8, wenn wirdie Eingabelänge verdoppeln.

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 42 / 79

Page 222: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Die Laufzeit von A1 ist kubisch

Wir müssen ZeitA1 (n) = O(n3) und n3 = O(ZeitA1 (n)) zeigen.

Warum gilt ZeitA1 (n) = O(n3)?I Wir wissen ZeitA1 (n) ≤ n3 + n·(n+1)

2 .I Also ist ZeitA1 (n) ≤ n3 + n·2n

2

≤ n3 + 2n3

2 = 2 · n3.I ZeitA1 (n) = O(n3): Setze c = 2 und n0 = 0.

Warum gilt n3 = O(ZeitA1 (n))?I Wir wissen n3

32 + n·(n+1)2 ≤ ZeitA1 (n).

I Also ist n3

32 ≤ ZeitA1 (n) und deshalb folgt n3 ≤ 32 · ZeitA1 (n).I n3 = O(ZeitA1 (n)): Setze c = 32 und n0 = 0.

ZeitA1 (n) = Θ(n3): Die Laufzeit wächst (ungefähr) um den Faktor 8, wenn wirdie Eingabelänge verdoppeln.

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 42 / 79

Page 223: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Die Laufzeit von A1 ist kubisch

Wir müssen ZeitA1 (n) = O(n3) und n3 = O(ZeitA1 (n)) zeigen.

Warum gilt ZeitA1 (n) = O(n3)?I Wir wissen ZeitA1 (n) ≤ n3 + n·(n+1)

2 .I Also ist ZeitA1 (n) ≤ n3 + n·2n

2 ≤ n3 + 2n3

2

= 2 · n3.I ZeitA1 (n) = O(n3): Setze c = 2 und n0 = 0.

Warum gilt n3 = O(ZeitA1 (n))?I Wir wissen n3

32 + n·(n+1)2 ≤ ZeitA1 (n).

I Also ist n3

32 ≤ ZeitA1 (n) und deshalb folgt n3 ≤ 32 · ZeitA1 (n).I n3 = O(ZeitA1 (n)): Setze c = 32 und n0 = 0.

ZeitA1 (n) = Θ(n3): Die Laufzeit wächst (ungefähr) um den Faktor 8, wenn wirdie Eingabelänge verdoppeln.

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 42 / 79

Page 224: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Die Laufzeit von A1 ist kubisch

Wir müssen ZeitA1 (n) = O(n3) und n3 = O(ZeitA1 (n)) zeigen.

Warum gilt ZeitA1 (n) = O(n3)?I Wir wissen ZeitA1 (n) ≤ n3 + n·(n+1)

2 .I Also ist ZeitA1 (n) ≤ n3 + n·2n

2 ≤ n3 + 2n3

2 = 2 · n3.

I ZeitA1 (n) = O(n3): Setze c = 2 und n0 = 0.

Warum gilt n3 = O(ZeitA1 (n))?I Wir wissen n3

32 + n·(n+1)2 ≤ ZeitA1 (n).

I Also ist n3

32 ≤ ZeitA1 (n) und deshalb folgt n3 ≤ 32 · ZeitA1 (n).I n3 = O(ZeitA1 (n)): Setze c = 32 und n0 = 0.

ZeitA1 (n) = Θ(n3): Die Laufzeit wächst (ungefähr) um den Faktor 8, wenn wirdie Eingabelänge verdoppeln.

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 42 / 79

Page 225: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Die Laufzeit von A1 ist kubisch

Wir müssen ZeitA1 (n) = O(n3) und n3 = O(ZeitA1 (n)) zeigen.

Warum gilt ZeitA1 (n) = O(n3)?I Wir wissen ZeitA1 (n) ≤ n3 + n·(n+1)

2 .I Also ist ZeitA1 (n) ≤ n3 + n·2n

2 ≤ n3 + 2n3

2 = 2 · n3.I ZeitA1 (n) = O(n3): Setze c = 2 und n0 = 0.

Warum gilt n3 = O(ZeitA1 (n))?I Wir wissen n3

32 + n·(n+1)2 ≤ ZeitA1 (n).

I Also ist n3

32 ≤ ZeitA1 (n) und deshalb folgt n3 ≤ 32 · ZeitA1 (n).I n3 = O(ZeitA1 (n)): Setze c = 32 und n0 = 0.

ZeitA1 (n) = Θ(n3): Die Laufzeit wächst (ungefähr) um den Faktor 8, wenn wirdie Eingabelänge verdoppeln.

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 42 / 79

Page 226: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Die Laufzeit von A1 ist kubisch

Wir müssen ZeitA1 (n) = O(n3) und n3 = O(ZeitA1 (n)) zeigen.

Warum gilt ZeitA1 (n) = O(n3)?I Wir wissen ZeitA1 (n) ≤ n3 + n·(n+1)

2 .I Also ist ZeitA1 (n) ≤ n3 + n·2n

2 ≤ n3 + 2n3

2 = 2 · n3.I ZeitA1 (n) = O(n3): Setze c = 2 und n0 = 0.

Warum gilt n3 = O(ZeitA1 (n))?

I Wir wissen n3

32 + n·(n+1)2 ≤ ZeitA1 (n).

I Also ist n3

32 ≤ ZeitA1 (n) und deshalb folgt n3 ≤ 32 · ZeitA1 (n).I n3 = O(ZeitA1 (n)): Setze c = 32 und n0 = 0.

ZeitA1 (n) = Θ(n3): Die Laufzeit wächst (ungefähr) um den Faktor 8, wenn wirdie Eingabelänge verdoppeln.

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 42 / 79

Page 227: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Die Laufzeit von A1 ist kubisch

Wir müssen ZeitA1 (n) = O(n3) und n3 = O(ZeitA1 (n)) zeigen.

Warum gilt ZeitA1 (n) = O(n3)?I Wir wissen ZeitA1 (n) ≤ n3 + n·(n+1)

2 .I Also ist ZeitA1 (n) ≤ n3 + n·2n

2 ≤ n3 + 2n3

2 = 2 · n3.I ZeitA1 (n) = O(n3): Setze c = 2 und n0 = 0.

Warum gilt n3 = O(ZeitA1 (n))?I Wir wissen n3

32 + n·(n+1)2 ≤ ZeitA1 (n).

I Also ist n3

32 ≤ ZeitA1 (n) und deshalb folgt n3 ≤ 32 · ZeitA1 (n).I n3 = O(ZeitA1 (n)): Setze c = 32 und n0 = 0.

ZeitA1 (n) = Θ(n3): Die Laufzeit wächst (ungefähr) um den Faktor 8, wenn wirdie Eingabelänge verdoppeln.

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 42 / 79

Page 228: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Die Laufzeit von A1 ist kubisch

Wir müssen ZeitA1 (n) = O(n3) und n3 = O(ZeitA1 (n)) zeigen.

Warum gilt ZeitA1 (n) = O(n3)?I Wir wissen ZeitA1 (n) ≤ n3 + n·(n+1)

2 .I Also ist ZeitA1 (n) ≤ n3 + n·2n

2 ≤ n3 + 2n3

2 = 2 · n3.I ZeitA1 (n) = O(n3): Setze c = 2 und n0 = 0.

Warum gilt n3 = O(ZeitA1 (n))?I Wir wissen n3

32 + n·(n+1)2 ≤ ZeitA1 (n).

I Also ist n3

32 ≤ ZeitA1 (n)

und deshalb folgt n3 ≤ 32 · ZeitA1 (n).I n3 = O(ZeitA1 (n)): Setze c = 32 und n0 = 0.

ZeitA1 (n) = Θ(n3): Die Laufzeit wächst (ungefähr) um den Faktor 8, wenn wirdie Eingabelänge verdoppeln.

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 42 / 79

Page 229: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Die Laufzeit von A1 ist kubisch

Wir müssen ZeitA1 (n) = O(n3) und n3 = O(ZeitA1 (n)) zeigen.

Warum gilt ZeitA1 (n) = O(n3)?I Wir wissen ZeitA1 (n) ≤ n3 + n·(n+1)

2 .I Also ist ZeitA1 (n) ≤ n3 + n·2n

2 ≤ n3 + 2n3

2 = 2 · n3.I ZeitA1 (n) = O(n3): Setze c = 2 und n0 = 0.

Warum gilt n3 = O(ZeitA1 (n))?I Wir wissen n3

32 + n·(n+1)2 ≤ ZeitA1 (n).

I Also ist n3

32 ≤ ZeitA1 (n) und deshalb folgt n3 ≤ 32 · ZeitA1 (n).

I n3 = O(ZeitA1 (n)): Setze c = 32 und n0 = 0.

ZeitA1 (n) = Θ(n3): Die Laufzeit wächst (ungefähr) um den Faktor 8, wenn wirdie Eingabelänge verdoppeln.

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 42 / 79

Page 230: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Die Laufzeit von A1 ist kubisch

Wir müssen ZeitA1 (n) = O(n3) und n3 = O(ZeitA1 (n)) zeigen.

Warum gilt ZeitA1 (n) = O(n3)?I Wir wissen ZeitA1 (n) ≤ n3 + n·(n+1)

2 .I Also ist ZeitA1 (n) ≤ n3 + n·2n

2 ≤ n3 + 2n3

2 = 2 · n3.I ZeitA1 (n) = O(n3): Setze c = 2 und n0 = 0.

Warum gilt n3 = O(ZeitA1 (n))?I Wir wissen n3

32 + n·(n+1)2 ≤ ZeitA1 (n).

I Also ist n3

32 ≤ ZeitA1 (n) und deshalb folgt n3 ≤ 32 · ZeitA1 (n).I n3 = O(ZeitA1 (n)): Setze c = 32 und n0 = 0.

ZeitA1 (n) = Θ(n3): Die Laufzeit wächst (ungefähr) um den Faktor 8, wenn wirdie Eingabelänge verdoppeln.

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 42 / 79

Page 231: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Die Laufzeit von A1 ist kubisch

Wir müssen ZeitA1 (n) = O(n3) und n3 = O(ZeitA1 (n)) zeigen.

Warum gilt ZeitA1 (n) = O(n3)?I Wir wissen ZeitA1 (n) ≤ n3 + n·(n+1)

2 .I Also ist ZeitA1 (n) ≤ n3 + n·2n

2 ≤ n3 + 2n3

2 = 2 · n3.I ZeitA1 (n) = O(n3): Setze c = 2 und n0 = 0.

Warum gilt n3 = O(ZeitA1 (n))?I Wir wissen n3

32 + n·(n+1)2 ≤ ZeitA1 (n).

I Also ist n3

32 ≤ ZeitA1 (n) und deshalb folgt n3 ≤ 32 · ZeitA1 (n).I n3 = O(ZeitA1 (n)): Setze c = 32 und n0 = 0.

ZeitA1 (n) = Θ(n3):

Die Laufzeit wächst (ungefähr) um den Faktor 8, wenn wirdie Eingabelänge verdoppeln.

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 42 / 79

Page 232: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Die Laufzeit von A1 ist kubisch

Wir müssen ZeitA1 (n) = O(n3) und n3 = O(ZeitA1 (n)) zeigen.

Warum gilt ZeitA1 (n) = O(n3)?I Wir wissen ZeitA1 (n) ≤ n3 + n·(n+1)

2 .I Also ist ZeitA1 (n) ≤ n3 + n·2n

2 ≤ n3 + 2n3

2 = 2 · n3.I ZeitA1 (n) = O(n3): Setze c = 2 und n0 = 0.

Warum gilt n3 = O(ZeitA1 (n))?I Wir wissen n3

32 + n·(n+1)2 ≤ ZeitA1 (n).

I Also ist n3

32 ≤ ZeitA1 (n) und deshalb folgt n3 ≤ 32 · ZeitA1 (n).I n3 = O(ZeitA1 (n)): Setze c = 32 und n0 = 0.

ZeitA1 (n) = Θ(n3): Die Laufzeit wächst (ungefähr) um den Faktor 8, wenn wirdie Eingabelänge verdoppeln.

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 42 / 79

Page 233: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Wie schnell dominiert die Asymptotik?

Annahme: Ein einfacher Befehl benötigt 10−9 Sekunden.

n n2 n3 n10 2n n!

16 256 4.096 ≥ 1012 65536 ≥ 1013

32 1.024 32.768 ≥ 1015 ≥ 4 · 109 ≥ 1031︸ ︷︷ ︸64 4.096 262.144 ≥ 1018︸ ︷︷ ︸ ≥ 6 · 1019︸ ︷︷ ︸

mehr als128 16.384 2.097.152 mehr als mehr als 1014 Jahre256 65.536 16.777.216 10 Jahre 600 Jahre512 262.144 134.217.728

1024 1.048.576 ≥ 109

Million ≥ 1012︸ ︷︷ ︸ ≥ 1018︸ ︷︷ ︸mehr als mehr als

15 Minuten 10 Jahre

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 43 / 79

Page 234: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Wie schnell dominiert die Asymptotik?

Annahme: Ein einfacher Befehl benötigt 10−9 Sekunden.

n n2 n3 n10 2n n!

16 256 4.096 ≥ 1012 65536 ≥ 1013

32 1.024 32.768 ≥ 1015 ≥ 4 · 109 ≥ 1031︸ ︷︷ ︸64 4.096 262.144 ≥ 1018︸ ︷︷ ︸ ≥ 6 · 1019︸ ︷︷ ︸

mehr als128 16.384 2.097.152 mehr als mehr als 1014 Jahre256 65.536 16.777.216 10 Jahre 600 Jahre512 262.144 134.217.728

1024 1.048.576 ≥ 109

Million ≥ 1012︸ ︷︷ ︸ ≥ 1018︸ ︷︷ ︸mehr als mehr als

15 Minuten 10 Jahre

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 43 / 79

Page 235: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Grenzwerte und die Asymptotik

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 44 / 79

Page 236: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Grenzwerte

Grenzwerte sollten das Wachstum vorausssagen!

Der Grenzwert der Folge f (n)g(n) existiere und es sei lim

n→∞f (n)g(n) = c.

Wenn c = 0, dann ist

f = o(g). (f wächst langsamer als g.)

Wenn 0 < c <∞, dann ist f = Θ(g). (f und g wachsen gleich schnell.)

Wenn c =∞, dann ist f = ω(g). (f wächst schneller als g.)

Wenn 0 ≤ c <∞, dann ist f = O(g).(f wächst höchstens so schnell wie g.)

Wenn 0 < c ≤ ∞, dann ist f = Ω(g).(f wächst mindestens so schnell wie g.)

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 45 / 79

Page 237: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Grenzwerte

Grenzwerte sollten das Wachstum vorausssagen!

Der Grenzwert der Folge f (n)g(n) existiere und es sei lim

n→∞f (n)g(n) = c.

Wenn c = 0, dann ist f = o(g). (f wächst langsamer als g.)

Wenn 0 < c <∞, dann ist f = Θ(g). (f und g wachsen gleich schnell.)

Wenn c =∞, dann ist f = ω(g). (f wächst schneller als g.)

Wenn 0 ≤ c <∞, dann ist f = O(g).(f wächst höchstens so schnell wie g.)

Wenn 0 < c ≤ ∞, dann ist f = Ω(g).(f wächst mindestens so schnell wie g.)

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 45 / 79

Page 238: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Grenzwerte

Grenzwerte sollten das Wachstum vorausssagen!

Der Grenzwert der Folge f (n)g(n) existiere und es sei lim

n→∞f (n)g(n) = c.

Wenn c = 0, dann ist f = o(g). (f wächst langsamer als g.)

Wenn 0 < c <∞, dann ist

f = Θ(g). (f und g wachsen gleich schnell.)

Wenn c =∞, dann ist f = ω(g). (f wächst schneller als g.)

Wenn 0 ≤ c <∞, dann ist f = O(g).(f wächst höchstens so schnell wie g.)

Wenn 0 < c ≤ ∞, dann ist f = Ω(g).(f wächst mindestens so schnell wie g.)

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 45 / 79

Page 239: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Grenzwerte

Grenzwerte sollten das Wachstum vorausssagen!

Der Grenzwert der Folge f (n)g(n) existiere und es sei lim

n→∞f (n)g(n) = c.

Wenn c = 0, dann ist f = o(g). (f wächst langsamer als g.)

Wenn 0 < c <∞, dann ist f = Θ(g). (f und g wachsen gleich schnell.)

Wenn c =∞, dann ist f = ω(g). (f wächst schneller als g.)

Wenn 0 ≤ c <∞, dann ist f = O(g).(f wächst höchstens so schnell wie g.)

Wenn 0 < c ≤ ∞, dann ist f = Ω(g).(f wächst mindestens so schnell wie g.)

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 45 / 79

Page 240: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Grenzwerte

Grenzwerte sollten das Wachstum vorausssagen!

Der Grenzwert der Folge f (n)g(n) existiere und es sei lim

n→∞f (n)g(n) = c.

Wenn c = 0, dann ist f = o(g). (f wächst langsamer als g.)

Wenn 0 < c <∞, dann ist f = Θ(g). (f und g wachsen gleich schnell.)

Wenn c =∞, dann ist

f = ω(g). (f wächst schneller als g.)

Wenn 0 ≤ c <∞, dann ist f = O(g).(f wächst höchstens so schnell wie g.)

Wenn 0 < c ≤ ∞, dann ist f = Ω(g).(f wächst mindestens so schnell wie g.)

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 45 / 79

Page 241: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Grenzwerte

Grenzwerte sollten das Wachstum vorausssagen!

Der Grenzwert der Folge f (n)g(n) existiere und es sei lim

n→∞f (n)g(n) = c.

Wenn c = 0, dann ist f = o(g). (f wächst langsamer als g.)

Wenn 0 < c <∞, dann ist f = Θ(g). (f und g wachsen gleich schnell.)

Wenn c =∞, dann ist f = ω(g).

(f wächst schneller als g.)

Wenn 0 ≤ c <∞, dann ist f = O(g).(f wächst höchstens so schnell wie g.)

Wenn 0 < c ≤ ∞, dann ist f = Ω(g).(f wächst mindestens so schnell wie g.)

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 45 / 79

Page 242: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Grenzwerte

Grenzwerte sollten das Wachstum vorausssagen!

Der Grenzwert der Folge f (n)g(n) existiere und es sei lim

n→∞f (n)g(n) = c.

Wenn c = 0, dann ist f = o(g). (f wächst langsamer als g.)

Wenn 0 < c <∞, dann ist f = Θ(g). (f und g wachsen gleich schnell.)

Wenn c =∞, dann ist f = ω(g). (f wächst schneller als g.)

Wenn 0 ≤ c <∞, dann ist f = O(g).(f wächst höchstens so schnell wie g.)

Wenn 0 < c ≤ ∞, dann ist f = Ω(g).(f wächst mindestens so schnell wie g.)

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 45 / 79

Page 243: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Grenzwerte

Grenzwerte sollten das Wachstum vorausssagen!

Der Grenzwert der Folge f (n)g(n) existiere und es sei lim

n→∞f (n)g(n) = c.

Wenn c = 0, dann ist f = o(g). (f wächst langsamer als g.)

Wenn 0 < c <∞, dann ist f = Θ(g). (f und g wachsen gleich schnell.)

Wenn c =∞, dann ist f = ω(g). (f wächst schneller als g.)

Wenn 0 ≤ c <∞, dann ist

f = O(g).(f wächst höchstens so schnell wie g.)

Wenn 0 < c ≤ ∞, dann ist f = Ω(g).(f wächst mindestens so schnell wie g.)

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 45 / 79

Page 244: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Grenzwerte

Grenzwerte sollten das Wachstum vorausssagen!

Der Grenzwert der Folge f (n)g(n) existiere und es sei lim

n→∞f (n)g(n) = c.

Wenn c = 0, dann ist f = o(g). (f wächst langsamer als g.)

Wenn 0 < c <∞, dann ist f = Θ(g). (f und g wachsen gleich schnell.)

Wenn c =∞, dann ist f = ω(g). (f wächst schneller als g.)

Wenn 0 ≤ c <∞, dann ist f = O(g).

(f wächst höchstens so schnell wie g.)

Wenn 0 < c ≤ ∞, dann ist f = Ω(g).(f wächst mindestens so schnell wie g.)

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 45 / 79

Page 245: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Grenzwerte

Grenzwerte sollten das Wachstum vorausssagen!

Der Grenzwert der Folge f (n)g(n) existiere und es sei lim

n→∞f (n)g(n) = c.

Wenn c = 0, dann ist f = o(g). (f wächst langsamer als g.)

Wenn 0 < c <∞, dann ist f = Θ(g). (f und g wachsen gleich schnell.)

Wenn c =∞, dann ist f = ω(g). (f wächst schneller als g.)

Wenn 0 ≤ c <∞, dann ist f = O(g).(f wächst höchstens so schnell wie g.)

Wenn 0 < c ≤ ∞, dann ist

f = Ω(g).(f wächst mindestens so schnell wie g.)

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 45 / 79

Page 246: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Grenzwerte

Grenzwerte sollten das Wachstum vorausssagen!

Der Grenzwert der Folge f (n)g(n) existiere und es sei lim

n→∞f (n)g(n) = c.

Wenn c = 0, dann ist f = o(g). (f wächst langsamer als g.)

Wenn 0 < c <∞, dann ist f = Θ(g). (f und g wachsen gleich schnell.)

Wenn c =∞, dann ist f = ω(g). (f wächst schneller als g.)

Wenn 0 ≤ c <∞, dann ist f = O(g).(f wächst höchstens so schnell wie g.)

Wenn 0 < c ≤ ∞, dann ist f = Ω(g).

(f wächst mindestens so schnell wie g.)

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 45 / 79

Page 247: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Grenzwerte

Grenzwerte sollten das Wachstum vorausssagen!

Der Grenzwert der Folge f (n)g(n) existiere und es sei lim

n→∞f (n)g(n) = c.

Wenn c = 0, dann ist f = o(g). (f wächst langsamer als g.)

Wenn 0 < c <∞, dann ist f = Θ(g). (f und g wachsen gleich schnell.)

Wenn c =∞, dann ist f = ω(g). (f wächst schneller als g.)

Wenn 0 ≤ c <∞, dann ist f = O(g).(f wächst höchstens so schnell wie g.)

Wenn 0 < c ≤ ∞, dann ist f = Ω(g).(f wächst mindestens so schnell wie g.)

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 45 / 79

Page 248: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Wachstum des Logarithmus

Für alle reelle Zahlen a > 1 und b > 1 gilt

loga n = Θ(logb n).

Warum?

Es giltloga(n) = (loga(b)) · logb(n).

Also folgt

limn→∞

loga nlogb n

= limn→∞

loga(b).

Aber a,b > 1 und deshalb 0 < loga(b) <∞.Die Behauptung loga n = Θ(logb n) folgt.

loga(n) und der Logarithmus log2(n) zur Basis 2 haben dasselbe Wachstum:Ab jetzt arbeiten wir nur mit log2(n).

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 46 / 79

Page 249: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Wachstum des Logarithmus

Für alle reelle Zahlen a > 1 und b > 1 gilt

loga n = Θ(logb n).

Warum? Es giltloga(n) = (loga(b)) · logb(n).

Also folgt

limn→∞

loga nlogb n

=

limn→∞

loga(b).

Aber a,b > 1 und deshalb 0 < loga(b) <∞.Die Behauptung loga n = Θ(logb n) folgt.

loga(n) und der Logarithmus log2(n) zur Basis 2 haben dasselbe Wachstum:Ab jetzt arbeiten wir nur mit log2(n).

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 46 / 79

Page 250: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Wachstum des Logarithmus

Für alle reelle Zahlen a > 1 und b > 1 gilt

loga n = Θ(logb n).

Warum? Es giltloga(n) = (loga(b)) · logb(n).

Also folgt

limn→∞

loga nlogb n

= limn→∞

loga(b).

Aber a,b > 1 und deshalb 0 < loga(b) <∞.

Die Behauptung loga n = Θ(logb n) folgt.

loga(n) und der Logarithmus log2(n) zur Basis 2 haben dasselbe Wachstum:Ab jetzt arbeiten wir nur mit log2(n).

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 46 / 79

Page 251: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Wachstum des Logarithmus

Für alle reelle Zahlen a > 1 und b > 1 gilt

loga n = Θ(logb n).

Warum? Es giltloga(n) = (loga(b)) · logb(n).

Also folgt

limn→∞

loga nlogb n

= limn→∞

loga(b).

Aber a,b > 1 und deshalb 0 < loga(b) <∞.Die Behauptung loga n = Θ(logb n) folgt.

loga(n) und der Logarithmus log2(n) zur Basis 2 haben dasselbe Wachstum:Ab jetzt arbeiten wir nur mit log2(n).

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 46 / 79

Page 252: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Rechnen mit Grenzwertenf ,g : N→ R≥0 seien Funktionen.

Die Operation bezeichne eine der Operationen +,− oder ∗. Dann gilt

limn→∞

(f (n) g(n)) =

limn→∞

f (n) limn→∞

g(n),

falls die beiden Grenzwerte auf der rechten Seite existieren und endlich sind.Und

limn→∞

f (n)

g(n)=

limn→∞

f (n)

limn→∞

g(n),

gilt, falls die beiden Grenzwerte auf der rechten Seite existieren, endlich sindund limn→∞ g(n) 6= 0 gilt.

limn→∞

n3+n·(n+1)/2n3 = lim

n→∞n3

n3 + limn→∞

n·(n+1)/2n3 = 1.

Also ist n3 + n·(n+1)2 = Θ(n3) und n3 + n·(n+1)

2 ist kubisch.

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 47 / 79

Page 253: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Rechnen mit Grenzwertenf ,g : N→ R≥0 seien Funktionen.

Die Operation bezeichne eine der Operationen +,− oder ∗. Dann gilt

limn→∞

(f (n) g(n)) = limn→∞

f (n) limn→∞

g(n),

falls

die beiden Grenzwerte auf der rechten Seite existieren und endlich sind.Und

limn→∞

f (n)

g(n)=

limn→∞

f (n)

limn→∞

g(n),

gilt, falls die beiden Grenzwerte auf der rechten Seite existieren, endlich sindund limn→∞ g(n) 6= 0 gilt.

limn→∞

n3+n·(n+1)/2n3 = lim

n→∞n3

n3 + limn→∞

n·(n+1)/2n3 = 1.

Also ist n3 + n·(n+1)2 = Θ(n3) und n3 + n·(n+1)

2 ist kubisch.

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 47 / 79

Page 254: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Rechnen mit Grenzwertenf ,g : N→ R≥0 seien Funktionen.

Die Operation bezeichne eine der Operationen +,− oder ∗. Dann gilt

limn→∞

(f (n) g(n)) = limn→∞

f (n) limn→∞

g(n),

falls die beiden Grenzwerte auf der rechten Seite existieren und endlich sind.Und

limn→∞

f (n)

g(n)=

limn→∞

f (n)

limn→∞

g(n),

gilt, falls die beiden Grenzwerte auf der rechten Seite existieren, endlich sindund limn→∞ g(n) 6= 0 gilt.

limn→∞

n3+n·(n+1)/2n3 = lim

n→∞n3

n3 + limn→∞

n·(n+1)/2n3 = 1.

Also ist n3 + n·(n+1)2 = Θ(n3) und n3 + n·(n+1)

2 ist kubisch.

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 47 / 79

Page 255: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Rechnen mit Grenzwertenf ,g : N→ R≥0 seien Funktionen.

Die Operation bezeichne eine der Operationen +,− oder ∗. Dann gilt

limn→∞

(f (n) g(n)) = limn→∞

f (n) limn→∞

g(n),

falls die beiden Grenzwerte auf der rechten Seite existieren und endlich sind.Und

limn→∞

f (n)

g(n)=

limn→∞

f (n)

limn→∞

g(n),

gilt, falls

die beiden Grenzwerte auf der rechten Seite existieren, endlich sindund limn→∞ g(n) 6= 0 gilt.

limn→∞

n3+n·(n+1)/2n3 = lim

n→∞n3

n3 + limn→∞

n·(n+1)/2n3 = 1.

Also ist n3 + n·(n+1)2 = Θ(n3) und n3 + n·(n+1)

2 ist kubisch.

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 47 / 79

Page 256: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Rechnen mit Grenzwertenf ,g : N→ R≥0 seien Funktionen.

Die Operation bezeichne eine der Operationen +,− oder ∗. Dann gilt

limn→∞

(f (n) g(n)) = limn→∞

f (n) limn→∞

g(n),

falls die beiden Grenzwerte auf der rechten Seite existieren und endlich sind.Und

limn→∞

f (n)

g(n)=

limn→∞

f (n)

limn→∞

g(n),

gilt, falls die beiden Grenzwerte auf der rechten Seite existieren, endlich sindund

limn→∞ g(n) 6= 0 gilt.

limn→∞

n3+n·(n+1)/2n3 = lim

n→∞n3

n3 + limn→∞

n·(n+1)/2n3 = 1.

Also ist n3 + n·(n+1)2 = Θ(n3) und n3 + n·(n+1)

2 ist kubisch.

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 47 / 79

Page 257: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Rechnen mit Grenzwertenf ,g : N→ R≥0 seien Funktionen.

Die Operation bezeichne eine der Operationen +,− oder ∗. Dann gilt

limn→∞

(f (n) g(n)) = limn→∞

f (n) limn→∞

g(n),

falls die beiden Grenzwerte auf der rechten Seite existieren und endlich sind.Und

limn→∞

f (n)

g(n)=

limn→∞

f (n)

limn→∞

g(n),

gilt, falls die beiden Grenzwerte auf der rechten Seite existieren, endlich sindund limn→∞ g(n) 6= 0 gilt.

limn→∞

n3+n·(n+1)/2n3 = lim

n→∞n3

n3 + limn→∞

n·(n+1)/2n3 = 1.

Also ist n3 + n·(n+1)2 = Θ(n3) und n3 + n·(n+1)

2 ist kubisch.

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 47 / 79

Page 258: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Rechnen mit Grenzwertenf ,g : N→ R≥0 seien Funktionen.

Die Operation bezeichne eine der Operationen +,− oder ∗. Dann gilt

limn→∞

(f (n) g(n)) = limn→∞

f (n) limn→∞

g(n),

falls die beiden Grenzwerte auf der rechten Seite existieren und endlich sind.Und

limn→∞

f (n)

g(n)=

limn→∞

f (n)

limn→∞

g(n),

gilt, falls die beiden Grenzwerte auf der rechten Seite existieren, endlich sindund limn→∞ g(n) 6= 0 gilt.

limn→∞

n3+n·(n+1)/2n3 =

limn→∞

n3

n3 + limn→∞

n·(n+1)/2n3 = 1.

Also ist n3 + n·(n+1)2 = Θ(n3) und n3 + n·(n+1)

2 ist kubisch.

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 47 / 79

Page 259: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Rechnen mit Grenzwertenf ,g : N→ R≥0 seien Funktionen.

Die Operation bezeichne eine der Operationen +,− oder ∗. Dann gilt

limn→∞

(f (n) g(n)) = limn→∞

f (n) limn→∞

g(n),

falls die beiden Grenzwerte auf der rechten Seite existieren und endlich sind.Und

limn→∞

f (n)

g(n)=

limn→∞

f (n)

limn→∞

g(n),

gilt, falls die beiden Grenzwerte auf der rechten Seite existieren, endlich sindund limn→∞ g(n) 6= 0 gilt.

limn→∞

n3+n·(n+1)/2n3 = lim

n→∞n3

n3 + limn→∞

n·(n+1)/2n3

= 1.

Also ist n3 + n·(n+1)2 = Θ(n3) und n3 + n·(n+1)

2 ist kubisch.

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 47 / 79

Page 260: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Rechnen mit Grenzwertenf ,g : N→ R≥0 seien Funktionen.

Die Operation bezeichne eine der Operationen +,− oder ∗. Dann gilt

limn→∞

(f (n) g(n)) = limn→∞

f (n) limn→∞

g(n),

falls die beiden Grenzwerte auf der rechten Seite existieren und endlich sind.Und

limn→∞

f (n)

g(n)=

limn→∞

f (n)

limn→∞

g(n),

gilt, falls die beiden Grenzwerte auf der rechten Seite existieren, endlich sindund limn→∞ g(n) 6= 0 gilt.

limn→∞

n3+n·(n+1)/2n3 = lim

n→∞n3

n3 + limn→∞

n·(n+1)/2n3 = 1.

Also ist n3 + n·(n+1)2 = Θ(n3) und n3 + n·(n+1)

2 ist kubisch.

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 47 / 79

Page 261: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Rechnen mit Grenzwertenf ,g : N→ R≥0 seien Funktionen.

Die Operation bezeichne eine der Operationen +,− oder ∗. Dann gilt

limn→∞

(f (n) g(n)) = limn→∞

f (n) limn→∞

g(n),

falls die beiden Grenzwerte auf der rechten Seite existieren und endlich sind.Und

limn→∞

f (n)

g(n)=

limn→∞

f (n)

limn→∞

g(n),

gilt, falls die beiden Grenzwerte auf der rechten Seite existieren, endlich sindund limn→∞ g(n) 6= 0 gilt.

limn→∞

n3+n·(n+1)/2n3 = lim

n→∞n3

n3 + limn→∞

n·(n+1)/2n3 = 1.

Also ist n3 + n·(n+1)2 = Θ(n3) und n3 + n·(n+1)

2 ist kubisch.

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 47 / 79

Page 262: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Die Regel von de l’Hospital

Es gilt

limn→∞

f (n)

g(n)= lim

n→∞

f ′(n)

g′(n),

falls der letzte Grenzwert existiert und falls

limn→∞

f (n) = limn→∞

g(n) ∈ 0,∞.

limn→∞

ln(n) = limn→∞

n =∞ und limn→∞

ln′(n)n′ = lim

n→∞1/n

1 = 0.

limn→∞

ln(n)n = 0 und damit loga(n) = o(n) für jedes a > 1.

Der Logarithmus wächst langsamer als jede noch so kleine Potenz nb

(für 0 < b): Siehe Tafel.

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 48 / 79

Page 263: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Die Regel von de l’Hospital

Es gilt

limn→∞

f (n)

g(n)= lim

n→∞

f ′(n)

g′(n),

falls der letzte Grenzwert existiert und falls

limn→∞

f (n) = limn→∞

g(n) ∈ 0,∞.

limn→∞

ln(n) = limn→∞

n =∞ und limn→∞

ln′(n)n′ = lim

n→∞1/n

1 = 0.

limn→∞

ln(n)n = 0 und damit loga(n) = o(n) für jedes a > 1.

Der Logarithmus wächst langsamer als jede noch so kleine Potenz nb

(für 0 < b): Siehe Tafel.

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 48 / 79

Page 264: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Die Regel von de l’Hospital

Es gilt

limn→∞

f (n)

g(n)= lim

n→∞

f ′(n)

g′(n),

falls der letzte Grenzwert existiert und falls

limn→∞

f (n) = limn→∞

g(n) ∈ 0,∞.

limn→∞

ln(n) = limn→∞

n =∞ und limn→∞

ln′(n)n′ = lim

n→∞1/n

1 = 0.

limn→∞

ln(n)n = 0 und damit loga(n) = o(n) für jedes a > 1.

Der Logarithmus wächst langsamer als jede noch so kleine Potenz nb

(für 0 < b): Siehe Tafel.

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 48 / 79

Page 265: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Die Regel von de l’Hospital

Es gilt

limn→∞

f (n)

g(n)= lim

n→∞

f ′(n)

g′(n),

falls der letzte Grenzwert existiert und falls

limn→∞

f (n) = limn→∞

g(n) ∈ 0,∞.

limn→∞

ln(n) = limn→∞

n =∞

und limn→∞

ln′(n)n′ = lim

n→∞1/n

1 = 0.

limn→∞

ln(n)n = 0 und damit loga(n) = o(n) für jedes a > 1.

Der Logarithmus wächst langsamer als jede noch so kleine Potenz nb

(für 0 < b): Siehe Tafel.

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 48 / 79

Page 266: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Die Regel von de l’Hospital

Es gilt

limn→∞

f (n)

g(n)= lim

n→∞

f ′(n)

g′(n),

falls der letzte Grenzwert existiert und falls

limn→∞

f (n) = limn→∞

g(n) ∈ 0,∞.

limn→∞

ln(n) = limn→∞

n =∞ und limn→∞

ln′(n)n′ =

limn→∞

1/n1 = 0.

limn→∞

ln(n)n = 0 und damit loga(n) = o(n) für jedes a > 1.

Der Logarithmus wächst langsamer als jede noch so kleine Potenz nb

(für 0 < b): Siehe Tafel.

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 48 / 79

Page 267: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Die Regel von de l’Hospital

Es gilt

limn→∞

f (n)

g(n)= lim

n→∞

f ′(n)

g′(n),

falls der letzte Grenzwert existiert und falls

limn→∞

f (n) = limn→∞

g(n) ∈ 0,∞.

limn→∞

ln(n) = limn→∞

n =∞ und limn→∞

ln′(n)n′ = lim

n→∞1/n

1

= 0.

limn→∞

ln(n)n = 0 und damit loga(n) = o(n) für jedes a > 1.

Der Logarithmus wächst langsamer als jede noch so kleine Potenz nb

(für 0 < b): Siehe Tafel.

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 48 / 79

Page 268: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Die Regel von de l’Hospital

Es gilt

limn→∞

f (n)

g(n)= lim

n→∞

f ′(n)

g′(n),

falls der letzte Grenzwert existiert und falls

limn→∞

f (n) = limn→∞

g(n) ∈ 0,∞.

limn→∞

ln(n) = limn→∞

n =∞ und limn→∞

ln′(n)n′ = lim

n→∞1/n

1 = 0.

limn→∞

ln(n)n = 0 und damit loga(n) = o(n) für jedes a > 1.

Der Logarithmus wächst langsamer als jede noch so kleine Potenz nb

(für 0 < b): Siehe Tafel.

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 48 / 79

Page 269: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Die Regel von de l’Hospital

Es gilt

limn→∞

f (n)

g(n)= lim

n→∞

f ′(n)

g′(n),

falls der letzte Grenzwert existiert und falls

limn→∞

f (n) = limn→∞

g(n) ∈ 0,∞.

limn→∞

ln(n) = limn→∞

n =∞ und limn→∞

ln′(n)n′ = lim

n→∞1/n

1 = 0.

limn→∞

ln(n)n = 0 und damit loga(n) = o(n) für jedes a > 1.

Der Logarithmus wächst langsamer als jede noch so kleine Potenz nb

(für 0 < b): Siehe Tafel.

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 48 / 79

Page 270: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Unbeschränkt wachsende Funktionen

Die Funktionen f : N→ R und g : R→ R seien gegeben.

(a) f sei monoton wachsend. Dann gibt es eine Konstante K ∈ N mit f (n) ≤ K oderaber limn→∞ f (n) =∞ gilt. Insbesondere ist f = O(1) oder

1 = o(f).

(b) Für jedes a > 1 ist 1 = o(loga(n)).

(c) Wenn limn→∞ f (n) = limn→∞ g(n) =∞, dann gilt limn→∞ g(f (n)) =∞.

(d) Wenn g = o(n) und 1 = o(f ), dann ist

limn→∞

g(f (n))

f (n)= 0,

also ist g(f (n)) = o(f (n)). Wenn g „sublinear“ ist und f unbeschränkt wächst,dann nimmt das Wachstum von g f ab.

Anwendungen: (Siehe Tafel.)

1 = o(log2 log2(n)).

log2 log2(n) = o(log2(n)).

1 = o(log(k+1)2 (n)) und log

(k+1)2 (n) = o(log

(k)2 (n)) für jede natürliche Zahl k .

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 49 / 79

Page 271: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Unbeschränkt wachsende Funktionen

Die Funktionen f : N→ R und g : R→ R seien gegeben.

(a) f sei monoton wachsend. Dann gibt es eine Konstante K ∈ N mit f (n) ≤ K oderaber limn→∞ f (n) =∞ gilt. Insbesondere ist f = O(1) oder 1 = o(f).

(b) Für jedes a > 1 ist 1 = o(loga(n)).

(c) Wenn limn→∞ f (n) = limn→∞ g(n) =∞, dann gilt limn→∞ g(f (n)) =∞.

(d) Wenn g = o(n) und 1 = o(f ), dann ist

limn→∞

g(f (n))

f (n)= 0,

also ist g(f (n)) = o(f (n)). Wenn g „sublinear“ ist und f unbeschränkt wächst,dann nimmt das Wachstum von g f ab.

Anwendungen: (Siehe Tafel.)

1 = o(log2 log2(n)).

log2 log2(n) = o(log2(n)).

1 = o(log(k+1)2 (n)) und log

(k+1)2 (n) = o(log

(k)2 (n)) für jede natürliche Zahl k .

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 49 / 79

Page 272: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Unbeschränkt wachsende Funktionen

Die Funktionen f : N→ R und g : R→ R seien gegeben.

(a) f sei monoton wachsend. Dann gibt es eine Konstante K ∈ N mit f (n) ≤ K oderaber limn→∞ f (n) =∞ gilt. Insbesondere ist f = O(1) oder 1 = o(f).

(b) Für jedes a > 1 ist 1 = o(loga(n)).

(c) Wenn limn→∞ f (n) = limn→∞ g(n) =∞, dann gilt limn→∞ g(f (n)) =∞.

(d) Wenn g = o(n) und 1 = o(f ), dann ist

limn→∞

g(f (n))

f (n)= 0,

also ist g(f (n)) = o(f (n)). Wenn g „sublinear“ ist und f unbeschränkt wächst,dann nimmt das Wachstum von g f ab.

Anwendungen: (Siehe Tafel.)

1 = o(log2 log2(n)).

log2 log2(n) = o(log2(n)).

1 = o(log(k+1)2 (n)) und log

(k+1)2 (n) = o(log

(k)2 (n)) für jede natürliche Zahl k .

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 49 / 79

Page 273: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Unbeschränkt wachsende Funktionen

Die Funktionen f : N→ R und g : R→ R seien gegeben.

(a) f sei monoton wachsend. Dann gibt es eine Konstante K ∈ N mit f (n) ≤ K oderaber limn→∞ f (n) =∞ gilt. Insbesondere ist f = O(1) oder 1 = o(f).

(b) Für jedes a > 1 ist 1 = o(loga(n)).

(c) Wenn limn→∞ f (n) = limn→∞ g(n) =∞, dann gilt limn→∞ g(f (n)) =

∞.

(d) Wenn g = o(n) und 1 = o(f ), dann ist

limn→∞

g(f (n))

f (n)= 0,

also ist g(f (n)) = o(f (n)). Wenn g „sublinear“ ist und f unbeschränkt wächst,dann nimmt das Wachstum von g f ab.

Anwendungen: (Siehe Tafel.)

1 = o(log2 log2(n)).

log2 log2(n) = o(log2(n)).

1 = o(log(k+1)2 (n)) und log

(k+1)2 (n) = o(log

(k)2 (n)) für jede natürliche Zahl k .

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 49 / 79

Page 274: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Unbeschränkt wachsende Funktionen

Die Funktionen f : N→ R und g : R→ R seien gegeben.

(a) f sei monoton wachsend. Dann gibt es eine Konstante K ∈ N mit f (n) ≤ K oderaber limn→∞ f (n) =∞ gilt. Insbesondere ist f = O(1) oder 1 = o(f).

(b) Für jedes a > 1 ist 1 = o(loga(n)).

(c) Wenn limn→∞ f (n) = limn→∞ g(n) =∞, dann gilt limn→∞ g(f (n)) =∞.

(d) Wenn g = o(n) und 1 = o(f ), dann ist

limn→∞

g(f (n))

f (n)= 0,

also ist g(f (n)) = o(f (n)). Wenn g „sublinear“ ist und f unbeschränkt wächst,dann nimmt das Wachstum von g f ab.

Anwendungen: (Siehe Tafel.)

1 = o(log2 log2(n)).

log2 log2(n) = o(log2(n)).

1 = o(log(k+1)2 (n)) und log

(k+1)2 (n) = o(log

(k)2 (n)) für jede natürliche Zahl k .

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 49 / 79

Page 275: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Unbeschränkt wachsende Funktionen

Die Funktionen f : N→ R und g : R→ R seien gegeben.

(a) f sei monoton wachsend. Dann gibt es eine Konstante K ∈ N mit f (n) ≤ K oderaber limn→∞ f (n) =∞ gilt. Insbesondere ist f = O(1) oder 1 = o(f).

(b) Für jedes a > 1 ist 1 = o(loga(n)).

(c) Wenn limn→∞ f (n) = limn→∞ g(n) =∞, dann gilt limn→∞ g(f (n)) =∞.

(d) Wenn g = o(n) und 1 = o(f ), dann ist

limn→∞

g(f (n))

f (n)=

0,

also ist g(f (n)) = o(f (n)). Wenn g „sublinear“ ist und f unbeschränkt wächst,dann nimmt das Wachstum von g f ab.

Anwendungen: (Siehe Tafel.)

1 = o(log2 log2(n)).

log2 log2(n) = o(log2(n)).

1 = o(log(k+1)2 (n)) und log

(k+1)2 (n) = o(log

(k)2 (n)) für jede natürliche Zahl k .

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 49 / 79

Page 276: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Unbeschränkt wachsende Funktionen

Die Funktionen f : N→ R und g : R→ R seien gegeben.

(a) f sei monoton wachsend. Dann gibt es eine Konstante K ∈ N mit f (n) ≤ K oderaber limn→∞ f (n) =∞ gilt. Insbesondere ist f = O(1) oder 1 = o(f).

(b) Für jedes a > 1 ist 1 = o(loga(n)).

(c) Wenn limn→∞ f (n) = limn→∞ g(n) =∞, dann gilt limn→∞ g(f (n)) =∞.

(d) Wenn g = o(n) und 1 = o(f ), dann ist

limn→∞

g(f (n))

f (n)= 0,

also ist g(f (n)) =

o(f (n)). Wenn g „sublinear“ ist und f unbeschränkt wächst,dann nimmt das Wachstum von g f ab.

Anwendungen: (Siehe Tafel.)

1 = o(log2 log2(n)).

log2 log2(n) = o(log2(n)).

1 = o(log(k+1)2 (n)) und log

(k+1)2 (n) = o(log

(k)2 (n)) für jede natürliche Zahl k .

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 49 / 79

Page 277: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Unbeschränkt wachsende Funktionen

Die Funktionen f : N→ R und g : R→ R seien gegeben.

(a) f sei monoton wachsend. Dann gibt es eine Konstante K ∈ N mit f (n) ≤ K oderaber limn→∞ f (n) =∞ gilt. Insbesondere ist f = O(1) oder 1 = o(f).

(b) Für jedes a > 1 ist 1 = o(loga(n)).

(c) Wenn limn→∞ f (n) = limn→∞ g(n) =∞, dann gilt limn→∞ g(f (n)) =∞.

(d) Wenn g = o(n) und 1 = o(f ), dann ist

limn→∞

g(f (n))

f (n)= 0,

also ist g(f (n)) = o(f (n)). Wenn g „sublinear“ ist und f unbeschränkt wächst,dann nimmt das Wachstum von g f ab.

Anwendungen: (Siehe Tafel.)

1 = o(log2 log2(n)).

log2 log2(n) = o(log2(n)).

1 = o(log(k+1)2 (n)) und log

(k+1)2 (n) = o(log

(k)2 (n)) für jede natürliche Zahl k .

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 49 / 79

Page 278: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Unbeschränkt wachsende Funktionen

Die Funktionen f : N→ R und g : R→ R seien gegeben.

(a) f sei monoton wachsend. Dann gibt es eine Konstante K ∈ N mit f (n) ≤ K oderaber limn→∞ f (n) =∞ gilt. Insbesondere ist f = O(1) oder 1 = o(f).

(b) Für jedes a > 1 ist 1 = o(loga(n)).

(c) Wenn limn→∞ f (n) = limn→∞ g(n) =∞, dann gilt limn→∞ g(f (n)) =∞.

(d) Wenn g = o(n) und 1 = o(f ), dann ist

limn→∞

g(f (n))

f (n)= 0,

also ist g(f (n)) = o(f (n)). Wenn g „sublinear“ ist und f unbeschränkt wächst,dann nimmt das Wachstum von g f ab.

Anwendungen: (Siehe Tafel.)

1 = o(log2 log2(n)).

log2 log2(n) = o(log2(n)).

1 = o(log(k+1)2 (n)) und log

(k+1)2 (n) = o(log

(k)2 (n)) für jede natürliche Zahl k .

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 49 / 79

Page 279: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Unbeschränkt wachsende Funktionen

Die Funktionen f : N→ R und g : R→ R seien gegeben.

(a) f sei monoton wachsend. Dann gibt es eine Konstante K ∈ N mit f (n) ≤ K oderaber limn→∞ f (n) =∞ gilt. Insbesondere ist f = O(1) oder 1 = o(f).

(b) Für jedes a > 1 ist 1 = o(loga(n)).

(c) Wenn limn→∞ f (n) = limn→∞ g(n) =∞, dann gilt limn→∞ g(f (n)) =∞.

(d) Wenn g = o(n) und 1 = o(f ), dann ist

limn→∞

g(f (n))

f (n)= 0,

also ist g(f (n)) = o(f (n)). Wenn g „sublinear“ ist und f unbeschränkt wächst,dann nimmt das Wachstum von g f ab.

Anwendungen: (Siehe Tafel.)

1 = o(log2 log2(n)).

log2 log2(n) = o(log2(n)).

1 = o(log(k+1)2 (n)) und log

(k+1)2 (n) = o(log

(k)2 (n)) für jede natürliche Zahl k .

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 49 / 79

Page 280: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Unbeschränkt wachsende Funktionen

Die Funktionen f : N→ R und g : R→ R seien gegeben.

(a) f sei monoton wachsend. Dann gibt es eine Konstante K ∈ N mit f (n) ≤ K oderaber limn→∞ f (n) =∞ gilt. Insbesondere ist f = O(1) oder 1 = o(f).

(b) Für jedes a > 1 ist 1 = o(loga(n)).

(c) Wenn limn→∞ f (n) = limn→∞ g(n) =∞, dann gilt limn→∞ g(f (n)) =∞.

(d) Wenn g = o(n) und 1 = o(f ), dann ist

limn→∞

g(f (n))

f (n)= 0,

also ist g(f (n)) = o(f (n)). Wenn g „sublinear“ ist und f unbeschränkt wächst,dann nimmt das Wachstum von g f ab.

Anwendungen: (Siehe Tafel.)

1 = o(log2 log2(n)).

log2 log2(n) = o(log2(n)).

1 = o(log(k+1)2 (n)) und log

(k+1)2 (n) = o(log

(k)2 (n)) für jede natürliche Zahl k .

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 49 / 79

Page 281: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Das Integralkriterium

Die Funktion f : R→ R sei gegeben.

(a) Wenn f monoton wachsend ist, dann gilt∫ n

0f (x)dx ≤

n∑i=1

f (i) ≤∫ n+1

1f (x)dx .

(b) Wenn f monoton fallend ist, dann gilt∫ n+1

1f (x)dx ≤

n∑i=1

f (i) ≤∫ n

0f (x)dx .

Zwei wichtige Konsequenzen:n∑

i=1

1i

= Θ(ln(n)).

n∑i=1

ik = Θ(nk+1), falls k ≥ 0.

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 50 / 79

Page 282: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Das Integralkriterium

Die Funktion f : R→ R sei gegeben.(a) Wenn f monoton wachsend ist, dann gilt∫ n

0f (x)dx ≤

n∑i=1

f (i) ≤∫ n+1

1f (x)dx .

(b) Wenn f monoton fallend ist, dann gilt∫ n+1

1f (x)dx ≤

n∑i=1

f (i) ≤∫ n

0f (x)dx .

Zwei wichtige Konsequenzen:n∑

i=1

1i

= Θ(ln(n)).

n∑i=1

ik = Θ(nk+1), falls k ≥ 0.

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 50 / 79

Page 283: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Das Integralkriterium

Die Funktion f : R→ R sei gegeben.(a) Wenn f monoton wachsend ist, dann gilt∫ n

0f (x)dx ≤

n∑i=1

f (i) ≤

∫ n+1

1f (x)dx .

(b) Wenn f monoton fallend ist, dann gilt∫ n+1

1f (x)dx ≤

n∑i=1

f (i) ≤∫ n

0f (x)dx .

Zwei wichtige Konsequenzen:n∑

i=1

1i

= Θ(ln(n)).

n∑i=1

ik = Θ(nk+1), falls k ≥ 0.

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 50 / 79

Page 284: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Das Integralkriterium

Die Funktion f : R→ R sei gegeben.(a) Wenn f monoton wachsend ist, dann gilt∫ n

0f (x)dx ≤

n∑i=1

f (i) ≤∫ n+1

1f (x)dx .

(b) Wenn f monoton fallend ist, dann gilt∫ n+1

1f (x)dx ≤

n∑i=1

f (i) ≤∫ n

0f (x)dx .

Zwei wichtige Konsequenzen:n∑

i=1

1i

= Θ(ln(n)).

n∑i=1

ik = Θ(nk+1), falls k ≥ 0.

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 50 / 79

Page 285: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Das Integralkriterium

Die Funktion f : R→ R sei gegeben.(a) Wenn f monoton wachsend ist, dann gilt∫ n

0f (x)dx ≤

n∑i=1

f (i) ≤∫ n+1

1f (x)dx .

(b) Wenn f monoton fallend ist, dann gilt∫ n+1

1f (x)dx ≤

n∑i=1

f (i) ≤∫ n

0f (x)dx .

Zwei wichtige Konsequenzen:n∑

i=1

1i

= Θ(ln(n)).

n∑i=1

ik = Θ(nk+1), falls k ≥ 0.

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 50 / 79

Page 286: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Das Integralkriterium

Die Funktion f : R→ R sei gegeben.(a) Wenn f monoton wachsend ist, dann gilt∫ n

0f (x)dx ≤

n∑i=1

f (i) ≤∫ n+1

1f (x)dx .

(b) Wenn f monoton fallend ist, dann gilt∫ n+1

1f (x)dx ≤

n∑i=1

f (i) ≤

∫ n

0f (x)dx .

Zwei wichtige Konsequenzen:n∑

i=1

1i

= Θ(ln(n)).

n∑i=1

ik = Θ(nk+1), falls k ≥ 0.

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 50 / 79

Page 287: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Das Integralkriterium

Die Funktion f : R→ R sei gegeben.(a) Wenn f monoton wachsend ist, dann gilt∫ n

0f (x)dx ≤

n∑i=1

f (i) ≤∫ n+1

1f (x)dx .

(b) Wenn f monoton fallend ist, dann gilt∫ n+1

1f (x)dx ≤

n∑i=1

f (i) ≤∫ n

0f (x)dx .

Zwei wichtige Konsequenzen:n∑

i=1

1i

= Θ(ln(n)).

n∑i=1

ik = Θ(nk+1), falls k ≥ 0.

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 50 / 79

Page 288: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Das Integralkriterium

Die Funktion f : R→ R sei gegeben.(a) Wenn f monoton wachsend ist, dann gilt∫ n

0f (x)dx ≤

n∑i=1

f (i) ≤∫ n+1

1f (x)dx .

(b) Wenn f monoton fallend ist, dann gilt∫ n+1

1f (x)dx ≤

n∑i=1

f (i) ≤∫ n

0f (x)dx .

Zwei wichtige Konsequenzen:

n∑i=1

1i

= Θ(ln(n)).

n∑i=1

ik = Θ(nk+1), falls k ≥ 0.

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 50 / 79

Page 289: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Das Integralkriterium

Die Funktion f : R→ R sei gegeben.(a) Wenn f monoton wachsend ist, dann gilt∫ n

0f (x)dx ≤

n∑i=1

f (i) ≤∫ n+1

1f (x)dx .

(b) Wenn f monoton fallend ist, dann gilt∫ n+1

1f (x)dx ≤

n∑i=1

f (i) ≤∫ n

0f (x)dx .

Zwei wichtige Konsequenzen:n∑

i=1

1i

=

Θ(ln(n)).

n∑i=1

ik = Θ(nk+1), falls k ≥ 0.

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 50 / 79

Page 290: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Das Integralkriterium

Die Funktion f : R→ R sei gegeben.(a) Wenn f monoton wachsend ist, dann gilt∫ n

0f (x)dx ≤

n∑i=1

f (i) ≤∫ n+1

1f (x)dx .

(b) Wenn f monoton fallend ist, dann gilt∫ n+1

1f (x)dx ≤

n∑i=1

f (i) ≤∫ n

0f (x)dx .

Zwei wichtige Konsequenzen:n∑

i=1

1i

= Θ(ln(n)).

n∑i=1

ik = Θ(nk+1), falls k ≥ 0.

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 50 / 79

Page 291: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Das Integralkriterium

Die Funktion f : R→ R sei gegeben.(a) Wenn f monoton wachsend ist, dann gilt∫ n

0f (x)dx ≤

n∑i=1

f (i) ≤∫ n+1

1f (x)dx .

(b) Wenn f monoton fallend ist, dann gilt∫ n+1

1f (x)dx ≤

n∑i=1

f (i) ≤∫ n

0f (x)dx .

Zwei wichtige Konsequenzen:n∑

i=1

1i

= Θ(ln(n)).

n∑i=1

ik =

Θ(nk+1), falls k ≥ 0.

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 50 / 79

Page 292: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Das Integralkriterium

Die Funktion f : R→ R sei gegeben.(a) Wenn f monoton wachsend ist, dann gilt∫ n

0f (x)dx ≤

n∑i=1

f (i) ≤∫ n+1

1f (x)dx .

(b) Wenn f monoton fallend ist, dann gilt∫ n+1

1f (x)dx ≤

n∑i=1

f (i) ≤∫ n

0f (x)dx .

Zwei wichtige Konsequenzen:n∑

i=1

1i

= Θ(ln(n)).

n∑i=1

ik = Θ(nk+1), falls k ≥ 0.

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 50 / 79

Page 293: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Eine Wachstums-Hierarchie

f1(n) = 1, dann ist f1 = o(log2 log2 n),

haben wir schon eingesehen.

log2 log2 n = o(log2 n),haben wir schon eingesehen.

log2 n = Θ(loga n) für jedes a > 1,haben wir schon eingesehen.

log2 n = o(nb) für jedes b > 0,haben wir schon eingesehen.

nb = o(n) und n = o(n · loga n) für jedes b mit 0 < b < 1 und jedes a > 1,limn→∞

nb

n = limn→∞1

n1−b = 0 und limn→∞n

n·loga n = limn→∞1

loga n = 0.

n · loga n = o(nk ) für jede reelle Zahl k > 1 und jedes a > 1.nk = o(an) für jedes a > 1,

nk = ak·loga n und limn→∞nk

an = limn→∞ ak·loga n−n = 0.

und an = o(n!) für jedes a > 1.

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 51 / 79

Page 294: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Eine Wachstums-Hierarchie

f1(n) = 1, dann ist f1 = o(log2 log2 n),haben wir schon eingesehen.

log2 log2 n = o(log2 n),haben wir schon eingesehen.

log2 n = Θ(loga n) für jedes a > 1,haben wir schon eingesehen.

log2 n = o(nb) für jedes b > 0,haben wir schon eingesehen.

nb = o(n) und n = o(n · loga n) für jedes b mit 0 < b < 1 und jedes a > 1,limn→∞

nb

n = limn→∞1

n1−b = 0 und limn→∞n

n·loga n = limn→∞1

loga n = 0.

n · loga n = o(nk ) für jede reelle Zahl k > 1 und jedes a > 1.nk = o(an) für jedes a > 1,

nk = ak·loga n und limn→∞nk

an = limn→∞ ak·loga n−n = 0.

und an = o(n!) für jedes a > 1.

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 51 / 79

Page 295: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Eine Wachstums-Hierarchie

f1(n) = 1, dann ist f1 = o(log2 log2 n),haben wir schon eingesehen.

log2 log2 n = o(log2 n),

haben wir schon eingesehen.

log2 n = Θ(loga n) für jedes a > 1,haben wir schon eingesehen.

log2 n = o(nb) für jedes b > 0,haben wir schon eingesehen.

nb = o(n) und n = o(n · loga n) für jedes b mit 0 < b < 1 und jedes a > 1,limn→∞

nb

n = limn→∞1

n1−b = 0 und limn→∞n

n·loga n = limn→∞1

loga n = 0.

n · loga n = o(nk ) für jede reelle Zahl k > 1 und jedes a > 1.nk = o(an) für jedes a > 1,

nk = ak·loga n und limn→∞nk

an = limn→∞ ak·loga n−n = 0.

und an = o(n!) für jedes a > 1.

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 51 / 79

Page 296: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Eine Wachstums-Hierarchie

f1(n) = 1, dann ist f1 = o(log2 log2 n),haben wir schon eingesehen.

log2 log2 n = o(log2 n),haben wir schon eingesehen.

log2 n = Θ(loga n) für jedes a > 1,haben wir schon eingesehen.

log2 n = o(nb) für jedes b > 0,haben wir schon eingesehen.

nb = o(n) und n = o(n · loga n) für jedes b mit 0 < b < 1 und jedes a > 1,limn→∞

nb

n = limn→∞1

n1−b = 0 und limn→∞n

n·loga n = limn→∞1

loga n = 0.

n · loga n = o(nk ) für jede reelle Zahl k > 1 und jedes a > 1.nk = o(an) für jedes a > 1,

nk = ak·loga n und limn→∞nk

an = limn→∞ ak·loga n−n = 0.

und an = o(n!) für jedes a > 1.

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 51 / 79

Page 297: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Eine Wachstums-Hierarchie

f1(n) = 1, dann ist f1 = o(log2 log2 n),haben wir schon eingesehen.

log2 log2 n = o(log2 n),haben wir schon eingesehen.

log2 n = Θ(loga n) für jedes a > 1,

haben wir schon eingesehen.

log2 n = o(nb) für jedes b > 0,haben wir schon eingesehen.

nb = o(n) und n = o(n · loga n) für jedes b mit 0 < b < 1 und jedes a > 1,limn→∞

nb

n = limn→∞1

n1−b = 0 und limn→∞n

n·loga n = limn→∞1

loga n = 0.

n · loga n = o(nk ) für jede reelle Zahl k > 1 und jedes a > 1.nk = o(an) für jedes a > 1,

nk = ak·loga n und limn→∞nk

an = limn→∞ ak·loga n−n = 0.

und an = o(n!) für jedes a > 1.

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 51 / 79

Page 298: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Eine Wachstums-Hierarchie

f1(n) = 1, dann ist f1 = o(log2 log2 n),haben wir schon eingesehen.

log2 log2 n = o(log2 n),haben wir schon eingesehen.

log2 n = Θ(loga n) für jedes a > 1,haben wir schon eingesehen.

log2 n = o(nb) für jedes b > 0,haben wir schon eingesehen.

nb = o(n) und n = o(n · loga n) für jedes b mit 0 < b < 1 und jedes a > 1,limn→∞

nb

n = limn→∞1

n1−b = 0 und limn→∞n

n·loga n = limn→∞1

loga n = 0.

n · loga n = o(nk ) für jede reelle Zahl k > 1 und jedes a > 1.nk = o(an) für jedes a > 1,

nk = ak·loga n und limn→∞nk

an = limn→∞ ak·loga n−n = 0.

und an = o(n!) für jedes a > 1.

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 51 / 79

Page 299: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Eine Wachstums-Hierarchie

f1(n) = 1, dann ist f1 = o(log2 log2 n),haben wir schon eingesehen.

log2 log2 n = o(log2 n),haben wir schon eingesehen.

log2 n = Θ(loga n) für jedes a > 1,haben wir schon eingesehen.

log2 n = o(nb) für jedes b > 0,

haben wir schon eingesehen.

nb = o(n) und n = o(n · loga n) für jedes b mit 0 < b < 1 und jedes a > 1,limn→∞

nb

n = limn→∞1

n1−b = 0 und limn→∞n

n·loga n = limn→∞1

loga n = 0.

n · loga n = o(nk ) für jede reelle Zahl k > 1 und jedes a > 1.nk = o(an) für jedes a > 1,

nk = ak·loga n und limn→∞nk

an = limn→∞ ak·loga n−n = 0.

und an = o(n!) für jedes a > 1.

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 51 / 79

Page 300: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Eine Wachstums-Hierarchie

f1(n) = 1, dann ist f1 = o(log2 log2 n),haben wir schon eingesehen.

log2 log2 n = o(log2 n),haben wir schon eingesehen.

log2 n = Θ(loga n) für jedes a > 1,haben wir schon eingesehen.

log2 n = o(nb) für jedes b > 0,haben wir schon eingesehen.

nb = o(n) und n = o(n · loga n) für jedes b mit 0 < b < 1 und jedes a > 1,limn→∞

nb

n = limn→∞1

n1−b = 0 und limn→∞n

n·loga n = limn→∞1

loga n = 0.

n · loga n = o(nk ) für jede reelle Zahl k > 1 und jedes a > 1.nk = o(an) für jedes a > 1,

nk = ak·loga n und limn→∞nk

an = limn→∞ ak·loga n−n = 0.

und an = o(n!) für jedes a > 1.

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 51 / 79

Page 301: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Eine Wachstums-Hierarchie

f1(n) = 1, dann ist f1 = o(log2 log2 n),haben wir schon eingesehen.

log2 log2 n = o(log2 n),haben wir schon eingesehen.

log2 n = Θ(loga n) für jedes a > 1,haben wir schon eingesehen.

log2 n = o(nb) für jedes b > 0,haben wir schon eingesehen.

nb = o(n) und n = o(n · loga n) für jedes b mit 0 < b < 1 und jedes a > 1,

limn→∞nb

n = limn→∞1

n1−b = 0 und limn→∞n

n·loga n = limn→∞1

loga n = 0.

n · loga n = o(nk ) für jede reelle Zahl k > 1 und jedes a > 1.nk = o(an) für jedes a > 1,

nk = ak·loga n und limn→∞nk

an = limn→∞ ak·loga n−n = 0.

und an = o(n!) für jedes a > 1.

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 51 / 79

Page 302: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Eine Wachstums-Hierarchie

f1(n) = 1, dann ist f1 = o(log2 log2 n),haben wir schon eingesehen.

log2 log2 n = o(log2 n),haben wir schon eingesehen.

log2 n = Θ(loga n) für jedes a > 1,haben wir schon eingesehen.

log2 n = o(nb) für jedes b > 0,haben wir schon eingesehen.

nb = o(n) und n = o(n · loga n) für jedes b mit 0 < b < 1 und jedes a > 1,limn→∞

nb

n = limn→∞1

n1−b =

0 und limn→∞n

n·loga n = limn→∞1

loga n = 0.

n · loga n = o(nk ) für jede reelle Zahl k > 1 und jedes a > 1.nk = o(an) für jedes a > 1,

nk = ak·loga n und limn→∞nk

an = limn→∞ ak·loga n−n = 0.

und an = o(n!) für jedes a > 1.

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 51 / 79

Page 303: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Eine Wachstums-Hierarchie

f1(n) = 1, dann ist f1 = o(log2 log2 n),haben wir schon eingesehen.

log2 log2 n = o(log2 n),haben wir schon eingesehen.

log2 n = Θ(loga n) für jedes a > 1,haben wir schon eingesehen.

log2 n = o(nb) für jedes b > 0,haben wir schon eingesehen.

nb = o(n) und n = o(n · loga n) für jedes b mit 0 < b < 1 und jedes a > 1,limn→∞

nb

n = limn→∞1

n1−b = 0

und limn→∞n

n·loga n = limn→∞1

loga n = 0.

n · loga n = o(nk ) für jede reelle Zahl k > 1 und jedes a > 1.nk = o(an) für jedes a > 1,

nk = ak·loga n und limn→∞nk

an = limn→∞ ak·loga n−n = 0.

und an = o(n!) für jedes a > 1.

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 51 / 79

Page 304: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Eine Wachstums-Hierarchie

f1(n) = 1, dann ist f1 = o(log2 log2 n),haben wir schon eingesehen.

log2 log2 n = o(log2 n),haben wir schon eingesehen.

log2 n = Θ(loga n) für jedes a > 1,haben wir schon eingesehen.

log2 n = o(nb) für jedes b > 0,haben wir schon eingesehen.

nb = o(n) und n = o(n · loga n) für jedes b mit 0 < b < 1 und jedes a > 1,limn→∞

nb

n = limn→∞1

n1−b = 0 und limn→∞n

n·loga n = limn→∞1

loga n =

0.

n · loga n = o(nk ) für jede reelle Zahl k > 1 und jedes a > 1.nk = o(an) für jedes a > 1,

nk = ak·loga n und limn→∞nk

an = limn→∞ ak·loga n−n = 0.

und an = o(n!) für jedes a > 1.

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 51 / 79

Page 305: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Eine Wachstums-Hierarchie

f1(n) = 1, dann ist f1 = o(log2 log2 n),haben wir schon eingesehen.

log2 log2 n = o(log2 n),haben wir schon eingesehen.

log2 n = Θ(loga n) für jedes a > 1,haben wir schon eingesehen.

log2 n = o(nb) für jedes b > 0,haben wir schon eingesehen.

nb = o(n) und n = o(n · loga n) für jedes b mit 0 < b < 1 und jedes a > 1,limn→∞

nb

n = limn→∞1

n1−b = 0 und limn→∞n

n·loga n = limn→∞1

loga n = 0.

n · loga n = o(nk ) für jede reelle Zahl k > 1 und jedes a > 1.nk = o(an) für jedes a > 1,

nk = ak·loga n und limn→∞nk

an = limn→∞ ak·loga n−n = 0.

und an = o(n!) für jedes a > 1.

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 51 / 79

Page 306: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Eine Wachstums-Hierarchie

f1(n) = 1, dann ist f1 = o(log2 log2 n),haben wir schon eingesehen.

log2 log2 n = o(log2 n),haben wir schon eingesehen.

log2 n = Θ(loga n) für jedes a > 1,haben wir schon eingesehen.

log2 n = o(nb) für jedes b > 0,haben wir schon eingesehen.

nb = o(n) und n = o(n · loga n) für jedes b mit 0 < b < 1 und jedes a > 1,limn→∞

nb

n = limn→∞1

n1−b = 0 und limn→∞n

n·loga n = limn→∞1

loga n = 0.

n · loga n = o(nk ) für jede reelle Zahl k > 1 und jedes a > 1.

nk = o(an) für jedes a > 1,nk = ak·loga n und limn→∞

nk

an = limn→∞ ak·loga n−n = 0.

und an = o(n!) für jedes a > 1.

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 51 / 79

Page 307: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Eine Wachstums-Hierarchie

f1(n) = 1, dann ist f1 = o(log2 log2 n),haben wir schon eingesehen.

log2 log2 n = o(log2 n),haben wir schon eingesehen.

log2 n = Θ(loga n) für jedes a > 1,haben wir schon eingesehen.

log2 n = o(nb) für jedes b > 0,haben wir schon eingesehen.

nb = o(n) und n = o(n · loga n) für jedes b mit 0 < b < 1 und jedes a > 1,limn→∞

nb

n = limn→∞1

n1−b = 0 und limn→∞n

n·loga n = limn→∞1

loga n = 0.

n · loga n = o(nk ) für jede reelle Zahl k > 1 und jedes a > 1.nk = o(an) für jedes a > 1,

nk = ak·loga n und limn→∞nk

an = limn→∞ ak·loga n−n = 0.

und an = o(n!) für jedes a > 1.

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 51 / 79

Page 308: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Eine Wachstums-Hierarchie

f1(n) = 1, dann ist f1 = o(log2 log2 n),haben wir schon eingesehen.

log2 log2 n = o(log2 n),haben wir schon eingesehen.

log2 n = Θ(loga n) für jedes a > 1,haben wir schon eingesehen.

log2 n = o(nb) für jedes b > 0,haben wir schon eingesehen.

nb = o(n) und n = o(n · loga n) für jedes b mit 0 < b < 1 und jedes a > 1,limn→∞

nb

n = limn→∞1

n1−b = 0 und limn→∞n

n·loga n = limn→∞1

loga n = 0.

n · loga n = o(nk ) für jede reelle Zahl k > 1 und jedes a > 1.nk = o(an) für jedes a > 1,

nk = a

k·loga n und limn→∞nk

an = limn→∞ ak·loga n−n = 0.

und an = o(n!) für jedes a > 1.

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 51 / 79

Page 309: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Eine Wachstums-Hierarchie

f1(n) = 1, dann ist f1 = o(log2 log2 n),haben wir schon eingesehen.

log2 log2 n = o(log2 n),haben wir schon eingesehen.

log2 n = Θ(loga n) für jedes a > 1,haben wir schon eingesehen.

log2 n = o(nb) für jedes b > 0,haben wir schon eingesehen.

nb = o(n) und n = o(n · loga n) für jedes b mit 0 < b < 1 und jedes a > 1,limn→∞

nb

n = limn→∞1

n1−b = 0 und limn→∞n

n·loga n = limn→∞1

loga n = 0.

n · loga n = o(nk ) für jede reelle Zahl k > 1 und jedes a > 1.nk = o(an) für jedes a > 1,

nk = ak·loga n

und limn→∞nk

an = limn→∞ ak·loga n−n = 0.

und an = o(n!) für jedes a > 1.

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 51 / 79

Page 310: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Eine Wachstums-Hierarchie

f1(n) = 1, dann ist f1 = o(log2 log2 n),haben wir schon eingesehen.

log2 log2 n = o(log2 n),haben wir schon eingesehen.

log2 n = Θ(loga n) für jedes a > 1,haben wir schon eingesehen.

log2 n = o(nb) für jedes b > 0,haben wir schon eingesehen.

nb = o(n) und n = o(n · loga n) für jedes b mit 0 < b < 1 und jedes a > 1,limn→∞

nb

n = limn→∞1

n1−b = 0 und limn→∞n

n·loga n = limn→∞1

loga n = 0.

n · loga n = o(nk ) für jede reelle Zahl k > 1 und jedes a > 1.nk = o(an) für jedes a > 1,

nk = ak·loga n und limn→∞nk

an = limn→∞ ak·loga n−n =

0.

und an = o(n!) für jedes a > 1.

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 51 / 79

Page 311: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Eine Wachstums-Hierarchie

f1(n) = 1, dann ist f1 = o(log2 log2 n),haben wir schon eingesehen.

log2 log2 n = o(log2 n),haben wir schon eingesehen.

log2 n = Θ(loga n) für jedes a > 1,haben wir schon eingesehen.

log2 n = o(nb) für jedes b > 0,haben wir schon eingesehen.

nb = o(n) und n = o(n · loga n) für jedes b mit 0 < b < 1 und jedes a > 1,limn→∞

nb

n = limn→∞1

n1−b = 0 und limn→∞n

n·loga n = limn→∞1

loga n = 0.

n · loga n = o(nk ) für jede reelle Zahl k > 1 und jedes a > 1.nk = o(an) für jedes a > 1,

nk = ak·loga n und limn→∞nk

an = limn→∞ ak·loga n−n = 0.

und an = o(n!) für jedes a > 1.

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 51 / 79

Page 312: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Eine Wachstums-Hierarchie

f1(n) = 1, dann ist f1 = o(log2 log2 n),haben wir schon eingesehen.

log2 log2 n = o(log2 n),haben wir schon eingesehen.

log2 n = Θ(loga n) für jedes a > 1,haben wir schon eingesehen.

log2 n = o(nb) für jedes b > 0,haben wir schon eingesehen.

nb = o(n) und n = o(n · loga n) für jedes b mit 0 < b < 1 und jedes a > 1,limn→∞

nb

n = limn→∞1

n1−b = 0 und limn→∞n

n·loga n = limn→∞1

loga n = 0.

n · loga n = o(nk ) für jede reelle Zahl k > 1 und jedes a > 1.nk = o(an) für jedes a > 1,

nk = ak·loga n und limn→∞nk

an = limn→∞ ak·loga n−n = 0.

und an = o(n!) für jedes a > 1.

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 51 / 79

Page 313: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Asymptotische Notation (1) demogr.

Seien f (n) = n1.1/ log n, g(n) = n log3 n, h(n) = 2log2n.

Ordne die Funktionen nach asympt. Wachstum.

(1) f , g, h(2) f , h, g(3) g, f , h(4) g, h, f(5) h, f , g(6) h, g, f

Auflösung: (6) h, g, f

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 52 / 79

Page 314: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Asymptotische Notation (1) demogr.

Seien f (n) = n1.1/ log n, g(n) = n log3 n, h(n) = 2log2n.

Ordne die Funktionen nach asympt. Wachstum.

(1) f , g, h(2) f , h, g(3) g, f , h(4) g, h, f(5) h, f , g(6) h, g, f

Auflösung:

(6) h, g, f

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 52 / 79

Page 315: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Asymptotische Notation (1) demogr.

Seien f (n) = n1.1/ log n, g(n) = n log3 n, h(n) = 2log2n.

Ordne die Funktionen nach asympt. Wachstum.

(1) f , g, h(2) f , h, g(3) g, f , h(4) g, h, f(5) h, f , g(6) h, g, f

Auflösung: (6) h, g, f

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 52 / 79

Page 316: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Asymptotische Notation (2) multiple choice

Sei f : N>0 → N>0. Was gilt dann?

(1) f (n) + 10 = O(f (n))

(2) f (n + 10) = O(f (n))

Auflösung: (1) f (n) + 10 = O(f (n)).

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 53 / 79

Page 317: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Asymptotische Notation (2) multiple choice

Sei f : N>0 → N>0. Was gilt dann?

(1) f (n) + 10 = O(f (n))

(2) f (n + 10) = O(f (n))

Auflösung:

(1) f (n) + 10 = O(f (n)).

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 53 / 79

Page 318: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Asymptotische Notation (2) multiple choice

Sei f : N>0 → N>0. Was gilt dann?

(1) f (n) + 10 = O(f (n))

(2) f (n + 10) = O(f (n))

Auflösung: (1) f (n) + 10 = O(f (n)).

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 53 / 79

Page 319: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Asymptotische Notation (3) multiple choice

Es seien f (n) = 0.3 ·√

n − log n und g(n) = 10 · n0.2. Was gilt dann?

(1) f (n) = O(g(n))

(2) f (n) = o(g(n))

(3) f (n) = Ω(g(n))

(4) f (n) = ω(g(n))

(5) f (n) = Θ(g(n))

Auflösung: (3) & (4)

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 54 / 79

Page 320: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Asymptotische Notation (3) multiple choice

Es seien f (n) = 0.3 ·√

n − log n und g(n) = 10 · n0.2. Was gilt dann?

(1) f (n) = O(g(n))

(2) f (n) = o(g(n))

(3) f (n) = Ω(g(n))

(4) f (n) = ω(g(n))

(5) f (n) = Θ(g(n))

Auflösung:

(3) & (4)

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 54 / 79

Page 321: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Asymptotische Notation (3) multiple choice

Es seien f (n) = 0.3 ·√

n − log n und g(n) = 10 · n0.2. Was gilt dann?

(1) f (n) = O(g(n))

(2) f (n) = o(g(n))

(3) f (n) = Ω(g(n))

(4) f (n) = ω(g(n))

(5) f (n) = Θ(g(n))

Auflösung: (3) & (4)

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 54 / 79

Page 322: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Asymptotische Notation (4) multiple choice

Es seien f (n) = n log n + 4 · n2 und g(n) =∑n

i=n/2 i . Was gilt dann?

(1) f (n) = O(g(n))

(2) f (n) = o(g(n))

(3) f (n) = Ω(g(n))

(4) f (n) = ω(g(n))

(5) f (n) = Θ(g(n))

Auflösung: (1) & (3) & (5)

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 55 / 79

Page 323: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Asymptotische Notation (4) multiple choice

Es seien f (n) = n log n + 4 · n2 und g(n) =∑n

i=n/2 i . Was gilt dann?

(1) f (n) = O(g(n))

(2) f (n) = o(g(n))

(3) f (n) = Ω(g(n))

(4) f (n) = ω(g(n))

(5) f (n) = Θ(g(n))

Auflösung:

(1) & (3) & (5)

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 55 / 79

Page 324: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Asymptotische Notation (4) multiple choice

Es seien f (n) = n log n + 4 · n2 und g(n) =∑n

i=n/2 i . Was gilt dann?

(1) f (n) = O(g(n))

(2) f (n) = o(g(n))

(3) f (n) = Ω(g(n))

(4) f (n) = ω(g(n))

(5) f (n) = Θ(g(n))

Auflösung: (1) & (3) & (5)

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 55 / 79

Page 325: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Asymptotische Notation (5) multiple choice

Es seien f (n) = | sin n|+ | cos n| und g(n) =√∑n

i=1 1/i . Was gilt dann?

(1) f (n) = O(g(n))

(2) f (n) = o(g(n))

(3) f (n) = Ω(g(n))

(4) f (n) = ω(g(n))

(5) f (n) = Θ(g(n))

Auflösung: (1) & (2)

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 56 / 79

Page 326: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Asymptotische Notation (5) multiple choice

Es seien f (n) = | sin n|+ | cos n| und g(n) =√∑n

i=1 1/i . Was gilt dann?

(1) f (n) = O(g(n))

(2) f (n) = o(g(n))

(3) f (n) = Ω(g(n))

(4) f (n) = ω(g(n))

(5) f (n) = Θ(g(n))

Auflösung:

(1) & (2)

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 56 / 79

Page 327: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Asymptotische Notation (5) multiple choice

Es seien f (n) = | sin n|+ | cos n| und g(n) =√∑n

i=1 1/i . Was gilt dann?

(1) f (n) = O(g(n))

(2) f (n) = o(g(n))

(3) f (n) = Ω(g(n))

(4) f (n) = ω(g(n))

(5) f (n) = Θ(g(n))

Auflösung: (1) & (2)

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 56 / 79

Page 328: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Algorithmenentwurf, Laufzeitmessung,

und asymptotische Analyse.

Wie passt das alles zusammen?

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 57 / 79

Page 329: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Zurück zum Teilfolgenproblem: Algorithmus A2

Max = −∞;for (i=1 ; i <= n; i++) f (i , i − 1) = 0;for (j=i ; j <= n; j++) f (i , j) =

f (i , j − 1) + aj ;Max = maxf (i , j),Max;

Wir benötigen genau so viele Additionen wie Vergleiche. Also ist

ZeitA2(n) = AdditionenA2 (n) + VergleicheA2(n)

=n · (n + 1)

2+

n · (n + 1)

2= n · (n + 1).

limn→∞n·(n+1)

n2 = 1 und deshalb folgt ZeitA2 (n) = Θ(n2).

Die Laufzeit von A2 ist quadratisch und wächst damit um den Faktor vier,wenn sich die Eingabelänge verdoppelt :-((

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 58 / 79

Page 330: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Zurück zum Teilfolgenproblem: Algorithmus A2

Max = −∞;for (i=1 ; i <= n; i++) f (i , i − 1) = 0;for (j=i ; j <= n; j++) f (i , j) = f (i , j − 1) +

aj ;Max = maxf (i , j),Max;

Wir benötigen genau so viele Additionen wie Vergleiche. Also ist

ZeitA2(n) = AdditionenA2 (n) + VergleicheA2(n)

=n · (n + 1)

2+

n · (n + 1)

2= n · (n + 1).

limn→∞n·(n+1)

n2 = 1 und deshalb folgt ZeitA2 (n) = Θ(n2).

Die Laufzeit von A2 ist quadratisch und wächst damit um den Faktor vier,wenn sich die Eingabelänge verdoppelt :-((

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 58 / 79

Page 331: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Zurück zum Teilfolgenproblem: Algorithmus A2

Max = −∞;for (i=1 ; i <= n; i++) f (i , i − 1) = 0;for (j=i ; j <= n; j++) f (i , j) = f (i , j − 1) + aj ;Max = maxf (i , j),Max;

Wir benötigen genau so viele Additionen wie Vergleiche. Also ist

ZeitA2(n) = AdditionenA2 (n) + VergleicheA2(n)

=n · (n + 1)

2+

n · (n + 1)

2= n · (n + 1).

limn→∞n·(n+1)

n2 = 1 und deshalb folgt ZeitA2 (n) = Θ(n2).

Die Laufzeit von A2 ist quadratisch und wächst damit um den Faktor vier,wenn sich die Eingabelänge verdoppelt :-((

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 58 / 79

Page 332: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Zurück zum Teilfolgenproblem: Algorithmus A2

Max = −∞;for (i=1 ; i <= n; i++) f (i , i − 1) = 0;for (j=i ; j <= n; j++) f (i , j) = f (i , j − 1) + aj ;Max = maxf (i , j),Max;

Wir benötigen genau so viele Additionen wie Vergleiche.

Also ist

ZeitA2(n) = AdditionenA2 (n) + VergleicheA2(n)

=n · (n + 1)

2+

n · (n + 1)

2= n · (n + 1).

limn→∞n·(n+1)

n2 = 1 und deshalb folgt ZeitA2 (n) = Θ(n2).

Die Laufzeit von A2 ist quadratisch und wächst damit um den Faktor vier,wenn sich die Eingabelänge verdoppelt :-((

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 58 / 79

Page 333: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Zurück zum Teilfolgenproblem: Algorithmus A2

Max = −∞;for (i=1 ; i <= n; i++) f (i , i − 1) = 0;for (j=i ; j <= n; j++) f (i , j) = f (i , j − 1) + aj ;Max = maxf (i , j),Max;

Wir benötigen genau so viele Additionen wie Vergleiche. Also ist

ZeitA2(n) = AdditionenA2 (n) + VergleicheA2(n)

=n · (n + 1)

2+

n · (n + 1)

2= n · (n + 1).

limn→∞n·(n+1)

n2 = 1 und deshalb folgt ZeitA2 (n) = Θ(n2).

Die Laufzeit von A2 ist quadratisch und wächst damit um den Faktor vier,wenn sich die Eingabelänge verdoppelt :-((

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 58 / 79

Page 334: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Zurück zum Teilfolgenproblem: Algorithmus A2

Max = −∞;for (i=1 ; i <= n; i++) f (i , i − 1) = 0;for (j=i ; j <= n; j++) f (i , j) = f (i , j − 1) + aj ;Max = maxf (i , j),Max;

Wir benötigen genau so viele Additionen wie Vergleiche. Also ist

ZeitA2(n) = AdditionenA2 (n) + VergleicheA2(n)

=n · (n + 1)

2+

n · (n + 1)

2

= n · (n + 1).

limn→∞n·(n+1)

n2 = 1 und deshalb folgt ZeitA2 (n) = Θ(n2).

Die Laufzeit von A2 ist quadratisch und wächst damit um den Faktor vier,wenn sich die Eingabelänge verdoppelt :-((

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 58 / 79

Page 335: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Zurück zum Teilfolgenproblem: Algorithmus A2

Max = −∞;for (i=1 ; i <= n; i++) f (i , i − 1) = 0;for (j=i ; j <= n; j++) f (i , j) = f (i , j − 1) + aj ;Max = maxf (i , j),Max;

Wir benötigen genau so viele Additionen wie Vergleiche. Also ist

ZeitA2(n) = AdditionenA2 (n) + VergleicheA2(n)

=n · (n + 1)

2+

n · (n + 1)

2= n · (n + 1).

limn→∞n·(n+1)

n2 = 1 und deshalb folgt ZeitA2 (n) = Θ(n2).

Die Laufzeit von A2 ist quadratisch und wächst damit um den Faktor vier,wenn sich die Eingabelänge verdoppelt :-((

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 58 / 79

Page 336: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Zurück zum Teilfolgenproblem: Algorithmus A2

Max = −∞;for (i=1 ; i <= n; i++) f (i , i − 1) = 0;for (j=i ; j <= n; j++) f (i , j) = f (i , j − 1) + aj ;Max = maxf (i , j),Max;

Wir benötigen genau so viele Additionen wie Vergleiche. Also ist

ZeitA2(n) = AdditionenA2 (n) + VergleicheA2(n)

=n · (n + 1)

2+

n · (n + 1)

2= n · (n + 1).

limn→∞n·(n+1)

n2 = 1 und deshalb folgt ZeitA2 (n) = Θ(n2).

Die Laufzeit von A2 ist quadratisch und wächst damit um den Faktor vier,wenn sich die Eingabelänge verdoppelt :-((

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 58 / 79

Page 337: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Zwischenfazit

Mit Hilfe der asymptotischen Notation können wir sagen, dass

I A1 eine kubische Laufzeit und

I A2 eine quadratische Laufzeit besitzt.

Es ist limn→∞n2

n3 = 0 und damit folgt n2 = o(n3):A2 ist wesentlich schneller als A1.

Aber es geht noch deutlich schneller!

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 59 / 79

Page 338: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Zwischenfazit

Mit Hilfe der asymptotischen Notation können wir sagen, dass

I A1 eine kubische Laufzeit und

I A2 eine quadratische Laufzeit besitzt.

Es ist limn→∞n2

n3 = 0 und damit folgt n2 = o(n3):

A2 ist wesentlich schneller als A1.

Aber es geht noch deutlich schneller!

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 59 / 79

Page 339: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Zwischenfazit

Mit Hilfe der asymptotischen Notation können wir sagen, dass

I A1 eine kubische Laufzeit und

I A2 eine quadratische Laufzeit besitzt.

Es ist limn→∞n2

n3 = 0 und damit folgt n2 = o(n3):A2 ist wesentlich schneller als A1.

Aber es geht noch deutlich schneller!

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 59 / 79

Page 340: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Ein Divide & Conquer Ansatz

Angenommen, wir kennen den maximalen f (i , j)−Wert optlinks für1 ≤ i ≤ j ≤ d n

2e

sowie den maximalen f (i , j)-Wert optrechts fürd n

2e+ 1 ≤ i ≤ j ≤ n.Welche Möglichkeiten gibt es für den maximalen f (i , j)-Wert opt für1 ≤ i ≤ j ≤ n?

1. opt = optlinks und die maximale Teilfolge liegt in linken Hälfte.2. opt = optrechts und die maximale Teilfolge liegt in rechten Hälfte.3. opt = maxf (i , j) | 1 ≤ i ≤ d n

2e, dn2e+ 1 ≤ j ≤ n:

eine maximale Teilfolge beginnt in der linken und endet in der rechtenHälfte.

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 60 / 79

Page 341: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Ein Divide & Conquer Ansatz

Angenommen, wir kennen den maximalen f (i , j)−Wert optlinks für1 ≤ i ≤ j ≤ d n

2e sowie den maximalen f (i , j)-Wert optrechts fürd n

2e+ 1 ≤ i ≤ j ≤ n.

Welche Möglichkeiten gibt es für den maximalen f (i , j)-Wert opt für1 ≤ i ≤ j ≤ n?

1. opt = optlinks und die maximale Teilfolge liegt in linken Hälfte.2. opt = optrechts und die maximale Teilfolge liegt in rechten Hälfte.3. opt = maxf (i , j) | 1 ≤ i ≤ d n

2e, dn2e+ 1 ≤ j ≤ n:

eine maximale Teilfolge beginnt in der linken und endet in der rechtenHälfte.

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 60 / 79

Page 342: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Ein Divide & Conquer Ansatz

Angenommen, wir kennen den maximalen f (i , j)−Wert optlinks für1 ≤ i ≤ j ≤ d n

2e sowie den maximalen f (i , j)-Wert optrechts fürd n

2e+ 1 ≤ i ≤ j ≤ n.Welche Möglichkeiten gibt es für den maximalen f (i , j)-Wert opt für1 ≤ i ≤ j ≤ n?

1. opt = optlinks und die maximale Teilfolge liegt in linken Hälfte.2. opt = optrechts und die maximale Teilfolge liegt in rechten Hälfte.3. opt = maxf (i , j) | 1 ≤ i ≤ d n

2e, dn2e+ 1 ≤ j ≤ n:

eine maximale Teilfolge beginnt in der linken und endet in der rechtenHälfte.

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 60 / 79

Page 343: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Ein Divide & Conquer Ansatz

Angenommen, wir kennen den maximalen f (i , j)−Wert optlinks für1 ≤ i ≤ j ≤ d n

2e sowie den maximalen f (i , j)-Wert optrechts fürd n

2e+ 1 ≤ i ≤ j ≤ n.Welche Möglichkeiten gibt es für den maximalen f (i , j)-Wert opt für1 ≤ i ≤ j ≤ n?

1. opt = optlinks und die maximale Teilfolge liegt in linken Hälfte.

2. opt = optrechts und die maximale Teilfolge liegt in rechten Hälfte.3. opt = maxf (i , j) | 1 ≤ i ≤ d n

2e, dn2e+ 1 ≤ j ≤ n:

eine maximale Teilfolge beginnt in der linken und endet in der rechtenHälfte.

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 60 / 79

Page 344: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Ein Divide & Conquer Ansatz

Angenommen, wir kennen den maximalen f (i , j)−Wert optlinks für1 ≤ i ≤ j ≤ d n

2e sowie den maximalen f (i , j)-Wert optrechts fürd n

2e+ 1 ≤ i ≤ j ≤ n.Welche Möglichkeiten gibt es für den maximalen f (i , j)-Wert opt für1 ≤ i ≤ j ≤ n?

1. opt = optlinks und die maximale Teilfolge liegt in linken Hälfte.2. opt = optrechts und die maximale Teilfolge liegt in rechten Hälfte.

3. opt = maxf (i , j) | 1 ≤ i ≤ d n2e, d

n2e+ 1 ≤ j ≤ n:

eine maximale Teilfolge beginnt in der linken und endet in der rechtenHälfte.

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 60 / 79

Page 345: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Ein Divide & Conquer Ansatz

Angenommen, wir kennen den maximalen f (i , j)−Wert optlinks für1 ≤ i ≤ j ≤ d n

2e sowie den maximalen f (i , j)-Wert optrechts fürd n

2e+ 1 ≤ i ≤ j ≤ n.Welche Möglichkeiten gibt es für den maximalen f (i , j)-Wert opt für1 ≤ i ≤ j ≤ n?

1. opt = optlinks und die maximale Teilfolge liegt in linken Hälfte.2. opt = optrechts und die maximale Teilfolge liegt in rechten Hälfte.3. opt =

maxf (i , j) | 1 ≤ i ≤ d n2e, d

n2e+ 1 ≤ j ≤ n:

eine maximale Teilfolge beginnt in der linken und endet in der rechtenHälfte.

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 60 / 79

Page 346: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Ein Divide & Conquer Ansatz

Angenommen, wir kennen den maximalen f (i , j)−Wert optlinks für1 ≤ i ≤ j ≤ d n

2e sowie den maximalen f (i , j)-Wert optrechts fürd n

2e+ 1 ≤ i ≤ j ≤ n.Welche Möglichkeiten gibt es für den maximalen f (i , j)-Wert opt für1 ≤ i ≤ j ≤ n?

1. opt = optlinks und die maximale Teilfolge liegt in linken Hälfte.2. opt = optrechts und die maximale Teilfolge liegt in rechten Hälfte.3. opt = maxf (i , j) | 1 ≤ i ≤ d n

2e,

d n2e+ 1 ≤ j ≤ n:

eine maximale Teilfolge beginnt in der linken und endet in der rechtenHälfte.

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 60 / 79

Page 347: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Ein Divide & Conquer Ansatz

Angenommen, wir kennen den maximalen f (i , j)−Wert optlinks für1 ≤ i ≤ j ≤ d n

2e sowie den maximalen f (i , j)-Wert optrechts fürd n

2e+ 1 ≤ i ≤ j ≤ n.Welche Möglichkeiten gibt es für den maximalen f (i , j)-Wert opt für1 ≤ i ≤ j ≤ n?

1. opt = optlinks und die maximale Teilfolge liegt in linken Hälfte.2. opt = optrechts und die maximale Teilfolge liegt in rechten Hälfte.3. opt = maxf (i , j) | 1 ≤ i ≤ d n

2e, dn2e+ 1 ≤ j ≤ n:

eine maximale Teilfolge beginnt in der linken und endet in der rechtenHälfte.

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 60 / 79

Page 348: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Ein Divide & Conquer Ansatz

Angenommen, wir kennen den maximalen f (i , j)−Wert optlinks für1 ≤ i ≤ j ≤ d n

2e sowie den maximalen f (i , j)-Wert optrechts fürd n

2e+ 1 ≤ i ≤ j ≤ n.Welche Möglichkeiten gibt es für den maximalen f (i , j)-Wert opt für1 ≤ i ≤ j ≤ n?

1. opt = optlinks und die maximale Teilfolge liegt in linken Hälfte.2. opt = optrechts und die maximale Teilfolge liegt in rechten Hälfte.3. opt = maxf (i , j) | 1 ≤ i ≤ d n

2e, dn2e+ 1 ≤ j ≤ n:

eine maximale Teilfolge beginnt in der linken und endet in der rechtenHälfte.

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 60 / 79

Page 349: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Das Teilfolgenproblem: Algorithmus A3

A3(i , j) bestimmt den Wert einer maximalen Teilfolge für ai . . . ,aj .

(1) Wenn i = j , dann gib ai als Antwort aus.(2) Ansonsten setzte mitte = b i+j

2 c;(3) opt1 = maxf (k ,mitte) | i ≤ k ≤ mitte ;

opt2 = maxf (mitte + 1, l) | mitte + 1 ≤ l ≤ j;(4) opt = maxA3(i ,mitte),A3(mitte + 1, j),opt1 + opt2 wird als Antwort

ausgegeben.

n = j − i + 1 ist die Eingabelänge. n sei eine Zweierpotenz.Wie bestimmt man die Laufzeit ZeitA3 (n)?

I ZeitA3 (1) = 1,I In Schritt (4) werden zwei rekursive Aufrufe für Eingabelänge n

2 mit Laufzeitjeweils ZeitA3 ( n

2 ) ausgeführt. Dazu kommen t(n) weitere „nicht-rekursive“Operationen aus (3) und (4). Also

ZeitA3 (n) = 2 · ZeitA3

(n2

)+ t(n).

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 61 / 79

Page 350: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Das Teilfolgenproblem: Algorithmus A3

A3(i , j) bestimmt den Wert einer maximalen Teilfolge für ai . . . ,aj .(1) Wenn i = j , dann gib ai als Antwort aus.

(2) Ansonsten setzte mitte = b i+j2 c;

(3) opt1 = maxf (k ,mitte) | i ≤ k ≤ mitte ;opt2 = maxf (mitte + 1, l) | mitte + 1 ≤ l ≤ j;

(4) opt = maxA3(i ,mitte),A3(mitte + 1, j),opt1 + opt2 wird als Antwortausgegeben.

n = j − i + 1 ist die Eingabelänge. n sei eine Zweierpotenz.Wie bestimmt man die Laufzeit ZeitA3 (n)?

I ZeitA3 (1) = 1,I In Schritt (4) werden zwei rekursive Aufrufe für Eingabelänge n

2 mit Laufzeitjeweils ZeitA3 ( n

2 ) ausgeführt. Dazu kommen t(n) weitere „nicht-rekursive“Operationen aus (3) und (4). Also

ZeitA3 (n) = 2 · ZeitA3

(n2

)+ t(n).

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 61 / 79

Page 351: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Das Teilfolgenproblem: Algorithmus A3

A3(i , j) bestimmt den Wert einer maximalen Teilfolge für ai . . . ,aj .(1) Wenn i = j , dann gib ai als Antwort aus.(2) Ansonsten setzte mitte = b i+j

2 c;

(3) opt1 = maxf (k ,mitte) | i ≤ k ≤ mitte ;opt2 = maxf (mitte + 1, l) | mitte + 1 ≤ l ≤ j;

(4) opt = maxA3(i ,mitte),A3(mitte + 1, j),opt1 + opt2 wird als Antwortausgegeben.

n = j − i + 1 ist die Eingabelänge. n sei eine Zweierpotenz.Wie bestimmt man die Laufzeit ZeitA3 (n)?

I ZeitA3 (1) = 1,I In Schritt (4) werden zwei rekursive Aufrufe für Eingabelänge n

2 mit Laufzeitjeweils ZeitA3 ( n

2 ) ausgeführt. Dazu kommen t(n) weitere „nicht-rekursive“Operationen aus (3) und (4). Also

ZeitA3 (n) = 2 · ZeitA3

(n2

)+ t(n).

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 61 / 79

Page 352: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Das Teilfolgenproblem: Algorithmus A3

A3(i , j) bestimmt den Wert einer maximalen Teilfolge für ai . . . ,aj .(1) Wenn i = j , dann gib ai als Antwort aus.(2) Ansonsten setzte mitte = b i+j

2 c;(3) opt1 = maxf (k ,mitte) | i ≤ k ≤ mitte ;

opt2 = maxf (mitte + 1, l) | mitte + 1 ≤ l ≤ j;(4) opt = maxA3(i ,mitte),A3(mitte + 1, j),opt1 + opt2 wird als Antwort

ausgegeben.

n = j − i + 1 ist die Eingabelänge. n sei eine Zweierpotenz.Wie bestimmt man die Laufzeit ZeitA3 (n)?

I ZeitA3 (1) = 1,I In Schritt (4) werden zwei rekursive Aufrufe für Eingabelänge n

2 mit Laufzeitjeweils ZeitA3 ( n

2 ) ausgeführt. Dazu kommen t(n) weitere „nicht-rekursive“Operationen aus (3) und (4). Also

ZeitA3 (n) = 2 · ZeitA3

(n2

)+ t(n).

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 61 / 79

Page 353: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Das Teilfolgenproblem: Algorithmus A3

A3(i , j) bestimmt den Wert einer maximalen Teilfolge für ai . . . ,aj .(1) Wenn i = j , dann gib ai als Antwort aus.(2) Ansonsten setzte mitte = b i+j

2 c;(3) opt1 = maxf (k ,mitte) | i ≤ k ≤ mitte ;

opt2 = maxf (mitte + 1, l) | mitte + 1 ≤ l ≤ j;

(4) opt = maxA3(i ,mitte),A3(mitte + 1, j),opt1 + opt2 wird als Antwortausgegeben.

n = j − i + 1 ist die Eingabelänge. n sei eine Zweierpotenz.Wie bestimmt man die Laufzeit ZeitA3 (n)?

I ZeitA3 (1) = 1,I In Schritt (4) werden zwei rekursive Aufrufe für Eingabelänge n

2 mit Laufzeitjeweils ZeitA3 ( n

2 ) ausgeführt. Dazu kommen t(n) weitere „nicht-rekursive“Operationen aus (3) und (4). Also

ZeitA3 (n) = 2 · ZeitA3

(n2

)+ t(n).

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 61 / 79

Page 354: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Das Teilfolgenproblem: Algorithmus A3

A3(i , j) bestimmt den Wert einer maximalen Teilfolge für ai . . . ,aj .(1) Wenn i = j , dann gib ai als Antwort aus.(2) Ansonsten setzte mitte = b i+j

2 c;(3) opt1 = maxf (k ,mitte) | i ≤ k ≤ mitte ;

opt2 = maxf (mitte + 1, l) | mitte + 1 ≤ l ≤ j;(4) opt = maxA3(i ,mitte),

A3(mitte + 1, j),opt1 + opt2 wird als Antwortausgegeben.

n = j − i + 1 ist die Eingabelänge. n sei eine Zweierpotenz.Wie bestimmt man die Laufzeit ZeitA3 (n)?

I ZeitA3 (1) = 1,I In Schritt (4) werden zwei rekursive Aufrufe für Eingabelänge n

2 mit Laufzeitjeweils ZeitA3 ( n

2 ) ausgeführt. Dazu kommen t(n) weitere „nicht-rekursive“Operationen aus (3) und (4). Also

ZeitA3 (n) = 2 · ZeitA3

(n2

)+ t(n).

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 61 / 79

Page 355: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Das Teilfolgenproblem: Algorithmus A3

A3(i , j) bestimmt den Wert einer maximalen Teilfolge für ai . . . ,aj .(1) Wenn i = j , dann gib ai als Antwort aus.(2) Ansonsten setzte mitte = b i+j

2 c;(3) opt1 = maxf (k ,mitte) | i ≤ k ≤ mitte ;

opt2 = maxf (mitte + 1, l) | mitte + 1 ≤ l ≤ j;(4) opt = maxA3(i ,mitte),A3(mitte + 1, j),

opt1 + opt2 wird als Antwortausgegeben.

n = j − i + 1 ist die Eingabelänge. n sei eine Zweierpotenz.Wie bestimmt man die Laufzeit ZeitA3 (n)?

I ZeitA3 (1) = 1,I In Schritt (4) werden zwei rekursive Aufrufe für Eingabelänge n

2 mit Laufzeitjeweils ZeitA3 ( n

2 ) ausgeführt. Dazu kommen t(n) weitere „nicht-rekursive“Operationen aus (3) und (4). Also

ZeitA3 (n) = 2 · ZeitA3

(n2

)+ t(n).

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 61 / 79

Page 356: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Das Teilfolgenproblem: Algorithmus A3

A3(i , j) bestimmt den Wert einer maximalen Teilfolge für ai . . . ,aj .(1) Wenn i = j , dann gib ai als Antwort aus.(2) Ansonsten setzte mitte = b i+j

2 c;(3) opt1 = maxf (k ,mitte) | i ≤ k ≤ mitte ;

opt2 = maxf (mitte + 1, l) | mitte + 1 ≤ l ≤ j;(4) opt = maxA3(i ,mitte),A3(mitte + 1, j),opt1 + opt2 wird als Antwort

ausgegeben.

n = j − i + 1 ist die Eingabelänge. n sei eine Zweierpotenz.Wie bestimmt man die Laufzeit ZeitA3 (n)?

I ZeitA3 (1) = 1,I In Schritt (4) werden zwei rekursive Aufrufe für Eingabelänge n

2 mit Laufzeitjeweils ZeitA3 ( n

2 ) ausgeführt. Dazu kommen t(n) weitere „nicht-rekursive“Operationen aus (3) und (4). Also

ZeitA3 (n) = 2 · ZeitA3

(n2

)+ t(n).

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 61 / 79

Page 357: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Das Teilfolgenproblem: Algorithmus A3

A3(i , j) bestimmt den Wert einer maximalen Teilfolge für ai . . . ,aj .(1) Wenn i = j , dann gib ai als Antwort aus.(2) Ansonsten setzte mitte = b i+j

2 c;(3) opt1 = maxf (k ,mitte) | i ≤ k ≤ mitte ;

opt2 = maxf (mitte + 1, l) | mitte + 1 ≤ l ≤ j;(4) opt = maxA3(i ,mitte),A3(mitte + 1, j),opt1 + opt2 wird als Antwort

ausgegeben.

n = j − i + 1 ist die Eingabelänge. n sei eine Zweierpotenz.

Wie bestimmt man die Laufzeit ZeitA3 (n)?I ZeitA3 (1) = 1,I In Schritt (4) werden zwei rekursive Aufrufe für Eingabelänge n

2 mit Laufzeitjeweils ZeitA3 ( n

2 ) ausgeführt. Dazu kommen t(n) weitere „nicht-rekursive“Operationen aus (3) und (4). Also

ZeitA3 (n) = 2 · ZeitA3

(n2

)+ t(n).

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 61 / 79

Page 358: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Das Teilfolgenproblem: Algorithmus A3

A3(i , j) bestimmt den Wert einer maximalen Teilfolge für ai . . . ,aj .(1) Wenn i = j , dann gib ai als Antwort aus.(2) Ansonsten setzte mitte = b i+j

2 c;(3) opt1 = maxf (k ,mitte) | i ≤ k ≤ mitte ;

opt2 = maxf (mitte + 1, l) | mitte + 1 ≤ l ≤ j;(4) opt = maxA3(i ,mitte),A3(mitte + 1, j),opt1 + opt2 wird als Antwort

ausgegeben.

n = j − i + 1 ist die Eingabelänge. n sei eine Zweierpotenz.Wie bestimmt man die Laufzeit ZeitA3 (n)?

I ZeitA3 (1) = 1,I In Schritt (4) werden zwei rekursive Aufrufe für Eingabelänge n

2 mit Laufzeitjeweils ZeitA3 ( n

2 ) ausgeführt. Dazu kommen t(n) weitere „nicht-rekursive“Operationen aus (3) und (4). Also

ZeitA3 (n) = 2 · ZeitA3

(n2

)+ t(n).

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 61 / 79

Page 359: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Das Teilfolgenproblem: Algorithmus A3

A3(i , j) bestimmt den Wert einer maximalen Teilfolge für ai . . . ,aj .(1) Wenn i = j , dann gib ai als Antwort aus.(2) Ansonsten setzte mitte = b i+j

2 c;(3) opt1 = maxf (k ,mitte) | i ≤ k ≤ mitte ;

opt2 = maxf (mitte + 1, l) | mitte + 1 ≤ l ≤ j;(4) opt = maxA3(i ,mitte),A3(mitte + 1, j),opt1 + opt2 wird als Antwort

ausgegeben.

n = j − i + 1 ist die Eingabelänge. n sei eine Zweierpotenz.Wie bestimmt man die Laufzeit ZeitA3 (n)?

I ZeitA3 (1) = 1,

I In Schritt (4) werden zwei rekursive Aufrufe für Eingabelänge n2 mit Laufzeit

jeweils ZeitA3 ( n2 ) ausgeführt. Dazu kommen t(n) weitere „nicht-rekursive“

Operationen aus (3) und (4). Also

ZeitA3 (n) = 2 · ZeitA3

(n2

)+ t(n).

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 61 / 79

Page 360: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Das Teilfolgenproblem: Algorithmus A3

A3(i , j) bestimmt den Wert einer maximalen Teilfolge für ai . . . ,aj .(1) Wenn i = j , dann gib ai als Antwort aus.(2) Ansonsten setzte mitte = b i+j

2 c;(3) opt1 = maxf (k ,mitte) | i ≤ k ≤ mitte ;

opt2 = maxf (mitte + 1, l) | mitte + 1 ≤ l ≤ j;(4) opt = maxA3(i ,mitte),A3(mitte + 1, j),opt1 + opt2 wird als Antwort

ausgegeben.

n = j − i + 1 ist die Eingabelänge. n sei eine Zweierpotenz.Wie bestimmt man die Laufzeit ZeitA3 (n)?

I ZeitA3 (1) = 1,I In Schritt (4) werden zwei rekursive Aufrufe für Eingabelänge n

2 mit Laufzeitjeweils ZeitA3 ( n

2 ) ausgeführt.

Dazu kommen t(n) weitere „nicht-rekursive“Operationen aus (3) und (4). Also

ZeitA3 (n) = 2 · ZeitA3

(n2

)+ t(n).

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 61 / 79

Page 361: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Das Teilfolgenproblem: Algorithmus A3

A3(i , j) bestimmt den Wert einer maximalen Teilfolge für ai . . . ,aj .(1) Wenn i = j , dann gib ai als Antwort aus.(2) Ansonsten setzte mitte = b i+j

2 c;(3) opt1 = maxf (k ,mitte) | i ≤ k ≤ mitte ;

opt2 = maxf (mitte + 1, l) | mitte + 1 ≤ l ≤ j;(4) opt = maxA3(i ,mitte),A3(mitte + 1, j),opt1 + opt2 wird als Antwort

ausgegeben.

n = j − i + 1 ist die Eingabelänge. n sei eine Zweierpotenz.Wie bestimmt man die Laufzeit ZeitA3 (n)?

I ZeitA3 (1) = 1,I In Schritt (4) werden zwei rekursive Aufrufe für Eingabelänge n

2 mit Laufzeitjeweils ZeitA3 ( n

2 ) ausgeführt. Dazu kommen t(n) weitere „nicht-rekursive“Operationen aus (3) und (4). Also

ZeitA3 (n) =

2 · ZeitA3

(n2

)+ t(n).

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 61 / 79

Page 362: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Das Teilfolgenproblem: Algorithmus A3

A3(i , j) bestimmt den Wert einer maximalen Teilfolge für ai . . . ,aj .(1) Wenn i = j , dann gib ai als Antwort aus.(2) Ansonsten setzte mitte = b i+j

2 c;(3) opt1 = maxf (k ,mitte) | i ≤ k ≤ mitte ;

opt2 = maxf (mitte + 1, l) | mitte + 1 ≤ l ≤ j;(4) opt = maxA3(i ,mitte),A3(mitte + 1, j),opt1 + opt2 wird als Antwort

ausgegeben.

n = j − i + 1 ist die Eingabelänge. n sei eine Zweierpotenz.Wie bestimmt man die Laufzeit ZeitA3 (n)?

I ZeitA3 (1) = 1,I In Schritt (4) werden zwei rekursive Aufrufe für Eingabelänge n

2 mit Laufzeitjeweils ZeitA3 ( n

2 ) ausgeführt. Dazu kommen t(n) weitere „nicht-rekursive“Operationen aus (3) und (4). Also

ZeitA3 (n) = 2 · ZeitA3

(n2

)+ t(n).

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 61 / 79

Page 363: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Wie löst man Rekursionsgleichungen?

Wie groß ist der „Overhead“ t(n)?

I Um opt1 und opt2 zu berechnen genügen n2 − 1 + n

2 − 1 = n − 2 Additionen.I Dieselbe Anzahl von Vergleichen wird benötigt.I Eine weitere Addition wird für opt1+ opt2 benötigt, zwei weitere Vergleiche

fallen in Schritt (4) an.I t(n) = 2 · (n − 2) + 3 = 2n − 1.

Wir erhalten die Rekursionsgleichnungen:ZeitA3 (1) = 1ZeitA3 (n) = 2 · ZeitA3

( n2

)+ 2n − 1.

Der allgemeinere Fall:Ein rekursives Programm A mit Eingabelänge n besitze a rekursiveAufrufe mit Eingabelänge n

b und es werden t(n) nicht-rekursiveOperationen ausgeführt.Die Rekursionsgleichung:

ZeitA(n) = a · ZeitA(n

b

)+ t(n).

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 62 / 79

Page 364: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Wie löst man Rekursionsgleichungen?

Wie groß ist der „Overhead“ t(n)?I Um opt1 und opt2 zu berechnen genügen n

2 − 1 + n2 − 1 = n − 2 Additionen.

I Dieselbe Anzahl von Vergleichen wird benötigt.

I Eine weitere Addition wird für opt1+ opt2 benötigt, zwei weitere Vergleichefallen in Schritt (4) an.

I t(n) = 2 · (n − 2) + 3 = 2n − 1.

Wir erhalten die Rekursionsgleichnungen:ZeitA3 (1) = 1ZeitA3 (n) = 2 · ZeitA3

( n2

)+ 2n − 1.

Der allgemeinere Fall:Ein rekursives Programm A mit Eingabelänge n besitze a rekursiveAufrufe mit Eingabelänge n

b und es werden t(n) nicht-rekursiveOperationen ausgeführt.Die Rekursionsgleichung:

ZeitA(n) = a · ZeitA(n

b

)+ t(n).

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 62 / 79

Page 365: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Wie löst man Rekursionsgleichungen?

Wie groß ist der „Overhead“ t(n)?I Um opt1 und opt2 zu berechnen genügen n

2 − 1 + n2 − 1 = n − 2 Additionen.

I Dieselbe Anzahl von Vergleichen wird benötigt.I Eine weitere Addition wird für opt1+ opt2 benötigt, zwei weitere Vergleiche

fallen in Schritt (4) an.

I t(n) = 2 · (n − 2) + 3 = 2n − 1.

Wir erhalten die Rekursionsgleichnungen:ZeitA3 (1) = 1ZeitA3 (n) = 2 · ZeitA3

( n2

)+ 2n − 1.

Der allgemeinere Fall:Ein rekursives Programm A mit Eingabelänge n besitze a rekursiveAufrufe mit Eingabelänge n

b und es werden t(n) nicht-rekursiveOperationen ausgeführt.Die Rekursionsgleichung:

ZeitA(n) = a · ZeitA(n

b

)+ t(n).

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 62 / 79

Page 366: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Wie löst man Rekursionsgleichungen?

Wie groß ist der „Overhead“ t(n)?I Um opt1 und opt2 zu berechnen genügen n

2 − 1 + n2 − 1 = n − 2 Additionen.

I Dieselbe Anzahl von Vergleichen wird benötigt.I Eine weitere Addition wird für opt1+ opt2 benötigt, zwei weitere Vergleiche

fallen in Schritt (4) an.I t(n) = 2 · (n − 2) + 3 = 2n − 1.

Wir erhalten die Rekursionsgleichnungen:ZeitA3 (1) = 1ZeitA3 (n) = 2 · ZeitA3

( n2

)+ 2n − 1.

Der allgemeinere Fall:Ein rekursives Programm A mit Eingabelänge n besitze a rekursiveAufrufe mit Eingabelänge n

b und es werden t(n) nicht-rekursiveOperationen ausgeführt.Die Rekursionsgleichung:

ZeitA(n) = a · ZeitA(n

b

)+ t(n).

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 62 / 79

Page 367: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Wie löst man Rekursionsgleichungen?

Wie groß ist der „Overhead“ t(n)?I Um opt1 und opt2 zu berechnen genügen n

2 − 1 + n2 − 1 = n − 2 Additionen.

I Dieselbe Anzahl von Vergleichen wird benötigt.I Eine weitere Addition wird für opt1+ opt2 benötigt, zwei weitere Vergleiche

fallen in Schritt (4) an.I t(n) = 2 · (n − 2) + 3 = 2n − 1.

Wir erhalten die Rekursionsgleichnungen:ZeitA3 (1) = 1ZeitA3 (n) = 2 · ZeitA3

( n2

)+ 2n − 1.

Der allgemeinere Fall:Ein rekursives Programm A mit Eingabelänge n besitze a rekursiveAufrufe mit Eingabelänge n

b und es werden t(n) nicht-rekursiveOperationen ausgeführt.Die Rekursionsgleichung:

ZeitA(n) = a · ZeitA(n

b

)+ t(n).

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 62 / 79

Page 368: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Wie löst man Rekursionsgleichungen?

Wie groß ist der „Overhead“ t(n)?I Um opt1 und opt2 zu berechnen genügen n

2 − 1 + n2 − 1 = n − 2 Additionen.

I Dieselbe Anzahl von Vergleichen wird benötigt.I Eine weitere Addition wird für opt1+ opt2 benötigt, zwei weitere Vergleiche

fallen in Schritt (4) an.I t(n) = 2 · (n − 2) + 3 = 2n − 1.

Wir erhalten die Rekursionsgleichnungen:ZeitA3 (1) = 1ZeitA3 (n) = 2 · ZeitA3

( n2

)+ 2n − 1.

Der allgemeinere Fall:Ein rekursives Programm A mit Eingabelänge n besitze a rekursiveAufrufe mit Eingabelänge n

b und es werden t(n) nicht-rekursiveOperationen ausgeführt.

Die Rekursionsgleichung:

ZeitA(n) = a · ZeitA(n

b

)+ t(n).

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 62 / 79

Page 369: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Wie löst man Rekursionsgleichungen?

Wie groß ist der „Overhead“ t(n)?I Um opt1 und opt2 zu berechnen genügen n

2 − 1 + n2 − 1 = n − 2 Additionen.

I Dieselbe Anzahl von Vergleichen wird benötigt.I Eine weitere Addition wird für opt1+ opt2 benötigt, zwei weitere Vergleiche

fallen in Schritt (4) an.I t(n) = 2 · (n − 2) + 3 = 2n − 1.

Wir erhalten die Rekursionsgleichnungen:ZeitA3 (1) = 1ZeitA3 (n) = 2 · ZeitA3

( n2

)+ 2n − 1.

Der allgemeinere Fall:Ein rekursives Programm A mit Eingabelänge n besitze a rekursiveAufrufe mit Eingabelänge n

b und es werden t(n) nicht-rekursiveOperationen ausgeführt.Die Rekursionsgleichung:

ZeitA(n) = a ·

ZeitA(n

b

)+ t(n).

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 62 / 79

Page 370: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Wie löst man Rekursionsgleichungen?

Wie groß ist der „Overhead“ t(n)?I Um opt1 und opt2 zu berechnen genügen n

2 − 1 + n2 − 1 = n − 2 Additionen.

I Dieselbe Anzahl von Vergleichen wird benötigt.I Eine weitere Addition wird für opt1+ opt2 benötigt, zwei weitere Vergleiche

fallen in Schritt (4) an.I t(n) = 2 · (n − 2) + 3 = 2n − 1.

Wir erhalten die Rekursionsgleichnungen:ZeitA3 (1) = 1ZeitA3 (n) = 2 · ZeitA3

( n2

)+ 2n − 1.

Der allgemeinere Fall:Ein rekursives Programm A mit Eingabelänge n besitze a rekursiveAufrufe mit Eingabelänge n

b und es werden t(n) nicht-rekursiveOperationen ausgeführt.Die Rekursionsgleichung:

ZeitA(n) = a · ZeitA(n

b

)

+ t(n).

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 62 / 79

Page 371: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Wie löst man Rekursionsgleichungen?

Wie groß ist der „Overhead“ t(n)?I Um opt1 und opt2 zu berechnen genügen n

2 − 1 + n2 − 1 = n − 2 Additionen.

I Dieselbe Anzahl von Vergleichen wird benötigt.I Eine weitere Addition wird für opt1+ opt2 benötigt, zwei weitere Vergleiche

fallen in Schritt (4) an.I t(n) = 2 · (n − 2) + 3 = 2n − 1.

Wir erhalten die Rekursionsgleichnungen:ZeitA3 (1) = 1ZeitA3 (n) = 2 · ZeitA3

( n2

)+ 2n − 1.

Der allgemeinere Fall:Ein rekursives Programm A mit Eingabelänge n besitze a rekursiveAufrufe mit Eingabelänge n

b und es werden t(n) nicht-rekursiveOperationen ausgeführt.Die Rekursionsgleichung:

ZeitA(n) = a · ZeitA(n

b

)+ t(n).

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 62 / 79

Page 372: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Das Mastertheorem

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 63 / 79

Page 373: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Der Baum der Rekursionsgleichung

Die Rekursionsgleichung

T (1) = c,T (n) = a · T(n

b

)+ t(n)

ist zu lösen. n sei eine Potenz der Zahl b > 1 und a ≥ 1, c > 0 gelte.

Der Baum der Rekursionsgleichung:1. Wir sagen, dass die Wurzel root die Eingabelänge n hat.

I Wenn n = 1, dann markiere root mit c und root wird zu einem Blatt.I Wenn n > 1, dann markiere root mit t(n). root erhält a Kinder mit

Eingabelänge n/b.2. Sei v ein Knoten des Baums mit Eingabelänge m.

I Wenn m = 1, dann markiere v mit c und v wird zu einem Blatt.I Wenn m > 1, dann markiere v mit t(m) und v erhält a Kinder mit

Eingabelänge m/b.

T (n) stimmt überein mit der Summe aller Knotenmarkierungen.(kann man mit vollständiger Induktion zeigen).

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 64 / 79

Page 374: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Der Baum der Rekursionsgleichung

Die Rekursionsgleichung

T (1) = c,T (n) = a · T(n

b

)+ t(n)

ist zu lösen. n sei eine Potenz der Zahl b > 1 und a ≥ 1, c > 0 gelte.

Der Baum der Rekursionsgleichung:1. Wir sagen, dass die Wurzel root die Eingabelänge n hat.

I Wenn n = 1, dann markiere root mit c und root wird zu einem Blatt.

I Wenn n > 1, dann markiere root mit t(n). root erhält a Kinder mitEingabelänge n/b.

2. Sei v ein Knoten des Baums mit Eingabelänge m.I Wenn m = 1, dann markiere v mit c und v wird zu einem Blatt.I Wenn m > 1, dann markiere v mit t(m) und v erhält a Kinder mit

Eingabelänge m/b.

T (n) stimmt überein mit der Summe aller Knotenmarkierungen.(kann man mit vollständiger Induktion zeigen).

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 64 / 79

Page 375: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Der Baum der Rekursionsgleichung

Die Rekursionsgleichung

T (1) = c,T (n) = a · T(n

b

)+ t(n)

ist zu lösen. n sei eine Potenz der Zahl b > 1 und a ≥ 1, c > 0 gelte.

Der Baum der Rekursionsgleichung:1. Wir sagen, dass die Wurzel root die Eingabelänge n hat.

I Wenn n = 1, dann markiere root mit c und root wird zu einem Blatt.I Wenn n > 1, dann markiere root mit t(n). root erhält a Kinder mit

Eingabelänge n/b.

2. Sei v ein Knoten des Baums mit Eingabelänge m.I Wenn m = 1, dann markiere v mit c und v wird zu einem Blatt.I Wenn m > 1, dann markiere v mit t(m) und v erhält a Kinder mit

Eingabelänge m/b.

T (n) stimmt überein mit der Summe aller Knotenmarkierungen.(kann man mit vollständiger Induktion zeigen).

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 64 / 79

Page 376: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Der Baum der Rekursionsgleichung

Die Rekursionsgleichung

T (1) = c,T (n) = a · T(n

b

)+ t(n)

ist zu lösen. n sei eine Potenz der Zahl b > 1 und a ≥ 1, c > 0 gelte.

Der Baum der Rekursionsgleichung:1. Wir sagen, dass die Wurzel root die Eingabelänge n hat.

I Wenn n = 1, dann markiere root mit c und root wird zu einem Blatt.I Wenn n > 1, dann markiere root mit t(n). root erhält a Kinder mit

Eingabelänge n/b.2. Sei v ein Knoten des Baums mit Eingabelänge m.

I Wenn m = 1, dann markiere v mit c und v wird zu einem Blatt.I Wenn m > 1, dann markiere v mit t(m) und v erhält a Kinder mit

Eingabelänge m/b.

T (n) stimmt überein mit der Summe aller Knotenmarkierungen.(kann man mit vollständiger Induktion zeigen).

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 64 / 79

Page 377: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Der Baum der Rekursionsgleichung

Die Rekursionsgleichung

T (1) = c,T (n) = a · T(n

b

)+ t(n)

ist zu lösen. n sei eine Potenz der Zahl b > 1 und a ≥ 1, c > 0 gelte.

Der Baum der Rekursionsgleichung:1. Wir sagen, dass die Wurzel root die Eingabelänge n hat.

I Wenn n = 1, dann markiere root mit c und root wird zu einem Blatt.I Wenn n > 1, dann markiere root mit t(n). root erhält a Kinder mit

Eingabelänge n/b.2. Sei v ein Knoten des Baums mit Eingabelänge m.

I Wenn m = 1, dann markiere v mit c und v wird zu einem Blatt.I Wenn m > 1, dann markiere v mit t(m) und v erhält a Kinder mit

Eingabelänge m/b.

T (n) stimmt überein mit der Summe aller Knotenmarkierungen.(kann man mit vollständiger Induktion zeigen).

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 64 / 79

Page 378: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Expansion und Vermutung

Die Rekursionsgleichung

T (1) = c,T (n) = a · T(n

b

)+ t(n)

ist zu lösen. n sei eine Potenz der Zahl b > 1 und a ≥ 1, c > 0 gelte.

Wir expandieren die Rekursionsgleichung und erhalten

T (n) = a · T(n

b

)+ t(n)

= a(

a · T( n

b2

)+ t(n

b

))+ t(n)

= a2 · T( n

b2

)+ a · t

(nb

)+ t(n)

= a3 · T( n

b3

)+ a2 · t

( nb2

)+ a · t

(nb

)+ t(n) = · · ·

?= ak · T

( nbk

)+ ak−1 · t

( nbk−1

)+ · · ·+ a · t

(nb

)+ t(n).

Man kann die Vermutung ?= mit vollständiger Induktion beweisen.

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 65 / 79

Page 379: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Expansion und Vermutung

Die Rekursionsgleichung

T (1) = c,T (n) = a · T(n

b

)+ t(n)

ist zu lösen. n sei eine Potenz der Zahl b > 1 und a ≥ 1, c > 0 gelte.

Wir expandieren die Rekursionsgleichung und erhalten

T (n) = a · T(n

b

)+ t(n)

= a(

a · T( n

b2

)+ t(n

b

))+ t(n)

= a2 · T( n

b2

)+ a · t

(nb

)+ t(n)

= a3 · T( n

b3

)+ a2 · t

( nb2

)+ a · t

(nb

)+ t(n) = · · ·

?= ak · T

( nbk

)+ ak−1 · t

( nbk−1

)+ · · ·+ a · t

(nb

)+ t(n).

Man kann die Vermutung ?= mit vollständiger Induktion beweisen.

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 65 / 79

Page 380: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Expansion und Vermutung

Die Rekursionsgleichung

T (1) = c,T (n) = a · T(n

b

)+ t(n)

ist zu lösen. n sei eine Potenz der Zahl b > 1 und a ≥ 1, c > 0 gelte.

Wir expandieren die Rekursionsgleichung und erhalten

T (n) = a · T(n

b

)+ t(n)

= a(

a · T( n

b2

)+ t(n

b

))+ t(n)

= a2 · T( n

b2

)+ a · t

(nb

)+ t(n)

= a3 · T( n

b3

)+ a2 · t

( nb2

)+ a · t

(nb

)+ t(n) = · · ·

?= ak · T

( nbk

)+ ak−1 · t

( nbk−1

)+ · · ·+ a · t

(nb

)+ t(n).

Man kann die Vermutung ?= mit vollständiger Induktion beweisen.

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 65 / 79

Page 381: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Expansion und Vermutung

Die Rekursionsgleichung

T (1) = c,T (n) = a · T(n

b

)+ t(n)

ist zu lösen. n sei eine Potenz der Zahl b > 1 und a ≥ 1, c > 0 gelte.

Wir expandieren die Rekursionsgleichung und erhalten

T (n) = a · T(n

b

)+ t(n)

= a(

a · T( n

b2

)+ t(n

b

))+ t(n)

= a2 · T( n

b2

)+ a · t

(nb

)+ t(n)

= a3 · T( n

b3

)+ a2 · t

( nb2

)+ a · t

(nb

)+ t(n) = · · ·

?= ak · T

( nbk

)+ ak−1 · t

( nbk−1

)+ · · ·+ a · t

(nb

)+ t(n).

Man kann die Vermutung ?= mit vollständiger Induktion beweisen.

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 65 / 79

Page 382: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Expansion und Vermutung

Die Rekursionsgleichung

T (1) = c,T (n) = a · T(n

b

)+ t(n)

ist zu lösen. n sei eine Potenz der Zahl b > 1 und a ≥ 1, c > 0 gelte.

Wir expandieren die Rekursionsgleichung und erhalten

T (n) = a · T(n

b

)+ t(n)

= a(

a · T( n

b2

)+ t(n

b

))+ t(n)

= a2 · T( n

b2

)+ a · t

(nb

)+ t(n)

= a3 · T( n

b3

)+ a2 · t

( nb2

)+ a · t

(nb

)+ t(n)

= · · ·

?= ak · T

( nbk

)+ ak−1 · t

( nbk−1

)+ · · ·+ a · t

(nb

)+ t(n).

Man kann die Vermutung ?= mit vollständiger Induktion beweisen.

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 65 / 79

Page 383: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Expansion und Vermutung

Die Rekursionsgleichung

T (1) = c,T (n) = a · T(n

b

)+ t(n)

ist zu lösen. n sei eine Potenz der Zahl b > 1 und a ≥ 1, c > 0 gelte.

Wir expandieren die Rekursionsgleichung und erhalten

T (n) = a · T(n

b

)+ t(n)

= a(

a · T( n

b2

)+ t(n

b

))+ t(n)

= a2 · T( n

b2

)+ a · t

(nb

)+ t(n)

= a3 · T( n

b3

)+ a2 · t

( nb2

)+ a · t

(nb

)+ t(n) = · · ·

?= ak · T

( nbk

)+

ak−1 · t( n

bk−1

)+ · · ·+ a · t

(nb

)+ t(n).

Man kann die Vermutung ?= mit vollständiger Induktion beweisen.

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 65 / 79

Page 384: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Expansion und Vermutung

Die Rekursionsgleichung

T (1) = c,T (n) = a · T(n

b

)+ t(n)

ist zu lösen. n sei eine Potenz der Zahl b > 1 und a ≥ 1, c > 0 gelte.

Wir expandieren die Rekursionsgleichung und erhalten

T (n) = a · T(n

b

)+ t(n)

= a(

a · T( n

b2

)+ t(n

b

))+ t(n)

= a2 · T( n

b2

)+ a · t

(nb

)+ t(n)

= a3 · T( n

b3

)+ a2 · t

( nb2

)+ a · t

(nb

)+ t(n) = · · ·

?= ak · T

( nbk

)+ ak−1 · t

( nbk−1

)+

· · ·+ a · t(n

b

)+ t(n).

Man kann die Vermutung ?= mit vollständiger Induktion beweisen.

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 65 / 79

Page 385: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Expansion und Vermutung

Die Rekursionsgleichung

T (1) = c,T (n) = a · T(n

b

)+ t(n)

ist zu lösen. n sei eine Potenz der Zahl b > 1 und a ≥ 1, c > 0 gelte.

Wir expandieren die Rekursionsgleichung und erhalten

T (n) = a · T(n

b

)+ t(n)

= a(

a · T( n

b2

)+ t(n

b

))+ t(n)

= a2 · T( n

b2

)+ a · t

(nb

)+ t(n)

= a3 · T( n

b3

)+ a2 · t

( nb2

)+ a · t

(nb

)+ t(n) = · · ·

?= ak · T

( nbk

)+ ak−1 · t

( nbk−1

)+ · · ·+ a · t

(nb

)+

t(n).

Man kann die Vermutung ?= mit vollständiger Induktion beweisen.

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 65 / 79

Page 386: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Expansion und Vermutung

Die Rekursionsgleichung

T (1) = c,T (n) = a · T(n

b

)+ t(n)

ist zu lösen. n sei eine Potenz der Zahl b > 1 und a ≥ 1, c > 0 gelte.

Wir expandieren die Rekursionsgleichung und erhalten

T (n) = a · T(n

b

)+ t(n)

= a(

a · T( n

b2

)+ t(n

b

))+ t(n)

= a2 · T( n

b2

)+ a · t

(nb

)+ t(n)

= a3 · T( n

b3

)+ a2 · t

( nb2

)+ a · t

(nb

)+ t(n) = · · ·

?= ak · T

( nbk

)+ ak−1 · t

( nbk−1

)+ · · ·+ a · t

(nb

)+ t(n).

Man kann die Vermutung ?= mit vollständiger Induktion beweisen.

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 65 / 79

Page 387: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Expansion und Vermutung

Die Rekursionsgleichung

T (1) = c,T (n) = a · T(n

b

)+ t(n)

ist zu lösen. n sei eine Potenz der Zahl b > 1 und a ≥ 1, c > 0 gelte.

Wir expandieren die Rekursionsgleichung und erhalten

T (n) = a · T(n

b

)+ t(n)

= a(

a · T( n

b2

)+ t(n

b

))+ t(n)

= a2 · T( n

b2

)+ a · t

(nb

)+ t(n)

= a3 · T( n

b3

)+ a2 · t

( nb2

)+ a · t

(nb

)+ t(n) = · · ·

?= ak · T

( nbk

)+ ak−1 · t

( nbk−1

)+ · · ·+ a · t

(nb

)+ t(n).

Man kann die Vermutung ?= mit vollständiger Induktion beweisen.

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 65 / 79

Page 388: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Eliminierung rekursiver Terme

Setze k = logb n. Dann ist bk =

n und T ( nbk ) = T (1) = c.

T (n) = ak · T( n

bk

)+ ak−1 · t

( nbk−1

)+ · · ·+ a · t

(nb

)+ t(n)

= alogb n · T (1) +k−1∑j=0

aj · t( n

bj

)

= alogb n · c +

logb n−1∑j=0

aj · t( n

bj

)= nlogb a · c +

logb n−1∑j=0

aj · t( n

bj

).

Eine Beobachtung:

Wenn t(n) ≤ d · nlogb(a)−ε für Konstanten ε > 0 und d > 0, dann dominiert dererste Summand nlogb a · c. Warum?

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 66 / 79

Page 389: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Eliminierung rekursiver Terme

Setze k = logb n. Dann ist bk = n und T ( nbk ) =

T (1) = c.

T (n) = ak · T( n

bk

)+ ak−1 · t

( nbk−1

)+ · · ·+ a · t

(nb

)+ t(n)

= alogb n · T (1) +k−1∑j=0

aj · t( n

bj

)

= alogb n · c +

logb n−1∑j=0

aj · t( n

bj

)= nlogb a · c +

logb n−1∑j=0

aj · t( n

bj

).

Eine Beobachtung:

Wenn t(n) ≤ d · nlogb(a)−ε für Konstanten ε > 0 und d > 0, dann dominiert dererste Summand nlogb a · c. Warum?

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 66 / 79

Page 390: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Eliminierung rekursiver Terme

Setze k = logb n. Dann ist bk = n und T ( nbk ) = T (1) = c.

T (n) = ak · T( n

bk

)+ ak−1 · t

( nbk−1

)+ · · ·+ a · t

(nb

)+ t(n)

= alogb n · T (1) +k−1∑j=0

aj · t( n

bj

)

= alogb n · c +

logb n−1∑j=0

aj · t( n

bj

)= nlogb a · c +

logb n−1∑j=0

aj · t( n

bj

).

Eine Beobachtung:

Wenn t(n) ≤ d · nlogb(a)−ε für Konstanten ε > 0 und d > 0, dann dominiert dererste Summand nlogb a · c. Warum?

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 66 / 79

Page 391: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Eliminierung rekursiver Terme

Setze k = logb n. Dann ist bk = n und T ( nbk ) = T (1) = c.

T (n) = ak · T( n

bk

)+ ak−1 · t

( nbk−1

)+ · · ·+ a · t

(nb

)+ t(n)

= alogb n · T (1) +k−1∑j=0

aj · t( n

bj

)

= alogb n · c +

logb n−1∑j=0

aj · t( n

bj

)= nlogb a · c +

logb n−1∑j=0

aj · t( n

bj

).

Eine Beobachtung:

Wenn t(n) ≤ d · nlogb(a)−ε für Konstanten ε > 0 und d > 0, dann dominiert dererste Summand nlogb a · c. Warum?

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 66 / 79

Page 392: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Eliminierung rekursiver Terme

Setze k = logb n. Dann ist bk = n und T ( nbk ) = T (1) = c.

T (n) = ak · T( n

bk

)+ ak−1 · t

( nbk−1

)+ · · ·+ a · t

(nb

)+ t(n)

= alogb n · T (1) +k−1∑j=0

aj · t( n

bj

)

= alogb n · c +

logb n−1∑j=0

aj · t( n

bj

)= nlogb a · c +

logb n−1∑j=0

aj · t( n

bj

).

Eine Beobachtung:

Wenn t(n) ≤ d · nlogb(a)−ε für Konstanten ε > 0 und d > 0, dann dominiert dererste Summand nlogb a · c. Warum?

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 66 / 79

Page 393: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Eliminierung rekursiver Terme

Setze k = logb n. Dann ist bk = n und T ( nbk ) = T (1) = c.

T (n) = ak · T( n

bk

)+ ak−1 · t

( nbk−1

)+ · · ·+ a · t

(nb

)+ t(n)

= alogb n · T (1) +k−1∑j=0

aj · t( n

bj

)

= alogb n · c +

logb n−1∑j=0

aj · t( n

bj

)

= nlogb a · c +

logb n−1∑j=0

aj · t( n

bj

).

Eine Beobachtung:

Wenn t(n) ≤ d · nlogb(a)−ε für Konstanten ε > 0 und d > 0, dann dominiert dererste Summand nlogb a · c. Warum?

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 66 / 79

Page 394: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Eliminierung rekursiver Terme

Setze k = logb n. Dann ist bk = n und T ( nbk ) = T (1) = c.

T (n) = ak · T( n

bk

)+ ak−1 · t

( nbk−1

)+ · · ·+ a · t

(nb

)+ t(n)

= alogb n · T (1) +k−1∑j=0

aj · t( n

bj

)

= alogb n · c +

logb n−1∑j=0

aj · t( n

bj

)= nlogb a · c +

logb n−1∑j=0

aj · t( n

bj

).

Eine Beobachtung:

Wenn t(n) ≤ d · nlogb(a)−ε für Konstanten ε > 0 und d > 0, dann dominiert dererste Summand nlogb a · c. Warum?

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 66 / 79

Page 395: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Eliminierung rekursiver Terme

Setze k = logb n. Dann ist bk = n und T ( nbk ) = T (1) = c.

T (n) = ak · T( n

bk

)+ ak−1 · t

( nbk−1

)+ · · ·+ a · t

(nb

)+ t(n)

= alogb n · T (1) +k−1∑j=0

aj · t( n

bj

)

= alogb n · c +

logb n−1∑j=0

aj · t( n

bj

)= nlogb a · c +

logb n−1∑j=0

aj · t( n

bj

).

Eine Beobachtung:

Wenn t(n) ≤ d · nlogb(a)−ε für Konstanten ε > 0 und d > 0, dann dominiert

dererste Summand nlogb a · c. Warum?

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 66 / 79

Page 396: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Eliminierung rekursiver Terme

Setze k = logb n. Dann ist bk = n und T ( nbk ) = T (1) = c.

T (n) = ak · T( n

bk

)+ ak−1 · t

( nbk−1

)+ · · ·+ a · t

(nb

)+ t(n)

= alogb n · T (1) +k−1∑j=0

aj · t( n

bj

)

= alogb n · c +

logb n−1∑j=0

aj · t( n

bj

)= nlogb a · c +

logb n−1∑j=0

aj · t( n

bj

).

Eine Beobachtung:

Wenn t(n) ≤ d · nlogb(a)−ε für Konstanten ε > 0 und d > 0, dann dominiert dererste Summand nlogb a · c. Warum?

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 66 / 79

Page 397: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Das Mastertheorem: Formulierung

Die RekursionT(1) = c, T(n) = a · T

(nb

)+ t(n)

sei zu lösen. n ist eine Potenz der Zahl b > 1 und a ≥ 1, c > 0 gelte.

(a) Wenn t(n) = O(n(logb a)−ε) für eine Konstante ε > 0,

dann ist T (n) = Θ(nlogb a).Die Blätter im Rekursionsbaum dominieren.

(b) Wenn t(n) = Θ(nlogb a), dann ist T (n) = Θ(nlogb a · logb n).Gleichgewicht zwischen den Schichten im Rekursionsbaum.

(c) Wenn t(n) = Ω(n(logb a)+ε

)für eine Konstante ε > 0 und a · t

( nb

)≤ αt(n)

für eine Konstante α < 1, dann T (n) = Θ(t(n)).Die Wurzel im Rekursionsbaum dominiert.

Siehe Beweis des Mastertheorems im Skript.

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 67 / 79

Page 398: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Das Mastertheorem: Formulierung

Die RekursionT(1) = c, T(n) = a · T

(nb

)+ t(n)

sei zu lösen. n ist eine Potenz der Zahl b > 1 und a ≥ 1, c > 0 gelte.

(a) Wenn t(n) = O(n(logb a)−ε) für eine Konstante ε > 0,

dann ist T (n) = Θ(nlogb a).Die Blätter im Rekursionsbaum dominieren.

(b) Wenn t(n) = Θ(nlogb a), dann ist T (n) = Θ(nlogb a · logb n).Gleichgewicht zwischen den Schichten im Rekursionsbaum.

(c) Wenn t(n) = Ω(n(logb a)+ε

)für eine Konstante ε > 0 und a · t

( nb

)≤ αt(n)

für eine Konstante α < 1, dann T (n) = Θ(t(n)).Die Wurzel im Rekursionsbaum dominiert.

Siehe Beweis des Mastertheorems im Skript.

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 67 / 79

Page 399: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Das Mastertheorem: Formulierung

Die RekursionT(1) = c, T(n) = a · T

(nb

)+ t(n)

sei zu lösen. n ist eine Potenz der Zahl b > 1 und a ≥ 1, c > 0 gelte.

(a) Wenn t(n) = O(n(logb a)−ε) für eine Konstante ε > 0,

dann ist T (n) = Θ(nlogb a).

Die Blätter im Rekursionsbaum dominieren.(b) Wenn t(n) = Θ(nlogb a), dann ist T (n) = Θ(nlogb a · logb n).

Gleichgewicht zwischen den Schichten im Rekursionsbaum.(c) Wenn t(n) = Ω

(n(logb a)+ε

)für eine Konstante ε > 0 und a · t

( nb

)≤ αt(n)

für eine Konstante α < 1, dann T (n) = Θ(t(n)).Die Wurzel im Rekursionsbaum dominiert.

Siehe Beweis des Mastertheorems im Skript.

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 67 / 79

Page 400: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Das Mastertheorem: Formulierung

Die RekursionT(1) = c, T(n) = a · T

(nb

)+ t(n)

sei zu lösen. n ist eine Potenz der Zahl b > 1 und a ≥ 1, c > 0 gelte.

(a) Wenn t(n) = O(n(logb a)−ε) für eine Konstante ε > 0,

dann ist T (n) = Θ(nlogb a).Die Blätter im Rekursionsbaum dominieren.

(b) Wenn t(n) = Θ(nlogb a), dann ist T (n) = Θ(nlogb a · logb n).Gleichgewicht zwischen den Schichten im Rekursionsbaum.

(c) Wenn t(n) = Ω(n(logb a)+ε

)für eine Konstante ε > 0 und a · t

( nb

)≤ αt(n)

für eine Konstante α < 1, dann T (n) = Θ(t(n)).Die Wurzel im Rekursionsbaum dominiert.

Siehe Beweis des Mastertheorems im Skript.

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 67 / 79

Page 401: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Das Mastertheorem: Formulierung

Die RekursionT(1) = c, T(n) = a · T

(nb

)+ t(n)

sei zu lösen. n ist eine Potenz der Zahl b > 1 und a ≥ 1, c > 0 gelte.

(a) Wenn t(n) = O(n(logb a)−ε) für eine Konstante ε > 0,

dann ist T (n) = Θ(nlogb a).Die Blätter im Rekursionsbaum dominieren.

(b) Wenn t(n) = Θ(nlogb a),

dann ist T (n) = Θ(nlogb a · logb n).Gleichgewicht zwischen den Schichten im Rekursionsbaum.

(c) Wenn t(n) = Ω(n(logb a)+ε

)für eine Konstante ε > 0 und a · t

( nb

)≤ αt(n)

für eine Konstante α < 1, dann T (n) = Θ(t(n)).Die Wurzel im Rekursionsbaum dominiert.

Siehe Beweis des Mastertheorems im Skript.

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 67 / 79

Page 402: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Das Mastertheorem: Formulierung

Die RekursionT(1) = c, T(n) = a · T

(nb

)+ t(n)

sei zu lösen. n ist eine Potenz der Zahl b > 1 und a ≥ 1, c > 0 gelte.

(a) Wenn t(n) = O(n(logb a)−ε) für eine Konstante ε > 0,

dann ist T (n) = Θ(nlogb a).Die Blätter im Rekursionsbaum dominieren.

(b) Wenn t(n) = Θ(nlogb a), dann ist T (n) = Θ(nlogb a · logb n).

Gleichgewicht zwischen den Schichten im Rekursionsbaum.(c) Wenn t(n) = Ω

(n(logb a)+ε

)für eine Konstante ε > 0 und a · t

( nb

)≤ αt(n)

für eine Konstante α < 1, dann T (n) = Θ(t(n)).Die Wurzel im Rekursionsbaum dominiert.

Siehe Beweis des Mastertheorems im Skript.

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 67 / 79

Page 403: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Das Mastertheorem: Formulierung

Die RekursionT(1) = c, T(n) = a · T

(nb

)+ t(n)

sei zu lösen. n ist eine Potenz der Zahl b > 1 und a ≥ 1, c > 0 gelte.

(a) Wenn t(n) = O(n(logb a)−ε) für eine Konstante ε > 0,

dann ist T (n) = Θ(nlogb a).Die Blätter im Rekursionsbaum dominieren.

(b) Wenn t(n) = Θ(nlogb a), dann ist T (n) = Θ(nlogb a · logb n).Gleichgewicht zwischen den Schichten im Rekursionsbaum.

(c) Wenn t(n) = Ω(n(logb a)+ε

)für eine Konstante ε > 0 und a · t

( nb

)≤ αt(n)

für eine Konstante α < 1, dann T (n) = Θ(t(n)).Die Wurzel im Rekursionsbaum dominiert.

Siehe Beweis des Mastertheorems im Skript.

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 67 / 79

Page 404: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Das Mastertheorem: Formulierung

Die RekursionT(1) = c, T(n) = a · T

(nb

)+ t(n)

sei zu lösen. n ist eine Potenz der Zahl b > 1 und a ≥ 1, c > 0 gelte.

(a) Wenn t(n) = O(n(logb a)−ε) für eine Konstante ε > 0,

dann ist T (n) = Θ(nlogb a).Die Blätter im Rekursionsbaum dominieren.

(b) Wenn t(n) = Θ(nlogb a), dann ist T (n) = Θ(nlogb a · logb n).Gleichgewicht zwischen den Schichten im Rekursionsbaum.

(c) Wenn t(n) = Ω(n(logb a)+ε

)für eine Konstante ε > 0 und a · t

( nb

)≤ αt(n)

für eine Konstante α < 1,

dann T (n) = Θ(t(n)).Die Wurzel im Rekursionsbaum dominiert.

Siehe Beweis des Mastertheorems im Skript.

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 67 / 79

Page 405: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Das Mastertheorem: Formulierung

Die RekursionT(1) = c, T(n) = a · T

(nb

)+ t(n)

sei zu lösen. n ist eine Potenz der Zahl b > 1 und a ≥ 1, c > 0 gelte.

(a) Wenn t(n) = O(n(logb a)−ε) für eine Konstante ε > 0,

dann ist T (n) = Θ(nlogb a).Die Blätter im Rekursionsbaum dominieren.

(b) Wenn t(n) = Θ(nlogb a), dann ist T (n) = Θ(nlogb a · logb n).Gleichgewicht zwischen den Schichten im Rekursionsbaum.

(c) Wenn t(n) = Ω(n(logb a)+ε

)für eine Konstante ε > 0 und a · t

( nb

)≤ αt(n)

für eine Konstante α < 1, dann T (n) = Θ(t(n)).

Die Wurzel im Rekursionsbaum dominiert.

Siehe Beweis des Mastertheorems im Skript.

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 67 / 79

Page 406: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Das Mastertheorem: Formulierung

Die RekursionT(1) = c, T(n) = a · T

(nb

)+ t(n)

sei zu lösen. n ist eine Potenz der Zahl b > 1 und a ≥ 1, c > 0 gelte.

(a) Wenn t(n) = O(n(logb a)−ε) für eine Konstante ε > 0,

dann ist T (n) = Θ(nlogb a).Die Blätter im Rekursionsbaum dominieren.

(b) Wenn t(n) = Θ(nlogb a), dann ist T (n) = Θ(nlogb a · logb n).Gleichgewicht zwischen den Schichten im Rekursionsbaum.

(c) Wenn t(n) = Ω(n(logb a)+ε

)für eine Konstante ε > 0 und a · t

( nb

)≤ αt(n)

für eine Konstante α < 1, dann T (n) = Θ(t(n)).Die Wurzel im Rekursionsbaum dominiert.

Siehe Beweis des Mastertheorems im Skript.

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 67 / 79

Page 407: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Die Laufzeit von Algorithmus A3

Wir hatten die Rekursionsgleichungen

ZeitA3 (1) = 1,ZeitA3 (n) = 2 · ZeitA3

(n2

)+ 2n − 1

erhalten.

Um das Mastertheorem anzuwenden, müssen wir c = 1,a = 2,b = 2und t(n) = 2n − 1 setzen.In welchem Fall befinden wir uns?

I Es ist logb a = log2 2 = 1 und t(n) = Θ(nlogb a).I Fall (b) ist anzuwenden und liefert ZeitA3 (n) = Θ(n log2 n).

Algorithmus A3 ist schneller als Algorithmus A2, denn

limn→∞

ZeitA3 (n)

ZeitA2 (n)= lim

n→∞

n log2 nn2 = lim

n→∞

log2 nn

= 0.

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 68 / 79

Page 408: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Die Laufzeit von Algorithmus A3

Wir hatten die Rekursionsgleichungen

ZeitA3 (1) = 1,ZeitA3 (n) = 2 · ZeitA3

(n2

)+ 2n − 1

erhalten.

Um das Mastertheorem anzuwenden, müssen wir c = 1,

a = 2,b = 2und t(n) = 2n − 1 setzen.In welchem Fall befinden wir uns?

I Es ist logb a = log2 2 = 1 und t(n) = Θ(nlogb a).I Fall (b) ist anzuwenden und liefert ZeitA3 (n) = Θ(n log2 n).

Algorithmus A3 ist schneller als Algorithmus A2, denn

limn→∞

ZeitA3 (n)

ZeitA2 (n)= lim

n→∞

n log2 nn2 = lim

n→∞

log2 nn

= 0.

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 68 / 79

Page 409: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Die Laufzeit von Algorithmus A3

Wir hatten die Rekursionsgleichungen

ZeitA3 (1) = 1,ZeitA3 (n) = 2 · ZeitA3

(n2

)+ 2n − 1

erhalten.

Um das Mastertheorem anzuwenden, müssen wir c = 1,a = 2,

b = 2und t(n) = 2n − 1 setzen.In welchem Fall befinden wir uns?

I Es ist logb a = log2 2 = 1 und t(n) = Θ(nlogb a).I Fall (b) ist anzuwenden und liefert ZeitA3 (n) = Θ(n log2 n).

Algorithmus A3 ist schneller als Algorithmus A2, denn

limn→∞

ZeitA3 (n)

ZeitA2 (n)= lim

n→∞

n log2 nn2 = lim

n→∞

log2 nn

= 0.

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 68 / 79

Page 410: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Die Laufzeit von Algorithmus A3

Wir hatten die Rekursionsgleichungen

ZeitA3 (1) = 1,ZeitA3 (n) = 2 · ZeitA3

(n2

)+ 2n − 1

erhalten.

Um das Mastertheorem anzuwenden, müssen wir c = 1,a = 2,b = 2

und t(n) = 2n − 1 setzen.In welchem Fall befinden wir uns?

I Es ist logb a = log2 2 = 1 und t(n) = Θ(nlogb a).I Fall (b) ist anzuwenden und liefert ZeitA3 (n) = Θ(n log2 n).

Algorithmus A3 ist schneller als Algorithmus A2, denn

limn→∞

ZeitA3 (n)

ZeitA2 (n)= lim

n→∞

n log2 nn2 = lim

n→∞

log2 nn

= 0.

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 68 / 79

Page 411: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Die Laufzeit von Algorithmus A3

Wir hatten die Rekursionsgleichungen

ZeitA3 (1) = 1,ZeitA3 (n) = 2 · ZeitA3

(n2

)+ 2n − 1

erhalten.

Um das Mastertheorem anzuwenden, müssen wir c = 1,a = 2,b = 2und t(n) = 2n − 1 setzen.

In welchem Fall befinden wir uns?I Es ist logb a = log2 2 = 1 und t(n) = Θ(nlogb a).I Fall (b) ist anzuwenden und liefert ZeitA3 (n) = Θ(n log2 n).

Algorithmus A3 ist schneller als Algorithmus A2, denn

limn→∞

ZeitA3 (n)

ZeitA2 (n)= lim

n→∞

n log2 nn2 = lim

n→∞

log2 nn

= 0.

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 68 / 79

Page 412: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Die Laufzeit von Algorithmus A3

Wir hatten die Rekursionsgleichungen

ZeitA3 (1) = 1,ZeitA3 (n) = 2 · ZeitA3

(n2

)+ 2n − 1

erhalten.

Um das Mastertheorem anzuwenden, müssen wir c = 1,a = 2,b = 2und t(n) = 2n − 1 setzen.In welchem Fall befinden wir uns?

I Es ist logb a = log2 2 = 1 und t(n) = Θ(nlogb a).I Fall (b) ist anzuwenden und liefert ZeitA3 (n) = Θ(n log2 n).

Algorithmus A3 ist schneller als Algorithmus A2, denn

limn→∞

ZeitA3 (n)

ZeitA2 (n)= lim

n→∞

n log2 nn2 = lim

n→∞

log2 nn

= 0.

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 68 / 79

Page 413: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Die Laufzeit von Algorithmus A3

Wir hatten die Rekursionsgleichungen

ZeitA3 (1) = 1,ZeitA3 (n) = 2 · ZeitA3

(n2

)+ 2n − 1

erhalten.

Um das Mastertheorem anzuwenden, müssen wir c = 1,a = 2,b = 2und t(n) = 2n − 1 setzen.In welchem Fall befinden wir uns?

I Es ist logb a = log2 2 = 1

und t(n) = Θ(nlogb a).I Fall (b) ist anzuwenden und liefert ZeitA3 (n) = Θ(n log2 n).

Algorithmus A3 ist schneller als Algorithmus A2, denn

limn→∞

ZeitA3 (n)

ZeitA2 (n)= lim

n→∞

n log2 nn2 = lim

n→∞

log2 nn

= 0.

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 68 / 79

Page 414: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Die Laufzeit von Algorithmus A3

Wir hatten die Rekursionsgleichungen

ZeitA3 (1) = 1,ZeitA3 (n) = 2 · ZeitA3

(n2

)+ 2n − 1

erhalten.

Um das Mastertheorem anzuwenden, müssen wir c = 1,a = 2,b = 2und t(n) = 2n − 1 setzen.In welchem Fall befinden wir uns?

I Es ist logb a = log2 2 = 1 und t(n) = Θ(nlogb a).

I Fall (b) ist anzuwenden und liefert ZeitA3 (n) = Θ(n log2 n).

Algorithmus A3 ist schneller als Algorithmus A2, denn

limn→∞

ZeitA3 (n)

ZeitA2 (n)= lim

n→∞

n log2 nn2 = lim

n→∞

log2 nn

= 0.

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 68 / 79

Page 415: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Die Laufzeit von Algorithmus A3

Wir hatten die Rekursionsgleichungen

ZeitA3 (1) = 1,ZeitA3 (n) = 2 · ZeitA3

(n2

)+ 2n − 1

erhalten.

Um das Mastertheorem anzuwenden, müssen wir c = 1,a = 2,b = 2und t(n) = 2n − 1 setzen.In welchem Fall befinden wir uns?

I Es ist logb a = log2 2 = 1 und t(n) = Θ(nlogb a).I Fall (b) ist anzuwenden und liefert

ZeitA3 (n) = Θ(n log2 n).

Algorithmus A3 ist schneller als Algorithmus A2, denn

limn→∞

ZeitA3 (n)

ZeitA2 (n)= lim

n→∞

n log2 nn2 = lim

n→∞

log2 nn

= 0.

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 68 / 79

Page 416: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Die Laufzeit von Algorithmus A3

Wir hatten die Rekursionsgleichungen

ZeitA3 (1) = 1,ZeitA3 (n) = 2 · ZeitA3

(n2

)+ 2n − 1

erhalten.

Um das Mastertheorem anzuwenden, müssen wir c = 1,a = 2,b = 2und t(n) = 2n − 1 setzen.In welchem Fall befinden wir uns?

I Es ist logb a = log2 2 = 1 und t(n) = Θ(nlogb a).I Fall (b) ist anzuwenden und liefert ZeitA3 (n) = Θ(n log2 n).

Algorithmus A3 ist schneller als Algorithmus A2, denn

limn→∞

ZeitA3 (n)

ZeitA2 (n)= lim

n→∞

n log2 nn2 = lim

n→∞

log2 nn

= 0.

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 68 / 79

Page 417: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Die Laufzeit von Algorithmus A3

Wir hatten die Rekursionsgleichungen

ZeitA3 (1) = 1,ZeitA3 (n) = 2 · ZeitA3

(n2

)+ 2n − 1

erhalten.

Um das Mastertheorem anzuwenden, müssen wir c = 1,a = 2,b = 2und t(n) = 2n − 1 setzen.In welchem Fall befinden wir uns?

I Es ist logb a = log2 2 = 1 und t(n) = Θ(nlogb a).I Fall (b) ist anzuwenden und liefert ZeitA3 (n) = Θ(n log2 n).

Algorithmus A3 ist schneller als Algorithmus A2, denn

limn→∞

ZeitA3 (n)

ZeitA2 (n)=

limn→∞

n log2 nn2 = lim

n→∞

log2 nn

= 0.

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 68 / 79

Page 418: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Die Laufzeit von Algorithmus A3

Wir hatten die Rekursionsgleichungen

ZeitA3 (1) = 1,ZeitA3 (n) = 2 · ZeitA3

(n2

)+ 2n − 1

erhalten.

Um das Mastertheorem anzuwenden, müssen wir c = 1,a = 2,b = 2und t(n) = 2n − 1 setzen.In welchem Fall befinden wir uns?

I Es ist logb a = log2 2 = 1 und t(n) = Θ(nlogb a).I Fall (b) ist anzuwenden und liefert ZeitA3 (n) = Θ(n log2 n).

Algorithmus A3 ist schneller als Algorithmus A2, denn

limn→∞

ZeitA3 (n)

ZeitA2 (n)= lim

n→∞

n log2 nn2 = lim

n→∞

log2 nn

= 0.

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 68 / 79

Page 419: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Und jetzt alle... demogr.

Die Rekursion T (1) = c,T (n) = a · T( n

b

)+ t(n) sei zu lösen. n ist eine Potenz

der Zahl b > 1 und a ≥ 1, c > 0 gelte.(a) Wenn t(n) = O

(n(logb a)−ε) für eine Konstante ε > 0,

dann ist T (n) = Θ(nlogb a).(b) Wenn t(n) = Θ(nlogb a), dann ist T (n) = Θ(nlogb a · logb n).(c) Wenn t(n) = Ω

(n(logb a)+ε

)für eine Konstante ε > 0 und

a · t( n

b

)≤ α · t(n) für eine Konstante α < 1, dann T (n) = Θ(t(n)).

Lösung für T (1) = Θ(1),T (n) = 4 · T (n/2) + Θ(n)?

(1) T (n) = Θ(n2 · log4 n)

(2) T (n) = Θ(n2)

(3) T (n) = Θ(n · log n)

(4) T (n) = Θ(n · log2 n)

(5) T (n) = Θ(n4)

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 69 / 79

Page 420: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Und jetzt alle... demogr.

Die Rekursion T (1) = c,T (n) = a · T( n

b

)+ t(n) sei zu lösen. n ist eine Potenz

der Zahl b > 1 und a ≥ 1, c > 0 gelte.(a) Wenn t(n) = O

(n(logb a)−ε) für eine Konstante ε > 0,

dann ist T (n) = Θ(nlogb a).(b) Wenn t(n) = Θ(nlogb a), dann ist T (n) = Θ(nlogb a · logb n).(c) Wenn t(n) = Ω

(n(logb a)+ε

)für eine Konstante ε > 0 und

a · t( n

b

)≤ α · t(n) für eine Konstante α < 1, dann T (n) = Θ(t(n)).

Lösung für T (1) = Θ(1),T (n) = 4 · T (n/2) + Θ(n)?

(1) T (n) = Θ(n2 · log4 n)

(2) T (n) = Θ(n2)

(3) T (n) = Θ(n · log n)

(4) T (n) = Θ(n · log2 n)

(5) T (n) = Θ(n4)

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 69 / 79

Page 421: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Und jetzt alle... demogr.

Die Rekursion T (1) = c,T (n) = a · T( n

b

)+ t(n) sei zu lösen. n ist eine Potenz

der Zahl b > 1 und a ≥ 1, c > 0 gelte.(a) Wenn t(n) = O

(n(logb a)−ε) für eine Konstante ε > 0,

dann ist T (n) = Θ(nlogb a).(b) Wenn t(n) = Θ(nlogb a), dann ist T (n) = Θ(nlogb a · logb n).(c) Wenn t(n) = Ω

(n(logb a)+ε

)für eine Konstante ε > 0 und

a · t( n

b

)≤ α · t(n) für eine Konstante α < 1, dann T (n) = Θ(t(n)).

Lösung für T (1) = Θ(1),T (n) = 4 · T (n/2) + Θ(n)?

(1) T (n) = Θ(n2 · log4 n)

(2) T (n) = Θ(n2)√

(3) T (n) = Θ(n · log n)

(4) T (n) = Θ(n · log2 n)

(5) T (n) = Θ(n4)

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 69 / 79

Page 422: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Was kann das Mastertheorem nicht?

Um das Mastertheorem anzuwenden, muss stets

dieselbe Anzahl a von Teilproblemen

mit

derselben Eingabelängenb

rekursiv aufgerufen werden: b darf sich während der Rekursion nicht ändern.

Das Mastertheorem ist nicht auf die Rekursion

T (1) = 1,T (n) = T (n − 1) + n

anwendbar, weil b sich ändert. Gleiches gilt für die Rekursion

T (1) = 1,T (n) = 2 · T (n − 1) + 1,

die die Anzahl der Ringbewegungen in den Türmen von Hanoi zählt.

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 70 / 79

Page 423: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Was kann das Mastertheorem nicht?

Um das Mastertheorem anzuwenden, muss stets

dieselbe Anzahl a von Teilproblemen

mit

derselben Eingabelängenb

rekursiv aufgerufen werden: b darf sich während der Rekursion nicht ändern.

Das Mastertheorem ist nicht auf die Rekursion

T (1) = 1,T (n) = T (n − 1) + n

anwendbar, weil b sich ändert. Gleiches gilt für die Rekursion

T (1) = 1,T (n) = 2 · T (n − 1) + 1,

die die Anzahl der Ringbewegungen in den Türmen von Hanoi zählt.

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 70 / 79

Page 424: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Was kann das Mastertheorem nicht?

Um das Mastertheorem anzuwenden, muss stets

dieselbe Anzahl a von Teilproblemen

mit

derselben Eingabelängenb

rekursiv aufgerufen werden: b darf sich während der Rekursion nicht ändern.

Das Mastertheorem ist nicht auf die Rekursion

T (1) = 1,T (n) = T (n − 1) + n

anwendbar, weil

b sich ändert. Gleiches gilt für die Rekursion

T (1) = 1,T (n) = 2 · T (n − 1) + 1,

die die Anzahl der Ringbewegungen in den Türmen von Hanoi zählt.

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 70 / 79

Page 425: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Was kann das Mastertheorem nicht?

Um das Mastertheorem anzuwenden, muss stets

dieselbe Anzahl a von Teilproblemen

mit

derselben Eingabelängenb

rekursiv aufgerufen werden: b darf sich während der Rekursion nicht ändern.

Das Mastertheorem ist nicht auf die Rekursion

T (1) = 1,T (n) = T (n − 1) + n

anwendbar, weil b sich ändert. Gleiches gilt für die Rekursion

T (1) = 1,T (n) = 2 · T (n − 1) + 1,

die die Anzahl der Ringbewegungen in den Türmen von Hanoi zählt.Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 70 / 79

Page 426: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Das Teilfolgenproblem: Algorithmus A4

Maxk = maxf (i , j)|1 ≤ i ≤ j ≤ k

ist der Wert einer optimalen Teilfolge für die ersten k Folgenelemente.

Wie lässt sich Maxk+1 effizient berechnen?

Setze Max∗k = maxf (i , k)|1 ≤ i ≤ k.Dann ist Maxk+1 = maxMaxk ,Max∗k+1. Warum?

I Fall 1: Eine optimale Teilfolge enthält das Folgenelement ak+1 nicht. Dannist Maxk+1 = Maxk .

I Fall 2: Eine optimale Teilfolge enthält das Folgenelement ak+1. Dann istMaxk+1 = Max∗k+1.

Max∗k+1 = maxMax∗k + ak+1,ak+1. Warum?I Fall 1: Eine optimale, mit dem k + 1sten Folgenelement endende Folge

enthält nicht nur ak+1. Dann ist Max∗k+1 = Max∗k + ak+1.I Fall 2: Sonst ist Max∗k+1 = ak+1.

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 71 / 79

Page 427: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Das Teilfolgenproblem: Algorithmus A4

Maxk = maxf (i , j)|1 ≤ i ≤ j ≤ k

ist der Wert einer optimalen Teilfolge für die ersten k Folgenelemente.

Wie lässt sich Maxk+1 effizient berechnen?

Setze Max∗k = maxf (i , k)|1 ≤ i ≤ k.

Dann ist Maxk+1 = maxMaxk ,Max∗k+1. Warum?I Fall 1: Eine optimale Teilfolge enthält das Folgenelement ak+1 nicht. Dann

ist Maxk+1 = Maxk .I Fall 2: Eine optimale Teilfolge enthält das Folgenelement ak+1. Dann ist

Maxk+1 = Max∗k+1.

Max∗k+1 = maxMax∗k + ak+1,ak+1. Warum?I Fall 1: Eine optimale, mit dem k + 1sten Folgenelement endende Folge

enthält nicht nur ak+1. Dann ist Max∗k+1 = Max∗k + ak+1.I Fall 2: Sonst ist Max∗k+1 = ak+1.

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 71 / 79

Page 428: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Das Teilfolgenproblem: Algorithmus A4

Maxk = maxf (i , j)|1 ≤ i ≤ j ≤ k

ist der Wert einer optimalen Teilfolge für die ersten k Folgenelemente.

Wie lässt sich Maxk+1 effizient berechnen?

Setze Max∗k = maxf (i , k)|1 ≤ i ≤ k.Dann ist Maxk+1 = maxMaxk ,

Max∗k+1. Warum?I Fall 1: Eine optimale Teilfolge enthält das Folgenelement ak+1 nicht. Dann

ist Maxk+1 = Maxk .I Fall 2: Eine optimale Teilfolge enthält das Folgenelement ak+1. Dann ist

Maxk+1 = Max∗k+1.

Max∗k+1 = maxMax∗k + ak+1,ak+1. Warum?I Fall 1: Eine optimale, mit dem k + 1sten Folgenelement endende Folge

enthält nicht nur ak+1. Dann ist Max∗k+1 = Max∗k + ak+1.I Fall 2: Sonst ist Max∗k+1 = ak+1.

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 71 / 79

Page 429: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Das Teilfolgenproblem: Algorithmus A4

Maxk = maxf (i , j)|1 ≤ i ≤ j ≤ k

ist der Wert einer optimalen Teilfolge für die ersten k Folgenelemente.

Wie lässt sich Maxk+1 effizient berechnen?

Setze Max∗k = maxf (i , k)|1 ≤ i ≤ k.Dann ist Maxk+1 = maxMaxk ,Max∗k+1.

Warum?I Fall 1: Eine optimale Teilfolge enthält das Folgenelement ak+1 nicht. Dann

ist Maxk+1 = Maxk .I Fall 2: Eine optimale Teilfolge enthält das Folgenelement ak+1. Dann ist

Maxk+1 = Max∗k+1.

Max∗k+1 = maxMax∗k + ak+1,ak+1. Warum?I Fall 1: Eine optimale, mit dem k + 1sten Folgenelement endende Folge

enthält nicht nur ak+1. Dann ist Max∗k+1 = Max∗k + ak+1.I Fall 2: Sonst ist Max∗k+1 = ak+1.

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 71 / 79

Page 430: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Das Teilfolgenproblem: Algorithmus A4

Maxk = maxf (i , j)|1 ≤ i ≤ j ≤ k

ist der Wert einer optimalen Teilfolge für die ersten k Folgenelemente.

Wie lässt sich Maxk+1 effizient berechnen?

Setze Max∗k = maxf (i , k)|1 ≤ i ≤ k.Dann ist Maxk+1 = maxMaxk ,Max∗k+1. Warum?

I Fall 1: Eine optimale Teilfolge enthält das Folgenelement ak+1 nicht. Dannist Maxk+1 = Maxk .

I Fall 2: Eine optimale Teilfolge enthält das Folgenelement ak+1. Dann istMaxk+1 = Max∗k+1.

Max∗k+1 = maxMax∗k + ak+1,ak+1. Warum?I Fall 1: Eine optimale, mit dem k + 1sten Folgenelement endende Folge

enthält nicht nur ak+1. Dann ist Max∗k+1 = Max∗k + ak+1.I Fall 2: Sonst ist Max∗k+1 = ak+1.

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 71 / 79

Page 431: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Das Teilfolgenproblem: Algorithmus A4

Maxk = maxf (i , j)|1 ≤ i ≤ j ≤ k

ist der Wert einer optimalen Teilfolge für die ersten k Folgenelemente.

Wie lässt sich Maxk+1 effizient berechnen?

Setze Max∗k = maxf (i , k)|1 ≤ i ≤ k.Dann ist Maxk+1 = maxMaxk ,Max∗k+1. Warum?

I Fall 1: Eine optimale Teilfolge enthält das Folgenelement ak+1 nicht.

Dannist Maxk+1 = Maxk .

I Fall 2: Eine optimale Teilfolge enthält das Folgenelement ak+1. Dann istMaxk+1 = Max∗k+1.

Max∗k+1 = maxMax∗k + ak+1,ak+1. Warum?I Fall 1: Eine optimale, mit dem k + 1sten Folgenelement endende Folge

enthält nicht nur ak+1. Dann ist Max∗k+1 = Max∗k + ak+1.I Fall 2: Sonst ist Max∗k+1 = ak+1.

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 71 / 79

Page 432: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Das Teilfolgenproblem: Algorithmus A4

Maxk = maxf (i , j)|1 ≤ i ≤ j ≤ k

ist der Wert einer optimalen Teilfolge für die ersten k Folgenelemente.

Wie lässt sich Maxk+1 effizient berechnen?

Setze Max∗k = maxf (i , k)|1 ≤ i ≤ k.Dann ist Maxk+1 = maxMaxk ,Max∗k+1. Warum?

I Fall 1: Eine optimale Teilfolge enthält das Folgenelement ak+1 nicht. Dannist Maxk+1 = Maxk .

I Fall 2: Eine optimale Teilfolge enthält das Folgenelement ak+1. Dann istMaxk+1 = Max∗k+1.

Max∗k+1 = maxMax∗k + ak+1,ak+1. Warum?I Fall 1: Eine optimale, mit dem k + 1sten Folgenelement endende Folge

enthält nicht nur ak+1. Dann ist Max∗k+1 = Max∗k + ak+1.I Fall 2: Sonst ist Max∗k+1 = ak+1.

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 71 / 79

Page 433: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Das Teilfolgenproblem: Algorithmus A4

Maxk = maxf (i , j)|1 ≤ i ≤ j ≤ k

ist der Wert einer optimalen Teilfolge für die ersten k Folgenelemente.

Wie lässt sich Maxk+1 effizient berechnen?

Setze Max∗k = maxf (i , k)|1 ≤ i ≤ k.Dann ist Maxk+1 = maxMaxk ,Max∗k+1. Warum?

I Fall 1: Eine optimale Teilfolge enthält das Folgenelement ak+1 nicht. Dannist Maxk+1 = Maxk .

I Fall 2: Eine optimale Teilfolge enthält das Folgenelement ak+1.

Dann istMaxk+1 = Max∗k+1.

Max∗k+1 = maxMax∗k + ak+1,ak+1. Warum?I Fall 1: Eine optimale, mit dem k + 1sten Folgenelement endende Folge

enthält nicht nur ak+1. Dann ist Max∗k+1 = Max∗k + ak+1.I Fall 2: Sonst ist Max∗k+1 = ak+1.

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 71 / 79

Page 434: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Das Teilfolgenproblem: Algorithmus A4

Maxk = maxf (i , j)|1 ≤ i ≤ j ≤ k

ist der Wert einer optimalen Teilfolge für die ersten k Folgenelemente.

Wie lässt sich Maxk+1 effizient berechnen?

Setze Max∗k = maxf (i , k)|1 ≤ i ≤ k.Dann ist Maxk+1 = maxMaxk ,Max∗k+1. Warum?

I Fall 1: Eine optimale Teilfolge enthält das Folgenelement ak+1 nicht. Dannist Maxk+1 = Maxk .

I Fall 2: Eine optimale Teilfolge enthält das Folgenelement ak+1. Dann istMaxk+1 = Max∗k+1.

Max∗k+1 = maxMax∗k + ak+1,ak+1. Warum?I Fall 1: Eine optimale, mit dem k + 1sten Folgenelement endende Folge

enthält nicht nur ak+1. Dann ist Max∗k+1 = Max∗k + ak+1.I Fall 2: Sonst ist Max∗k+1 = ak+1.

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 71 / 79

Page 435: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Das Teilfolgenproblem: Algorithmus A4

Maxk = maxf (i , j)|1 ≤ i ≤ j ≤ k

ist der Wert einer optimalen Teilfolge für die ersten k Folgenelemente.

Wie lässt sich Maxk+1 effizient berechnen?

Setze Max∗k = maxf (i , k)|1 ≤ i ≤ k.Dann ist Maxk+1 = maxMaxk ,Max∗k+1. Warum?

I Fall 1: Eine optimale Teilfolge enthält das Folgenelement ak+1 nicht. Dannist Maxk+1 = Maxk .

I Fall 2: Eine optimale Teilfolge enthält das Folgenelement ak+1. Dann istMaxk+1 = Max∗k+1.

Max∗k+1 =

maxMax∗k + ak+1,ak+1. Warum?I Fall 1: Eine optimale, mit dem k + 1sten Folgenelement endende Folge

enthält nicht nur ak+1. Dann ist Max∗k+1 = Max∗k + ak+1.I Fall 2: Sonst ist Max∗k+1 = ak+1.

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 71 / 79

Page 436: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Das Teilfolgenproblem: Algorithmus A4

Maxk = maxf (i , j)|1 ≤ i ≤ j ≤ k

ist der Wert einer optimalen Teilfolge für die ersten k Folgenelemente.

Wie lässt sich Maxk+1 effizient berechnen?

Setze Max∗k = maxf (i , k)|1 ≤ i ≤ k.Dann ist Maxk+1 = maxMaxk ,Max∗k+1. Warum?

I Fall 1: Eine optimale Teilfolge enthält das Folgenelement ak+1 nicht. Dannist Maxk+1 = Maxk .

I Fall 2: Eine optimale Teilfolge enthält das Folgenelement ak+1. Dann istMaxk+1 = Max∗k+1.

Max∗k+1 = maxMax∗k + ak+1,

ak+1. Warum?I Fall 1: Eine optimale, mit dem k + 1sten Folgenelement endende Folge

enthält nicht nur ak+1. Dann ist Max∗k+1 = Max∗k + ak+1.I Fall 2: Sonst ist Max∗k+1 = ak+1.

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 71 / 79

Page 437: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Das Teilfolgenproblem: Algorithmus A4

Maxk = maxf (i , j)|1 ≤ i ≤ j ≤ k

ist der Wert einer optimalen Teilfolge für die ersten k Folgenelemente.

Wie lässt sich Maxk+1 effizient berechnen?

Setze Max∗k = maxf (i , k)|1 ≤ i ≤ k.Dann ist Maxk+1 = maxMaxk ,Max∗k+1. Warum?

I Fall 1: Eine optimale Teilfolge enthält das Folgenelement ak+1 nicht. Dannist Maxk+1 = Maxk .

I Fall 2: Eine optimale Teilfolge enthält das Folgenelement ak+1. Dann istMaxk+1 = Max∗k+1.

Max∗k+1 = maxMax∗k + ak+1,ak+1.

Warum?I Fall 1: Eine optimale, mit dem k + 1sten Folgenelement endende Folge

enthält nicht nur ak+1. Dann ist Max∗k+1 = Max∗k + ak+1.I Fall 2: Sonst ist Max∗k+1 = ak+1.

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 71 / 79

Page 438: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Das Teilfolgenproblem: Algorithmus A4

Maxk = maxf (i , j)|1 ≤ i ≤ j ≤ k

ist der Wert einer optimalen Teilfolge für die ersten k Folgenelemente.

Wie lässt sich Maxk+1 effizient berechnen?

Setze Max∗k = maxf (i , k)|1 ≤ i ≤ k.Dann ist Maxk+1 = maxMaxk ,Max∗k+1. Warum?

I Fall 1: Eine optimale Teilfolge enthält das Folgenelement ak+1 nicht. Dannist Maxk+1 = Maxk .

I Fall 2: Eine optimale Teilfolge enthält das Folgenelement ak+1. Dann istMaxk+1 = Max∗k+1.

Max∗k+1 = maxMax∗k + ak+1,ak+1. Warum?

I Fall 1: Eine optimale, mit dem k + 1sten Folgenelement endende Folgeenthält nicht nur ak+1. Dann ist Max∗k+1 = Max∗k + ak+1.

I Fall 2: Sonst ist Max∗k+1 = ak+1.

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 71 / 79

Page 439: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Das Teilfolgenproblem: Algorithmus A4

Maxk = maxf (i , j)|1 ≤ i ≤ j ≤ k

ist der Wert einer optimalen Teilfolge für die ersten k Folgenelemente.

Wie lässt sich Maxk+1 effizient berechnen?

Setze Max∗k = maxf (i , k)|1 ≤ i ≤ k.Dann ist Maxk+1 = maxMaxk ,Max∗k+1. Warum?

I Fall 1: Eine optimale Teilfolge enthält das Folgenelement ak+1 nicht. Dannist Maxk+1 = Maxk .

I Fall 2: Eine optimale Teilfolge enthält das Folgenelement ak+1. Dann istMaxk+1 = Max∗k+1.

Max∗k+1 = maxMax∗k + ak+1,ak+1. Warum?I Fall 1: Eine optimale, mit dem k + 1sten Folgenelement endende Folge

enthält nicht nur ak+1.

Dann ist Max∗k+1 = Max∗k + ak+1.I Fall 2: Sonst ist Max∗k+1 = ak+1.

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 71 / 79

Page 440: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Das Teilfolgenproblem: Algorithmus A4

Maxk = maxf (i , j)|1 ≤ i ≤ j ≤ k

ist der Wert einer optimalen Teilfolge für die ersten k Folgenelemente.

Wie lässt sich Maxk+1 effizient berechnen?

Setze Max∗k = maxf (i , k)|1 ≤ i ≤ k.Dann ist Maxk+1 = maxMaxk ,Max∗k+1. Warum?

I Fall 1: Eine optimale Teilfolge enthält das Folgenelement ak+1 nicht. Dannist Maxk+1 = Maxk .

I Fall 2: Eine optimale Teilfolge enthält das Folgenelement ak+1. Dann istMaxk+1 = Max∗k+1.

Max∗k+1 = maxMax∗k + ak+1,ak+1. Warum?I Fall 1: Eine optimale, mit dem k + 1sten Folgenelement endende Folge

enthält nicht nur ak+1. Dann ist Max∗k+1 = Max∗k + ak+1.

I Fall 2: Sonst ist Max∗k+1 = ak+1.

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 71 / 79

Page 441: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Das Teilfolgenproblem: Algorithmus A4

Maxk = maxf (i , j)|1 ≤ i ≤ j ≤ k

ist der Wert einer optimalen Teilfolge für die ersten k Folgenelemente.

Wie lässt sich Maxk+1 effizient berechnen?

Setze Max∗k = maxf (i , k)|1 ≤ i ≤ k.Dann ist Maxk+1 = maxMaxk ,Max∗k+1. Warum?

I Fall 1: Eine optimale Teilfolge enthält das Folgenelement ak+1 nicht. Dannist Maxk+1 = Maxk .

I Fall 2: Eine optimale Teilfolge enthält das Folgenelement ak+1. Dann istMaxk+1 = Max∗k+1.

Max∗k+1 = maxMax∗k + ak+1,ak+1. Warum?I Fall 1: Eine optimale, mit dem k + 1sten Folgenelement endende Folge

enthält nicht nur ak+1. Dann ist Max∗k+1 = Max∗k + ak+1.I Fall 2: Sonst ist Max∗k+1 = ak+1.

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 71 / 79

Page 442: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Algorithmus A4

(1) Max1 =

Max∗1 = a1.(2) Für k = 1, . . . ,n − 1 setze

Max∗k+1 = maxMax∗k + ak+1,ak+1 undMaxk+1 = maxMaxk ,Max∗k+1.

(3) Maxn wird ausgegeben.

Pro Schleifendurchlauf: zwei Vergleiche und eine Addition.Also insgesamt 2(n − 1) Vergleiche und n − 1 Additionen.ZeitA4 (n) = 3(n − 1) und A4 hat lineare Laufzeit, da ZeitA4 = Θ(n).A4 ist schneller als A3, denn lim

n→∞n

n log2 n = 0.

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 72 / 79

Page 443: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Algorithmus A4

(1) Max1 = Max∗1 = a1.(2) Für k = 1, . . . ,n − 1 setze

Max∗k+1 =

maxMax∗k + ak+1,ak+1 undMaxk+1 = maxMaxk ,Max∗k+1.

(3) Maxn wird ausgegeben.

Pro Schleifendurchlauf: zwei Vergleiche und eine Addition.Also insgesamt 2(n − 1) Vergleiche und n − 1 Additionen.ZeitA4 (n) = 3(n − 1) und A4 hat lineare Laufzeit, da ZeitA4 = Θ(n).A4 ist schneller als A3, denn lim

n→∞n

n log2 n = 0.

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 72 / 79

Page 444: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Algorithmus A4

(1) Max1 = Max∗1 = a1.(2) Für k = 1, . . . ,n − 1 setze

Max∗k+1 = maxMax∗k + ak+1,ak+1 undMaxk+1 =

maxMaxk ,Max∗k+1.(3) Maxn wird ausgegeben.

Pro Schleifendurchlauf: zwei Vergleiche und eine Addition.Also insgesamt 2(n − 1) Vergleiche und n − 1 Additionen.ZeitA4 (n) = 3(n − 1) und A4 hat lineare Laufzeit, da ZeitA4 = Θ(n).A4 ist schneller als A3, denn lim

n→∞n

n log2 n = 0.

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 72 / 79

Page 445: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Algorithmus A4

(1) Max1 = Max∗1 = a1.(2) Für k = 1, . . . ,n − 1 setze

Max∗k+1 = maxMax∗k + ak+1,ak+1 undMaxk+1 = maxMaxk ,Max∗k+1.

(3) Maxn wird ausgegeben.

Pro Schleifendurchlauf: zwei Vergleiche und eine Addition.Also insgesamt 2(n − 1) Vergleiche und n − 1 Additionen.ZeitA4 (n) = 3(n − 1) und A4 hat lineare Laufzeit, da ZeitA4 = Θ(n).A4 ist schneller als A3, denn lim

n→∞n

n log2 n = 0.

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 72 / 79

Page 446: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Algorithmus A4

(1) Max1 = Max∗1 = a1.(2) Für k = 1, . . . ,n − 1 setze

Max∗k+1 = maxMax∗k + ak+1,ak+1 undMaxk+1 = maxMaxk ,Max∗k+1.

(3) Maxn wird ausgegeben.

Pro Schleifendurchlauf: zwei Vergleiche und eine Addition.

Also insgesamt 2(n − 1) Vergleiche und n − 1 Additionen.ZeitA4 (n) = 3(n − 1) und A4 hat lineare Laufzeit, da ZeitA4 = Θ(n).A4 ist schneller als A3, denn lim

n→∞n

n log2 n = 0.

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 72 / 79

Page 447: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Algorithmus A4

(1) Max1 = Max∗1 = a1.(2) Für k = 1, . . . ,n − 1 setze

Max∗k+1 = maxMax∗k + ak+1,ak+1 undMaxk+1 = maxMaxk ,Max∗k+1.

(3) Maxn wird ausgegeben.

Pro Schleifendurchlauf: zwei Vergleiche und eine Addition.Also insgesamt 2(n − 1) Vergleiche und n − 1 Additionen.

ZeitA4 (n) = 3(n − 1) und A4 hat lineare Laufzeit, da ZeitA4 = Θ(n).A4 ist schneller als A3, denn lim

n→∞n

n log2 n = 0.

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 72 / 79

Page 448: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Algorithmus A4

(1) Max1 = Max∗1 = a1.(2) Für k = 1, . . . ,n − 1 setze

Max∗k+1 = maxMax∗k + ak+1,ak+1 undMaxk+1 = maxMaxk ,Max∗k+1.

(3) Maxn wird ausgegeben.

Pro Schleifendurchlauf: zwei Vergleiche und eine Addition.Also insgesamt 2(n − 1) Vergleiche und n − 1 Additionen.ZeitA4 (n) = 3(n − 1)

und A4 hat lineare Laufzeit, da ZeitA4 = Θ(n).A4 ist schneller als A3, denn lim

n→∞n

n log2 n = 0.

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 72 / 79

Page 449: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Algorithmus A4

(1) Max1 = Max∗1 = a1.(2) Für k = 1, . . . ,n − 1 setze

Max∗k+1 = maxMax∗k + ak+1,ak+1 undMaxk+1 = maxMaxk ,Max∗k+1.

(3) Maxn wird ausgegeben.

Pro Schleifendurchlauf: zwei Vergleiche und eine Addition.Also insgesamt 2(n − 1) Vergleiche und n − 1 Additionen.ZeitA4 (n) = 3(n − 1) und A4 hat lineare Laufzeit, da ZeitA4 = Θ(n).

A4 ist schneller als A3, denn limn→∞

nn log2 n = 0.

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 72 / 79

Page 450: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Algorithmus A4

(1) Max1 = Max∗1 = a1.(2) Für k = 1, . . . ,n − 1 setze

Max∗k+1 = maxMax∗k + ak+1,ak+1 undMaxk+1 = maxMaxk ,Max∗k+1.

(3) Maxn wird ausgegeben.

Pro Schleifendurchlauf: zwei Vergleiche und eine Addition.Also insgesamt 2(n − 1) Vergleiche und n − 1 Additionen.ZeitA4 (n) = 3(n − 1) und A4 hat lineare Laufzeit, da ZeitA4 = Θ(n).A4 ist schneller als A3, denn

limn→∞

nn log2 n = 0.

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 72 / 79

Page 451: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Algorithmus A4

(1) Max1 = Max∗1 = a1.(2) Für k = 1, . . . ,n − 1 setze

Max∗k+1 = maxMax∗k + ak+1,ak+1 undMaxk+1 = maxMaxk ,Max∗k+1.

(3) Maxn wird ausgegeben.

Pro Schleifendurchlauf: zwei Vergleiche und eine Addition.Also insgesamt 2(n − 1) Vergleiche und n − 1 Additionen.ZeitA4 (n) = 3(n − 1) und A4 hat lineare Laufzeit, da ZeitA4 = Θ(n).A4 ist schneller als A3, denn lim

n→∞n

n log2 n = 0.

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 72 / 79

Page 452: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Wachstumsverhalten in der Laufzeitanalyse:

Zähle Anweisungen, die die Laufzeit dominieren

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 73 / 79

Page 453: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Analyse von C++ Programmen

Zähle ausgeführte elementare Anweisungen wie etwa Zuweisungenund Auswahl-Anweisungen (if-else und switch).

I Weder iterative Anweisungen (for, while und do-while) noch Sprunganwei-sungen (break, continue, goto und return) oder Funktionsaufrufe sind zuzählen.

Ist der so ermittelte Aufwand denn nicht zu klein?I Zähle mindestens eine ausgeführte elementare Anweisung in jedem

Schleifendurchlauf oder Funktionsaufruf.I Für vernünftige Programme wird die asymptotische Laufzeit korrekt ermittelt.

In den meisten Fällen sind wir an der worst-case Laufzeit interessiert:I Bestimme für jede Eingabelänge n die maximale Laufzeit für eine Eingabe

der Länge n.

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 74 / 79

Page 454: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Analyse von C++ Programmen

Zähle ausgeführte elementare Anweisungen wie etwa Zuweisungenund Auswahl-Anweisungen (if-else und switch).

I Weder iterative Anweisungen (for, while und do-while) noch Sprunganwei-sungen (break, continue, goto und return) oder Funktionsaufrufe sind zuzählen.

Ist der so ermittelte Aufwand denn nicht zu klein?

I Zähle mindestens eine ausgeführte elementare Anweisung in jedemSchleifendurchlauf oder Funktionsaufruf.

I Für vernünftige Programme wird die asymptotische Laufzeit korrekt ermittelt.

In den meisten Fällen sind wir an der worst-case Laufzeit interessiert:I Bestimme für jede Eingabelänge n die maximale Laufzeit für eine Eingabe

der Länge n.

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 74 / 79

Page 455: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Analyse von C++ Programmen

Zähle ausgeführte elementare Anweisungen wie etwa Zuweisungenund Auswahl-Anweisungen (if-else und switch).

I Weder iterative Anweisungen (for, while und do-while) noch Sprunganwei-sungen (break, continue, goto und return) oder Funktionsaufrufe sind zuzählen.

Ist der so ermittelte Aufwand denn nicht zu klein?I Zähle mindestens eine ausgeführte elementare Anweisung in jedem

Schleifendurchlauf oder Funktionsaufruf.I Für vernünftige Programme wird die asymptotische Laufzeit korrekt ermittelt.

In den meisten Fällen sind wir an der worst-case Laufzeit interessiert:I Bestimme für jede Eingabelänge n die maximale Laufzeit für eine Eingabe

der Länge n.

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 74 / 79

Page 456: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Analyse von C++ Programmen

Zähle ausgeführte elementare Anweisungen wie etwa Zuweisungenund Auswahl-Anweisungen (if-else und switch).

I Weder iterative Anweisungen (for, while und do-while) noch Sprunganwei-sungen (break, continue, goto und return) oder Funktionsaufrufe sind zuzählen.

Ist der so ermittelte Aufwand denn nicht zu klein?I Zähle mindestens eine ausgeführte elementare Anweisung in jedem

Schleifendurchlauf oder Funktionsaufruf.I Für vernünftige Programme wird die asymptotische Laufzeit korrekt ermittelt.

In den meisten Fällen sind wir an der worst-case Laufzeit interessiert:I Bestimme für jede Eingabelänge n die maximale Laufzeit für eine Eingabe

der Länge n.

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 74 / 79

Page 457: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Zuweisungen, Auswahl-Anweisungen und Schleifen

Eine Zuweisung zu einer „einfachen“ Variablen ist einfach zu zählen,eine Zuweisung zu einer Array-Variablen ist

mit der Länge des Arrays zugewichten.

Die Auswertung der Bedingung in einer Auswahl-Anweisungen ist nichtnotwendigerweise zu zählen.

I Aber die Laufzeit hängt jetzt vom Wert der Bedingung ab!I Häufig genügt die Bestimmung des Gesamtaufwands für den längsten der

alternativen Anweisungsblöcke.

Der Aufwand kann in jedem Durchlauf einer Schleife variieren!I Häufig genügt die Bestimmung der maximalen Anzahl ausführbarer Anwei-

sungen innerhalb einer Schleife sowie die Anzahl der Schleifendurchläufe.

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 75 / 79

Page 458: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Zuweisungen, Auswahl-Anweisungen und Schleifen

Eine Zuweisung zu einer „einfachen“ Variablen ist einfach zu zählen,eine Zuweisung zu einer Array-Variablen ist mit der Länge des Arrays zugewichten.

Die Auswertung der Bedingung in einer Auswahl-Anweisungen ist nichtnotwendigerweise zu zählen.

I Aber die Laufzeit hängt jetzt vom Wert der Bedingung ab!I Häufig genügt die Bestimmung des Gesamtaufwands für den längsten der

alternativen Anweisungsblöcke.

Der Aufwand kann in jedem Durchlauf einer Schleife variieren!I Häufig genügt die Bestimmung der maximalen Anzahl ausführbarer Anwei-

sungen innerhalb einer Schleife sowie die Anzahl der Schleifendurchläufe.

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 75 / 79

Page 459: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Zuweisungen, Auswahl-Anweisungen und Schleifen

Eine Zuweisung zu einer „einfachen“ Variablen ist einfach zu zählen,eine Zuweisung zu einer Array-Variablen ist mit der Länge des Arrays zugewichten.

Die Auswertung der Bedingung in einer Auswahl-Anweisungen ist nichtnotwendigerweise zu zählen.

I Aber die Laufzeit hängt jetzt vom Wert der Bedingung ab!I Häufig genügt die Bestimmung des Gesamtaufwands für den längsten der

alternativen Anweisungsblöcke.

Der Aufwand kann in jedem Durchlauf einer Schleife variieren!I Häufig genügt die Bestimmung der maximalen Anzahl ausführbarer Anwei-

sungen innerhalb einer Schleife sowie die Anzahl der Schleifendurchläufe.

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 75 / 79

Page 460: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Zuweisungen, Auswahl-Anweisungen und Schleifen

Eine Zuweisung zu einer „einfachen“ Variablen ist einfach zu zählen,eine Zuweisung zu einer Array-Variablen ist mit der Länge des Arrays zugewichten.

Die Auswertung der Bedingung in einer Auswahl-Anweisungen ist nichtnotwendigerweise zu zählen.

I Aber die Laufzeit hängt jetzt vom Wert der Bedingung ab!I Häufig genügt die Bestimmung des Gesamtaufwands für den längsten der

alternativen Anweisungsblöcke.

Der Aufwand kann in jedem Durchlauf einer Schleife variieren!I Häufig genügt die Bestimmung der maximalen Anzahl ausführbarer Anwei-

sungen innerhalb einer Schleife sowie die Anzahl der Schleifendurchläufe.

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 75 / 79

Page 461: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Zuweisungen, Auswahl-Anweisungen und Schleifen

Eine Zuweisung zu einer „einfachen“ Variablen ist einfach zu zählen,eine Zuweisung zu einer Array-Variablen ist mit der Länge des Arrays zugewichten.

Die Auswertung der Bedingung in einer Auswahl-Anweisungen ist nichtnotwendigerweise zu zählen.

I Aber die Laufzeit hängt jetzt vom Wert der Bedingung ab!I Häufig genügt die Bestimmung des Gesamtaufwands für den längsten der

alternativen Anweisungsblöcke.

Der Aufwand kann in jedem Durchlauf einer Schleife variieren!I Häufig genügt die Bestimmung der maximalen Anzahl ausführbarer Anwei-

sungen innerhalb einer Schleife sowie die Anzahl der Schleifendurchläufe.

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 75 / 79

Page 462: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Beispiel: For-SchleifenDie Matrizenmultiplikation A · B = C:

for (i=0; i < n; i++)

for (j=0; j < n; j++)C[i][j] = 0;for (k=0; k < n ; k++)

C[i][j] += A[i][k] * B[k][j];

Zähle die Anzahl der Zuweisungen.Analysiere die geschachtelten for-Schleifen durch geschachtelteSummen:

Laufzeit =n−1∑i=0

n−1∑j=0

(1 +n−1∑k=0

1) =n−1∑i=0

n−1∑j=0

(1 + n) = n2 · (1 + n).

Das Programm besitztkubische Laufzeit.

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 76 / 79

Page 463: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Beispiel: For-SchleifenDie Matrizenmultiplikation A · B = C:

for (i=0; i < n; i++)for (j=0; j < n; j++)

C[i][j] = 0;for (k=0; k < n ; k++)

C[i][j] += A[i][k] * B[k][j];

Zähle die Anzahl der Zuweisungen.Analysiere die geschachtelten for-Schleifen durch geschachtelteSummen:

Laufzeit =n−1∑i=0

n−1∑j=0

(1 +n−1∑k=0

1) =n−1∑i=0

n−1∑j=0

(1 + n) = n2 · (1 + n).

Das Programm besitztkubische Laufzeit.

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 76 / 79

Page 464: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Beispiel: For-SchleifenDie Matrizenmultiplikation A · B = C:

for (i=0; i < n; i++)for (j=0; j < n; j++)C[i][j] = 0;

for (k=0; k < n ; k++)C[i][j] += A[i][k] * B[k][j];

Zähle die Anzahl der Zuweisungen.Analysiere die geschachtelten for-Schleifen durch geschachtelteSummen:

Laufzeit =n−1∑i=0

n−1∑j=0

(1 +n−1∑k=0

1) =n−1∑i=0

n−1∑j=0

(1 + n) = n2 · (1 + n).

Das Programm besitztkubische Laufzeit.

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 76 / 79

Page 465: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Beispiel: For-SchleifenDie Matrizenmultiplikation A · B = C:

for (i=0; i < n; i++)for (j=0; j < n; j++)C[i][j] = 0;for (k=0; k < n ; k++)

C[i][j] += A[i][k] * B[k][j];

Zähle die Anzahl der Zuweisungen.Analysiere die geschachtelten for-Schleifen durch geschachtelteSummen:

Laufzeit =n−1∑i=0

n−1∑j=0

(1 +n−1∑k=0

1) =n−1∑i=0

n−1∑j=0

(1 + n) = n2 · (1 + n).

Das Programm besitztkubische Laufzeit.

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 76 / 79

Page 466: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Beispiel: For-SchleifenDie Matrizenmultiplikation A · B = C:

for (i=0; i < n; i++)for (j=0; j < n; j++)C[i][j] = 0;for (k=0; k < n ; k++)

C[i][j] += A[i][k] * B[k][j];

Zähle die Anzahl der Zuweisungen.Analysiere die geschachtelten for-Schleifen durch geschachtelteSummen:

Laufzeit =n−1∑i=0

n−1∑j=0

(1 +n−1∑k=0

1) =n−1∑i=0

n−1∑j=0

(1 + n) = n2 · (1 + n).

Das Programm besitztkubische Laufzeit.

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 76 / 79

Page 467: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Beispiel: For-SchleifenDie Matrizenmultiplikation A · B = C:

for (i=0; i < n; i++)for (j=0; j < n; j++)C[i][j] = 0;for (k=0; k < n ; k++)

C[i][j] += A[i][k] * B[k][j];

Zähle die Anzahl der Zuweisungen.Analysiere die geschachtelten for-Schleifen durch geschachtelteSummen:

Laufzeit =n−1∑i=0

n−1∑j=0

(1 +n−1∑k=0

1) =n−1∑i=0

n−1∑j=0

(1 + n) = n2 · (1 + n).

Das Programm besitztkubische Laufzeit.

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 76 / 79

Page 468: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Beispiel: For-SchleifenDie Matrizenmultiplikation A · B = C:

for (i=0; i < n; i++)for (j=0; j < n; j++)C[i][j] = 0;for (k=0; k < n ; k++)

C[i][j] += A[i][k] * B[k][j];

Zähle die Anzahl der Zuweisungen.Analysiere die geschachtelten for-Schleifen durch geschachtelteSummen:

Laufzeit =n−1∑i=0

n−1∑j=0

(1 +n−1∑k=0

1) =n−1∑i=0

n−1∑j=0

(1 + n) = n2 · (1 + n).

Das Programm besitztkubische Laufzeit.

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 76 / 79

Page 469: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Beispiel: For-SchleifenDie Matrizenmultiplikation A · B = C:

for (i=0; i < n; i++)for (j=0; j < n; j++)C[i][j] = 0;for (k=0; k < n ; k++)

C[i][j] += A[i][k] * B[k][j];

Zähle die Anzahl der Zuweisungen.Analysiere die geschachtelten for-Schleifen durch geschachtelteSummen:

Laufzeit =n−1∑i=0

n−1∑j=0

(1 +n−1∑k=0

1)

=n−1∑i=0

n−1∑j=0

(1 + n) = n2 · (1 + n).

Das Programm besitztkubische Laufzeit.

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 76 / 79

Page 470: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Beispiel: For-SchleifenDie Matrizenmultiplikation A · B = C:

for (i=0; i < n; i++)for (j=0; j < n; j++)C[i][j] = 0;for (k=0; k < n ; k++)

C[i][j] += A[i][k] * B[k][j];

Zähle die Anzahl der Zuweisungen.Analysiere die geschachtelten for-Schleifen durch geschachtelteSummen:

Laufzeit =n−1∑i=0

n−1∑j=0

(1 +n−1∑k=0

1) =n−1∑i=0

n−1∑j=0

(1 + n) = n2 · (1 + n).

Das Programm besitztkubische Laufzeit.

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 76 / 79

Page 471: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Beispiel: For-SchleifenDie Matrizenmultiplikation A · B = C:

for (i=0; i < n; i++)for (j=0; j < n; j++)C[i][j] = 0;for (k=0; k < n ; k++)

C[i][j] += A[i][k] * B[k][j];

Zähle die Anzahl der Zuweisungen.Analysiere die geschachtelten for-Schleifen durch geschachtelteSummen:

Laufzeit =n−1∑i=0

n−1∑j=0

(1 +n−1∑k=0

1) =n−1∑i=0

n−1∑j=0

(1 + n)

= n2 · (1 + n).

Das Programm besitztkubische Laufzeit.

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 76 / 79

Page 472: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Beispiel: For-SchleifenDie Matrizenmultiplikation A · B = C:

for (i=0; i < n; i++)for (j=0; j < n; j++)C[i][j] = 0;for (k=0; k < n ; k++)

C[i][j] += A[i][k] * B[k][j];

Zähle die Anzahl der Zuweisungen.Analysiere die geschachtelten for-Schleifen durch geschachtelteSummen:

Laufzeit =n−1∑i=0

n−1∑j=0

(1 +n−1∑k=0

1) =n−1∑i=0

n−1∑j=0

(1 + n) = n2 · (1 + n).

Das Programm besitztkubische Laufzeit.

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 76 / 79

Page 473: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Beispiel: For-SchleifenDie Matrizenmultiplikation A · B = C:

for (i=0; i < n; i++)for (j=0; j < n; j++)C[i][j] = 0;for (k=0; k < n ; k++)

C[i][j] += A[i][k] * B[k][j];

Zähle die Anzahl der Zuweisungen.Analysiere die geschachtelten for-Schleifen durch geschachtelteSummen:

Laufzeit =n−1∑i=0

n−1∑j=0

(1 +n−1∑k=0

1) =n−1∑i=0

n−1∑j=0

(1 + n) = n2 · (1 + n).

Das Programm besitztkubische Laufzeit.

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 76 / 79

Page 474: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Beispiel: While-Schleifen (1/2)

while (n >= 1)n = n/2;Maximal c Anweisungen, die n nicht verändern

T (n) bezeichne die Laufzeit der while-Schleife für Parameter n. Wirerhalten die Rekursionsgleichung:

T (1) ≤ 1 + c, und T (n) ≤ T (n/2) + 1 + c.Wende das Mastertheorem an:

I a = 1, b = 2 und t(n) ≤ 1 + c.I Es ist t(n) = Θ(1) = Θ(nlogb a).I Fall 2 ist anzuwenden und T (n) = Θ(log2 n) folgt.

Die Laufzeit istlogarithmisch.

Warum?I Höchstens 1 + c Anweisungen pro Schleifendurchlauf.I Und wieviele Iterationen? Na klar, 1 + blog2 nc viele.

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 77 / 79

Page 475: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Beispiel: While-Schleifen (1/2)

while (n >= 1)n = n/2;Maximal c Anweisungen, die n nicht verändern

T (n) bezeichne die Laufzeit der while-Schleife für Parameter n. Wirerhalten die Rekursionsgleichung:

T (1) ≤

1 + c, und T (n) ≤ T (n/2) + 1 + c.Wende das Mastertheorem an:

I a = 1, b = 2 und t(n) ≤ 1 + c.I Es ist t(n) = Θ(1) = Θ(nlogb a).I Fall 2 ist anzuwenden und T (n) = Θ(log2 n) folgt.

Die Laufzeit istlogarithmisch.

Warum?I Höchstens 1 + c Anweisungen pro Schleifendurchlauf.I Und wieviele Iterationen? Na klar, 1 + blog2 nc viele.

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 77 / 79

Page 476: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Beispiel: While-Schleifen (1/2)

while (n >= 1)n = n/2;Maximal c Anweisungen, die n nicht verändern

T (n) bezeichne die Laufzeit der while-Schleife für Parameter n. Wirerhalten die Rekursionsgleichung:

T (1) ≤ 1 + c, und T (n) ≤

T (n/2) + 1 + c.Wende das Mastertheorem an:

I a = 1, b = 2 und t(n) ≤ 1 + c.I Es ist t(n) = Θ(1) = Θ(nlogb a).I Fall 2 ist anzuwenden und T (n) = Θ(log2 n) folgt.

Die Laufzeit istlogarithmisch.

Warum?I Höchstens 1 + c Anweisungen pro Schleifendurchlauf.I Und wieviele Iterationen? Na klar, 1 + blog2 nc viele.

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 77 / 79

Page 477: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Beispiel: While-Schleifen (1/2)

while (n >= 1)n = n/2;Maximal c Anweisungen, die n nicht verändern

T (n) bezeichne die Laufzeit der while-Schleife für Parameter n. Wirerhalten die Rekursionsgleichung:

T (1) ≤ 1 + c, und T (n) ≤ T (n/2) + 1 + c.

Wende das Mastertheorem an:I a = 1, b = 2 und t(n) ≤ 1 + c.I Es ist t(n) = Θ(1) = Θ(nlogb a).I Fall 2 ist anzuwenden und T (n) = Θ(log2 n) folgt.

Die Laufzeit istlogarithmisch.

Warum?I Höchstens 1 + c Anweisungen pro Schleifendurchlauf.I Und wieviele Iterationen? Na klar, 1 + blog2 nc viele.

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 77 / 79

Page 478: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Beispiel: While-Schleifen (1/2)

while (n >= 1)n = n/2;Maximal c Anweisungen, die n nicht verändern

T (n) bezeichne die Laufzeit der while-Schleife für Parameter n. Wirerhalten die Rekursionsgleichung:

T (1) ≤ 1 + c, und T (n) ≤ T (n/2) + 1 + c.Wende das Mastertheorem an:

I a = 1, b = 2 und t(n) ≤ 1 + c.I Es ist t(n) = Θ(1) = Θ(nlogb a).I Fall 2 ist anzuwenden und T (n) = Θ(log2 n) folgt.

Die Laufzeit istlogarithmisch.

Warum?I Höchstens 1 + c Anweisungen pro Schleifendurchlauf.I Und wieviele Iterationen? Na klar, 1 + blog2 nc viele.

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 77 / 79

Page 479: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Beispiel: While-Schleifen (1/2)

while (n >= 1)n = n/2;Maximal c Anweisungen, die n nicht verändern

T (n) bezeichne die Laufzeit der while-Schleife für Parameter n. Wirerhalten die Rekursionsgleichung:

T (1) ≤ 1 + c, und T (n) ≤ T (n/2) + 1 + c.Wende das Mastertheorem an:

I a = 1, b = 2

und t(n) ≤ 1 + c.I Es ist t(n) = Θ(1) = Θ(nlogb a).I Fall 2 ist anzuwenden und T (n) = Θ(log2 n) folgt.

Die Laufzeit istlogarithmisch.

Warum?I Höchstens 1 + c Anweisungen pro Schleifendurchlauf.I Und wieviele Iterationen? Na klar, 1 + blog2 nc viele.

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 77 / 79

Page 480: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Beispiel: While-Schleifen (1/2)

while (n >= 1)n = n/2;Maximal c Anweisungen, die n nicht verändern

T (n) bezeichne die Laufzeit der while-Schleife für Parameter n. Wirerhalten die Rekursionsgleichung:

T (1) ≤ 1 + c, und T (n) ≤ T (n/2) + 1 + c.Wende das Mastertheorem an:

I a = 1, b = 2 und t(n) ≤ 1 + c.

I Es ist t(n) = Θ(1) = Θ(nlogb a).I Fall 2 ist anzuwenden und T (n) = Θ(log2 n) folgt.

Die Laufzeit istlogarithmisch.

Warum?I Höchstens 1 + c Anweisungen pro Schleifendurchlauf.I Und wieviele Iterationen? Na klar, 1 + blog2 nc viele.

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 77 / 79

Page 481: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Beispiel: While-Schleifen (1/2)

while (n >= 1)n = n/2;Maximal c Anweisungen, die n nicht verändern

T (n) bezeichne die Laufzeit der while-Schleife für Parameter n. Wirerhalten die Rekursionsgleichung:

T (1) ≤ 1 + c, und T (n) ≤ T (n/2) + 1 + c.Wende das Mastertheorem an:

I a = 1, b = 2 und t(n) ≤ 1 + c.I Es ist t(n) = Θ(1) = Θ(nlogb a).

I Fall 2 ist anzuwenden und T (n) = Θ(log2 n) folgt.

Die Laufzeit istlogarithmisch.

Warum?I Höchstens 1 + c Anweisungen pro Schleifendurchlauf.I Und wieviele Iterationen? Na klar, 1 + blog2 nc viele.

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 77 / 79

Page 482: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Beispiel: While-Schleifen (1/2)

while (n >= 1)n = n/2;Maximal c Anweisungen, die n nicht verändern

T (n) bezeichne die Laufzeit der while-Schleife für Parameter n. Wirerhalten die Rekursionsgleichung:

T (1) ≤ 1 + c, und T (n) ≤ T (n/2) + 1 + c.Wende das Mastertheorem an:

I a = 1, b = 2 und t(n) ≤ 1 + c.I Es ist t(n) = Θ(1) = Θ(nlogb a).I Fall 2 ist anzuwenden und T (n) = Θ(log2 n) folgt.

Die Laufzeit istlogarithmisch.

Warum?I Höchstens 1 + c Anweisungen pro Schleifendurchlauf.I Und wieviele Iterationen? Na klar, 1 + blog2 nc viele.

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 77 / 79

Page 483: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Beispiel: While-Schleifen (1/2)

while (n >= 1)n = n/2;Maximal c Anweisungen, die n nicht verändern

T (n) bezeichne die Laufzeit der while-Schleife für Parameter n. Wirerhalten die Rekursionsgleichung:

T (1) ≤ 1 + c, und T (n) ≤ T (n/2) + 1 + c.Wende das Mastertheorem an:

I a = 1, b = 2 und t(n) ≤ 1 + c.I Es ist t(n) = Θ(1) = Θ(nlogb a).I Fall 2 ist anzuwenden und T (n) = Θ(log2 n) folgt.

Die Laufzeit istlogarithmisch.

Warum?

I Höchstens 1 + c Anweisungen pro Schleifendurchlauf.I Und wieviele Iterationen? Na klar, 1 + blog2 nc viele.

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 77 / 79

Page 484: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Beispiel: While-Schleifen (1/2)

while (n >= 1)n = n/2;Maximal c Anweisungen, die n nicht verändern

T (n) bezeichne die Laufzeit der while-Schleife für Parameter n. Wirerhalten die Rekursionsgleichung:

T (1) ≤ 1 + c, und T (n) ≤ T (n/2) + 1 + c.Wende das Mastertheorem an:

I a = 1, b = 2 und t(n) ≤ 1 + c.I Es ist t(n) = Θ(1) = Θ(nlogb a).I Fall 2 ist anzuwenden und T (n) = Θ(log2 n) folgt.

Die Laufzeit istlogarithmisch.

Warum?I Höchstens 1 + c Anweisungen pro Schleifendurchlauf.I Und wieviele Iterationen?

Na klar, 1 + blog2 nc viele.

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 77 / 79

Page 485: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Beispiel: While-Schleifen (1/2)

while (n >= 1)n = n/2;Maximal c Anweisungen, die n nicht verändern

T (n) bezeichne die Laufzeit der while-Schleife für Parameter n. Wirerhalten die Rekursionsgleichung:

T (1) ≤ 1 + c, und T (n) ≤ T (n/2) + 1 + c.Wende das Mastertheorem an:

I a = 1, b = 2 und t(n) ≤ 1 + c.I Es ist t(n) = Θ(1) = Θ(nlogb a).I Fall 2 ist anzuwenden und T (n) = Θ(log2 n) folgt.

Die Laufzeit istlogarithmisch.

Warum?I Höchstens 1 + c Anweisungen pro Schleifendurchlauf.I Und wieviele Iterationen? Na klar, 1 + blog2 nc viele.

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 77 / 79

Page 486: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

While-Schleifen demogr.

while (n >= 12) n =

√n;

Maximal c Anweisungen, die n nicht verändern

Wie hoch ist die Laufzeit?

(1) Θ(√

n log n)

(2) Θ(√

n)

(3) Θ(log n)

(4) Θ(√

log(n))

(5) Θ(log(log(n))

Auflösung: (5) Θ(log(log(n))

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 78 / 79

Page 487: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

While-Schleifen demogr.

while (n >= 12) n =

√n;

Maximal c Anweisungen, die n nicht verändern

Wie hoch ist die Laufzeit?

(1) Θ(√

n log n)

(2) Θ(√

n)

(3) Θ(log n)

(4) Θ(√

log(n))

(5) Θ(log(log(n))

Auflösung: (5) Θ(log(log(n))

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 78 / 79

Page 488: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

While-Schleifen demogr.

while (n >= 12) n =

√n;

Maximal c Anweisungen, die n nicht verändern

Wie hoch ist die Laufzeit?

(1) Θ(√

n log n)

(2) Θ(√

n)

(3) Θ(log n)

(4) Θ(√

log(n))

(5) Θ(log(log(n))

Auflösung:

(5) Θ(log(log(n))

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 78 / 79

Page 489: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

While-Schleifen demogr.

while (n >= 12) n =

√n;

Maximal c Anweisungen, die n nicht verändern

Wie hoch ist die Laufzeit?

(1) Θ(√

n log n)

(2) Θ(√

n)

(3) Θ(log n)

(4) Θ(√

log(n))

(5) Θ(log(log(n))

Auflösung: (5) Θ(log(log(n))

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 78 / 79

Page 490: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Beispiel: While-Schleifen (2/2)

while (n > 1)n = ( n & 1 ) ? 3*n + 1 : n/2;

Was „tut“ diese while Schleife?I Wenn n ungerade ist, dann ersetze n durch 3 · n + 1.I Wenn n gerade ist, dann ersetze n durch n

2 .

Was ist die asymptotische Laufzeit in Abhängigkeit von der„Eingabelänge“ n?

I Es ist bis heute nicht bekannt, ob die Schleife für jede Eingabe terminiert!I Die Laufzeit ist deshalb erst recht nicht bekannt.

Die Analyse der Laufzeit kann äußerst schwierig sein!

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 79 / 79

Page 491: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Beispiel: While-Schleifen (2/2)

while (n > 1)n = ( n & 1 ) ? 3*n + 1 : n/2;

Was „tut“ diese while Schleife?I Wenn n ungerade ist, dann ersetze n durch 3 · n + 1.I Wenn n gerade ist, dann ersetze n durch n

2 .

Was ist die asymptotische Laufzeit in Abhängigkeit von der„Eingabelänge“ n?

I Es ist bis heute nicht bekannt, ob die Schleife für jede Eingabe terminiert!I Die Laufzeit ist deshalb erst recht nicht bekannt.

Die Analyse der Laufzeit kann äußerst schwierig sein!

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 79 / 79

Page 492: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Beispiel: While-Schleifen (2/2)

while (n > 1)n = ( n & 1 ) ? 3*n + 1 : n/2;

Was „tut“ diese while Schleife?I Wenn n ungerade ist, dann ersetze n durch 3 · n + 1.I Wenn n gerade ist, dann ersetze n durch n

2 .

Was ist die asymptotische Laufzeit in Abhängigkeit von der„Eingabelänge“ n?

I Es ist bis heute nicht bekannt, ob die Schleife für jede Eingabe terminiert!I Die Laufzeit ist deshalb erst recht nicht bekannt.

Die Analyse der Laufzeit kann äußerst schwierig sein!

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 79 / 79

Page 493: Sommersemester 2019 - Goethe University Frankfurtalgo.cs.uni-frankfurt.de/lehre/ds/sommer19/folien...R 115 – RMS 11–15, mhoefer@cs.uni-frankfurt.de Niklas Hahn (Übungskoordination)

Beispiel: While-Schleifen (2/2)

while (n > 1)n = ( n & 1 ) ? 3*n + 1 : n/2;

Was „tut“ diese while Schleife?I Wenn n ungerade ist, dann ersetze n durch 3 · n + 1.I Wenn n gerade ist, dann ersetze n durch n

2 .

Was ist die asymptotische Laufzeit in Abhängigkeit von der„Eingabelänge“ n?

I Es ist bis heute nicht bekannt, ob die Schleife für jede Eingabe terminiert!I Die Laufzeit ist deshalb erst recht nicht bekannt.

Die Analyse der Laufzeit kann äußerst schwierig sein!

Martin Hoefer Datenstrukturen – Kapitel 1 14. Mai 2019 79 / 79


Recommended