Datenstrukturen und Algorithmen

Werbung
Datenstrukturen und Algorithmen VO 708.031 25.10.2012 [email protected] 1 Wiederholung •  Wir vergleichen Algorithmen anhand des ordnungsmäßigen Wachstums von T(n), S(n),… •  Asympto6sche Schranken: –  O‐Nota6on: f(n) = O(g(n)) ⇔ g(n) ist eine asymptoMsch obere Schranke von f(n) –  Ω‐Nota6on: f(n) = Ω(g(n)) ⇔ g(n) ist eine asymptoMsch untere Schranke von f(n) –  Θ‐Nota6on: f(n) = Θ(g(n)) ⇔ g(n) ist eine asymptoMsch exakte Schranke für f(n) •  f(n) = Θ(g(n)) ⇔ f(n) = O(g(n)) ⋀ f(n) = Ω(g(n)) 25.10.2012 [email protected] 2 Elementare Datenstrukturen (Tafel mit KeilschriW, Priester von Adab, 4600 Jahre alt) Peru – Inca, Aufzeichnungsform [Aus K. Mehlhorn and P. Sanders: Data Structures and Algorithms. Springer Verlag, 2008] 25.10.2012 [email protected] 3 Elementare Datenstrukturen •  Lineares Feld (array): –  A[1..n]; benachbarte Elemente stehen im Speicher nebeneinander; Zugriff auf i‐tes Element A[i] in O(1) Zeit •  Lineare Liste (linked list): –  Benachbarte Elemente sind verkecet –  Varianten: einfach verkecet, doppelt verkecet, zirkulär verkecet WERT(p)
HEAD(L)
NACH(p)
…
…
VOR(p)
25.10.2012 p
[email protected] 4 Elementare Datenstrukturen •  Lineare Liste (linked list): –  Suchen eines Wertes benöMgt O(n) Zeit –  Einfügen eines Elementes benöMgt O(1) Zeit –  Löschen eines Elementes benöMgt O(1) Zeit (wenn Suchen erforderlich ⇒
O(n) Zeit) WERT(p)
HEAD(L)
NACH(p)
…
…
VOR(p)
25.10.2012 p
[email protected] 5 Elementare Datenstrukturen •  Hauptopera6onen auf linearen Feldern und Listen Lineares Feld Lineare Liste Zugriff auf i‐tes Element O(1) O(i) Suchen O(n) O(n) Einfügen O(n) O(1) Enhernen O(n) O(1)* * wenn Element gegeben, sonst O(n) (zuerst suchen) 25.10.2012 [email protected] 6 Elementare Datenstrukturen •  Stapel (stack): –  Erlaubt nur das Enhernen des zuletzt eingefügten Elementes (LIFO‐Strategie: „last‐in first‐out“) –  ImplementaMon mit einem linearen Feld S[1..n]: 25.10.2012 [email protected] 7 Elementare Datenstrukturen •  Stapel (stack): Einfügen:
Entfernen:
PUSH(S,x)
1: IF t==n THEN „overflow“
2: ELSE t=t+1
3:
S[t]=x
POP(S)
1: IF t==0 THEN „underflow“
2: ELSE x=S[t]
3:
t=t-1
4:
RETURN x
Alle OperaMonen benöMgen O(1) Zeit 25.10.2012 [email protected] 8 Stapel Anwendung •  Umwandeln von Infix‐Ausdrücken in PosLix‐NotaMon und deren anschließende Auswertung •  Beispiel: –  Infix: (3+7)*(5‐1)+2 –  PosLix: 3 7 + 5 1 ‐ * 2 + –  Auswertung: 42 25.10.2012 [email protected] 9 Stapel Anwendung •  Algorithmus zur Umwandlung Infix ‐> Poshix: –  Stapel anfangs leer (enthält während des Arbeitens nur Klammern und Operatoren) –  Durchlaufe die Eingabeelemente von links nach rechts: •  ‘(‘: Klammer auf Stapel legen •  Zahl: Zahl ausgeben •  Operator o: Alle Operatoren mit gleicher oder höherer Priorität vom Stapel ausgeben, bis ‘(‘ erreicht oder Stapel leer ist. Operator o auf Stapel legen •  ‘)‘: Alle Operatoren vom Stapel bis zur ersten ‘(‘ ausgeben und diese löschen –  Am Ende alle verbleibenden Operatoren vom Stapel ausgeben 25.10.2012 [email protected] 10 Stapel Anwendung •  Algorithmus zur Auswertung eines Poshix‐
Ausdruckes: –  Stapel anfangs leer, enthält während des Arbeitens nur Zahlen –  Durchlaufe die Eingabeelemente von links nach rechts: •  Zahl: Lege die Zahl auf den Stapel •  Operator o: Wende den Operator o auf die beiden obersten Elemente des Stapels an; ersetze diese beiden Zahlen durch das Ergebnis –  Am Ende steht der Wert des Ergebnisses als einziger Wert auf dem Stapel 25.10.2012 [email protected] 11 Elementare Datenstrukturen •  Schlange (queue): –  Erlaubt nur das Enhernen des zuerst eingefügten Elementes (FIFO‐Strategie: „first‐in first‐out“) –  ImplementaMon mit einem linearen Feld Q[1..n]: 25.10.2012 [email protected] 12 Elementare Datenstrukturen •  Schlange (queue): Einfügen:
Entfernen:
PUT(Q,x)
1: IF anz==n THEN „overflow“
2: ELSE anz=anz+1
3:
IF e<n THEN e=e+1
4:
ELSE e=1
5:
Q[e]=x
GET(Q)
1: IF anz==0 THEN „underflow“
2: ELSE anz=anz-1
3:
x=Q[a]
4:
IF a<n THEN a=a+1
5:
ELSE a=1
6:
RETURN x
Alle OperaMonen benöMgen O(1) Zeit IniMalisierung mit e = 1 und a = 1. 25.10.2012 [email protected] 13 Elementare Datenstrukturen •  Schlange (queue): Q 15 6 9 8 4 a anz = 5 e PUT(Q,17), PUT(Q,3), PUT(Q,5): Q 3 5 e 15 6 9 8 4 17 anz = 8 a GET(Q): (=15) Q 3 5 e 25.10.2012 6 9 8 4 17 anz = 7 a [email protected] 14 Rekursionen •  Rekursion: Algorithmus ruW sich selbst auf •  Viele Algorithmen können sowohl itera6v als auch rekursiv implemenMert werden f (n) = n!= n ⋅ (n − 1) ⋅ (n − 2) ⋅…⋅ 2 ⋅1
•  Beispiel: Fakultät T(n) = O(n)
S(n) = O(1)
25.10.2012 T(n) = O(n)
S(n) = O(n) (entspricht Rekursionstiefe)
[email protected] 15 Rekursionen •  Beispiel: Fibonacci‐Zahlen f n = f n−1 + f n−2 , n ≥ 3; f1 = f 2 = 1
⇒
1,
1,
2,
3,
5,
8,
13,
21,
…
T(n) = O(n)
S(n) = O(1)
T(n) = Θ(cn) (exponentiell!)
S(n) = O(n) (entspricht Rekursionstiefe)
Rekursive Varianten sind oW einfacher zu implemenMeren, besitzen aber oW den größeren Laufzeit‐ und Speicherbedarf! 25.10.2012 [email protected] 16 Danke für Ihre Aufmerksamkeit! Bis zum nächsten Mal. (Donnerstag, 8. Nov. 2012, 11:15, i13) 25.10.2012 [email protected] 17 
Herunterladen