Informatik Vorkurs
Transcrição
Informatik Vorkurs
Informatik Vorkurs Algorithmik Was ist Informatik? „Computer science is no more about computers than astronomy is about telescopes“ – Edsgin Dijkstra (zugeschrieben) „it's not about computers in the same sense that physics is not really about particle accelerators, and biology is not about microscopes and Petri dishes “ – Hal Abelson Informatik Vorkurs Tag 1: Algorithmik Was ist Informatik? Berechenbarkeitstheorie Künstliche Intelligenz Logik Algorithmik Theoretische Informatik Sprachen Graphentheorie Praktische Informatik Compiler Technische Informatik SoftwareEntwicklung Rechnerarchitektur Kommunikation Prozessortechnik Informatik Vorkurs Tag 1: Algorithmik Grundbegriffe Algorithmik Gegeben ist eine Funktion , die bestimmte Eingabewerte X annimmt und ihnen eine Ausgabe Y zuordnet. Ein Algorithmus ist ein Verfahren, den vorgegebenen Ausgabewert aus dem Eingabewert zu bestimmen. Man sagt: Der Algorithmus berechnet die Funktion. Informatik Vorkurs Tag 1: Algorithmik Beispiele • • • • • • • Zutaten → Mahlzeit Schrauben, Bretter → Regal ∅ → „Hallo Welt“ Reelles Polynom 2. Grades → Nullstellen Ganze Zahl → ist > 0 ? Endliche Liste reeller Zahlen → Maximum (Ort A, Ort B) → kürzerster Weg von A nach B Informatik Vorkurs Tag 1: Algorithmik Algorithmen „Ein Algorithmus ist eine effektive Prozedur Prozedur, bestehend aus einer endlichen Liste Anweisungen wohldefinierter Anweisungen“ - Wikipedia (en) Formale Definition → theoretische Informatik Informatik Vorkurs Tag 1: Algorithmik Algorithmen – jetzt mal im Ernst Wovon wir ausgehen: • Daten, die in einer genau bestimmte Datenstruktur vorliegen – Ganzzahlen, Kommazahlen – Wahrheitswerte – Endliche Listen – … • elementare Operationen, die auf den Daten definiert werden – Addition von Zahlen – Zugriff auf erstes Listenelement – … • Speicher, der eine beliebig große aber endliche Menge Daten speichern kann • elementare Anweisungen, die mit Hilfe des Speichers und der Daten ausgeführt werden können Informatik Vorkurs Tag 1: Algorithmik Datenstruktur: Boolean Boolean – Daten: • Ein Wahrheitswert, also oder – Elementare Operationen: • Negation not • Und and • Oder or Informatik Vorkurs Tag 1: Algorithmik Datenstrukturen: Integer Integer – Daten: • Eine ganze Zahl – Elementare Operationen: • • • • • • • Gleichheitsprüfung = Vergleich ≤ Addition + Subtraktion − Multiplikation ⋅ Abgerundete Division // … Informatik Vorkurs Tag 1: Algorithmik Datenstrukturen: Liste Liste – Daten: • endliche geordnete Folge L = ,…, von Daten einer beliebigen weiteren Datenstruktur – Elementare Operationen: • • • • • Gleichheitsprüfung = Zugriff auf -tes Element Einfügen von Element an Stelle Löschen von Element an Stelle … Informatik Vorkurs Tag 1: Algorithmik Elementare Anweisungen Unser Algorithmenbegriff hängt davon ab, was wir als elementar betrachten. Wir betrachten nun als elementar: • Daten in den Speicher schreiben ←1 • Daten aus dem Speicher lesen b← • Eine zuvor definierte Operation auf Daten ausführen +! • Eine Eingabe entgegennehmen "#$%& • Eine Ausgabe ausgeben '(&%'# Anweisungen sind endliche Listen elementar Anweisungen. Informatik Vorkurs Tag 1: Algorithmik Elementare Anweisungen: if If-Bedingung: – Nimmt einen Boolean – Wenn dieser ist: gehe zu Anweisung 1 – Wenn nicht: gehe zu Anweisung 2 Beispiel: IstNull input If = 0 return True Else return False Informatik Vorkurs Tag 1: Algorithmik Elementare Anweisungen: while while-Schleife: – Nimmt einen Boolean – Solange dieser Boolean erfüllt ist, führe eine Anweisung aus increase input while < 10 ← +1 return Informatik Vorkurs Tag 1: Algorithmik Elementare Anweisungen: for for-Schleife: – Gehe nacheinander die Elemente einer Liste durch – Für jedes Element führe eine Anweisung aus SumGauss input n ←0 for = 1, … , ← + return s Kurzschreibweise für [1,…,n] Informatik Vorkurs Tag 1: Algorithmik Algorithmusbegriff Ein Algorithmus ist eine endliche Liste elementarer Anweisungen zur Berechnung einer Funktion. Fazit: Wir haben eine große, komplexe Aufgabe in endlich viele kleine, einfache Teilaufgaben zerlegt. Informatik Vorkurs Tag 1: Algorithmik Maximumsalgorithmen Beschreibung des Problems: • Menge von Elementen einer Datenstruktur, die durch ein transitives ≤ geordnet werden können. • nichtleere Liste solcher Elemente • Welches ist das maximale Element bzgl. ≤? Formulierung als Funktion max: • Eingabe: nichtleere Liste • Ausgabe definiert durch: max = :⇔ ∀ ∈ : ≤ Informatik Vorkurs Tag 1: Algorithmik Maximumsalgorithmen Algo2: Algo1: input ←# for = 1, … , ← 2 ← for j = 1, … , b← 4 if < !: 2 if 2 max ← return max ← input ←# for = 1, … , ← 2 ← for j = 1, … , b← 4 if < !: 2 ← if 2 return max Informatik Vorkurs Tag 1: Algorithmik Maximumsalgorithmen: Algo3 Algo3: Algo2: input ←# for = 1, … , ← 2 ← for j = 1, … , b← 4 if < !: 2 ← if 2 return max input ←# for = 1, … , ← 2 ← for j = + 1, … , b← 4 if < !: 2 ← if 2 return max Informatik Vorkurs Tag 1: Algorithmik Maximumsalgorithmen: Algo4 Algo4: input Liste ←# max ← for = 2, … , if max < : max = return max Informatik Vorkurs Tag 1: Algorithmik langsam Eingabe Laufzeiten schnell Laufzeit Algo1 Laufzeit Algo2 Laufzeit Algo3 Laufzeit Algo4 61, … , 107 3e-6 s 3e-6 s 7e-7 s 2e-7 s 61, … , 108 7 7e-5 s 7e-5 s 1.5e-5 s 4e-7 s 1e-3 3e-5 61, … , 109 7 61, … , 10: 7 2e-3 61, … , 10; 7 0.2s 610; , 1 … 7 0.2 s 0.2s 0.2s Gemessene Zeit die die Implementierung auf einem Computer zur Terminierung braucht. Informatik Vorkurs Tag 1: Algorithmik Laufzeiten • Wieso wird die Laufzeit „länger“, wenn die Eingabe größer wird? • Wir sind nicht an genauen Zahlen sondern an asymptotischem Verhalten interessiert. • Wir sind daran interessiert, wie „lange“ der Algorithmus im schlimmsten Fall braucht. • Problem: Wie definieren wir „Laufzeit“ allein aufgrund unserer Algorithmusdefinition? Informatik Vorkurs Tag 1: Algorithmik Komplexität • Annahme: elementare Anweisungen sind alle gleich aufwendig • Idee: Zähle elementare Anweisungen bis zur Ausgabe im worst case in Abhängigkeit von Maß für „Größe“ der Eingabe • Wir nennen diese Abhängigkeit die Komplexität des Algorithmus • Eingabegröße für Maximumsalgorithmus: Länge der Liste Informatik Vorkurs Tag 1: Algorithmik Komplexitätsanalyse Algo1: input ←# for = 1, … , ← 2 ← for j = 1, … , b← 4 if < !: 2 if 2 max ← return max Insgesamt: 2+ 2 elem. Anw. 2 elem. Anw. worst case: 3 elem. Anw. ← worst case: 2 elem. Anw. 1 elem. Anw. ⋅ 2+2+ ⋅3 =3 8 + 4 + 2 elem. Anw Informatik Vorkurs Tag 1: Algorithmik n mal n mal Komplexitätsanalyse Algo3: input ←# for = 1, … , ← 2 ← for j = + 1, … , b← 4 if < !: 2 ← if 2 return max Insgesamt: 3 + ∑ A (2 + 1 + 2 elem. Anw. 2 elem. Anw. worst case: 3 elem. Anw. n-i mal worst case: 1 elem. Anw. − ⋅ 3) = B 8 8 + Informatik Vorkurs Tag 1: Algorithmik B 8 + 2 elem. Anw n mal Komplexitätsanalyse Algo4: input Liste ←# max ← for = 2, … , if max < : max = return max Insgesamt: 4+ 3 elem. Anw. worst-case 2 elem. Anw. 1 elem. Anw. − 1 ⋅ 2 = 2 + 1 elem. Anw Informatik Vorkurs Tag 1: Algorithmik n -1 mal Komplexitätsanalyse • Fazit: Entscheidend ist nicht die genau Anzahl Anweisungen sondern das asymptotische Verhalten für große Eingabewerte • Wir sind weniger daran interessiert, dass Algo3 doppelt so schnell ist wie Algo1 • Wir sind weniger daran interessiert, dass Algo2 nur hin und wieder sehr schnell ist • Wir sind sehr daran interessiert, dass Algo4 selbst für große Eingabewerte immer sehr schnell ist Informatik Vorkurs Tag 1: Algorithmik O-Notation Um das asymptotische Verhalten von Funktionen zu beschreiben verwendet man daher die Landau-Notation: C # = D E # : ⇔ ∃c: g n ≤ cf n fürgroßen Algorithmus Komplexität Algo1 3 8 + 4 + 2 = P( 8 Algo2 3 2 8 3 + + 2 = P( 2 8 Algo3 2 + 1 = P( ) Informatik Vorkurs Tag 1: Algorithmik ) ) Komplexitätsklassen Durch P-Notation werden Algorithmen in Komplexitätsklassen eingeteilt Die Klasse der P( )-Algorithmen bezeichnet man ebenfalls mit P „P ( ) = RS TU VWX X VYUXZ VäVP( ( ))\ Vorsicht Gefahr! “ Mit P( 8 ) kann also sowohl eine Funktion, als auch die Klasse der Algorithmen mit dieser Laufzeit gemeint sein Beachte: P ⊂ P( 8 ) Informatik Vorkurs Tag 1: Algorithmik Rechnen mit O-Notation Mit der P-Notation kann man wie mit Funktionen „rechnen“, zum Beispiel: P P ) + P(T( ) = P ) ⋅ P(T( ) = P + P(T ⋅T Vorsicht: Das „=“ in „ = P( 8 )“ ist nicht reflexiv! P = P( 8 ) aber P ≠ P( 8 ) Informatik Vorkurs Tag 1: Algorithmik Sortieralgorithmen Toll! Was können Algorithmen denn noch so? Angenommen wir haben eine endliche Liste vergleichbarer Objekte: = ,…, Wir wollen so in eine Liste ! , … , ! der gleichen Elemente permutieren, dass gilt: ! ≤ !8 ≤ ⋯ ≤ ! Wir nennen das die Sortierung von . Informatik Vorkurs Tag 1: Algorithmik Sortieralgorithmen Idee: wir können einen sofort einen Algorithmus angeben, der überprüft, ob eine Liste sortiert ist: TestIfSorted: input ←# for = 2, … , if < _ return return Jetzt müssen wir nur noch irgendwas mit Liste machen, solange, bis sie sortiert ist. Informatik Vorkurs Tag 1: Algorithmik Suchalgorithmen • Idee: Wir gehen mal davon aus, dass das Ziehen einer Zufallsganzzahl in einem gegebenen Intervall 6 , !]eine elementare Anweisung ist durch '`#abc( , !) int getRandomNumber(){ return 4; } Informatik Vorkurs Tag 1: Algorithmik Zum Beispiel: der legendäre Sony-RandomNumber-Generator BozoSort BozoSort input Liste ←# while not TestIfSorted( ) ← '`#abc(1, ) j ← '`#abc(1, ) t← ← 4 4 ←V r(&%'# Hier ist nicht vorhersehbar, Was ich nächsten Schritt passiert! Informatik Vorkurs Tag 1: Algorithmik 3 Dinge mit „termini“ Ein Algorithmus heißt • terminiert, falls er für jede gültige Eingabe nach einer endlichen Zahl von Anweisungen („nach endlicher Zeit“) anhält. • determiniert, falls er für die gleiche Eingabe immer die gleiche Ausgabe ausgibt • deterministisch, falls in jedem Schritt klar ist, was die nächste Anweisung ist. Laufzeiten können nur für terminierte Algorithmen sinnvoll definiert werden! Informatik Vorkurs Tag 1: Algorithmik Analyse von BozoSort BozoSort ist: • nicht terminiert: BozoSort kann unendlich lange laufen • determiniert: BozoSort gibt, falls er terminiert, immer die gleiche Ausgabe • nicht deterministisch: BozoSort benutzt Zufall und ist unvorhersehbar Informatik Vorkurs Tag 1: Algorithmik SelectionSort SelectionSort input P(1) 2←∅ while ≠ ∅: X ← max P(# ) P(# ) füge X vorne in 2 ein P(1) entferne X aus L P(1) return 2 Komplexität : O 1 + O n ⋅ O n + O 1 = O( 8) Genauer : O 1 + ∑ghA O i = O n8 Informatik Vorkurs Tag 1: Algorithmik Analyse SelectionSort SelectionSort ist: • terminiert • determiniert • deterministisch Informatik Vorkurs Tag 1: Algorithmik Merge Merge: input , Y ←0 P(1) ← 0 8 2←∅ while ≠ #L and 8 ≠ #Y if i < Y j füge i hinten in M ein ← +1 else füge Y j hinten in M ein 8 ← 8+1 return M Informatik Vorkurs Tag 1: Algorithmik P(# + #Y) MergeSort MergeSort input Liste ←# if = 1 output L klm n ← erste P(# ) 8 Elemente ← letze Elemente 8 Yklm n ← MergeSort( klm n ) Yo pn ← MergeSort( o pn ) output Merge(Yklm n , Yo pn ) o pn P(# ) Informatik Vorkurs Tag 1: Algorithmik Der Algorithmus ruft sich selbst auf! Das nennt man Rekursion. Laufzeit von MergeSort Was passiert bei MergeSort mit der Liste [1,2,3,4,5,6,7,8]? 1⋅8 12345678 1234 12 1 5678 34 2 3 56 4 5 2⋅4 78 6 7 Informatik Vorkurs Tag 1: Algorithmik 4⋅2 8 8⋅1 MergeSort • Entscheidend ist also, wie oft durch 2 geteilt werden kann, bis der Quotient kleiner als 1 ist. • Abschätzung: Diese Zahl kann durch log 8 geschätzt werden • Laufzeit kann also abgeschätzt werden durch D s ⋅ tbC u s = v s ⋅ tbC s • Es ist log asymptotisch kleiner als , daher ist O( log als P( 8 ) ) besser • MergeSort ist also schneller als SelectionSort! • Man kann zeigen: es gibt keinen Sortieralgorithmus mit besserer Komplexitätsklasse als O( log ) . Informatik Vorkurs Tag 1: Algorithmik