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