Repititorium PI

Werbung
Repititorium PI - WiSe11/12
Hannes Schnaitter, Patrick Weggler | Februrary 2012 | Institut
für Angewandte Intelligenz
Proudly presented by Fachschaft Informatik in
conjunction with SK Informatik
Seite 2
Willkommen |
Repititorium PI |
Inhalt Day 1
Basics
Formale Sprachen
Java
Februrary 2012
Seite 3
Basics - Algorithmen |
Repititorium PI |
Februrary 2012
Definition
Ein Algorithmus ist eine präzise, endliche Beschreibung eines
allgemeinen Verfahrens unter Verwendung ausführbarer,
elementarer Verarbeitungsschritte mit einer endlichen
Gesamtausführungsdauer.
Seite 4
Basics - Algorithmen |
Repititorium PI |
Eigenschaften
I
Korrektheit
I
Robustheit
I
Termination
I
Determinismus
I
Determiniertheit
I
Termination
Februrary 2012
Seite 5
Basics - Algorithmen |
Repititorium PI |
Februrary 2012
6 Schritte zum Glück
1. Problem formulieren
2. Problemanalyse, -spezifikation, -anstraktion
3. Algorithmenentwurf
4. Korrektheitsnachweis, Verifikation
5. Aufwandsanalyse
6. Programmkonstruktion
7. . . .
8. P ROFIT !
Seite 6
Basics - Diagramme |
Repititorium PI |
Februrary 2012
Flowcharts
Start
Lies x ein!
Stop
Anfang und Ende
eines Programms
ja
a=0?
z=0
Ein- / Ausgabe
nein
a<b
Vergleic he
a und b
a=b
Verzweigung aufgrund einer Bedingung
Wende
Formel (3) an
Elementare
Anweisungen
UP
Unterprogramm
Teil - / Subalgorithmus
(UP: Name)
a>b
C
C
Konnektor zur Verbindung
von Diagrammen
Seite 7
Basics - Diagramme |
Repititorium PI |
Nassi-Schneidermann
Februrary 2012
Seite 8
Formale Sprachen - Grammatiken |
Repititorium PI |
Februrary 2012
Definition Grammatik
Eine Grammatik ist gegeben durch ein
4-Tupel G = (T , N, P, S) mit:
1. T ist eine Menge von Terminalsymbolen
2. N ist eine Menge von nicht-terminalen Symbolen, wobei
gelten muss: T ∩ N = ∅
3. P ist eine endliche Menge von Produktionen der Form
L → R mit L ∈ (T ∪ N)+ \ T und R ∈ (T ∪ N)∗ Alternative
Notation: L ::= R oder L = R
4. S ∈ N ist ein ausgezeichnetes Startsymbol oder Axiom
Seite 9
Formale Sprachen - Grammatiken |
Repititorium PI |
Februrary 2012
Definition Sprache
Die durch eine Grammatik G = (T , N, P, S) definierte Sprache
L(G) ist durch L(G) := {σ ∈ T ∗ |S ⇒∗ σ} gegeben.
Seite 10
Formale Sprachen - Chomsky |
Repititorium PI |
Februrary 2012
Definition Chomsky-Hierarchie
Menge aller Sprachen
Typ 0 – Sprachen
Kontextsensitive oder
Typ 1 – Sprachen
kontextfreie oder
Typ 2 – Sprachen
reguläre oder
Typ 3 – Sprachen
Seite 11
Formale Sprachen - Chomsky |
Repititorium PI |
Februrary 2012
Beispiel
Aufgabe
Schreibe eine Grammatik, welche die Sprache aller Palindrome
kleiner Buchstaben erzeugt und bestimme, von welchem Typ
sie ist.
Seite 12
Formale Sprachen - Chomsky |
Repititorium PI |
Februrary 2012
Beispiel
Aufgabe
Schreibe eine Grammatik, welche die Sprache aller Palindrome
kleiner Buchstaben erzeugt und bestimme, von welchem Typ
sie ist.
Lösung
G = (T,N,P,S)
T = { a, . . . , z}
N = { S}
P={
S → a | . . . | z | ε,
S → aSa | . . . | zSz
}
Seite 13
Formale Sprachen - Chomsky |
Repititorium PI |
Februrary 2012
Beispiel
Aufgabe
Schreibe eine Grammatik, welche die Sprache aller Palindrome
kleiner Buchstaben erzeugt und bestimme, von welchem Typ
sie ist.
Lösung
G = (T,N,P,S)
T = { a, . . . , z}
N = { S}
P={
S → a | . . . | z | ε,
S → aSa | . . . | zSz
}
Typ 2
Seite 14
Formale Sprachen - Chomsky |
Repititorium PI |
Februrary 2012
Beispiel 2
Aufgabe
Welche Sprache wird durch folgende Grammatik beschrieben
und welchen Typ hat sie?
G = (T,N,P,S), T = { a, b}, N = { S}
P={
S → aS | bA
A → b | bA
}
Seite 15
Formale Sprachen - Chomsky |
Repititorium PI |
Februrary 2012
Beispiel 2
Aufgabe
Welche Sprache wird durch folgende Grammatik beschrieben
und welchen Typ hat sie?
G = (T,N,P,S), T = { a, b}, N = { S}
P={
S → aS | bA
A → b | bA
}
Lösung
L(G) = {an bm } n, m ∈ N, m ≥ 2
Seite 16
Formale Sprachen - Chomsky |
Repititorium PI |
Februrary 2012
Beispiel 2
Aufgabe
Welche Sprache wird durch folgende Grammatik beschrieben
und welchen Typ hat sie?
G = (T,N,P,S), T = { a, b}, N = { S}
P={
S → aS | bA
A → b | bA
}
Lösung
L(G) = {an bm } n, m ∈ N, m ≥ 2
Typ 3
Seite 17
Formale Sprachen - Syntax |
Repititorium PI |
Definition Syntaxdiagramme
siehe Tafel
Februrary 2012
Seite 18
Formale Sprachen - Syntax |
Repititorium PI |
Beispiel
Aufgabe
G = (T,N,P,S)
T = { a, . . . , z}
N = { S}
P={
S → a | . . . | z | ε,
S → aSa | . . . | zSz
}
Februrary 2012
Seite 19
Formale Sprachen - Syntax |
Repititorium PI |
Beispiel
Aufgabe
G = (T,N,P,S)
T = { a, . . . , z}
N = { S}
P={
S → a | . . . | z | ε,
S → aSa | . . . | zSz
}
Lösung
siehe Tafel
Februrary 2012
Seite 20
Formale Sprachen - Syntax |
Repititorium PI |
Februrary 2012
Beispiel 2
Aufgabe
Schreibe ein Syntaxdiagramm für den Methodenkopf in Java.
Seite 21
Formale Sprachen - Syntax |
Repititorium PI |
Februrary 2012
Beispiel 2
Aufgabe
Schreibe ein Syntaxdiagramm für den Methodenkopf in Java.
Lösung
siehe Tafel
Seite 22
Formale Sprachen - [E]BNF |
Repititorium PI |
Februrary 2012
Definition Bachus-Naur-Form BNF
::= Ableitungssymbol (Produktion, →)
. Markierung des Endes einer Produktionsregel
< ... > Regelbezeichner (linke Seite von Produktionsregeln;
entspricht den Nicht-Terminalsymbolen, die in den
Produktionsregeln verwendet werden)
| Alternative (Oder-Symbol)
(. . .) Präzedenzregelnde Strukturklammern
Seite 23
Formale Sprachen - [E]BNF |
Repititorium PI |
Februrary 2012
Erweiterungen bei EBNF
[. . .] optionale Ausdrücke: 0- oder 1-mal auftretend
{. . .} optionale Ausdrücke: beliebig oft auftretend
Seite 24
Formale Sprachen - [E]BNF |
Repititorium PI |
Februrary 2012
Beispiele
Aufgabe
Schreibe die EBNF für den Methodenkopf in Java.
Seite 25
Formale Sprachen - [E]BNF |
Repititorium PI |
Februrary 2012
Beispiele
Aufgabe
Schreibe die EBNF für den Methodenkopf in Java.
Lösung
<method-head> ::= <access-specifier> [’static’] <type> <identifier>’(’[<param-list>]’)’.
<access-specifier> ::= ’public’ | ’private’ | ’protected’ | <empty>.
<type> ::= ’byte’ | ’short’ | . . . .
<identifier> ::= <char> {<char++>}.
<param-list> ::= <param> | (<param> ’,’ <param-list>).
<empty> ::= ’ ’.
Seite 26
Formale Sprachen - Automaten |
Repititorium PI |
Februrary 2012
Deterministischer endlicher Automat (DEA) ohne Ausgabe
Der Automat ist gegeben durch ein 5-Tupel M = (Z , Σ, δ, z0 , T )
mit:
1. Z ist eine Menge möglicher Zustände des Automaten,
|Z | < ∞
2. Σ ist ein Eingabealphabet, |Σ| = m < ∞
3. δ : Z × Σ → Z ist eine Zustandsübergangsfunktion
4. z0 ∈ Z ist der Startzustand
5. T ⊆ Z ist eine Menge der Endzustände
(Terminalzustände)
Seite 27
Formale Sprachen - Automaten |
Repititorium PI |
Februrary 2012
Beispiel
Aufgabe
Baue einen Automaten, der Wörter der Sprache L(G) erkennt.
G = (T,N,P,S), T = { a, b}, N = { S}
P={
S → aS | bA
A → b | bA
}
Seite 28
Formale Sprachen - Automaten |
Repititorium PI |
Februrary 2012
Beispiel
Aufgabe
Baue einen Automaten, der Wörter der Sprache L(G) erkennt.
G = (T,N,P,S), T = { a, b}, N = { S}
P={
S → aS | bA
A → b | bA
}
Lösung
siehe Tafel
Seite 29
Formale Sprachen - Automaten |
Repititorium PI |
Februrary 2012
Beispiel 2
Aufgabe
Baue einen Automaten der Zahlen in der
Mantissenschreibweise erkennt.
Beispielsweise sollen erkannt werden:
I
3
I
−7
I
.2e − 7
I
1.3E + 5
Seite 30
Formale Sprachen - Automaten |
Repititorium PI |
Februrary 2012
Beispiel 2
Lösung
0-9
0-9
S1
+-
Start
S2
0-9
S3
.
Ee
.
.
0-9
S4
S0
Ee
S6
S7
0-9
+0-9
S5
0-9
Seite 31
Formale Sprachen - Regex |
Repititorium PI |
Februrary 2012
Definition RegEx
I
<Regex> ::= ε | <S>.
I
<Regex> ::= <Regex><Regex> | ’(’<Regex> ’|’
<Regex> ’)’ | ’(’<Regex>’)’ ’∗ ’.
I
<S> ::= Terminalsymbole.
Seite 32
Formale Sprachen - Regex |
Repititorium PI |
Februrary 2012
Beispiel
Aufgabe
Baue einen Regex, der auf die Wörter der Sprache L(G)
matcht.
G = (T,N,P,S), T = { a, b}, N = { S}
P={
S → aS | bA
A → b | bA
}
Seite 33
Formale Sprachen - Regex |
Repititorium PI |
Februrary 2012
Beispiel
Aufgabe
Baue einen Regex, der auf die Wörter der Sprache L(G)
matcht.
G = (T,N,P,S), T = { a, b}, N = { S}
P={
S → aS | bA
A → b | bA
}
Lösung
(a)∗ b(b)∗ b
Seite 34
Java - Datentypen |
Repititorium PI |
Februrary 2012
Datentypen
Typ
boolean
VZ
N
Belegung
true/false
char
byte
short
int
long
float
N
Y
Y
Y
Y
Y
double
Y
n=16
n=8
n=16
n=32
n=64
1, 40239846 × 10−45
3, 40282347 × 10+38
4, 94065645841246544 × 10−324
1, 79769131486231570 × 10+308
Seite 35
Java - Datentypen |
Repititorium PI |
Februrary 2012
Berechnung Wertebereich
Der Wertebereich sieht bei gegebenem n aus:
W = −2n−1 . . . 2n−1 − 1
Seite 36
Java - Datentypen |
IEEE 754
Repititorium PI |
Februrary 2012
Seite 37
Java - Datentypen |
Repititorium PI |
Februrary 2012
IEEE 754
Exponent E
Mantisse M
Bedeutung
E =0
M=0
−1S ×
0 < E < 2r − 1
M≥0
−1S × 1 +
E = 2r − 1
E = 2r − 1
M=0
M>0
±∞
NaN
M
2p
× 21−B
M
2p
× 2E−B
Seite 38
Java - Datentypen |
Repititorium PI |
Februrary 2012
Beispiele
Aufgabe1
In eine Variable welchen Datentyps kann die Zahl
1,099,511,627,776 gespeichert werden?
Aufgabe2
Ist die Zahl 0.1 exakt speicherbar? Begründung!
Seite 39
Java - Datentypen |
Repititorium PI |
Februrary 2012
Beispiele
Aufgabe1
In eine Variable welchen Datentyps kann die Zahl
1,099,511,627,776 gespeichert werden?
Lösung
long da 1, 099, 511, 627, 776 = 240
Aufgabe2
Ist die Zahl 0.1 exakt speicherbar? Begründung!
Lösung
nein - Erklärung siehe Tafel
Seite 40
Java - Datentypen |
Repititorium PI |
Februrary 2012
Typkonvertierung implizit
Kleinere Datentypen werden implizit d.h. automatisch in
den größeren Bereich umgerechnet.
char → short → int → long → float → double → String
boolean → String
Seite 41
Java - Datentypen |
Repititorium PI |
Februrary 2012
Typkonvertierung explizit
1
2
long longVar=42;
int intVar=0;
3
4
intVar = (int)longVar;
Seite 42
Java - if-else |
Repititorium PI |
Februrary 2012
if-else
1
2
if(boolean) Anweisung;
else Anweisung2;
Seite 43
Java - if-else |
Repititorium PI |
Februrary 2012
Beispiele
Aufgabe
Betrachten Sie alle Variablen als gegeben.
Wenn x kleiner y und b wahr oder ob text gleich ’Freund’ ist
geben Sie Brunhilde aus, andernfalls überprüfen Sie ob
selbiger text gleich ’Freundin’ ist, dann geben Sie Martin aus.
Andernfalls soll der Rückgabewert von x < y ausgegeben
werden.
Tip: Eine Ausgabe erfolgt mit
System.out.println(String)
Seite 44
Java - if-else |
Repititorium PI |
Februrary 2012
Beispiele
Aufgabe
Betrachten Sie alle Variablen als gegeben.
Wenn x kleiner y und b wahr oder ob text gleich ’Freund’ ist
geben Sie Brunhilde aus, andernfalls überprüfen Sie ob
selbiger text gleich ’Freundin’ ist, dann geben Sie Martin aus.
Andernfalls soll der Rückgabewert von x < y ausgegeben
werden.
Tip: Eine Ausgabe erfolgt mit
System.out.println(String)
Lösung
Siehe Tafel
Seite 45
Java - if-else |
Repititorium PI |
Februrary 2012
switch case
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
char op = ’+’;
switch ( op ) {
case ’+’:
System.out.println( x + y );
break;
case ’-’:
System.out.println( x - y );
break;
case ’@’:
case ’#’:
System.Exit(0);
break;
default:
System.Exit(-1);
}
Seite 46
Java - while |
Repititorium PI |
Februrary 2012
While-Schleife
1
while(boolean)Anweisung;
2
3
4
5
6
while(boolean){
Anweisung1;
Anweisung2;
}
Seite 47
Java - while |
Repititorium PI |
Februrary 2012
Do-While
1
do
2
Anweisung;
while(boolean);
3
4
5
6
do {
7
Anweisung1;
Anweisung2;
}while(boolean)
8
9
Seite 48
Java - while |
Repititorium PI |
Februrary 2012
For-Schleife
1
for(int i=0;boolean;i++)Anweisung;
2
3
4
5
6
for(int i=0;boolean;i++){
Anweisung1;
Anweisung2;
}
Seite 49
Java - while |
Repititorium PI |
Februrary 2012
Beispiele
Schreiben Sie ein kurzes Programm, welches die Zahlen von 1
bis 100 in einer Zeile getrennt mit ’-’ ausgibt.
Tun Sie dies mit allen drei Schleifen.
Ein Ausgabe endet immer mit einem Zeilenumbruch!
Tip: Eine Ausgabe ohne Zeilenumbruch erfolgt mit
System.out.print(String)
Seite 50
Java - while |
Repititorium PI |
Februrary 2012
Beispiele
Schreiben Sie ein kurzes Programm, welches die Zahlen von 1
bis 100 in einer Zeile getrennt mit ’-’ ausgibt.
Tun Sie dies mit allen drei Schleifen.
Ein Ausgabe endet immer mit einem Zeilenumbruch!
Tip: Eine Ausgabe ohne Zeilenumbruch erfolgt mit
System.out.print(String)
Lösung
Siehe Tafel
Seite 51
Java - while |
Repititorium PI |
Februrary 2012
Beispiele
Schreiben Sie ein kurzes Programm, welches einen Baum
malt. Als Blätter dient ’X’ als Stamm ’H’
1
2
3
4
5
X
XXX
XXXXX
XXXXXXX
H
Seite 52
Java - while |
Repititorium PI |
Februrary 2012
Beispiele
Schreiben Sie ein kurzes Programm, welches einen Baum
malt. Als Blätter dient ’X’ als Stamm ’H’
1
2
3
4
5
X
XXX
XXXXX
XXXXXXX
H
Lösung
Siehe Tafel
Seite 53
Java - while |
Repititorium PI |
Februrary 2012
Geplanter Ausbruch
1
2
3
4
5
while(true){
if(boolean)break;
if(boolean)continue;
System.out.println("Noch immer");
}
Seite 54
Java - while |
Repititorium PI |
Februrary 2012
Foreach-Schleife
1
2
3
4
String[] str = {"1", "2", "3"};
for (String s : str) {
System.out.println(s);
}
Achtung: die Variable über welche iteriert wird muss vom
Interface Iterable sein.
Seite 55
Java - Datentypen++ |
Repititorium PI |
Februrary 2012
Strings
http://openbook.galileocomputing.de/javainsel9/bilder/stringuml.gif
Die Klasse String implementiert folgende Interfaces:
I
Java.lang.CharSequence
I
Java.lang.Comparable
I
Java.io.Serializable
Seite 56
Java - Datentypen++ |
Repititorium PI |
Februrary 2012
Strings
http://openbook.galileocomputing.de/javainsel9/bilder/stringuml.gif
Die Klasse String implementiert folgende Interfaces:
I
Java.lang.CharSequence
I
Java.lang.Comparable
I
Java.io.Serializable
Seite 57
Java - Datentypen++ |
Repititorium PI |
Februrary 2012
Strings
http://openbook.galileocomputing.de/javainsel9/bilder/stringuml.gif
Die Klasse String implementiert folgende Interfaces:
I
Java.lang.CharSequence
I
Java.lang.Comparable
I
Java.io.Serializable
Seite 58
Java - Datentypen++ |
Repititorium PI |
Februrary 2012
Strings
http://openbook.galileocomputing.de/javainsel9/bilder/stringuml.gif
Die Klasse String implementiert folgende Interfaces:
I
Java.lang.CharSequence
I
Java.lang.Comparable
I
Java.io.Serializable
Seite 59
Java - Datentypen++ |
Repititorium PI |
Februrary 2012
Die wichtigsten String Methoden
I
char charAt(int index)
I
int compareTo{IgnoreCase}(String str)
I
String concat(String str)
I
boolean contains(CharSequence c)
I
boolean endsWith(String suffix)
I
boolean equals{IgnoreCase}(Object obj)
I
int length()
I
String[] split(String regEx)
I
char[] toCharArray()
I
String to{Lower/Upper}Case(Locale locale)
I
String trim()
Seite 60
Java - Datentypen++ |
Repititorium PI |
Februrary 2012
Die wichtigsten String Methoden
I
char charAt(int index)
I
int compareTo{IgnoreCase}(String str)
I
String concat(String str)
I
boolean contains(CharSequence c)
I
boolean endsWith(String suffix)
I
boolean equals{IgnoreCase}(Object obj)
I
int length()
I
String[] split(String regEx)
I
char[] toCharArray()
I
String to{Lower/Upper}Case(Locale locale)
I
String trim()
Seite 61
Java - Datentypen++ |
Repititorium PI |
Februrary 2012
Die wichtigsten String Methoden
I
char charAt(int index)
I
int compareTo{IgnoreCase}(String str)
I
String concat(String str)
I
boolean contains(CharSequence c)
I
boolean endsWith(String suffix)
I
boolean equals{IgnoreCase}(Object obj)
I
int length()
I
String[] split(String regEx)
I
char[] toCharArray()
I
String to{Lower/Upper}Case(Locale locale)
I
String trim()
Seite 62
Java - Datentypen++ |
Repititorium PI |
Februrary 2012
Die wichtigsten String Methoden
I
char charAt(int index)
I
int compareTo{IgnoreCase}(String str)
I
String concat(String str)
I
boolean contains(CharSequence c)
I
boolean endsWith(String suffix)
I
boolean equals{IgnoreCase}(Object obj)
I
int length()
I
String[] split(String regEx)
I
char[] toCharArray()
I
String to{Lower/Upper}Case(Locale locale)
I
String trim()
Seite 63
Java - Datentypen++ |
Repititorium PI |
Februrary 2012
Die wichtigsten String Methoden
I
char charAt(int index)
I
int compareTo{IgnoreCase}(String str)
I
String concat(String str)
I
boolean contains(CharSequence c)
I
boolean endsWith(String suffix)
I
boolean equals{IgnoreCase}(Object obj)
I
int length()
I
String[] split(String regEx)
I
char[] toCharArray()
I
String to{Lower/Upper}Case(Locale locale)
I
String trim()
Seite 64
Java - Datentypen++ |
Repititorium PI |
Februrary 2012
Die wichtigsten String Methoden
I
char charAt(int index)
I
int compareTo{IgnoreCase}(String str)
I
String concat(String str)
I
boolean contains(CharSequence c)
I
boolean endsWith(String suffix)
I
boolean equals{IgnoreCase}(Object obj)
I
int length()
I
String[] split(String regEx)
I
char[] toCharArray()
I
String to{Lower/Upper}Case(Locale locale)
I
String trim()
Seite 65
Java - Datentypen++ |
Repititorium PI |
Februrary 2012
Die wichtigsten String Methoden
I
char charAt(int index)
I
int compareTo{IgnoreCase}(String str)
I
String concat(String str)
I
boolean contains(CharSequence c)
I
boolean endsWith(String suffix)
I
boolean equals{IgnoreCase}(Object obj)
I
int length()
I
String[] split(String regEx)
I
char[] toCharArray()
I
String to{Lower/Upper}Case(Locale locale)
I
String trim()
Seite 66
Java - Datentypen++ |
Repititorium PI |
Februrary 2012
Die wichtigsten String Methoden
I
char charAt(int index)
I
int compareTo{IgnoreCase}(String str)
I
String concat(String str)
I
boolean contains(CharSequence c)
I
boolean endsWith(String suffix)
I
boolean equals{IgnoreCase}(Object obj)
I
int length()
I
String[] split(String regEx)
I
char[] toCharArray()
I
String to{Lower/Upper}Case(Locale locale)
I
String trim()
Seite 67
Java - Datentypen++ |
Repititorium PI |
Februrary 2012
Die wichtigsten String Methoden
I
char charAt(int index)
I
int compareTo{IgnoreCase}(String str)
I
String concat(String str)
I
boolean contains(CharSequence c)
I
boolean endsWith(String suffix)
I
boolean equals{IgnoreCase}(Object obj)
I
int length()
I
String[] split(String regEx)
I
char[] toCharArray()
I
String to{Lower/Upper}Case(Locale locale)
I
String trim()
Seite 68
Java - Datentypen++ |
Repititorium PI |
Februrary 2012
Die wichtigsten String Methoden
I
char charAt(int index)
I
int compareTo{IgnoreCase}(String str)
I
String concat(String str)
I
boolean contains(CharSequence c)
I
boolean endsWith(String suffix)
I
boolean equals{IgnoreCase}(Object obj)
I
int length()
I
String[] split(String regEx)
I
char[] toCharArray()
I
String to{Lower/Upper}Case(Locale locale)
I
String trim()
Seite 69
Java - Datentypen++ |
Repititorium PI |
Februrary 2012
Die wichtigsten String Methoden
I
char charAt(int index)
I
int compareTo{IgnoreCase}(String str)
I
String concat(String str)
I
boolean contains(CharSequence c)
I
boolean endsWith(String suffix)
I
boolean equals{IgnoreCase}(Object obj)
I
int length()
I
String[] split(String regEx)
I
char[] toCharArray()
I
String to{Lower/Upper}Case(Locale locale)
I
String trim()
Seite 70
Java - Datentypen++ |
Repititorium PI |
Februrary 2012
Die wichtigsten String Methoden
I
char charAt(int index)
I
int compareTo{IgnoreCase}(String str)
I
String concat(String str)
I
boolean contains(CharSequence c)
I
boolean endsWith(String suffix)
I
boolean equals{IgnoreCase}(Object obj)
I
int length()
I
String[] split(String regEx)
I
char[] toCharArray()
I
String to{Lower/Upper}Case(Locale locale)
I
String trim()
Seite 71
Java - Datentypen++ |
Repititorium PI |
Februrary 2012
Arrays
1
2
int[] numbers;
String[] woerter;
3
4
5
int[] primes={2,3,5,7,7+4};
String[] namen = {"Hugo","Erwin", "Siglinde"};
6
7
numbers = new int[10];
8
9
10
System.out.println(namen[2]);
System.out.println(primes.length);
Seite 72
Java - Datentypen++ |
Repititorium PI |
Februrary 2012
Beispiele
Aufgabe
Programmieren Sie das Sieb des Eratosthenes.
I
Erzeugen Sie ein Array mit den Zahlen vom 2 bis
Short.MAX_VALUE
I
streichen Sie solange alle vielfachen von 2 bis Sie am
Ende sind
I
nehmen Sie nun die nächste noch vorhande Zahl. . .
I
wiederhohlen Sie. . .
Seite 73
Java - Datentypen++ |
Repititorium PI |
Februrary 2012
Beispiele
Aufgabe
Programmieren Sie das Sieb des Eratosthenes.
I
Erzeugen Sie ein Array mit den Zahlen vom 2 bis
Short.MAX_VALUE
I
streichen Sie solange alle vielfachen von 2 bis Sie am
Ende sind
I
nehmen Sie nun die nächste noch vorhande Zahl. . .
I
wiederhohlen Sie. . .
Seite 74
Java - Datentypen++ |
Repititorium PI |
Februrary 2012
Beispiele
Aufgabe
Programmieren Sie das Sieb des Eratosthenes.
I
Erzeugen Sie ein Array mit den Zahlen vom 2 bis
Short.MAX_VALUE
I
streichen Sie solange alle vielfachen von 2 bis Sie am
Ende sind
I
nehmen Sie nun die nächste noch vorhande Zahl. . .
I
wiederhohlen Sie. . .
Seite 75
Java - Datentypen++ |
Repititorium PI |
Februrary 2012
Beispiele
Aufgabe
Programmieren Sie das Sieb des Eratosthenes.
I
Erzeugen Sie ein Array mit den Zahlen vom 2 bis
Short.MAX_VALUE
I
streichen Sie solange alle vielfachen von 2 bis Sie am
Ende sind
I
nehmen Sie nun die nächste noch vorhande Zahl. . .
I
wiederhohlen Sie. . .
Seite 76
Java - Datentypen++ |
Repititorium PI |
Februrary 2012
Beispiele
Aufgabe
Programmieren Sie das Sieb des Eratosthenes.
I
Erzeugen Sie ein Array mit den Zahlen vom 2 bis
Short.MAX_VALUE
I
streichen Sie solange alle vielfachen von 2 bis Sie am
Ende sind
I
nehmen Sie nun die nächste noch vorhande Zahl. . .
I
wiederhohlen Sie. . .
Java - Datentypen++ |
Seite 77
Repititorium PI |
Februrary 2012
Lösung
1
2
3
4
public class Sieb {
public static void main(String[] args) {
int[] ar = new int[Short.MAX_VALUE];
for (int i = 0; i < ar.length; i++) ar[i] = i;
5
for (int i = 2; i < ar.length; i++) {
if (ar[i] != -1) {
for (int j =ar[i]*ar[i]; j<ar.length; j = j+i){
ar[j] = -1;
}
}
}
for (int i = 0; i < ar.length; i++) {
if (ar[i] != -1) System.out.println(ar[i]);
}
6
7
8
9
10
11
12
13
14
15
}
16
17
}
Seite 78
Java - Datentypen++ |
Repititorium PI |
Februrary 2012
Arrays Advanced
1
Object[] obj = new Object[10];
2
3
4
int[][] zweiD = new int[10][10];
int[][][] dreiD = new int[10][10][10]
5
6
7
8
int[][] gemein = {{1,2,3,4},
{1,2,3,4,5},
{1}};
Achtung: Arrays können auch über unterschiedlich lange
Arrays gehen!
Seite 79
Java - Datentypen++ |
Repititorium PI |
Februrary 2012
Beispiele
Aufgabe
Schreiben Sie eine kurze Methode, welche zwei Matritzen des
Rn×n miteinander addiert.
Seite 80
Java - Datentypen++ |
Repititorium PI |
Februrary 2012
Beispiele
Aufgabe
Schreiben Sie eine kurze Methode, welche zwei Matritzen des
Rn×n miteinander addiert.
Lösung
Siehe Tafel
Seite 81
Java - Datentypen++ |
Repititorium PI |
Februrary 2012
GOOD FIGHT GOOD NIGHT
Danke für eure Aufmerksamkeit.
Beginn Morgen um 10ct am selben Ort
Seite 82
Wilkommen |
Repititorium PI |
Februrary 2012
Inhalt Day 2
Komplexität
Unterprogramme
Rekursion
Object Oriented Programming
Dynamische Datenstrukturen
Seite 83
Komplexität - Zählen für Informatiker |
Repititorium PI |
Februrary 2012
Beispiel
Aufgabe
Wie viele Additionen, Multiplikationen und Vergleiche werden
jeweils getätigt.
1
2
3
4
5
6
7
8
9
int[] arr = {2,3,5,7,8,9}
int evensum = 0;
int triprod = 1;
for (int i = 0; i < arr.length(); i++) {
if (arr[i] % 2 == 0)
evensum += arr[i];
if (arr[i] % 3 == 0)
triprod *= arr[i];
}
Seite 84
Komplexität - Zählen für Informatiker |
Repititorium PI |
Februrary 2012
Beispiel
Lösung
Die Problemgröße n ist die Länge des Arrays.
BC
WC
Additionen
0
n
Multiplikationen
0
n
Vergleiche
2n
2n
mit for-Schleife 3n + 1 3n + 1
Der WC allgemein wäre, wenn die Zahlen im Array allesamt
sowohl durch 2 als auch durch 3 teilbar sind.
Seite 85
Komplexität - O-Notation |
Repititorium PI |
Februrary 2012
Definition
mathematisch
f (n) ⊆ O (g(n))
⇔
∃c > 0 ∃n0 ≥ 0 ∀n ≥ n0 : f (n) ≤ c · g(n)
Seite 86
Komplexität - O-Notation |
Repititorium PI |
Februrary 2012
Definition
mathematisch
f (n) ⊆ O (g(n))
⇔
∃c > 0 ∃n0 ≥ 0 ∀n ≥ n0 : f (n) ≤ c · g(n)
oft auch so geschrieben:
f (n) = O (g(n))
Seite 87
Komplexität - O-Notation |
Repititorium PI |
Februrary 2012
Beispiele
Aufgabe
Ordne folgende Komplexitäten aufsteigend und bestimme, ob
die angegebene Komplexitätsklasse wahr sind.
1. 1, 7n = O(2n )
2. n2 = O(n4 )
3. 322378128 = O(1)
4. nn = O(n!)
5. n3 = O(n2 )
6. n17 = O(n!)
p
7.
(n) = O(log n)
Seite 88
Komplexität - O-Notation |
Repititorium PI |
Beispiele
Lösung
1. 322378128 = O(1)
p
2.
(n) 6= O(log n)
3. n2 = O(n4 )
4. n3 6= O(n2 )
5. n17 = O(n!)
6. 1, 7n = O(2n )
7. nn 6= O(n!)
Februrary 2012
Seite 89
Unterprogramme |
Repititorium PI |
Februrary 2012
Motivation
Wiederverwendung von Programmteilen. Kapselung von
Funktionsinterna und z.B. statt eine komplexe Gleichung im
Quellcode stehen zu haben hat man ein einfaches
Mnemonik. . .
Seite 90
Unterprogramme |
Repititorium PI |
Februrary 2012
Definition
1
2
3
4
5
6
7
8
int name(int eins,Object object){
//Das ist eine Funktion
Anweisungen;
return 1;
}
void name2 (){
//Das ist eine Prozedur
}
Allgemein: Modifiers Rückgabewert
Funktionsname(Variablentyp Variablenname,. . . )
Seite 91
Unterprogramme |
Repititorium PI |
Februrary 2012
Beispiele
Aufgabe
Schreiben sie eine Methode, welche zwei ganzzahlige Werte
mitteinander vergleicht und den kleineren der beiden zurück
liefert.
Seite 92
Unterprogramme |
Repititorium PI |
Februrary 2012
Beispiele
Aufgabe
Schreiben sie eine Methode, welche zwei ganzzahlige Werte
mitteinander vergleicht und den kleineren der beiden zurück
liefert.
Lösung
1
2
3
long kleiner(long a,long b){
return a<b?a:b;
}
Seite 93
Rekursion - Java |
Repititorium PI |
Februrary 2012
Definition
1
2
3
4
5
static void runter( int n ){
if ( n == 0
) return;
// Rekursionsende
System.out.print( n + ", " );
return runter( n - 1 );
}
Seite 94
Rekursion - Java |
Repititorium PI |
Februrary 2012
Definition
1
2
3
4
5
static void runter( int n ){
if ( n == 0
) return;
// Rekursionsende
System.out.print( n + ", " );
return runter( n - 1 );
}
Als Rekursion (lat. recurrere zurücklaufen“) bezeichnet man
”
eine Technik, die eine Funktion durch sich selbst definiert
(rekursive Definition). Wenn man mehrere Funktionen durch
wechselseitige Verwendung voneinander definiert, spricht man
von wechselseitiger Rekursion.
Seite 95
Rekursion - Java |
Repititorium PI |
Februrary 2012
Definition
1
2
3
4
5
static void runter( int n ){
if ( n == 0
) return;
// Rekursionsende
System.out.print( n + ", " );
return runter( n - 1 );
}
Als Rekursion (lat. recurrere zurücklaufen“) bezeichnet man
”
eine Technik, die eine Funktion durch sich selbst definiert
(rekursive Definition). Wenn man mehrere Funktionen durch
wechselseitige Verwendung voneinander definiert, spricht man
von wechselseitiger Rekursion.
Seite 96
Rekursion - Java |
Repititorium PI |
Februrary 2012
wechselseitige Rekursion
1
2
3
4
5
6
7
8
static void eins(int a){
if(a<=1)return;
else return zwei(a-1);
}
static void zwei(int a){
if(a==2) return;
else return eins(a-1);
}
Seite 97
Rekursion - Java |
Repititorium PI |
Februrary 2012
Beispiele
Aufgabe
Schreiben sie eine rekursive Methode, welche den größten
gemeinsamen Teiler liefert.
Seite 98
Rekursion - Java |
Repititorium PI |
Februrary 2012
Beispiele
Aufgabe
Schreiben sie eine rekursive Methode, welche den größten
gemeinsamen Teiler liefert.
Lösung
1
2
3
4
static int ggT(int a, int b){
if(a==b||b==0) return a;
else return ggT(b,a%b);
}
Seite 99
Rekursion - Java |
Repititorium PI |
Februrary 2012
Iterativ vs. Rekursiv
Aufgabe
Schreibe zwei Methoden, welche die n! zurück liefern, tue dies
sowohl rekursiv als auch iterativ.
Seite 100
Rekursion - Java |
Repititorium PI |
Februrary 2012
Iterativ vs. Rekursiv
Aufgabe
Schreibe zwei Methoden, welche die n! zurück liefern, tue dies
sowohl rekursiv als auch iterativ.
Lösung
1
2
3
4
5
6
7
8
9
long fakRek(long n){
if (n<=1)return 1;
else return n*fakRek(n-1);
}
long fakIt(long n){
long tmp=1;
for(long i=1;i<=n;i++) tmp *=i;
return tmp;
}
Seite 101
OOP - Motivation |
Repititorium PI |
Februrary 2012
Motivation
Kapselung von Daten in Verbindung mit Funktionen als
Objekte.
Seite 102
OOP - Motivation |
Repititorium PI |
Februrary 2012
UML - Unified Modeling Language
Seite 103
OOP - Java |
Repititorium PI |
Februrary 2012
Ein einfaches Object
1
2
3
4
5
6
7
8
9
public class Simple {
public int klassenvariable=0;
void methode (){
return;
}
public static void main(String[] args) {
Simple test = new Simple();
}
}
Seite 104
OOP - Java |
Repititorium PI |
Februrary 2012
Beispiele
Aufgabe
Schreibe eine einfache class Auto, welche in der Main
instanziert und mittels der toString-Methode ausgegeben
wird sowie die Lackfarbe als öffentliches Klassenatribut, sowie
die Motorleistung als Privates Atribut über getter zu Verfügung
stellt.
Seite 105
OOP - Java |
Repititorium PI |
Februrary 2012
Beispiele
Aufgabe
Schreibe eine einfache class Auto, welche in der Main
instanziert und mittels der toString-Methode ausgegeben
wird sowie die Lackfarbe als öffentliches Klassenatribut, sowie
die Motorleistung als Privates Atribut über getter zu Verfügung
stellt.
Lösung
Siehe Tafel
Seite 106
OOP - Exceptions |
Repititorium PI |
Februrary 2012
Exceptions
Bei Java ist es möglich Fehlerzustände über einen gesonderten
Kanal zu signalisieren, wodurch diese nicht mit den regulären
Rückgabewerten kollidieren.
Seite 107
OOP - Exceptions |
Repititorium PI |
Februrary 2012
Exceptions
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public class Fehler {
void methode () throws Exception{
if(true) throw new IllegalStateException("foo");
return;
}
public static void main(String[] args) {
Simple test = new Simple();
try {
test.methode();
}
catch (Exception e){
//Pokemon Exception-Handling
//- Gonna catch ’em all
}
}
}
Seite 108
DDS - Arrays |
Repititorium PI |
Februrary 2012
Beispiele
Eine dynamisches Array ist ein Array, welches bei Bedarf
umkopiert wird. Üblicherweise wird ein Array wenn es überläuft
auf die doppelte Größe erweitert.
Aufgabe
Schreibe ein Programm das Objects aufnimmt und diese in
einem dyn. Array speichert.
Lösung
Siehe Tafel
Seite 109
DDS - Lists |
Repititorium PI |
Februrary 2012
Definition
Eine Liste ist entweder leer oder sie beinhaltet Daten und einen
Verweis auf eine Restliste.
Seite 110
DDS - Lists |
Repititorium PI |
Februrary 2012
Listen in Java
1
2
3
4
class List{
Object daten;
List next;
}
Seite 111
DDS - Lists |
Repititorium PI |
Februrary 2012
Beispiele
Aufgabe
Implementieren sie eine Liste wobei folgendes umzusetzen ist:
I
Die Elemente sind als inline-Klasse umzusetzen
I
Die Liste soll sowohl das Element Head als auch Last
enthalten.
I
Erstelle einen Konstruktor um aus einem Object Array eine
Liste zu erstellen
I
Erstelle eine Methode um am Ende der Liste ein Element
anzufügen
I
Estellen sie geeignete Methoden um das n-te Objekt der
Liste zu erhalten
Seite 112
DDS - Lists |
Repititorium PI |
Februrary 2012
Beispiele
Aufgabe
Implementieren sie eine Liste wobei folgendes umzusetzen ist:
I
Die Elemente sind als inline-Klasse umzusetzen
I
Die Liste soll sowohl das Element Head als auch Last
enthalten.
I
Erstelle einen Konstruktor um aus einem Object Array eine
Liste zu erstellen
I
Erstelle eine Methode um am Ende der Liste ein Element
anzufügen
I
Estellen sie geeignete Methoden um das n-te Objekt der
Liste zu erhalten
Lösung
siehe vim
Seite 113
DDS - Wald |
Repititorium PI |
Februrary 2012
Definition
Ein Baum ist entweder leer oder ein Knoten mit n-Nachfolgern,
wobei keine Zyklen auftreten dürfen (gerichteter azyklischer
Graph). Ein Baum mit maximal 2 Nachfolgern nenn man
Binärbaum.
Seite 114
DDS - Wald |
Repititorium PI |
Februrary 2012
Traversierung
Unter traversierung versteht man das durchlaufen eines
Baumes. Man unterscheidet zwischen Preorder,Inorder und
Postorder.
1
2
3
4
//inorder
left();
root();
right();
Seite 115
DDS - Wald |
Repititorium PI |
Februrary 2012
Beispiele
Aufgabe
Programmiere einen einfachen Baum, welcher als Daten einen
String enthält. Die Daten sind sortiert einzufügen. Fügen sie die
Buchstaben a-z zum Test ein. Anschließend sind alle Elemente
in Pre- Post- und Inorder auszugeben.
Lösung
Siehe vim
Seite 116
DDS - Wald |
Repititorium PI |
Februrary 2012
GOOD FIGHT GOOD NIGHT
Danke für eure Aufmerksamkeit.
Beginn Morgen um 10ct am selben Ort
Seite 117
Wilkommen |
Repititorium PI |
Inhalt Day 3
Stacks Queues
Graphen
Suchen & Sortieren
Februrary 2012
Seite 118
DDS - S&Q |
Repititorium PI |
Februrary 2012
Definition Stacks
Auch Kellerspeicher gennant. Er ist eine Datenspeicherstruktur
nach dem First In Last Out [FILO].
Der Zugrif erfolgt immer nur auf dem obersten Element.
Üblicherweise sind folgende Operationen zu finden:
I
push(daten) legt daten auf den Stapel
I
pop() hohl das oberste Element
I
top() liefert das oberste Element, ohne es vom Stapel zu
nehemen
I
empty() true falls leer
Üblicherweise wird der Stack mithilfe eines Arrays und eines
Stackpointer umgesetzt.
Seite 119
DDS - S&Q |
Repititorium PI |
Februrary 2012
Definition Queues
Eine Queue ist eine Datenspeicherstruktur nach dem First in
First out [FIFO] Prinzip. Eine gute Analogie ist ein Rohr in das
Daten auf der einen Seite reingeschoben werden und auf der
wieder raus kommen.
Umgesetzt wird sie normalerweise als einfach verkette Liste.
Seite 120
DDS - S&Q |
Repititorium PI |
Februrary 2012
Beispiele
Aufgabe
Implemetiere einen einfachen Stack mittels einer Liste, achte
dabei aber auf Effizienz.
Seite 121
DDS - S&Q |
Repititorium PI |
Februrary 2012
Beispiele
Aufgabe
Implemetiere einen einfachen Stack mittels einer Liste, achte
dabei aber auf Effizienz.
Lösung
Siehe vim
Seite 122
DDS - S&Q |
Repititorium PI |
Februrary 2012
Beispiele
Aufgabe
Implemetiere einen einfachen Stack mittels einer Liste, achte
dabei aber auf Effizienz.
Lösung
Siehe vim
Aufgabe2
Implementiere eine einfache Queue auf die selbe Weise.
Seite 123
DDS - S&Q |
Repititorium PI |
Februrary 2012
Beispiele
Aufgabe
Implemetiere einen einfachen Stack mittels einer Liste, achte
dabei aber auf Effizienz.
Lösung
Siehe vim
Aufgabe2
Implementiere eine einfache Queue auf die selbe Weise.
Lösung
Siehe vim
Seite 124
DDS - C60 |
Repititorium PI |
Februrary 2012
Definition ungerichtete Graphen
Ein Graph G ist ein Tupel
G = G(V , E),
mit einer Knoten-Menge V = {vi | i ∈ IN} (vertices, auch V (G)
), mit
0 ≤ card(V ) < ∞ und einer Kanten-Menge E ⊆ V × V (edge
set, E(G)).
Die Kanten-Menge E ist defineiert über eine irreflexive,
symmetrische Relation R auf der Knoten-Menge V , mit
R = {(vi , vj ), (vj , vi )|vi , vj ∈ V , i 6= j},
so dass
E = {((vi , vj ), (vj , vi )) = eij |(vi , vj ), (vj , vi ) ∈ V × V }
(kompaktere Notation: ((vi , vj ), (vj , vi )) = vi vj ).
Seite 125
DDS - C60 |
Repititorium PI |
Februrary 2012
Adjazenzmatrix
Graph:
1
4
2
Adjazenz-Matrix:
1 0 1 0 0 1 0
3
i
5
j
1 2 3 4 5 6
2 0 0 1 0 0 0
3 1 0 0 0 1 1
4 1 0 0 0 1 0
6
5 0 0 0 0 1 1
6 0 0 0 0 0 0
Seite 126
DDS - C60 |
Repititorium PI |
Februrary 2012
Adjazenzliste
Gerichteter Graph G :
3
2
Adjazenz-Liste:
8
1
9
2
3
4
5
6
7
6
4
6
5
1
7
6
5
3
5
4
7
1
Ungerichteter Graph G:
3
2
2
1
6
5
4
9
8
Adjazenz-Liste:
8
7
8
9
1
2
3
4
5
6
2
1
1
5
4
6
6
7
3
6
7
7
8
5
5
9
1
1
4
9
9
7
8
Seite 127
DDS - C60 |
Repititorium PI |
Februrary 2012
Beispiele
Gib Adjazenzliste und -matrix für folgenden Graph an.
Seite 128
S&S - Suchen |
Repititorium PI |
Februrary 2012
Binäre Suche
Ist ein sortiertes Array gegeben, so können wir darin schnell
suchen. Dazu betrachten wir immer die Mitte des aktuellen
Teilarrays. Ist sie gleich dem gesuchten Element, so sind wir
fertig und geben das Element zurück. Ist das gesuchte Element
kleiner als die Mitte, so suchen wir rekursiv in der linken Hälfte,
sonst rekursiv in der rechten Hälfte. Ist das Teilarray leer, so
konnte das Element nicht gefunden werden und wir sind fertig.
Seite 129
S&S - Suchen |
Repititorium PI |
Februrary 2012
Beispiel
Aufgabe
Gib an, wie du die Zahl 3 im Array
{1,2,3,4,5,8,9,12,31,34,65} findest.
Begründe die Laufzeitkomplexität der Binären Suche.
Seite 130
S&S - Suchen |
Repititorium PI |
Februrary 2012
Beispiel
Aufgabe
Gib an, wie du die Zahl 3 im Array
{1,2,3,4,5,8,9,12,31,34,65} findest.
Begründe die Laufzeitkomplexität der Binären Suche.
Lösung
siehe Tafel
Seite 131
S&S - Sortieren |
Repititorium PI |
Februrary 2012
naive Sortieralgorithmen
Definition
Naive oder sukzessive Sortieralgorithmen gehen die Zahlen
linear durch und vergleichen Stelle für Stelle.
Seite 132
S&S - Sortieren |
Repititorium PI |
Februrary 2012
Bubble
Beim Bubblesort steigen die großen Zahlen wie Luftblasen
nach oben.
1
2
3
4
5
6
7
8
9
10
11
12
int[] arr = {3,2,6,3,4,6,8,1,2,9};
boolean changed = false;
for (int i = arr.length - 1; i >= 0; i++) {
for (int j = 0; j < i; j++) {
if (arr[j]>arr[j+1]) {
int tmp = arr[j]; arr[j] = arr[j
changed = true;
}
}
if (! changed) break;
else changed = false;
}
Seite 133
S&S - Sortieren |
Repititorium PI |
Februrary 2012
Insertion
Beim Insertionsort nehmen wir das aktuelle Element und fügen
es an der richtigen Stelle im schon sortierten Arraybereich ein.
Seite 134
S&S - Sortieren |
Repititorium PI |
Februrary 2012
Selection
Beim Selectionsort nehmen wir immer das kleinste Element
aus den noch unsortierten Array und hängen es am Ende des
schon sortierten Bereichs an.
Seite 135
S&S - Sortieren |
Repititorium PI |
Februrary 2012
Beispiele
Aufgabe
Implementiere je einen Selection- und einen Insertionsort.
Seite 136
S&S - Sortieren |
Repititorium PI |
Februrary 2012
Beispiele
Aufgabe
Implementiere je einen Selection- und einen Insertionsort.
Lösung
siehe Tafel
Seite 137
S&S - C&C |
Repititorium PI |
Februrary 2012
komplexere Sortieralgorithmen
Die Divide&Conquer-Algorithmen sind (im allgemeinen)
effizienter als die sukzessiven Algorithmen.
Es gibt zwei verschiedene Möglichkeiten, eine Menge von
Zahlen per D&C zu sortieren:
I
Easy Split – Hard Join (ESHJ)
I
Hard Split – Easy Join (HSEJ)
Seite 138
S&S - C&C |
Repititorium PI |
Februrary 2012
Merge
Mergesort ist die ESHJ Variante. Wir halbieren unsere Menge
immer bis wir einelementige Mengen haben und fügen diese
wieder sortiert zusammen (merge).
S&S - C&C |
Seite 139
Repititorium PI |
Februrary 2012
Quick
Der Quicksort ist die HSEJ Variante. Wir wählen ein
Pivot-Element und fügen die restlichen Elemente in zwei
Teilmengen ein - abhängig davon, ob sie kleiner oder größer als
das Pivot-Element sind. Dies machen wir rekursiv auf den
Teilmengen und fügen sie dann, wenn sie leer sind wieder
passend zusammen.
Seite 140
S&S - C&C |
Repititorium PI |
Februrary 2012
Beispiele
Aufgabe
Visualisiere, wie du mit Merge- bzw. Quicksort folgendes Array
sortierst.
{3,5,4,2,7,8,9,2,1,6}
Seite 141
S&S - C&C |
Repititorium PI |
Februrary 2012
Beispiele
Aufgabe
Visualisiere, wie du mit Merge- bzw. Quicksort folgendes Array
sortierst.
{3,5,4,2,7,8,9,2,1,6}
Lösung
siehe Tafel
Seite 142
S&S - Heap |
Repititorium PI |
Februrary 2012
die Müllhalde
Ein Heap ist ein spezieller Baum, bei dem in der Wurzel das
kleinste (oder größte) Element gespeichert ist. In den davon
ausgehenden Bäumen sind die Heapeigenschaften rekursiv
gegeben.
Der Heapsort funktioniert nun so, dass wir das Wurzelelement
aus dem Heap entfernen und danach die Heapeigenschaften
wiederherstellen. Dadurch bekommen wir die sortierte
Zahlenfolge.
Seite 143
S&S - Heap |
Repititorium PI |
Februrary 2012
Beispiel
Abbildung: CC-BY-NC xkcd.com/835 Randall Munroe
Seite 144
S&S - C |
Repititorium PI |
Februrary 2012
Vergleich der Komplexität
Verfahren
selection
insertion
bubble
merge
quick
heap
WC
n2
n2
n2
n · log n
n2
n · log n
AC
n2
n2
n2
n · log n
n · log n
n · log n
Speicher
1
1
1
n
log n
1
Q&A |
Seite 145
Repititorium PI |
Februrary 2012
Q&A
Fragen?
Klausuraufgaben?
Spaß?
Seite 146
Q&A |
Repititorium PI |
Februrary 2012
GOOD FIGHT GOOD NIGHT
Viel Erfolg bei der Klausur!
Herunterladen