Übung Algorithmen und Datenstrukturen
Sommersemester 2015
Marc Bux, Humboldt-Universität zu Berlin
Organisatorisches
• Korrektur: Tutorium bei Michael R. Jung am Dienstag 13 – 15
Uhr in RUD 25, 4.112 (statt am Mittwoch)
• Als Absicherung und um die eigene Abgabe in der Übung
parat zu haben: Abgabe kopieren
• In KW 19, 21, 23, 25, 27, 29: Pflichttermin
 Pro Aufgabe werden zwei bis drei Studenten zur Vorstellung der
Lösung ihrer Gruppe ausgelost
 Keine Konsequenzen wenn Student nicht anwesend ist oder Lösungen
nicht reproduzieren kann bzw. möchte
2
Agenda
1.
2.
3.
4.
5.
Organisatorisches
Die Landau-Notation (Fortsetzung)
Fragen und Übungsaufgaben zum ersten Übungsblatt
Rekursive Algorithmen
Divide & Conquer
3
Die Landau-Notation (Wiederholung)
• Definitionen:
Ο 𝑔 =
𝑓: ℝ+
0
→
ℝ+
0
+
 Ω 𝑔 = 𝑓: ℝ+
→
ℝ
0
0
+
 Θ 𝑔 = 𝑓: ℝ+
0 → ℝ0
+
 𝜊 𝑔 = 𝑓: ℝ+
0 → ℝ0
+
 𝜔 𝑔 = 𝑓: ℝ+
0 → ℝ0
∃𝑐 ∈ ℝ+ > 0 ∃𝑛0 ∈ ℝ+
0 >0
∀𝑛 ≥ 𝑛0 : 𝑓 𝑛 ≤ 𝑐 ∙ 𝑔(𝑛)
∃𝑐 ∈ ℝ+ > 0 ∃𝑛0 ∈ ℝ+
0 >0
∀𝑛 ≥ 𝑛0 : 𝑓 𝑛 ≥ 𝑐 ∙ 𝑔(𝑛)
∃𝑐1 , 𝑐2 ∈ ℝ+ > 0 ∃𝑛0 ∈ ℝ+
0 >0
∀𝑛 ≥ 𝑛0 : 𝑐1 ∙ 𝑔 𝑛 ≤ 𝑓 𝑛 ≤ 𝑐2 ∙ 𝑔(𝑛)
∀𝑐 ∈ ℝ+ > 0 ∃𝑛0 ∈ ℝ+
0 >0
∀𝑛 ≥ 𝑛0 : 𝑓 𝑛 < 𝑐 ∙ 𝑔(𝑛)
∀𝑐 ∈ ℝ+ > 0 ∃𝑛0 ∈ ℝ+
0 >0
∀𝑛 ≥ 𝑛0 : 𝑓 𝑛 > 𝑐 ∙ 𝑔(𝑛)
• Bedeutung: „𝑓 wächst ...





nicht wesentlich schneller als 𝑔
nicht wesentlich langsamer als 𝑔
ungefähr genauso schnell wie 𝑔
wesentlich langsamer als 𝑔
wesentlich schneller als 𝑔
4
Transitivität der Landau-Notation
• Satz: 𝑓 𝑛 = Ο 𝑔 𝑛
• Beweis:






⇒
⇒
⇒
∧𝑔 𝑛 =Ο ℎ 𝑛
⇒𝑓 𝑛 =Ο ℎ 𝑛
Voraussetzungen:
∃𝑐 ∃𝑛0 ∀𝑛 ≥ 𝑛0 : 𝑓 𝑛 ≤ 𝑐 ∙ 𝑔(𝑛)
∃𝑐′ ∃𝑛0′ ∀𝑛 ≥ 𝑛0′ : 𝑔 𝑛 ≤ 𝑐′ ∙ ℎ(𝑛)
Zu zeigen:
∃𝑐′′ ∃𝑛0′′ ∀𝑛 ≥ 𝑛0′′ : 𝑓 𝑛 ≤ 𝑐′′ ∙ ℎ(𝑛)
Beweis:
Wähle 𝑛0′′ = max 𝑛0 , 𝑛0′
∀𝑛 ≥ 𝑛0′′ : 𝑓 𝑛 ≤ 𝑐 ∙ 𝑔 𝑛 ≤ 𝑐 ∙ 𝑐 ′ ∙ ℎ(𝑛)
Für 𝑐 ′′ = 𝑐 ∙ 𝑐′ folgt 𝑓 𝑛 = Ο ℎ 𝑛
∎
• Beispiel:



⇒
⇒
⇒
⇒
𝑓 𝑛 = 3𝑛5 + 4𝑛3 + 15
𝑔 𝑛 = 𝑛5
ℎ 𝑛 = 7𝑛7 + 2𝑛4 + 3𝑛
𝑓 𝑛 = Ο 𝑔 𝑛 haben wir bereits gezeigt
1
1
Für 𝑐 = 7, 𝑛0 = 1 gilt: ∀𝑛 ≥ 1: 𝑛5 ≤ 7 ∙ 7𝑛7 + 2𝑛4 + 3𝑛
𝑔 𝑛 =Ο ℎ 𝑛
𝑓 𝑛 =Ο ℎ 𝑛
5
Ausnutzen der Monotonie
+
• Satz: Seien 𝑓, 𝑔 und ℎ Funktionen von ℝ+
nach
ℝ
0
0 . Sei ℎ
streng monoton wachsend. Dann gilt
∃𝑛0 > 0 ∀𝑛 ≥ 𝑛0 : 𝑓 𝑛 ≤ 𝑔 𝑛
⟺ ∃𝑛0′ > 0 ∀𝑛 ≥ 𝑛0′ : ℎ 𝑓 𝑛 ≤ ℎ 𝑔 𝑛
• Beweis:
 „⇒“ folgt aus Monotonie von ℎ, wobei 𝑛0′ = 𝑛0
 „⇐“:
⇒ Angenommen, es gibt ein 𝑛0′′ ≥ 𝑛0′ mit 𝑓 𝑛0′′ > 𝑔 𝑛0′′
⇒ Aus der Monotonie von ℎ folgt: ℎ 𝑓 𝑛0′′ > ℎ 𝑔 𝑛0′′ ↯
∎
• Beispiel:
 𝑓 𝑛 = log 𝑛
 𝑔 𝑛 = 𝑛
 ℎ 𝑛 = 2𝑛
⇒ log 𝑛 = Ο 𝑛 haben wir bereits gezeigt
⇒ 2log 𝑛 = Ο 2 𝑛
6
Agenda
1.
2.
3.
4.
5.
Organisatorisches
Die Landau-Notation (Fortsetzung)
Fragen und Übungsaufgaben zum ersten Übungsblatt
Rekursive Algorithmen
Divide & Conquer
7
Fragen zu Aufgabe 1
8
Übungsaufgabe zu Aufgabe 1
1. Seien 𝑎, 𝑏 ∈ ℝ positive Konstanten, dann gilt 𝑎 𝑥+𝑏 ∈ Θ 𝑎 𝑥 .
𝑓(𝑛)
lim
𝑛→∞ 𝑔(𝑛)
2. Wenn
𝑓 ∈ Ο(𝑔).
existiert und 0 ≤
𝑓 𝑛
lim
𝑛→∞ 𝑔 𝑛
< ∞, dann gilt
Hinweis: Der Grenzwert ist definiert als
lim 𝑓(𝑥) = 𝑘 ⇔ ∀𝜖 > 0 ∃𝑥0 ∀𝑥 ≥ 𝑥0 : 𝑓 𝑥 − 𝑘 < 𝜖
𝑛→∞
9
Fragen zu Aufgabe 2
10
Übungsaufgabe zu Aufgabe 2
𝑓(𝑛)
𝑔(𝑛)
2𝑛
2𝑛+1
2𝑛
22𝑛
2𝑛
𝑛!
11
Fragen zu Aufgabe 3-1
12
Fragen zu Aufgabe 3-2
13
Übungsaufgabe zu Aufgabe 3
14
Übungsaufgabe zu Aufgabe 3 (2)
15
Fragen zu Aufgabe 4-1
16
Fragen zu Aufgabe 4-2
17
Übungsaufgabe zu Aufgabe 4
Gegeben sei ein Array 𝐴 von Zahlen mit |𝐴| = 𝑛
Elementen aus {1, … , 𝑛}. Es soll überprüft werden, ob das
Array eines oder mehrere Duplikate enthält.
1. Entwerfen Sie einen Algorithmus, der als Eingabe das
Array 𝐴 erhält und ausgibt, ob in diesem Array
Duplikate enthalten sind. Notieren Sie diesen
Algorithmus als Pseudocode.
2. Analysieren Sie die Laufzeit Ihres in Pseudocode
vorgestellten Algorithmus (d.h. geben Sie eine
möglichst gute obere Schranke für die Komplexität an
und begründen Sie diese).
18
Agenda
1.
2.
3.
4.
5.
Organisatorisches
Die Landau-Notation (Fortsetzung)
Fragen und Übungsaufgaben zum ersten Übungsblatt
Rekursive Algorithmen
Divide & Conquer
19
Münzen wiegen
• Gegeben




𝑛 identisch aussehende Münzen, eine Waage mit zwei Waagschalen
genau eine der 𝑛 Münzen ist gefälscht
alle echten Münzen wiegen exakt dasselbe
die falsche Münze ist leichter
• Aufgabe
 Finde die falsche Münze mit möglichst wenigen Wiegeoperationen
20
Naive Lösung
• Algorithmus: Direktvergleich
 Input: 𝑛 Münzen 𝑚1 , … , 𝑚𝑛
 for 𝑖 = 2 to 𝑛 do
 if Münze 𝑚1 und 𝑚𝑖 haben ungleiches Gewicht then
• return leichtere der beiden Münzen
• Korrektheit:
 alle echten Münzen haben identisches Gewicht
 somit genügt es, alle Münzen mit der ersten Münze zu vergleichen
• Laufzeit:
 Best-case: 𝑚1 oder 𝑚2 ist die falsche Münze (1 Wiegeoperation)
 Worst-case: 𝑚𝑛 ist die falsche Münze (𝑛 − 1 Wiegeoperationen)
 Algorithmus Direktvergleich benötigt somit Θ(𝑛) Wiegeoperationen
21
Rekursive Lösung
• Annahme: 𝑛 = 2𝑘 für ein beliebiges 𝑘 ∊ ℕ
• Algorithmus: D&C-Wiegen(𝑀)
 Input: Münzmenge 𝑀
 if |𝑀| = 2 then
 return leichteres Element von 𝑀
 else
 teile 𝑀 in zwei gleich große Münzmengen 𝑀1 und 𝑀2
 𝑀′ ← leichtere der beiden Mengen 𝑀1 und 𝑀2
 D&C-Wiegen(𝑀′)
• Korrektheit: falsche Münze muss immer in der leichteren Hälfte
liegen muss
• Laufzeit (informell):
 Wiegeoperation halbiert die Anzahl der möglichen Kandidaten
 nach log n Wiegeoperationen nur genau ein Kandidat
 Fall: 𝑛 ≠ 2𝑘
 Falls in irgendeinem Schritt |𝑀| ungerade
•
•
•
•
entferne zunächst eine Münze und teile dann
Falls Gleichheit beim Wiegen: entfernte Münze ist die gesuchte
Andernfalls: weiter wie beschrieben
Anzahl der Kandidaten verkleinert sich um mehr als die Hälfte
 Fall 𝑛 = 2𝑘 ist worst case
22
Agenda
1.
2.
3.
4.
5.
Organisatorisches
Die Landau-Notation (Fortsetzung)
Fragen und Übungsaufgaben zum ersten Übungsblatt
Rekursive Algorithmen
Divide & Conquer
23
Divide & Conquer
• Idee
 Teile Problem in Teilprobleme auf (divide)
 Löse diese rekursiv (conquer)
 Setze aus den Lösungen der Teilprobleme die Lösung für das
Gesamtproblem zusammen (merge)
• Darstellung als Rekursionsbaum
 𝑇(𝑛) = Anzahl Operationen für Eingabe der Größe 𝑛
T(n)
divide
divide
Kosten pro innerer Knoten:
divide + merge
merge
T(m)
T(m)
…
…
wichtig: 𝑚 < 𝑛
T(m)
merge
T(2)
T(2)
T(2)
Abbruch, wenn
Eingabe klein genug
…
T(2)
T(2)
Kosten pro Blatt:
conquer
T(2)
24
Ausblick: Nächste Woche
•
•
•
•
Besprechung der Lösungen des ersten Übungsblatts
Vorstellung des zweiten Übungsblatts
Fragen?
Gruppen „TT“ und „complexity102“
25