Programmieren und Problemlösen

Ähnliche Dokumente
2. Effizienz von Algorithmen

Informatik II. Vorlesung am D-BAUG der ETH Zürich. Felix Friedrich & Hermann Lehner FS 2018

Informatik II. 1. Einführung. Inhalte der Vorlesung. Ziele der Vorlesung. Vorlesung am D-BAUG der ETH Zürich

Übung Algorithmen und Datenstrukturen

Kapitel 10. Komplexität von Algorithmen und Sortieralgorithmen

Algorithmen und Datenstrukturen (für ET/IT)

Kapitel 9. Komplexität von Algorithmen und Sortieralgorithmen

2. Grundlagen. Beschreibung von Algorithmen durch Pseudocode. Korrektheit von Algorithmen durch Invarianten.

Kapitel 9. Komplexität von Algorithmen und Sortieralgorithmen

Asymptotik und Laufzeitanalyse

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

Algorithmen und Datenstrukturen Effizienz und Funktionenklassen

Übung zu Algorithmen und Datenstrukturen (für ET/IT)

Übungen zu Algorithmen

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

Übung Algorithmen und Datenstrukturen

A6.1 Logarithmus. Algorithmen und Datenstrukturen. Algorithmen und Datenstrukturen. A6.1 Logarithmus. A6.2 Landau-Notation. A6.

Ziele. Kapitel 10: Komplexität von Algorithmen und Sortierverfahren. Beispiel: Lineare Suche eines Elements in einem Array (1)

f 1 (n) = log(n) + n 2 n 5 f 2 (n) = n 3 + n 2 f 3 (n) = log(n 2 ) f 4 (n) = n n f 5 (n) = (log(n)) 2

Algorithmen und Datenstrukturen

Vorlesung Datenstrukturen

Grundlagen: Algorithmen und Datenstrukturen

Komplexität von Algorithmen

Ordnen Sie die folgenden Funktionen nach ihrer asymptotischer Komplexität in aufsteigender Reihenfolge: i=1 4i + n = 4 n. i=1 i + 3n = 4 ( n(n+1)

Komplexität von Algorithmen:

Abschnitt 7: Komplexität von imperativen Programmen

Übung zur Vorlesung Berechenbarkeit und Komplexität

Komplexität von Algorithmen

AlgoDat Fragen zu Vorlesung und Klausur

Übung zu Algorithmen und Datenstrukturen (für ET/IT)

Objektorientierte Programmierung VL: Prof. Dr. Marco Block-Berlitz - Freie Universität Berlin Proinformatik III

Grundlagen: Algorithmen und Datenstrukturen

Einstieg in die Informatik mit Java

Präsenzübung Datenstrukturen und Algorithmen SS 2014

Die asymptotische Notation

Algorithmen und Datenstrukturen

Effiziente Algorithmen mit Python. D. Komm, T. Kohn

Algorithmen und Datenstrukturen (für ET/IT)

Übung Algorithmen und Datenstrukturen

Übung Algorithmen und Datenstrukturen

Komplexität von Algorithmen

Algorithmik Übung 2 Prof. Dr. Heiner Klocke Winter 11/

Datenstrukturen. Mariano Zelke. Sommersemester 2012

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

2 Wachstumsverhalten von Funktionen

Datenstrukturen, Algorithmen und Programmierung 2

Algorithmen und Datenstrukturen I Grundlagen

WS 2009/10. Diskrete Strukturen

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

Übung zu Algorithmen und Datenstrukturen (für ET/IT)

Grundlagen: Algorithmen und Datenstrukturen

Komplexität eines Algorithmus, Grössenordnung, Landau-Symbole, Beispiel einer Komplexitätsberechnung (Mergesort) 7. KOMPLEXITÄT

Komplexität von Algorithmen OOPM, Ralf Lämmel

float: Fließkommazahl nach IEEE 754 Standard mit 32 bit

Vorkurs Informatik WiSe 17/18

V. Claus, Juli 2005 Einführung in die Informatik II 45

Algorithmen und Datenstrukturen I. Grundlagen. Prof. Dr. Oliver Braun. Fakultät für Informatik und Mathematik Hochschule München

Informatik II. Algorithmen und Datenstrukturen. Vorläufige Version 1 c 2002 Peter Thiemann

Algorithmen und Datenstrukturen Kapitel 1 Algorithmen & Algorithmenanalyse

Informatik I Komplexität von Algorithmen

Programmiertechnik II

Das O-Tutorial. 1 Definition von O, Ω, Θ, o und ω

Thomas Gewering Benjamin Koch Dominik Lüke. (geschachtelte Schleifen)

2. Hausübung Algorithmen und Datenstrukturen

8 Komplexitätstheorie

VL-04: Rekursionsgleichungen. (Datenstrukturen und Algorithmen, SS 2017) Gerhard Woeginger

Algorithmen I - Tutorium 28 Nr. 2

Algorithmen und Datenstrukturen 1 Kapitel 5

Institut für Programmierung und Reaktive Systeme. Java 2. Markus Reschke

lim log 2n n = > 0 Da es einen Limes gibt, gibt es auch einen Limes inferior, der gleich diesem Limes ist.

3.3 Laufzeit von Programmen

Vorkurs Informatik WiSe 16/17

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

Übung Algorithmen und Datenstrukturen

Transkript:

Dennis Komm Programmieren und Problemlösen Komplexität von Algorithmen Frühling 2019 27. Februar 2019

Komplexität von Algorithmen

Aufgabe Primzahltest Schreibe ein Programm, das eine ganze Zahl x als Eingabe erhält berechnet, ob x eine Primzahl ist dabei den %-Operator verwendet davon abhängig Primzahl oder einen Teiler von x ausgibt Programmieren und Problemlösen Komplexität von Algorithmen Frühling 2019 Dennis Komm 1 / 35

Primzahltest public class PrimeTest { public static void main(string[] args) { Out.print("Input number: "); int x = In.readInt(); int d = 2; while (d < x) { if (x % d == 0) { Out.println("No prime number, divisor: " + d); return; } d += 1; } Out.println("Prime number"); } } Programmieren und Problemlösen Komplexität von Algorithmen Frühling 2019 Dennis Komm 2 / 35

Primzahltest Wie lange braucht der Algorithmus, um Ausgabe zu erzeugen? Programmieren und Problemlösen Komplexität von Algorithmen Frühling 2019 Dennis Komm 3 / 35

Primzahltest Wie lange braucht der Algorithmus, um Ausgabe zu erzeugen? Was ist seine Laufzeit? Hängt von Anzahl Schleifendurchläufe ab Programmieren und Problemlösen Komplexität von Algorithmen Frühling 2019 Dennis Komm 3 / 35

Primzahltest Wie lange braucht der Algorithmus, um Ausgabe zu erzeugen? Was ist seine Laufzeit? Hängt von Anzahl Schleifendurchläufe ab Absoluter Wert ergibt keinen Sinn Schleife wird (ungefähr) x Mal durchlaufen (wenn x prim ist) Laufzeit wächst mit x Programmieren und Problemlösen Komplexität von Algorithmen Frühling 2019 Dennis Komm 3 / 35

Primzahltest Wie lange braucht der Algorithmus, um Ausgabe zu erzeugen? Was ist seine Laufzeit? Hängt von Anzahl Schleifendurchläufe ab Absoluter Wert ergibt keinen Sinn Schleife wird (ungefähr) x Mal durchlaufen (wenn x prim ist) Laufzeit wächst mit x... aber wie schnell? Programmieren und Problemlösen Komplexität von Algorithmen Frühling 2019 Dennis Komm 3 / 35

Laufzeit Funktion der Eingabelänge Wir messen Laufzeit als Funktion der Eingabelänge Programmieren und Problemlösen Komplexität von Algorithmen Frühling 2019 Dennis Komm 4 / 35

Laufzeit Funktion der Eingabelänge Wir messen Laufzeit als Funktion der Eingabelänge Für unseren Algorithmus ist die Eingabe eine Zahl x Zahlen werden im Computer binär dargestellt Programmieren und Problemlösen Komplexität von Algorithmen Frühling 2019 Dennis Komm 4 / 35

Laufzeit Funktion der Eingabelänge Wir messen Laufzeit als Funktion der Eingabelänge Für unseren Algorithmus ist die Eingabe eine Zahl x Zahlen werden im Computer binär dargestellt Wenn wir führende Nullen ignorieren, gilt für n Bits 2 n 1 ist 10 }.{{.. 00}, 2 n 1 + 1 ist 10 }.{{.. 01},... und 2 n 1 ist 11 }.{{.. 11} n n n Programmieren und Problemlösen Komplexität von Algorithmen Frühling 2019 Dennis Komm 4 / 35

Laufzeit Funktion der Eingabelänge Wir messen Laufzeit als Funktion der Eingabelänge Für unseren Algorithmus ist die Eingabe eine Zahl x Zahlen werden im Computer binär dargestellt Wenn wir führende Nullen ignorieren, gilt für n Bits 2 n 1 ist 10 }.{{.. 00}, 2 n 1 + 1 ist 10 }.{{.. 01},... und 2 n 1 ist 11 }.{{.. 11} n n n Eine Zahl, die mit n Bits dargestellt wird, hat ungefähr die Grösse 2 n Programmieren und Problemlösen Komplexität von Algorithmen Frühling 2019 Dennis Komm 4 / 35

Laufzeit Technologiemodell Random Access Machine Ausführungsmodell: Instruktionen werden der Reihe nach (auf einem Prozessorkern) ausgeführt Programmieren und Problemlösen Komplexität von Algorithmen Frühling 2019 Dennis Komm 5 / 35

Laufzeit Technologiemodell Random Access Machine Ausführungsmodell: Instruktionen werden der Reihe nach (auf einem Prozessorkern) ausgeführt Speichermodell: Konstante Zugriffszeit Programmieren und Problemlösen Komplexität von Algorithmen Frühling 2019 Dennis Komm 5 / 35

Laufzeit Technologiemodell Random Access Machine Ausführungsmodell: Instruktionen werden der Reihe nach (auf einem Prozessorkern) ausgeführt Speichermodell: Konstante Zugriffszeit Elementare Operationen: Rechenoperation (+,,,... ), Vergleichsoperationen, Zuweisung / Kopieroperation, Flusskontrolle (Sprünge) Programmieren und Problemlösen Komplexität von Algorithmen Frühling 2019 Dennis Komm 5 / 35

Laufzeit Technologiemodell Random Access Machine Ausführungsmodell: Instruktionen werden der Reihe nach (auf einem Prozessorkern) ausgeführt Speichermodell: Konstante Zugriffszeit Elementare Operationen: Rechenoperation (+,,,... ), Vergleichsoperationen, Zuweisung / Kopieroperation, Flusskontrolle (Sprünge) Einheitskostenmodell: Elementare Operation hat Kosten 1 Programmieren und Problemlösen Komplexität von Algorithmen Frühling 2019 Dennis Komm 5 / 35

Laufzeit Technologiemodell Random Access Machine Ausführungsmodell: Instruktionen werden der Reihe nach (auf einem Prozessorkern) ausgeführt Speichermodell: Konstante Zugriffszeit Elementare Operationen: Rechenoperation (+,,,... ), Vergleichsoperationen, Zuweisung / Kopieroperation, Flusskontrolle (Sprünge) Einheitskostenmodell: Elementare Operation hat Kosten 1 Datentypen: Fundamentaltypen wie grössenbeschränkte Ganzzahl oder Fliesskommazahl Programmieren und Problemlösen Komplexität von Algorithmen Frühling 2019 Dennis Komm 5 / 35

Laufzeit Anmerkung Wir sind an dieser Stelle nicht ganz exakt Programmieren und Problemlösen Komplexität von Algorithmen Frühling 2019 Dennis Komm 6 / 35

Laufzeit Anmerkung Wir sind an dieser Stelle nicht ganz exakt Wenn unsere Eingabe als int kodiert ist, hat sie immer dieselbe Länge Es existieren Java-Datentypen für beliebig grosse Zahlen, die wir hier aber nicht verwenden Programmieren und Problemlösen Komplexität von Algorithmen Frühling 2019 Dennis Komm 6 / 35

Laufzeit Anmerkung Wir sind an dieser Stelle nicht ganz exakt Wenn unsere Eingabe als int kodiert ist, hat sie immer dieselbe Länge Es existieren Java-Datentypen für beliebig grosse Zahlen, die wir hier aber nicht verwenden Die Kodierung einer Fliesskommazahl kann man nicht sofort aus ihrer Grösse ablesen Eine Addition ist sicherlich schneller zu bewältigen als eine Multiplikation Die Zeit der Addition zweier n-bit-zahlen hängt von n ab Programmieren und Problemlösen Komplexität von Algorithmen Frühling 2019 Dennis Komm 6 / 35

Laufzeit Anmerkung Wir sind an dieser Stelle nicht ganz exakt Wenn unsere Eingabe als int kodiert ist, hat sie immer dieselbe Länge Es existieren Java-Datentypen für beliebig grosse Zahlen, die wir hier aber nicht verwenden Die Kodierung einer Fliesskommazahl kann man nicht sofort aus ihrer Grösse ablesen Eine Addition ist sicherlich schneller zu bewältigen als eine Multiplikation Die Zeit der Addition zweier n-bit-zahlen hängt von n ab Logarithmisches Kostenmodell berücksichtigt dies, verwenden wir aber ebenfalls nicht Programmieren und Problemlösen Komplexität von Algorithmen Frühling 2019 Dennis Komm 6 / 35

Komplexität von Algorithmen Laufzeit unseres Primzahltests

Laufzeit unseres Primzahltests Angenommen, x ist eine Primzahl und mit n Bits dargestellt Programmieren und Problemlösen Komplexität von Algorithmen Frühling 2019 Dennis Komm 7 / 35

Laufzeit unseres Primzahltests Angenommen, x ist eine Primzahl und mit n Bits dargestellt Anzahl Schleifendurchläufe wächst mit Grösse von x 2 n Die Schleife wird also ca. 2 n Mal ausgeführt Programmieren und Problemlösen Komplexität von Algorithmen Frühling 2019 Dennis Komm 7 / 35

Laufzeit unseres Primzahltests Angenommen, x ist eine Primzahl und mit n Bits dargestellt Anzahl Schleifendurchläufe wächst mit Grösse von x 2 n Die Schleife wird also ca. 2 n Mal ausgeführt Wir wollen elementare Operationen zählen Algorithmus führt vier Operationen pro Iteration aus Insgesamt ca. 4 2 n Operationen Programmieren und Problemlösen Komplexität von Algorithmen Frühling 2019 Dennis Komm 7 / 35

Laufzeit unseres Primzahltests Angenommen, x ist eine Primzahl und mit n Bits dargestellt Anzahl Schleifendurchläufe wächst mit Grösse von x 2 n Die Schleife wird also ca. 2 n Mal ausgeführt Wir wollen elementare Operationen zählen Algorithmus führt vier Operationen pro Iteration aus Insgesamt ca. 4 2 n Operationen Uns interessiert, wie sich Laufzeit verhält, wenn n wächst Ignoriere Konstante 4 Programmieren und Problemlösen Komplexität von Algorithmen Frühling 2019 Dennis Komm 7 / 35

Komplexität von Algorithmen Asymptotische obere Schranken

Asymptotische obere Schranken Genaue Laufzeit lässt sich selbst für kleine Eingaben kaum voraussagen Uns interessieren obere Schranken Betrachte das asymptotische Verhalten eines Algorithmus Ignoriere alle konstanten Faktoren Programmieren und Problemlösen Komplexität von Algorithmen Frühling 2019 Dennis Komm 8 / 35

Asymptotische obere Schranken Genaue Laufzeit lässt sich selbst für kleine Eingaben kaum voraussagen Uns interessieren obere Schranken Betrachte das asymptotische Verhalten eines Algorithmus Ignoriere alle konstanten Faktoren Beispiel Lineares Wachstum mit Steigung 5 ist genauso gut wie lineares Wachstum mit Steigung 1 Programmieren und Problemlösen Komplexität von Algorithmen Frühling 2019 Dennis Komm 8 / 35

Asymptotische obere Schranken Genaue Laufzeit lässt sich selbst für kleine Eingaben kaum voraussagen Uns interessieren obere Schranken Betrachte das asymptotische Verhalten eines Algorithmus Ignoriere alle konstanten Faktoren Beispiel Lineares Wachstum mit Steigung 5 ist genauso gut wie lineares Wachstum mit Steigung 1 Quadratisches Wachstum mit Koeffizient 10 ist genauso gut wie quadratisches Wachstum mit Koeffizient 1 Programmieren und Problemlösen Komplexität von Algorithmen Frühling 2019 Dennis Komm 8 / 35

Asymptotische obere Schranken Gross-O-Notation Die Menge O(2 n ) enthält alle Funktionen, die nicht schneller wachsen als c 2 n für eine Konstante c Programmieren und Problemlösen Komplexität von Algorithmen Frühling 2019 Dennis Komm 9 / 35

Asymptotische obere Schranken Gross-O-Notation Die Menge O(2 n ) enthält alle Funktionen, die nicht schneller wachsen als c 2 n für eine Konstante c O(g(n)) enthält alle Funktionen f(n), die nicht schneller wachsen als c g(n) für eine Konstante c, wobei f und g positiv sind Programmieren und Problemlösen Komplexität von Algorithmen Frühling 2019 Dennis Komm 9 / 35

Asymptotische obere Schranken Gross-O-Notation Die Menge O(2 n ) enthält alle Funktionen, die nicht schneller wachsen als c 2 n für eine Konstante c O(g(n)) enthält alle Funktionen f(n), die nicht schneller wachsen als c g(n) für eine Konstante c, wobei f und g positiv sind Verwende die asymptotische Notation zur Kennzeichnung der Laufzeit von Algorithmen Wir schreiben O(n 2 ) und meinen, dass der Algorithmus sich für grosse n (maximal) wie n 2 verhält: verdoppelt sich die Eingabelänge, so vervierfacht sich die Laufzeit (maximal) Programmieren und Problemlösen Komplexität von Algorithmen Frühling 2019 Dennis Komm 9 / 35

Asymptotische obere Schranken Formale Definition Gross-O-Notation Formale Definition Für jede Funktion g : N R + ist O(g(n)) = {f : N R + c > 0, n 0 N: n n 0 : f(n) c g(n)} Programmieren und Problemlösen Komplexität von Algorithmen Frühling 2019 Dennis Komm 10 / 35

Asymptotische obere Schranken Formale Definition Gross-O-Notation Formale Definition Für jede Funktion g : N R + ist O(g(n)) = {f : N R + c > 0, n 0 N: n n 0 : f(n) c g(n)} Wir verwenden O(g) und O(g(n)) synonym Programmieren und Problemlösen Komplexität von Algorithmen Frühling 2019 Dennis Komm 10 / 35

Asymptotische obere Schranken Formale Definition Gross-O-Notation Formale Definition Für jede Funktion g : N R + ist O(g(n)) = {f : N R + c > 0, n 0 N: n n 0 : f(n) c g(n)} Wir verwenden O(g) und O(g(n)) synonym Sie finden in der Literatur oftmals f = O(g) Programmieren und Problemlösen Komplexität von Algorithmen Frühling 2019 Dennis Komm 10 / 35

Asymptotische obere Schranken Formale Definition Gross-O-Notation Formale Definition Für jede Funktion g : N R + ist O(g(n)) = {f : N R + c > 0, n 0 N: n n 0 : f(n) c g(n)} Wir verwenden O(g) und O(g(n)) synonym Sie finden in der Literatur oftmals f = O(g) Dies ist zu verstehen als f O(g) Denn aus f 1 = O(g) und f 2 = O(g) folgt natürlich nicht f 1 = f 2 Programmieren und Problemlösen Komplexität von Algorithmen Frühling 2019 Dennis Komm 10 / 35

Asymptotische obere Schranken Anschauung g(n) = n 2 n Programmieren und Problemlösen Komplexität von Algorithmen Frühling 2019 Dennis Komm 11 / 35

Asymptotische obere Schranken Anschauung g(n) = n 2 f O(g) n 0 n Programmieren und Problemlösen Komplexität von Algorithmen Frühling 2019 Dennis Komm 11 / 35

Asymptotische obere Schranken Anschauung g(n) = n 2 f O(g) h O(g) n 0 n Programmieren und Problemlösen Komplexität von Algorithmen Frühling 2019 Dennis Komm 11 / 35

Asymptotische obere Schranken Beispiele O(g(n)) = {f : N R + c > 0, n 0 N: n n 0 : f(n) c g(n)} f(n) f O(?) Beispiel 3n + 4 2n n 2 + 100n n + n Programmieren und Problemlösen Komplexität von Algorithmen Frühling 2019 Dennis Komm 12 / 35

Asymptotische obere Schranken Beispiele O(g(n)) = {f : N R + c > 0, n 0 N: n n 0 : f(n) c g(n)} f(n) f O(?) Beispiel 3n + 4 O(n) c = 4, n 0 = 4 2n n 2 + 100n n + n Programmieren und Problemlösen Komplexität von Algorithmen Frühling 2019 Dennis Komm 12 / 35

Asymptotische obere Schranken Beispiele O(g(n)) = {f : N R + c > 0, n 0 N: n n 0 : f(n) c g(n)} f(n) f O(?) Beispiel 3n + 4 O(n) c = 4, n 0 = 4 2n O(n) c = 2, n 0 = 0 n 2 + 100n n + n Programmieren und Problemlösen Komplexität von Algorithmen Frühling 2019 Dennis Komm 12 / 35

Asymptotische obere Schranken Beispiele O(g(n)) = {f : N R + c > 0, n 0 N: n n 0 : f(n) c g(n)} f(n) f O(?) Beispiel 3n + 4 O(n) c = 4, n 0 = 4 2n O(n) c = 2, n 0 = 0 n 2 + 100n O(n 2 ) c = 2, n 0 = 100 n + n Programmieren und Problemlösen Komplexität von Algorithmen Frühling 2019 Dennis Komm 12 / 35

Asymptotische obere Schranken Beispiele O(g(n)) = {f : N R + c > 0, n 0 N: n n 0 : f(n) c g(n)} f(n) f O(?) Beispiel 3n + 4 O(n) c = 4, n 0 = 4 2n O(n) c = 2, n 0 = 0 n 2 + 100n O(n 2 ) c = 2, n 0 = 100 n + n O(n) c = 2, n 0 = 1 Programmieren und Problemlösen Komplexität von Algorithmen Frühling 2019 Dennis Komm 12 / 35

Asymptotische obere Schranken Eigenschaft f 1 O(g) und f 2 O(g) impliziert f 1 + f 2 O(g) Programmieren und Problemlösen Komplexität von Algorithmen Frühling 2019 Dennis Komm 13 / 35

Asymptotische obere Schranken Eigenschaft f 1 O(g) und f 2 O(g) impliziert f 1 + f 2 O(g) Es existieren n 1, c 1, sodass für alle n > n 1 gilt, dass f 1 (n) c 1 g(n) Ferner existieren n 2, c 2, sodass für alle n > n 2 gilt, dass f 2 (n) c 2 g(n) Programmieren und Problemlösen Komplexität von Algorithmen Frühling 2019 Dennis Komm 13 / 35

Asymptotische obere Schranken Eigenschaft f 1 O(g) und f 2 O(g) impliziert f 1 + f 2 O(g) Es existieren n 1, c 1, sodass für alle n > n 1 gilt, dass f 1 (n) c 1 g(n) Ferner existieren n 2, c 2, sodass für alle n > n 2 gilt, dass f 2 (n) c 2 g(n) Sei n 0 := max{n 1, n 2 } und c := max{c 1, c 2 } Dann ist f 1 (n) c g(n) und f 2 (n) c g(n) für alle n n 0 Programmieren und Problemlösen Komplexität von Algorithmen Frühling 2019 Dennis Komm 13 / 35

Asymptotische obere Schranken Eigenschaft f 1 O(g) und f 2 O(g) impliziert f 1 + f 2 O(g) Es existieren n 1, c 1, sodass für alle n > n 1 gilt, dass f 1 (n) c 1 g(n) Ferner existieren n 2, c 2, sodass für alle n > n 2 gilt, dass f 2 (n) c 2 g(n) Sei n 0 := max{n 1, n 2 } und c := max{c 1, c 2 } Dann ist f 1 (n) c g(n) und f 2 (n) c g(n) für alle n n 0 Also gilt f 1 (n) + f 2 (n) 2 c g(n) für alle n n 0 Somit folgt, dass f 1 + f 2 in O(g) ist Programmieren und Problemlösen Komplexität von Algorithmen Frühling 2019 Dennis Komm 13 / 35

Komplexität von Algorithmen Asymptotische untere Schranken

Asymptotische untere Schranken Formale Definition Gross-Ω-Notation Formale Definition Für jede Funktion g : N R + ist Ω(g) = {f : N R c > 0, n 0 N: n n 0 : c g(n) f(n)} Programmieren und Problemlösen Komplexität von Algorithmen Frühling 2019 Dennis Komm 14 / 35

Asymptotische untere Schranken Anschauung g(n) = n n Programmieren und Problemlösen Komplexität von Algorithmen Frühling 2019 Dennis Komm 15 / 35

Asymptotische untere Schranken Anschauung f Ω(g) g(n) = n n 0 n Programmieren und Problemlösen Komplexität von Algorithmen Frühling 2019 Dennis Komm 15 / 35

Asymptotische untere Schranken Anschauung h Ω(g) f Ω(g) g(n) = n n 0 n Programmieren und Problemlösen Komplexität von Algorithmen Frühling 2019 Dennis Komm 15 / 35

Komplexität von Algorithmen Asymptotische scharfe Schranken

Asymptotisch scharfe Schranke Formale Definition Definition Für jede Funktion g : N R + ist Θ(g) = Ω(g) O(g) Programmieren und Problemlösen Komplexität von Algorithmen Frühling 2019 Dennis Komm 16 / 35

Asymptotisch scharfe Schranke Anschauung f Θ(n 2 ) n Programmieren und Problemlösen Komplexität von Algorithmen Frühling 2019 Dennis Komm 17 / 35

Asymptotisch scharfe Schranke Anschauung f Θ(n 2 ) h(n) = 0.5 n 2 n Programmieren und Problemlösen Komplexität von Algorithmen Frühling 2019 Dennis Komm 17 / 35

Asymptotisch scharfe Schranke Anschauung g(n) = n 2 f Θ(n 2 ) h(n) = 0.5 n 2 n Programmieren und Problemlösen Komplexität von Algorithmen Frühling 2019 Dennis Komm 17 / 35

Komplexität von Algorithmen Laufzeit-Analyse

Wachstumsbezeichnungen Funktion in Beschreibung Beispiel O(1) konstant Array-Zugriff O(log n) logarithmisch Binäre sortierte Suche O(n) linear Unsortierte naive Suche O(n log n) superlinear / loglinear Gute Sortieralgorithmen O(n 2 ) quadratisch Einfache Sortieralgorithmen O(n c ) polynomiell Matrixmultiplikation O(2 n ) exponentiell Traveling Salesman Dynamic Programming O(n!) faktoriell Traveling Salesman naiv Programmieren und Problemlösen Komplexität von Algorithmen Frühling 2019 Dennis Komm 18 / 35

Kleine n 60 n 4 2 n 40 n 2 20 0 1 1.5 2 2.5 3 3.5 4 4.5 5 5.5 6 n ln n Programmieren und Problemlösen Komplexität von Algorithmen Frühling 2019 Dennis Komm 19 / 35

Grössere n 1 10 6 2 n 0.8 0.6 0.4 n 4 0.2 0 n 2 2 4 6 8 10 12 14 16 18 20 22 24log n Programmieren und Problemlösen Komplexität von Algorithmen Frühling 2019 Dennis Komm 20 / 35

Grosse n 1 1020 0.8 2 n 0.6 0.4 0.2 0 n 4 n 2 10 20 30 40 50 60 70 80 90 100log n Programmieren und Problemlösen Komplexität von Algorithmen Frühling 2019 Dennis Komm 21 / 35

Logarithmen 1,000 n 2 800 600 400 200 0 n 3/2 n log n n 5 10 15 20 25 30 35 40 45 log n 50 Programmieren und Problemlösen Komplexität von Algorithmen Frühling 2019 Dennis Komm 22 / 35

Zeitbedarf Nehmen wir an, 1 elementare Operation braucht 1µs Eingabelänge 1 100 10000 10 6 10 9 log 2 n 1µs n 1µs n log 2 n 1µs n 2 1µs 2 n 1µs Programmieren und Problemlösen Komplexität von Algorithmen Frühling 2019 Dennis Komm 23 / 35

Zeitbedarf Nehmen wir an, 1 elementare Operation braucht 1µs Eingabelänge 1 100 10000 10 6 10 9 log 2 n 1µs 7µs 13µs 20µs 30µs n 1µs n log 2 n 1µs n 2 1µs 2 n 1µs Programmieren und Problemlösen Komplexität von Algorithmen Frühling 2019 Dennis Komm 23 / 35

Zeitbedarf Nehmen wir an, 1 elementare Operation braucht 1µs Eingabelänge 1 100 10000 10 6 10 9 log 2 n 1µs 7µs 13µs 20µs 30µs n 1µs 100µs 1/100s 1s 17 Minuten n log 2 n 1µs n 2 1µs 2 n 1µs Programmieren und Problemlösen Komplexität von Algorithmen Frühling 2019 Dennis Komm 23 / 35

Zeitbedarf Nehmen wir an, 1 elementare Operation braucht 1µs Eingabelänge 1 100 10000 10 6 10 9 log 2 n 1µs 7µs 13µs 20µs 30µs n 1µs 100µs 1/100s 1s 17 Minuten n log 2 n 1µs 700µs 13/100µs 20s 8.5 Stunden n 2 1µs 2 n 1µs Programmieren und Problemlösen Komplexität von Algorithmen Frühling 2019 Dennis Komm 23 / 35

Zeitbedarf Nehmen wir an, 1 elementare Operation braucht 1µs Eingabelänge 1 100 10000 10 6 10 9 log 2 n 1µs 7µs 13µs 20µs 30µs n 1µs 100µs 1/100s 1s 17 Minuten n log 2 n 1µs 700µs 13/100µs 20s 8.5 Stunden n 2 1µs 1/100s 1.7 Minuten 11.5 Tage 317 Jahrhund. 2 n 1µs Programmieren und Problemlösen Komplexität von Algorithmen Frühling 2019 Dennis Komm 23 / 35

Zeitbedarf Nehmen wir an, 1 elementare Operation braucht 1µs Eingabelänge 1 100 10000 10 6 10 9 log 2 n 1µs 7µs 13µs 20µs 30µs n 1µs 100µs 1/100s 1s 17 Minuten n log 2 n 1µs 700µs 13/100µs 20s 8.5 Stunden n 2 1µs 1/100s 1.7 Minuten 11.5 Tage 317 Jahrhund. 2 n 1µs 10 14 Jahrh. Programmieren und Problemlösen Komplexität von Algorithmen Frühling 2019 Dennis Komm 23 / 35

Einfluss schnellerer Computer Na gut... dann kaufe ich mir eben eine neue Maschine. Programmieren und Problemlösen Komplexität von Algorithmen Frühling 2019 Dennis Komm 24 / 35

Einfluss schnellerer Computer Na gut... dann kaufe ich mir eben eine neue Maschine. Wenn aktuelle Maschine Eingaben der Länge n lösen kann, dann kann eine 10 oder 100 Mal so schnelle Maschine... Komplexität (Geschwindigkeit 10) (Geschwindigkeit 100) log 2 n n n 2 2 n Programmieren und Problemlösen Komplexität von Algorithmen Frühling 2019 Dennis Komm 24 / 35

Einfluss schnellerer Computer Na gut... dann kaufe ich mir eben eine neue Maschine. Wenn aktuelle Maschine Eingaben der Länge n lösen kann, dann kann eine 10 oder 100 Mal so schnelle Maschine... Komplexität (Geschwindigkeit 10) (Geschwindigkeit 100) log 2 n n n 10 n n 100 n n 2 2 n Programmieren und Problemlösen Komplexität von Algorithmen Frühling 2019 Dennis Komm 24 / 35

Einfluss schnellerer Computer Na gut... dann kaufe ich mir eben eine neue Maschine. Wenn aktuelle Maschine Eingaben der Länge n lösen kann, dann kann eine 10 oder 100 Mal so schnelle Maschine... Komplexität (Geschwindigkeit 10) (Geschwindigkeit 100) log 2 n n n 10 n n 100 n n 10 n n 100 n n 2 2 n Programmieren und Problemlösen Komplexität von Algorithmen Frühling 2019 Dennis Komm 24 / 35

Einfluss schnellerer Computer Na gut... dann kaufe ich mir eben eine neue Maschine. Wenn aktuelle Maschine Eingaben der Länge n lösen kann, dann kann eine 10 oder 100 Mal so schnelle Maschine... Komplexität (Geschwindigkeit 10) (Geschwindigkeit 100) log 2 n n n 10 n n 100 n n 10 n n 100 n n 2 n 3.16 n n 10 n 2 n Programmieren und Problemlösen Komplexität von Algorithmen Frühling 2019 Dennis Komm 24 / 35

Einfluss schnellerer Computer Na gut... dann kaufe ich mir eben eine neue Maschine. Wenn aktuelle Maschine Eingaben der Länge n lösen kann, dann kann eine 10 oder 100 Mal so schnelle Maschine... Komplexität (Geschwindigkeit 10) (Geschwindigkeit 100) log 2 n n n 10 n n 100 n n 10 n n 100 n n 2 n 3.16 n n 10 n 2 n n n + 3.32 n n + 6.64 Programmieren und Problemlösen Komplexität von Algorithmen Frühling 2019 Dennis Komm 24 / 35

Asymptotische Komplexität Beispiele n O(n 2 ) Programmieren und Problemlösen Komplexität von Algorithmen Frühling 2019 Dennis Komm 25 / 35

Asymptotische Komplexität Beispiele n O(n 2 ) ist korrekt, aber ungenau: n O(n) und sogar n Θ(n) Programmieren und Problemlösen Komplexität von Algorithmen Frühling 2019 Dennis Komm 25 / 35

Asymptotische Komplexität Beispiele n O(n 2 ) ist korrekt, aber ungenau: n O(n) und sogar n Θ(n) 3n 2 O(2n 2 ) Programmieren und Problemlösen Komplexität von Algorithmen Frühling 2019 Dennis Komm 25 / 35

Asymptotische Komplexität Beispiele n O(n 2 ) ist korrekt, aber ungenau: n O(n) und sogar n Θ(n) 3n 2 O(2n 2 ) ist korrekt, aber unüblich: Konstanten weglasssen: 3n 2 O(n 2 ) Programmieren und Problemlösen Komplexität von Algorithmen Frühling 2019 Dennis Komm 25 / 35

Asymptotische Komplexität Beispiele n O(n 2 ) ist korrekt, aber ungenau: n O(n) und sogar n Θ(n) 3n 2 O(2n 2 ) ist korrekt, aber unüblich: Konstanten weglasssen: 3n 2 O(n 2 ) 2n 2 O(n) Programmieren und Problemlösen Komplexität von Algorithmen Frühling 2019 Dennis Komm 25 / 35

Asymptotische Komplexität Beispiele n O(n 2 ) ist korrekt, aber ungenau: n O(n) und sogar n Θ(n) 3n 2 O(2n 2 ) ist korrekt, aber unüblich: Konstanten weglasssen: 3n 2 O(n 2 ) 2n 2 O(n) ist falsch, denn 2n2 cn = 2 n ist nicht konstant c Programmieren und Problemlösen Komplexität von Algorithmen Frühling 2019 Dennis Komm 25 / 35

Asymptotische Komplexität Beispiele n O(n 2 ) ist korrekt, aber ungenau: n O(n) und sogar n Θ(n) 3n 2 O(2n 2 ) ist korrekt, aber unüblich: Konstanten weglasssen: 3n 2 O(n 2 ) 2n 2 O(n) ist falsch, denn 2n2 cn O(n) O(n 2 ) = 2 n ist nicht konstant c Programmieren und Problemlösen Komplexität von Algorithmen Frühling 2019 Dennis Komm 25 / 35

Asymptotische Komplexität Beispiele n O(n 2 ) ist korrekt, aber ungenau: n O(n) und sogar n Θ(n) 3n 2 O(2n 2 ) ist korrekt, aber unüblich: Konstanten weglasssen: 3n 2 O(n 2 ) 2n 2 O(n) ist falsch, denn 2n2 cn O(n) O(n 2 ) ist korrekt, = 2 n ist nicht konstant c Programmieren und Problemlösen Komplexität von Algorithmen Frühling 2019 Dennis Komm 25 / 35

Asymptotische Komplexität Beispiele n O(n 2 ) ist korrekt, aber ungenau: n O(n) und sogar n Θ(n) 3n 2 O(2n 2 ) ist korrekt, aber unüblich: Konstanten weglasssen: 3n 2 O(n 2 ) 2n 2 O(n) ist falsch, denn 2n2 = 2 n ist nicht konstant cn c O(n) O(n 2 ) ist korrekt, Θ(n) Θ(n 2 ) Programmieren und Problemlösen Komplexität von Algorithmen Frühling 2019 Dennis Komm 25 / 35

Asymptotische Komplexität Beispiele n O(n 2 ) ist korrekt, aber ungenau: n O(n) und sogar n Θ(n) 3n 2 O(2n 2 ) ist korrekt, aber unüblich: Konstanten weglasssen: 3n 2 O(n 2 ) 2n 2 O(n) ist falsch, denn 2n2 = 2 n ist nicht konstant cn c O(n) O(n 2 ) ist korrekt, Θ(n) Θ(n 2 ) ist falsch: Programmieren und Problemlösen Komplexität von Algorithmen Frühling 2019 Dennis Komm 25 / 35

Asymptotische Komplexität Beispiele n O(n 2 ) ist korrekt, aber ungenau: n O(n) und sogar n Θ(n) 3n 2 O(2n 2 ) ist korrekt, aber unüblich: Konstanten weglasssen: 3n 2 O(n 2 ) 2n 2 O(n) ist falsch, denn 2n2 = 2 n ist nicht konstant cn c O(n) O(n 2 ) ist korrekt, Θ(n) Θ(n 2 ) ist falsch: n Ω(n 2 ) Θ(n 2 ) Programmieren und Problemlösen Komplexität von Algorithmen Frühling 2019 Dennis Komm 25 / 35

Problem-Komplexität Definition Die Komplexität eines Problems P entspricht den minimalen (asymptotischen) Kosten über alle Algorithmen, die P lösen Programmieren und Problemlösen Komplexität von Algorithmen Frühling 2019 Dennis Komm 26 / 35

Problem-Komplexität Definition Die Komplexität eines Problems P entspricht den minimalen (asymptotischen) Kosten über alle Algorithmen, die P lösen Obere Schranken durch Angabe eines Algorithmus Programmieren und Problemlösen Komplexität von Algorithmen Frühling 2019 Dennis Komm 26 / 35

Problem-Komplexität Definition Die Komplexität eines Problems P entspricht den minimalen (asymptotischen) Kosten über alle Algorithmen, die P lösen Obere Schranken durch Angabe eines Algorithmus Zu testen, ob eine n-bit-zahl prim ist, hat Komplexität in O(2 n ) Sortieren von n Zahlen vom Typ int hat Komplexität in O(n log n) Programmieren und Problemlösen Komplexität von Algorithmen Frühling 2019 Dennis Komm 26 / 35

Problem-Komplexität Definition Die Komplexität eines Problems P entspricht den minimalen (asymptotischen) Kosten über alle Algorithmen, die P lösen Obere Schranken durch Angabe eines Algorithmus Zu testen, ob eine n-bit-zahl prim ist, hat Komplexität in O(2 n ) Sortieren von n Zahlen vom Typ int hat Komplexität in O(n log n) Untere Schranken sind viel schwerer zu zeigen Programmieren und Problemlösen Komplexität von Algorithmen Frühling 2019 Dennis Komm 26 / 35

Problem-Komplexität Definition Die Komplexität eines Problems P entspricht den minimalen (asymptotischen) Kosten über alle Algorithmen, die P lösen Obere Schranken durch Angabe eines Algorithmus Zu testen, ob eine n-bit-zahl prim ist, hat Komplexität in O(2 n ) Sortieren von n Zahlen vom Typ int hat Komplexität in O(n log n) Untere Schranken sind viel schwerer zu zeigen Stärkere Schranken als Ω(n) nur unter Zusatzannahmen Programmieren und Problemlösen Komplexität von Algorithmen Frühling 2019 Dennis Komm 26 / 35

Ein schnellerer Primzahltest Erster Versuch

Ein schnellerer Primzahltest Ziel Laufzeit ausserhalb Ω(2 n ) Programmieren und Problemlösen Komplexität von Algorithmen Frühling 2019 Dennis Komm 27 / 35

Ein schnellerer Primzahltest Ziel Laufzeit ausserhalb Ω(2 n ) Beobachtung Wenn x nicht durch 2 teilbar ist, dann ist sie auch nicht durch 4 oder 6 oder 8 etc. teilbar Programmieren und Problemlösen Komplexität von Algorithmen Frühling 2019 Dennis Komm 27 / 35

Ein schnellerer Primzahltest Ziel Laufzeit ausserhalb Ω(2 n ) Beobachtung Wenn x nicht durch 2 teilbar ist, dann ist sie auch nicht durch 4 oder 6 oder 8 etc. teilbar Es reicht dann nur ungerade Zahlen zu testen Algorithmus muss nur noch die Hälfte der Zahlen testen Schleife wird nur noch x/2 Mal durchlaufen Programmieren und Problemlösen Komplexität von Algorithmen Frühling 2019 Dennis Komm 27 / 35

Ein schnellerer Primzahltest Out.print("Input number: "); int x = In.readInt(); if (x % 2 == 0) { Out.println("Even number"); return; } int d = 3; while (d < x) { if (x % d == 0) { Out.println("No prime number, divisor: " + d); return; } d += 2; } Out.println("Prime number"); Programmieren und Problemlösen Komplexität von Algorithmen Frühling 2019 Dennis Komm 28 / 35

Ein schnellerer Primzahltest Out.print("Input number: "); int x = In.readInt(); if (x % 2 == 0) { Out.println("Even number"); return; } int d = 3; while (d < x) { if (x % d == 0) { Out.println("No prime number, divisor: " + d); return; } d += 2; } Out.println("Prime number"); Programmieren und Problemlösen Komplexität von Algorithmen Frühling 2019 Dennis Komm 28 / 35

Ein schnellerer Primzahltest Wie gross ist die Verbesserung? Programmieren und Problemlösen Komplexität von Algorithmen Frühling 2019 Dennis Komm 29 / 35

Ein schnellerer Primzahltest Wie gross ist die Verbesserung? Schleife wird ca. x/2 Mal durchlaufen anstatt x Mal Laufzeit verbessert sich um Faktor 2 Programmieren und Problemlösen Komplexität von Algorithmen Frühling 2019 Dennis Komm 29 / 35

Ein schnellerer Primzahltest Wie gross ist die Verbesserung? Schleife wird ca. x/2 Mal durchlaufen anstatt x Mal Laufzeit verbessert sich um Faktor 2 Sei x wieder mit n Bits dargestellt Insgesamt ca. 4 2 n /2 = 2 2 n elementare Operationen Programmieren und Problemlösen Komplexität von Algorithmen Frühling 2019 Dennis Komm 29 / 35

Ein schnellerer Primzahltest Wie gross ist die Verbesserung? Schleife wird ca. x/2 Mal durchlaufen anstatt x Mal Laufzeit verbessert sich um Faktor 2 Sei x wieder mit n Bits dargestellt Insgesamt ca. 4 2 n /2 = 2 2 n elementare Operationen Laufzeit noch immer in Ω(2 n ) Programmieren und Problemlösen Komplexität von Algorithmen Frühling 2019 Dennis Komm 29 / 35

Ein schnellerer Primzahltest Wie gross ist die Verbesserung? Schleife wird ca. x/2 Mal durchlaufen anstatt x Mal Laufzeit verbessert sich um Faktor 2 Sei x wieder mit n Bits dargestellt Insgesamt ca. 4 2 n /2 = 2 2 n elementare Operationen Laufzeit noch immer in Ω(2 n ) Keine asymptotische Verbesserung Programmieren und Problemlösen Komplexität von Algorithmen Frühling 2019 Dennis Komm 29 / 35

Ein schnellerer Primzahltest Zweiter Versuch

Ein schnellerer Primzahltest Beobachtung Wenn x keine Primzahl ist, dann ist x teilbar durch eine Zahl a mit 1 < a < x Programmieren und Problemlösen Komplexität von Algorithmen Frühling 2019 Dennis Komm 30 / 35

Ein schnellerer Primzahltest Beobachtung Wenn x keine Primzahl ist, dann ist x teilbar durch eine Zahl a mit 1 < a < x Dann ist x auch durch Zahl b teilbar mit a b = x und 1 < b < x Programmieren und Problemlösen Komplexität von Algorithmen Frühling 2019 Dennis Komm 30 / 35

Ein schnellerer Primzahltest Beobachtung Wenn x keine Primzahl ist, dann ist x teilbar durch eine Zahl a mit 1 < a < x Dann ist x auch durch Zahl b teilbar mit a b = x und 1 < b < x Es kann nicht sein, dass a > x und b > x, denn sonst wäre a b > x Programmieren und Problemlösen Komplexität von Algorithmen Frühling 2019 Dennis Komm 30 / 35

Ein schnellerer Primzahltest public class PrimeTest { public static void main(string[] args) { Out.print("Input number: "); int x = In.readInt(); int d = 2; while (d < x) { if (x % d == 0) { Out.println("No prime number, divisor: " + d); return; } d += 1; } Out.println("Prime number"); } } Programmieren und Problemlösen Komplexität von Algorithmen Frühling 2019 Dennis Komm 31 / 35

Ein schnellerer Primzahltest public class PrimeTest { public static void main(string[] args) { Out.print("Input number: "); int x = In.readInt(); int d = 2; while (d <= Math.sqrt(x)) { if (x % d == 0) { Out.println("No prime number, divisor: " + d); return; } d += 1; } Out.println("Prime number"); } } Programmieren und Problemlösen Komplexität von Algorithmen Frühling 2019 Dennis Komm 31 / 35

Ein schnellerer Primzahltest Übung Wie gross ist diesmal die Verbesserung? Programmieren und Problemlösen Komplexität von Algorithmen Frühling 2019 Dennis Komm 32 / 35

Ein schnellerer Primzahltest Übung Wie gross ist diesmal die Verbesserung? Was ist die Laufzeit dieses Algorithmus? Programmieren und Problemlösen Komplexität von Algorithmen Frühling 2019 Dennis Komm 32 / 35

Ein schnellerer Primzahltest Übung Wie gross ist diesmal die Verbesserung? Was ist die Laufzeit dieses Algorithmus? Schleife wird x Mal durchlaufen Programmieren und Problemlösen Komplexität von Algorithmen Frühling 2019 Dennis Komm 32 / 35

Ein schnellerer Primzahltest Übung Wie gross ist diesmal die Verbesserung? Was ist die Laufzeit dieses Algorithmus? Schleife wird x Mal durchlaufen Laufzeit wächst mit Grösse des Werts von x Programmieren und Problemlösen Komplexität von Algorithmen Frühling 2019 Dennis Komm 32 / 35

Ein schnellerer Primzahltest Übung Wie gross ist diesmal die Verbesserung? Was ist die Laufzeit dieses Algorithmus? Schleife wird x Mal durchlaufen Laufzeit wächst mit Grösse des Werts von x Laufzeit in O( 2 n ) Programmieren und Problemlösen Komplexität von Algorithmen Frühling 2019 Dennis Komm 32 / 35

Ein schnellerer Primzahltest Übung 10,000,000 5,000,000 0 5 10 15 20 25 30 35 40 45 Programmieren und Problemlösen Komplexität von Algorithmen Frühling 2019 Dennis Komm 33 / 35

Ein schnellerer Primzahltest Übung 10,000,000 5,000,000 2 n 0 5 10 15 20 25 30 35 40 45 Programmieren und Problemlösen Komplexität von Algorithmen Frühling 2019 Dennis Komm 33 / 35

Ein schnellerer Primzahltest Übung 10,000,000 5,000,000 2 n 2 n 0 5 10 15 20 25 30 35 40 45 Programmieren und Problemlösen Komplexität von Algorithmen Frühling 2019 Dennis Komm 33 / 35

Ein schnellerer Primzahltest Best- und Worst-Case-Analyse

Best- und Worst-Case-Analyse Welcher Algorithmus ist schneller? Out.print("Input number: "); int x = In.readInt(); int d = 2; while (d < Math.sqrt(x)) { if (x % d == 0) { Out.println("Composite number"); return; } d = d + 1; } Out.println("Prime number"); Out.print("Input number: "); int x = In.readInt(); int d = 2; boolean isprime = true; while (d < Math.sqrt(x)) { if (x % d == 0) { isprime = false; } d = d + 1; } if (isprime == true) { Out.println("Prime number"); } else { Out.println("Composite number"); } Programmieren und Problemlösen Komplexität von Algorithmen Frühling 2019 Dennis Komm 34 / 35

Best- und Worst-Case-Analyse Angenommen, x ist gerade Zahl Programmieren und Problemlösen Komplexität von Algorithmen Frühling 2019 Dennis Komm 35 / 35

Best- und Worst-Case-Analyse Angenommen, x ist gerade Zahl Dann ist der linke Algorithmus sehr schnell Programmieren und Problemlösen Komplexität von Algorithmen Frühling 2019 Dennis Komm 35 / 35

Best- und Worst-Case-Analyse Angenommen, x ist gerade Zahl Dann ist der linke Algorithmus sehr schnell Schleife wird nach dem ersten Vergleich verlassen Programmieren und Problemlösen Komplexität von Algorithmen Frühling 2019 Dennis Komm 35 / 35

Best- und Worst-Case-Analyse Angenommen, x ist gerade Zahl Dann ist der linke Algorithmus sehr schnell Schleife wird nach dem ersten Vergleich verlassen Early Exit Programmieren und Problemlösen Komplexität von Algorithmen Frühling 2019 Dennis Komm 35 / 35

Best- und Worst-Case-Analyse Angenommen, x ist gerade Zahl Dann ist der linke Algorithmus sehr schnell Schleife wird nach dem ersten Vergleich verlassen Early Exit Rechter Algorithmus macht ca. 2 n Vergleiche Programmieren und Problemlösen Komplexität von Algorithmen Frühling 2019 Dennis Komm 35 / 35

Best- und Worst-Case-Analyse Angenommen, x ist gerade Zahl Dann ist der linke Algorithmus sehr schnell Schleife wird nach dem ersten Vergleich verlassen Early Exit Rechter Algorithmus macht ca. 2 n Vergleiche Angenommen, x ist Primzahl Programmieren und Problemlösen Komplexität von Algorithmen Frühling 2019 Dennis Komm 35 / 35

Best- und Worst-Case-Analyse Angenommen, x ist gerade Zahl Dann ist der linke Algorithmus sehr schnell Schleife wird nach dem ersten Vergleich verlassen Early Exit Rechter Algorithmus macht ca. 2 n Vergleiche Angenommen, x ist Primzahl Dann machen beide Algorithmen ca. 2 n Vergleiche Programmieren und Problemlösen Komplexität von Algorithmen Frühling 2019 Dennis Komm 35 / 35

Best- und Worst-Case-Analyse Angenommen, x ist gerade Zahl Dann ist der linke Algorithmus sehr schnell Schleife wird nach dem ersten Vergleich verlassen Early Exit Rechter Algorithmus macht ca. 2 n Vergleiche Angenommen, x ist Primzahl Dann machen beide Algorithmen ca. 2 n Vergleiche ( ) Natürlich sollte der linke implementiert werden Programmieren und Problemlösen Komplexität von Algorithmen Frühling 2019 Dennis Komm 35 / 35

Danke für die Aufmerksamkeit