ADS: Algorithmen und Datenstrukturen

Ähnliche Dokumente
ADS: Algorithmen und Datenstrukturen

Algorithmen und Datenstrukturen 1-1. Seminar -

Komplexität von Algorithmen

Abgabe: (vor der Vorlesung) Aufgabe 2.1 (P) O-Notation Beweisen Sie die folgenden Aussagen für positive Funktionen f und g:

WS 2009/10. Diskrete Strukturen

Kapitel 9. Komplexität von Algorithmen und Sortieralgorithmen

Algorithmen und Datenstrukturen (für ET/IT)

Kapitel 9. Komplexität von Algorithmen und Sortieralgorithmen

Komplexität. G. Zachmann Clausthal University, Germany Leistungsverhalten von Algorithmen

Datenstrukturen und Algorithmen

Algorithmen und Datenstrukturen

3.2. Korrektheit und Komplexität am Beispiel: Sortieren Sortieren ist eine wichtige Basis-Operation für komplexe Algorithmen

Kostenmodell. Daniel Graf, Tobias Pröger. 22. September 2016 (aktualisierte Fassung 5 vom 9. Oktober 2016)

Algorithmen und Datenstrukturen (ESE) Entwurf, Analyse und Umsetzung von Algorithmen (IEMS) WS 2014 / 2015 Vorlesung 3, Donnerstag 6.

Kapitel 6. Komplexität von Algorithmen. Xiaoyi Jiang Informatik I Grundlagen der Programmierung

Programmiertechnik II

Achtung: Groß O definiert keine totale Ordnungsrelation auf der Menge aller Funktionen! Beweis: Es gibt positive Funktionen f und g so, dass

Einführung in die Informatik 2

Algorithmen und Datenstrukturen

Prof. Dr. Margarita Esponda

4 Effizienz und Komplexität 3.1 1

Laufzeit und Komplexität

2. Algorithmen und Algorithmisierung Algorithmen und Algorithmisierung von Aufgaben

Algorithmen und Datenstrukturen Wintersemester 2004/ November T(n) = T(n a) + T(a) + n

11. Rekursion, Komplexität von Algorithmen

2 Sortieren. Beispiel: Es seien n = 8 und a = i : a i : ϕ(i) : a ϕ(i) :

Babeș-Bolyai Universität Cluj Napoca Fakultät für Mathematik und Informatik Grundlagen der Programmierung MLG5005. Rekursion

Sortierverfahren für Felder (Listen)

Informatik I Komplexität von Algorithmen

Grundlagen der Informatik Algorithmen und Komplexität

Einstieg in die Informatik mit Java

Effizienz von Algorithmen

Übersicht Datenstrukturen und Algorithmen. Literatur. Algorithmus: Wikipedia Definition. Vorlesung 1: Einführung. Prof. Dr.

Technische Universität Wien Institut für Computergraphik und Algorithmen Arbeitsbereich für Algorithmen und Datenstrukturen

Entscheidungsbäume. Definition Entscheidungsbaum. Frage: Gibt es einen Sortieralgorithmus mit o(n log n) Vergleichen?

ADS: Algorithmen und Datenstrukturen 2

Kombinatorik: Abzählverfahren (Teschl/Teschl 7) Summenregel. Allgemeiner

1. Musterlösung. Problem 1: Average-case-Laufzeit vs. Worst-case-Laufzeit

16. All Pairs Shortest Path (ASPS)

Klausur Algorithmen und Datenstrukturen

Einführung in die Informatik I

Einführung in die Informatik I Kapitel II.3: Sortieren

Datenstrukturen & Algorithmen

Effiziente Algorithmen und Datenstrukturen I. Kapitel 10: Lineare Algebra

Übersicht. Datenstrukturen und Algorithmen Vorlesung 5: Rekursionsgleichungen (K4) Übersicht. Binäre Suche. Joost-Pieter Katoen. 20.

UE Algorithmen und Datenstrukturen 1 UE Praktische Informatik 1. Übung 5. Asymptotische Laufzeitkomplexität Definition Regeln Beispiele

Abschnitt 18: Effizientes Suchen in Mengen

Student: Alexander Carls Matrikelnummer: Aufgabe: Beschreibung des euklidischen Algorithmus Datum:

Kapitel 6 Elementare Sortieralgorithmen

Algorithmen und Datenstrukturen Laufzeitabschätzung

Prof. Dr. Heinrich Müller; Dr. Frank Weichert 7. September 2015

Informatik II - Übung 11

Inhaltsverzeichnis. Einführende Bemerkungen 11. Das Fach Informatik 11 Zielsetzung der Vorlesung Grundbegriffe

Kostenmaße. F3 03/04 p.188/395

Datenstrukturen und Algorithmen

Algorithmen und Datenstrukturen

Algorithmen und Datenstrukturen

Abschnitt: Algorithmendesign und Laufzeitanalyse

Einstieg in die Informatik mit Java

Grundlagen der Informatik 2 (GdI2) - Algorithmen und Datenstrukturen -

Datenstrukturen & Algorithmen

Einführung in die Informatik

S=[n] Menge von Veranstaltungen J S kompatibel mit maximaler Größe J

Übersicht. Datenstrukturen und Algorithmen. Übersicht. Divide-and-Conquer. Vorlesung 9: Quicksort (K7)

Vorlesung Datenstrukturen

Überblick. 1 Vorbemerkungen. 2 Algorithmen. 3 Eigenschaften von Algorithmen. 4 Historischer Überblick. Einführung

JAVA - Suchen - Sortieren

Termine für Übungstests. Kap. 3 Sortieren HeapSort ff Priority Queues. Motivation. Überblick. Analyse SiftDown

Theoretische Informatik 1

3.2 Binäre Suche. Usr/local/www/ifi/fk/menschen/schmid/folien/infovk.ppt 1

Programmierung 2. Dynamische Programmierung. Sebastian Hack. Klaas Boesche. Sommersemester

Numerische Verfahren und Grundlagen der Analysis

damit hätten wir nach Ende der Schleife: "a[0 n-1] enthält nur Elemente aus a[0 n-1], aber in sortierter Reihenfolge".

2: Zahlentheorie / Restklassen 2.1: Modulare Arithmetik

Algorithmen und Datenstrukturen 1

Algorithmen und Datenstrukturen 1

Programmiertechnik II

Amortisierte Analysen

Kapitel 8. Rekursionsgleichungen. Landau-Symbole. Lösen von Rekursionsgleichungen Allgemeines Iterationsmethode Spezialfälle Erzeugende Funktionen

Komplexita tstheorie eine erste Ubersicht. KTV bedeutet: Details erfahren Sie in der Komplexitätstheorie-Vorlesung.

1. Einführung. Was ist ein Algorithmus (eine Datenstruktur)? Welche Probleme kann man damit lösen? Warum betrachten wir (effiziente) Algorithmen?

Alle bislang betrachteten Sortieralgorithmen hatten (worst-case) Laufzeit Ω(nlog(n)).

Datenstrukturen, Algorithmen und Programmierung 2

Algorithmen & Programmierung. Rekursive Funktionen (1)

Randomisierte Algorithmen 2. Erste Beispiele

Dynamische Programmierung. Problemlösungsstrategie der Informatik

Grundlagen der Programmierung

12. September 2012 Kompexität. Analyse von Algorithmen (Ziele) Empirische Analyse Beispiel Schlussfolgerungen

Punktlokalisierung. Dr. Martin Nöllenburg Vorlesung Algorithmische Geometrie INSTITUT FÜR THEORETISCHE INFORMATIK FAKULTÄT FÜR INFORMATIK

Ausgewählte Algorithmen: Sortieren von Listen

Einführung in die Informatik 1

DATENSTRUKTUREN UND ALGORITHMEN

Algorithmen und Datenstrukturen (AuD) Prof. Dr. Claudia Eckert und Dr. Thomas Stibor

2.3.1 Einleitung Einfache Sortierverfahren Höhere Sortierverfahren Komplexität von Sortierverfahren Spezielle Sortierverfahren

11. Rekursion, Komplexität von Algorithmen

Datenstrukturen und Algorithmen

Algorithmen und Datenstrukturen 1 Kapitel 3

Datenstruktur, die viele Operationen dynamischer Mengen unterstützt

Kap. 4.4: B-Bäume Kap. 4.5: Dictionaries in der Praxis

12 (2-4)-Bäume Implementierbare Funktionen. (2-4)-Bäume sind durch folgende Eigenschaften deniert: 1. Alle Äste sind gleich lang

Transkript:

Uwe Quasthoff (ASV, Uni LE) ADS: Algorithmen und Datenstrukturen 10. Oktober 2017 1 / 44 ADS: Algorithmen und Datenstrukturen Uwe Quasthoff Institut für Informatik Abteilung Automatische Sprachverarbeitung Universität Leipzig 10. Oktober 2017 [Letzte Aktualisierung: 09/10/2017, 21:01]

Uwe Quasthoff (ASV, Uni LE) ADS: Algorithmen und Datenstrukturen 10. Oktober 2017 2 / 44 Ankündigungen im Netz Übungsaufgaben, Vorlesungsfolien, Termin- und Raumänderungen,... http://adsprak.informatik.uni-leipzig.de/ Erreichbar über http://asv.informatik.uni-leipzig.de Lehre Algorithmen und Datenstrukturen 1 http://asv.informatik.uni-leipzig.de/de/courses/233

AlmaWeb - Anmeldung Anmeldung für Vorlesungen und Übungen Bitte befolgen Sie die Regeln 1 Melden Sie sich zur Vorlesung im AlmaWeb an. 2 Melden Sie sich zu einer der Übungen im AlmaWeb an. 3 Erledigen Sie beides bis spätestens 16.10.2017. Achtung! Ohne Anmeldung haben sie keinen Platz in einer der Übungen. Falls Sie sich nicht rechtzeitig im AlmaWeb angemeldet haben, so ist das Studienbüro ihr Ansprechpartner, nicht wir. Wechsel in andere Übungsgruppe nur mit Tauschpartner um den Sie sich kümmern müssen. Uwe Quasthoff (ASV, Uni LE) ADS: Algorithmen und Datenstrukturen 10. Oktober 2017 3 / 44

Übungsaufgaben Abzugeben sind Lösungen zu sechs Aufgabenblättern. Termine Aufgabenblatt 1 2 3 4 5+6 Ausgabe 17.10. 7.11. 21.11. 05.12. 19.12. Abgabe 24.10. 14.11. 28.11. 12.12. 16.01. Lösungen sind spätestens direkt vor Beginn der Vorlesung im Hörsaal abzugeben. Spätere Abgaben werden nicht gewertet Lösungen werden bewertet und in der auf den Abgabetermin folgenden Übungsstunde zurückgegeben. Uwe Quasthoff (ASV, Uni LE) ADS: Algorithmen und Datenstrukturen 10. Oktober 2017 4 / 44

Uwe Quasthoff (ASV, Uni LE) ADS: Algorithmen und Datenstrukturen 10. Oktober 2017 5 / 44 Übungstermine Mo-Mi Vorläufige Termine der Übungsgruppen Gruppe Uhrzeit Tag Raum Übungsleiter 01 11:15-12:45 Mo SG 3-10 Paul Eisenhuth 02 11:15-12:45 Mo SG 3-12 Andreas Niekler 05 09:15-10:45 Di SG 3-12 Manuela Geiß 06 09:15-10:45 Di SG 3-10 Nathanael Philipp 07 09:15-10:45 Mi SG 3-13 Paul Eisenhuth 08 09:15-10:45 Mi SG 3-12 Lydia Müller 13 17:15-18:45 Mi SG 1-10 Maciej Sumalvico 03 17:15-18:45 Mi SG 3-10 Manuela Geiß

Uwe Quasthoff (ASV, Uni LE) ADS: Algorithmen und Datenstrukturen 10. Oktober 2017 6 / 44 Übungstermine Do-Fr Vorläufige Termine der Übungsgruppen Gruppe Uhrzeit Tag Raum Übungsleiter 14 15:15-16:45 Do SG 1-10 Andreas Niekler 15 15:15-16:45 Do SG 4-10 Thomas Efer 09 09:15-10:45 Fr SG 3-12 Sven Findeiss 10 09:15-10:45 Fr SG 3-10 Maximilian Bryan 11 11:15-12:45 Fr Paulinum, P701 Thomas Efer 12 11:15-12:45 Fr SG 2-14 Sven Findeiss 16 11:15-12:45 Fr SG 4-11 Jochen Tiepmar 04 13:15-15:45 Fr SG 2-14 Jochen Tiepmar

Klausur Termin: 06.02.2018, 13:00 14:30 Uhr im AUDIMAX Zulassungsvoraussetzungen Modul- UND Prüfungsanmeldung in AlmaWeb bis 16.10.2017 Erreichen von 50% der Punkte in den Übungsaufgaben Fähigkeit, abgegebene Lösungen an der Tafel zu erläutern wird in den Übungen überprüft abgeben allein reicht nicht wer absolut nicht kann: frühzeitig Alternative für Überprüfung mit Übungsleiter abklären Uwe Quasthoff (ASV, Uni LE) ADS: Algorithmen und Datenstrukturen 10. Oktober 2017 7 / 44

Übungsmodalitäten Team-Arbeit bei den Übungsblättern ist prinzipiell gestattet, ABER: jeder muß alle abgegeben Lösungen erklären können; jeder muß eine eigene Abgabe haben; keine Kopien von Ausarbeitungen; Abgabe in Papierform, keine Möglichkeit per email abzugeben; Lösungen links oben tackern; kein: kleben, vernähen, Büroklammern, schweißen, sonstwas; Loseblattsammlungen in welcher Form auch immer werden nicht gewertet; Name, Matrikelnummer und Übungsgruppe auf jedes Blatt. Uwe Quasthoff (ASV, Uni LE) ADS: Algorithmen und Datenstrukturen 10. Oktober 2017 8 / 44

Übungsmodalitäten II Abgabe vor der Vorlesung, sortiert nach Übungsgruppen Wenn Sie direkt vor der Vorlesung nicht abgeben können: geben Sie die Abgabe einem einem Ihrer Kommilitonen mit zur Abgabe direkt vor der Vorlesung oder werfen Sie die Abgabe bis spätestens 08 Uhr (acht Uhr morgens) am Abgabetag in den Briefkasten der Abteilung Automatische Sprachverarbeitung in der 5. Etage im Augusteum, Raum A514. Spätere Abgaben werden nicht gewertet! Uwe Quasthoff (ASV, Uni LE) ADS: Algorithmen und Datenstrukturen 10. Oktober 2017 9 / 44

Uwe Quasthoff (ASV, Uni LE) ADS: Algorithmen und Datenstrukturen 10. Oktober 2017 10 / 44 Zusammenfassung http://adsprak.informatik.uni-leipzig.de/ Kontaktadresse adshelp@informatik.uni-leipzig.de

Inhalt 1 Einführung: Typen von Algorithmen, Komplexität von Algorithmen 2 Einfache Suchverfahren in Listen 3 Verkette Listen, Stacks und Schlangen 4 Sortierverfahren Elementare Verfahren Shell-Sort, Heap-Sort, Quick-Sort Externe Sortierverfahren 5 Allgemeine Bäume und Binärbäume Orientierte und geordnete Bäume Binärbäume (Darstellung, Traversierung) 6 Binäre Suchbäume 7 Mehrwegbäume Uwe Quasthoff (ASV, Uni LE) ADS: Algorithmen und Datenstrukturen 10. Oktober 2017 11 / 44

Uwe Quasthoff (ASV, Uni LE) ADS: Algorithmen und Datenstrukturen 10. Oktober 2017 12 / 44 Wozu das Ganze? Algorithmen stehen im Mittelpunkt der Informatik Entwurfsziele bei Entwicklung von Algorithmen: 1 Korrektheit: Macht der Algorithmus, was er soll? Können wir das beweisen? 2 Terminierung: Wird der Algorithmus auch immer irgendwann fertig? 3 Effizient: Funktioniert es auch zügig mit vielen Daten? Wahl der Datenstrukturen ist für Effizienz entscheidend. Schwerpunkt der Vorlesung: Entwurf von effizienten Algorithmen und Datenstrukturen, sowie die nachfolgende Analyse ihres Verhaltens.

Wozu das Ganze? Funktional gleichwertige Algorithmen weisen oft erhebliche Unterschiede in der Effizienz (Komplexität) auf. Bei der Verarbeitung soll effektiv mit den Daten umgegangen werden. Die Effizienz hängt bei großen Datenmengen ab von - internen Darstellung der Daten - dem verwendeten Algorithmus Zusammenhang dieser Aspekte? Uwe Quasthoff (ASV, Uni LE) ADS: Algorithmen und Datenstrukturen 10. Oktober 2017 13 / 44

Beispiel Telefon-CD Anforderungen 700 MB Speicherplatz 40 Millionen Telefone 35 Zeichen (Name Ort Nummer) 1.4 GB ASCII-Text passt nicht Wir brauchen eine Komprimierung der Daten, und eine Möglichkeit schnell zu suchen (Index!). (Technische Nebenbemerkung: außerdem ist der Speicherzugriff auf der CD sehr langsam) Uwe Quasthoff (ASV, Uni LE) ADS: Algorithmen und Datenstrukturen 10. Oktober 2017 14 / 44

Beispiel Telefon-CD Design-Überlegungen Verwende Datenstruktur, die die vollständige Verwaltung der Einträge erlaubt: Suchen, Einfügen und Löschen. ODER Weil sowieso nur das Suchen erlaubt ist: verwende Datenstruktur, die zwar extrem schnelles Suchen in komprimierten Daten erlaubt, aber möglicherweise kein Einfügen. Also: Mitdenken hilft Uwe Quasthoff (ASV, Uni LE) ADS: Algorithmen und Datenstrukturen 10. Oktober 2017 15 / 44

Effizienz: Zeit und Speicher Die Abarbeitung von Programmen (Software) beansprucht zwei Ressourcen: Zeit und Hardware (insbesondere: Speicher). FRAGE: Wie steigt dieser Ressourcenverbrauch bei größeren Problemen (d.h. mehr Eingabedaten)? Es kann sein, dass Probleme ab einer gewissen Größe praktisch unlösbar sind, weil 1 Ihre Abarbeitung zu lange dauern würde (z.b. länger als ein Informatikstudium) oder 2 Das Programm mehr Speicher braucht, als zur Verfügung steht. Wichtig ist auch der Unterschied zwischen internem (RAM) und externem Speicher, da z.b. der Zugriff auf eine Festplatten ca. 100.000 mal langsamer ist als ein RAM-Zugriff. Uwe Quasthoff (ASV, Uni LE) ADS: Algorithmen und Datenstrukturen 10. Oktober 2017 16 / 44

Uwe Quasthoff (ASV, Uni LE) ADS: Algorithmen und Datenstrukturen 10. Oktober 2017 17 / 44 Ressourcenbedarf von Algorithmen Wesentliche Ressourcen: Rechenzeitbedarf Speicherplatzbedarf Programmlaufzeit abhängig von Eingabe für das Programm Qualität des vom Compiler generierten Codes Leistungsfähigkeit der Maschine, die das Programm ausgeführt Kompliziertheit des Algorithmus, den das Programm implementiert Maß für Algorithmus-Kompliziertheit : Komplexität Rechenzeitbedarf Zeitkomplexität Speicherplatzbedarf Platzkomplexität

Komplexität von Algorithmen Komplexität: Maß für Kosten eines Algorithmus Bedeutung: Komplexität hängt nur vom Algorithmus ab; unabhängig von übrigen Faktoren, die Rechenzeit und Hardwarebedarf beeinflussen Bestimmung der Komplexität Nicht: Messungen auf einer bestimmten Maschine Sondern: Aufwandsbestimmungen für idealisierten Modellrechner (Bsp.: Random-Access-Maschine oder RAM) Abstraktes Komplexitätsmaß zur asymptotischen Kostenabschätzung in Abhängigkeit von Problemgöße/Eingabegröße n abstrakt unabhängig von konkreter Maschine (konstanter Faktor) asymptotisch muss nur für große Probleme gelten Uwe Quasthoff (ASV, Uni LE) ADS: Algorithmen und Datenstrukturen 10. Oktober 2017 18 / 44

Best Case, Average Case, Worst Case Komplexität hängt ab von Eingabegröße; z.b. Anzahl der Datensätze, über die gesucht werden soll außerdem: von weiteren Eigenschaften der Eingabe; z.b. Reihenfolge der Datensätze (unsortiert grob vorsortiert sortiert) Meist Abschätzung der worst case Komplexität, d.h. unter Annahme der für den Algorithmus ungünstigsten Eingabe der jeweiligen Größe (z.b. bestimmte Reihenfolge) Analyse der average case Komplexität oft viel schwerer; best case weniger interessant. Uwe Quasthoff (ASV, Uni LE) ADS: Algorithmen und Datenstrukturen 10. Oktober 2017 19 / 44

Uwe Quasthoff (ASV, Uni LE) ADS: Algorithmen und Datenstrukturen 10. Oktober 2017 20 / 44 Obere Abschätzung asymptotischer Kosten Meist Abschätzung oberer Schranken: Groß-Oh-Notation Beispiel: Die asymptotische Komplexität T (n) eines Algorithmus ist durch die Funktion f (n) = n 2 nach oben beschränkt, wenn es Konstanten n 0 und c > 0 gibt, so daß für alle Werte von n > n 0 gilt: T (n) c n 2 man sagt T (n) ist in O(n 2 ), in Zeichen T (n) O(n 2 ) oder einfach T (n) = O(n 2 ) (oder im Informatikerslang: der Algo hat quadratische Komplexität ). n cn 2 T(n)

Uwe Quasthoff (ASV, Uni LE) ADS: Algorithmen und Datenstrukturen 10. Oktober 2017 21 / 44 Allgemeine Definition Wir definieren eine Menge O(f ) aller Funktionen der Größenordnung f, d.h. aller Funktionen die durch f nach oben beschränkt sind. Definition: Die Klasse O(f ) der Funktionen von der Größenordnung f ist O(f ) = {g c > 0 n 0 > 0 : n n 0 : g(n) cf (n)}

Beispiele für Groß-Oh Definition O(f ) = {g c > 0 n 0 > 0 : n n 0 : g(n) cf (n)} Beispiel. T (n) = 6n 4 + 3n 2 7n + 42 log n + sin cos(2n) Behauptung: T (n) O(n 4 ) Beweis: Für n 1 gilt: n 4 n 3 n 2 n log n und n 4 1 sin(irgendwas). Also ist (6 + 3 + 7 + 42 + 1)n 4 auf jeden Fall größer als T (n). Damit folgt die Behauptung aus n 1 : T (n) < 59f (n). Alles klar? Dann: Warum gilt g(n) O(n) g(n) O(n log n) g(n) O(n 2 )? Uwe Quasthoff (ASV, Uni LE) ADS: Algorithmen und Datenstrukturen 10. Oktober 2017 22 / 44

Uwe Quasthoff (ASV, Uni LE) ADS: Algorithmen und Datenstrukturen 10. Oktober 2017 23 / 44 Untere Schranken So wie T (n) O(f ) eine obere Schranke ausdrückt, beschreibt T (n) Ω(f ) eine untere Schranke. g Ω(f ) bedeutet, dass g (asymptotisch und in der Größenordnung) mindestens so stark wächst wie f. Definition: Ω(f ) = {h c > 0 n 0 > 0 : n > n 0 : h(n) cf (n)}

Uwe Quasthoff (ASV, Uni LE) ADS: Algorithmen und Datenstrukturen 10. Oktober 2017 24 / 44 Exakte Schranke (d.h., nach oben und unten) Gilt sowohl g O(f ) als auch g Ω(f ) schreibt man g Θ(f ). Also: g Θ(f ) bedeutet: die Funktion g verläuft für hinreichend große n im Bereich [c 1 f, c 2 f ] mit geeigneten Konstanten c 1 und c 2. [Formale Definition zur Übung analog zu O(f ) und Ω(f )] Satz: Ist T (n) ein Polynom vom Grad p, dann ist T (n) Θ(n p ) Wachtumsordnung = höchste Potenz

Polynom vom Grad p Satz: Ist T (n) ein Polynom vom Grad p, dann ist T (n) Θ(n p ) Wachtumsordnung = höchste Potenz 1 T (n) = c 1 n p + c 2 n p 1 + + c p+1 n 0 2 T (n) O(n p ) 3 T (n) Ω(n p ) T (n) Θ(n p ) Uwe Quasthoff (ASV, Uni LE) ADS: Algorithmen und Datenstrukturen 10. Oktober 2017 25 / 44

Wichtige Wachstumsfunktionen O(1) konstante Kosten O(log n) logarithmisches Wachstum O(n) lineares Wachstum O(n log n) n log n-wachstum O(n 2 ) quadratisches Wachstum O(n 3 ) kubisches Wachstum O(2 n ) exponentielles Wachstum O(n!) Wachstum der Fakultät n! = 1 2 3 (n 1) n Uwe Quasthoff (ASV, Uni LE) ADS: Algorithmen und Datenstrukturen 10. Oktober 2017 26 / 44

Uwe Quasthoff (ASV, Uni LE) ADS: Algorithmen und Datenstrukturen 10. Oktober 2017 27 / 44 Vergleich der Wachstumsfunktionen Das asymptotische Wachstumsverhalten ist unabhängig von einer multiplikativen Konstante!

Uwe Quasthoff (ASV, Uni LE) ADS: Algorithmen und Datenstrukturen 10. Oktober 2017 28 / 44 Problemgröße bei vorgegebener Zeit Annahme n = 1 in 1ms... 1 Sekunde 1 Minute 1 Stunde log 2 n 2 1000 2 60000 2 3600000 n 1000 60000 3600000 n log 2 n 140 4893 20000 n 2 31 244 1897 n 3 10 39 153 2 n 9 15 21

Uwe Quasthoff (ASV, Uni LE) ADS: Algorithmen und Datenstrukturen 10. Oktober 2017 29 / 44 Rechengeschwindigkeit Welche Problemgröße kann bei verschiedenen Kostenfunktionen mit Rechnern verschiedener Geschwindigkeit bearbeitet werden? Zeitbedarf T (n) für Rechner #1 bei gegebener Rechengeschwindigkeit, T k (n) bei Rechner #2 mit k-facher Geschwindigkeit Bei gleicher Rechenzeit: T (n) = kt k (n) Alternativ: Rechner #2 löst in bestimmter Zeit ein Problem der Größe n k. Wie groß ist diese Zahl verglichen mit n? T (n) = T k (n k ) = T (n k )/k Lösung: n k = T 1 (k(t (n))) Beispiele: (1) T (n) = n, (2) T (n) = n 2, (3) T (n) = 2 n

Komplexitätsklassen linear-beschränkt, T O(n) polynomial-beschränkt, T O(n k ) exponentiell-beschränkt, T O(α n ) Exponentiell-zeitbeschränkte Algorithmen sind im Allgemeinen, d.h. für große n, nicht nutzbar. (Vergleiche das gerade betrachtete Beispiel T (n) = 2 n ) Probleme, für die kein polynomial-zeitbeschränkter Algorithmus existiert, heißen deshalb intractable ( unlösbar, hart). (umgekehrt: polynomial-beschränkt effizient / effizient lösbar) Uwe Quasthoff (ASV, Uni LE) ADS: Algorithmen und Datenstrukturen 10. Oktober 2017 30 / 44

Rechenregeln für die Zeitkomplexität I: Mit folgenden Regeln können sie die Komplexität eines Algorithmus (nach oben) abschätzen: Elementare Operationen: O(1) z.b. Zuweisungen, 32/64bit-Arithmetik, Ein-/Ausgabe, etc. Fallunterscheidungen O(1) Schleife Produkt aus Anzahl der Schleifendurchläufe mit Kosten der teuersten Schleifenausführung Summenregel: Das Programm P führe die Programmteile P 1 und P 2 hintereinander aus. Die Komplexitäten von P 1 und P 2 seien T 1 (n) O(f (n)) und T 2 (n) O(g(n)). Die Komplexität von P wird berechnet nach der Summenregel T 1 (n) + T 2 (n) O ( max{f (n), g(n)} ). Beispiel: x=0; /* P1 */ for (i=1; i<=n; i++) { x=x+i; } /* P2 */ Uwe Quasthoff (ASV, Uni LE) ADS: Algorithmen und Datenstrukturen 10. Oktober 2017 31 / 44

Rechenregeln für die Zeitkomplexität II: Produktregel: Das Programm P entstehe durch Einsetzen von P 1 in der innersten Schleife von P 2. Die Komplexitäten von P 1 und P 2 seien T 1 (n) O(f (n)) und T 2 (n) O(g(n)). Die Komplexität von P wird berechnet nach der Produktregel T 1 (n) T 2 (n) O(f (n)g(n)). Beispiel: for (i=1; i<=n; i++) { for (j=1; j<=n; j++) { x=x+i*j; } } Uwe Quasthoff (ASV, Uni LE) ADS: Algorithmen und Datenstrukturen 10. Oktober 2017 32 / 44

Uwe Quasthoff (ASV, Uni LE) ADS: Algorithmen und Datenstrukturen 10. Oktober 2017 33 / 44 Rechenregeln für die Zeitkomplexität III: Rekursive Prozeduraufrufe: Produkt aus Anzahl der rekursiven Aufrufe mit Kosten der teuersten Prozedurausführung. Beispiele: 1 int sum(n) { if (n<=1) return 1; return n+sum(n-1); } 2 int sumsum(n) { if (n==0) return 1; return sum(n)+sumsum(n-1); } Schätzen sie die Komplexitäten von sum(n) und sumsum(n) mit Hilfe der Rechenregeln ab.

Uwe Quasthoff (ASV, Uni LE) ADS: Algorithmen und Datenstrukturen 10. Oktober 2017 34 / 44 Maximale Teilsumme: Problemstellung Gegeben: Folge F von n ganzen Zahlen. Gesucht: Teilfolge von 1 i n aufeinander folgenden Zahlen in F, deren Summe maximal ist. Anwendungsbeispiel: Entwicklung von Aktienkursen (tägliche Änderung des Kurses). Maximale Teilsumme bestimmt optimales Ergebnis. Tag 1 2 3 4 5 6 7 8 9 10 +5-6 +4 +2-5 +7-2 -7 +3 +5

Uwe Quasthoff (ASV, Uni LE) ADS: Algorithmen und Datenstrukturen 10. Oktober 2017 35 / 44 Maximale Teilsumme: Algorithmus Tag 1 2 3 4 5 6 7 8 9 10 +5-6 +4 +2-5 +7-2 -7 +3 +5 int maxsubsum( int[] a) { int maxsum = 0; for( i=0; i<a.length; i++) for( j=i; j<a.length; j++) { int thissum =0; for (int k = i; k<=j; k++) thissum += a[k]; if(thissum>maxsum) maxsum=thissum; } return maxsum; }

Uwe Quasthoff (ASV, Uni LE) ADS: Algorithmen und Datenstrukturen 10. Oktober 2017 36 / 44 Maximale Teilsumme: Analyse n =a.length Innerste Schleife for (k=i; k<=j; k++) j i + 1 mal durchlaufen für jedes i, j. Mittlere Schleife for (j=i; j<n; j++) jeweils j i + 1 Aktionen 1 + 2 + 3 +... n i = (n i)(n i + 1)/2 Aktionen äußere Schleife for (i=0; i<n; i++) aufsummieren über den Aufwand des Durchlaufes für jedes i Beispiel n = 32: 5984 Additionen n 1 n 1 j n 1 n 1 T (n) = 1 = (j i + 1) = i=0 j=i k=i i=0 j=i n 1 (n i)(n i + 1)/2 = i=0 n k(k + 1)/2 = n 3 /6 + n 2 /2 + n/3 k=1 n k=1 k2 = n 3 /3 + n 2 /2 + n/6 (wie sieht man das?)

Uwe Quasthoff (ASV, Uni LE) ADS: Algorithmen und Datenstrukturen 10. Oktober 2017 37 / 44 Beweis... n k=1 k2 = n 3 /3 + n 2 /2 + n/6 = 1/6(n)(n + 1)(2n + 1) (i) n = 1: 1 k=1 k2 = 1 = 1/3 + 1/2 + 1/6 (ii) n 1 n: 1 n 1 k=1 +n2 = 1/6(n 1)(n)(2n 1) + 6n 2 /6 2 = 1/6(2n 3 n 2 2n 2 + n) + 6n 2 /6 3 = n 3 /3 + n 2 /2 + n/6

Versteckte Zeitkomplexität Beispiel: Fibonacci-Zahlen 0, 1, 1, 2, 3, 5, 8, 13, 21,... Definition F 0 = 0, F 1 = 1, F n = F n 1 + F n 2 für n > 1. 1 int fibe (int n) { if (n <= 0) return 0; else if (n ==1) return 1; else return fibe(n-2) + fibe(n-1) } fibe(n) berechnet F n, aber exponentieller Aufwand! 2 int fibl (int n, int f1, int f2) { if (n <=0) return 0; else if (n==1) return f1+f2; else return fibl(n-1,f2+f1,f1) } fibl(n,1,0) berechnet F n mit linearem Aufwand z.b. fibl(4,1,0)=fibl(3,1,1)=fibl(2,2,1)=fibl(1,3,2)=5 Uwe Quasthoff (ASV, Uni LE) ADS: Algorithmen und Datenstrukturen 10. Oktober 2017 38 / 44

Uwe Quasthoff (ASV, Uni LE) ADS: Algorithmen und Datenstrukturen 10. Oktober 2017 39 / 44 Versteckte Platzkomplexität am Beispiel n! int fakl(int n) { if(n<=1) return 1; else return n*fakl(n-1); } fakl(n) n! mit linearem Speicheraufwand Θ(n) int fakk(int n,int a) { if(n<=1) return a; else return fakk(n-1,n*a); } fakk(n,1) n! mit konstantem Speicheraufwand Θ(1) Bessere Abschätzung: Wie wächst der Aufwand bei der Multiplikation großer Zahlen? Was ist der Speicheraufwand für n und für n!?

Multiplikation für Fortgeschrittene Wie in der Schule: 5432*1995 5432 48888 48888 27160 ------- 10836840 Besser: = O(l 2 ) für l-stellige Zahlen. (100A + B) (100C + D) = 10000AC + 100(AD + BC) + BD Nach AD + BC = (A + B) (C + D) AC BD, nur noch 3 Multiplikationen von Zahlen der halben Länge: T (n) = 3T (n/2), wobei der Aufwand für die Addition vernachlässigt wird. Lösung: T (n) = n log 2 3 n 1.585 n 2 Für große Zahlen geht s also intelligenter als in der Schule! Uwe Quasthoff (ASV, Uni LE) ADS: Algorithmen und Datenstrukturen 10. Oktober 2017 40 / 44

Uwe Quasthoff (ASV, Uni LE) ADS: Algorithmen und Datenstrukturen 10. Oktober 2017 41 / 44 Das Mastertheorem Allgemeines Theorem zur Lösung von Funktionalgleichungen (Rekursionsgleichungen) der Form ( n ) T (n) = at + g(n), a 1, b > 1 b Warum können wir i.d.r. T (1) = 1 annehmen? Funktionalgleichung beschreibt algorithmische Strategie Divide-and-Conquer : Zerlege Gesamtproblem in gleich große Teilprobleme der Größe n/b. Für Gesamtproblem löse a solche Teilprobleme. Für Zerlegung und Kombination der Teillösungen entstehen jeweils Overhead-Kosten g(n).

Uwe Quasthoff (ASV, Uni LE) ADS: Algorithmen und Datenstrukturen 10. Oktober 2017 42 / 44 Das Mastertheorem Polynomialer Overhead Es gibt mehrere Lösungen je nach Verhalten von g(n). Sei jetzt g(n) polynomial, d.h. g(n) = Θ(n k ): ( n ) T (n) = at + Θ(n k ), a 1, b > 1 b Dann unterscheide 3 Fälle: Θ(n k ) T (n) = Θ(n k log n) Θ(n log b (a) ) falls a < b k falls a = b k falls a > b k

Uwe Quasthoff (ASV, Uni LE) ADS: Algorithmen und Datenstrukturen 10. Oktober 2017 43 / 44 Das Mastertheorem Beispiele Sei wieder g(n) polynomial, g(n) = Θ(n k ). Setze k = 2 und b = 3 und betrachte Beispiele für a{ < = > a = 8 T (n) = 8T ( n 3) + Θ(n 2 ) T (n) = Θ(n 2 ) } n k. a = 9 T (n) = 9T ( n 3) + Θ(n 2 ) T (n) = Θ(n 2 log 2 n) a = 10 T (n) = 10T ( n 3) + Θ(n 2 ) T (n) = Θ(n log 3 10 ) Θ(n k ) Zur Erinnerung: T (n) = Θ(n k log n) Θ(n log b (a) ) falls a < b k falls a = b k falls a > b k

Zusammenfassung Komplexität / Effizienz = wesentliche Eigenschaft von Algorithmen meist asymptotische Worst-Case-Abschätzung in Bezug auf Problemgröße n Unabhängigkeit von konkreten Umgebungsparametern (Hardware, Betriebsystem,...) asymptotisch schlechte Verfahren können bei kleiner Problemgröße ausreichen wichtige Klassen: O(1), O(log n), O(n), O(nlogn), O(n 2 ),..., O(2 n ) zu gegebener Problemstellung gibt es oft Algorithmen mit stark unterschiedlicher Komplexität unterschiedliche Lösungsstrategien Raum/Zeit- Tradeoff : Zwischenspeichern von Ergebnissen statt mehrfacher Berechnung Abschätzung der Komplexität aus Programmfragmenten nach Rechenregeln Uwe Quasthoff (ASV, Uni LE) ADS: Algorithmen und Datenstrukturen 10. Oktober 2017 44 / 44