1. Übung – Algorithmen I - Timo Bingmann, Christian Schulz

Werbung
1. Übung – Algorithmen I
Timo Bingmann, Christian Schulz
I NSTITUT
FÜR
T HEORETISCHE I NFORMATIK , P ROF. S ANDERS
Bingmann,
Schulz
1 KITTimo
– Universität
des Landes Christian
Baden-Württemberg
und
nationales
Forschungszentrum
in der Helmholtz-Gemeinschaft
1. Übung
– Algorithmen
I
Fakultät für Informatik
www.kit.edu
Institut für Theoretische
Informatik
Organistorisches
Bonus - Änderung
0% ≤ der Übungspunkte < 25% ⇒ 0 Bonuspunkt
25% ≤ der Übungspunkte < 50% ⇒ 1 Bonuspunkt
50% ≤ der Übungspunkte < 75% ⇒ 2 Bonuspunkte
75% ≤ der Übungspunkte ⇒ 3 Bonuspunkte für die Klausur
2 Timo Bingmann, Christian Schulz
1. Übung – Algorithmen I
Fakultät für Informatik
Institut für Theoretische Informatik
Asymptotik
3 Timo Bingmann, Christian Schulz
1. Übung – Algorithmen I
Fakultät für Informatik
Institut für Theoretische Informatik
Rechenzeit bei 109 Ops pro Sekunde
n 1000 log2 n
10
3.3 µs
4.3 µs
20
50
5.6 µs
100
6.6 µs
250
8.0 µs
500
9.0 µs
1 000
10.0 µs
5 000
12.3 µs
10 000
13.3 µs
100 000
16.6 µs
106
20 µs
107
23 µs
108
27 µs
109
30 µs
1010
33 µs
1011
36 µs
4 Timo Bingmann, Christian Schulz
1. Übung – Algorithmen I
500n 100n log2 n
5 µs
3.3 µs
10 µs
8.6 µs
25 µs
28.2 µs
50 µs
66.4 µs
125 µs
199 µs
250 µs
448 µs
500 µs
1 ms
2.5 ms
6.1 ms
5 ms
13.3 ms
50 ms
166 ms
500 ms
2s
5s
23 s
50 s
4.4 min
8.3 min
50 min
1.4 h
9.2 h
13.9 h
4.2 d
10n2
1 µs
4 µs
25 µs
100 µs
625 µs
2.5 ms
10 ms
250 ms
1s
100 s
2.7 h
11.6 d
3.2 a
317 a
104.5 a
−
n3
1 µs
8 µs
125 µs
1 ms
15 ms
125 ms
1s
125 s
16 min
11.6 d
31.7 a
104.5 a
107.5 a
−
2n
1 µs
1.05 ms
13 h
1013 a
−
Fakultät für Informatik
Institut für Theoretische Informatik
O-Kalkül
5 Timo Bingmann, Christian Schulz
1. Übung – Algorithmen I
Fakultät für Informatik
Institut für Theoretische Informatik
O-Kalkül
O(g (n)) = {f : N → R | ∃ c > 0 ∃ n0 ∈ N ∀ n ≥ n0
: f (n) ≤ c · g (n)}
Ω(g (n)) = {f : N → R | ∃ c > 0 ∃ n0 ∈ N ∀ n ≥ n0
: f (n) ≥ c · g (n)}
5 Timo Bingmann, Christian Schulz
1. Übung – Algorithmen I
Fakultät für Informatik
Institut für Theoretische Informatik
O-Kalkül
O(g (n)) = {f : N → R | ∃ c > 0 ∃ n0 ∈ N ∀ n ≥ n0
: f (n) ≤ c · g (n)}
Ω(g (n)) = {f : N → R | ∃ c > 0 ∃ n0 ∈ N ∀ n ≥ n0
: f (n) ≥ c · g (n)}
o(g (n)) = {f : N → R | ∀ c > 0 ∃ n0 ∈ N ∀ n ≥ n0
: f (n) ≤ c · g (n)}
ω(g (n)) = {f : N → R | ∀ c > 0 ∃ n0 ∈ N ∀ n ≥ n0
: f (n) ≥ c · g (n)}
5 Timo Bingmann, Christian Schulz
1. Übung – Algorithmen I
Fakultät für Informatik
Institut für Theoretische Informatik
O-Kalkül
O(g (n)) = {f : N → R | ∃ c > 0 ∃ n0 ∈ N ∀ n ≥ n0
: f (n) ≤ c · g (n)}
Ω(g (n)) = {f : N → R | ∃ c > 0 ∃ n0 ∈ N ∀ n ≥ n0
: f (n) ≥ c · g (n)}
Θ(g (n)) = {f : N → R | ∃ c1 > 0, c2 > 0 ∃ n0 ∈ N ∀ n ≥ n0
: c1 · g (n) ≤ f (n) ≤ c2 · g (n)}
o(g (n)) = {f : N → R | ∀ c > 0 ∃ n0 ∈ N ∀ n ≥ n0
: f (n) ≤ c · g (n)}
ω(g (n)) = {f : N → R | ∀ c > 0 ∃ n0 ∈ N ∀ n ≥ n0
: f (n) ≥ c · g (n)}
5 Timo Bingmann, Christian Schulz
1. Übung – Algorithmen I
Fakultät für Informatik
Institut für Theoretische Informatik
Intuition zum O-Kalkül
O(g (n)) = {f : N → R | ∃ c > 0 ∃ n0 ∈ N ∀ n ≥ n0
: f (n) ≤ c · g (n)}
80
60
f1 (n)
40
20
0
0
1
2
6 Timo Bingmann, Christian Schulz
1. Übung – Algorithmen I
3
4
5
6
7
8
9
10
Fakultät für Informatik
Institut für Theoretische Informatik
Intuition zum O-Kalkül
O(g (n)) = {f : N → R | ∃ c > 0 ∃ n0 ∈ N ∀ n ≥ n0
: f (n) ≤ c · g (n)}
80
c1 · n
60
f1 (n)
40
20
0
0
1
2
6 Timo Bingmann, Christian Schulz
1. Übung – Algorithmen I
3
4
5
6
7
8
9
10
Fakultät für Informatik
Institut für Theoretische Informatik
Intuition zum O-Kalkül
O(g (n)) = {f : N → R | ∃ c > 0 ∃ n0 ∈ N ∀ n ≥ n0
: f (n) ≤ c · g (n)}
80
c1 · n
60
f1 (n)
40
20
0
0
1
2
6 Timo Bingmann, Christian Schulz
1. Übung – Algorithmen I
3
4
5
6
7
8
9
10
Fakultät für Informatik
Institut für Theoretische Informatik
Intuition zum O-Kalkül
O(g (n)) = {f : N → R | ∃ c > 0 ∃ n0 ∈ N ∀ n ≥ n0
: f (n) ≤ c · g (n)}
80
c1 · n
60
f1 (n) = O(n)
40
20
n0 →
0
0
1
2
6 Timo Bingmann, Christian Schulz
1. Übung – Algorithmen I
3
4
5
6
7
8
9
10
Fakultät für Informatik
Institut für Theoretische Informatik
Intuition zum O-Kalkül
O(g (n)) = {f : N → R | ∃ c > 0 ∃ n0 ∈ N ∀ n ≥ n0
: f (n) ≤ c · g (n)}
80
f2 (n)
c1 · n
60
f1 (n)
40
20
n0 →
0
0
1
2
6 Timo Bingmann, Christian Schulz
1. Übung – Algorithmen I
3
4
5
6
7
8
9
10
Fakultät für Informatik
Institut für Theoretische Informatik
Intuition zum O-Kalkül
Ω(g (n)) = {f : N → R | ∃ c > 0 ∃ n0 ∈ N ∀ n ≥ n0
: f (n) ≥ c · g (n)}
80
f2 (n) = Ω(n)
c1 · n
60
f1 (n)
40
20
n0 →
0
0
1
2
6 Timo Bingmann, Christian Schulz
1. Übung – Algorithmen I
3
4
5
6
7
8
9
10
Fakultät für Informatik
Institut für Theoretische Informatik
Intuition zum O-Kalkül
ω(g (n)) = {f : N → R | ∀ c > 0 ∃ n0 ∈ N ∀ n ≥ n0
: f (n) ≥ c · g (n)}
80
c1 · n
f2 (n) = ω(n)
60
f1 (n)
40
20
n0 →
0
0
1
2
6 Timo Bingmann, Christian Schulz
1. Übung – Algorithmen I
3
4
5
6
7
8
9
10
Fakultät für Informatik
Institut für Theoretische Informatik
Intuition zum O-Kalkül
ω(g (n)) = {f : N → R | ∀ c > 0 ∃ n0 ∈ N ∀ n ≥ n0
: f (n) ≥ c · g (n)}
150
c1 · n
100
f2 (n) 6= ω(n)
50
0
0
2
4
7 Timo Bingmann, Christian Schulz
1. Übung – Algorithmen I
n0 →
6
8
10
12
14
16
18
20
Fakultät für Informatik
Institut für Theoretische Informatik
Intuition zum O-Kalkül
ω(g (n)) = {f : N → R | ∀ c > 0 ∃ n0 ∈ N ∀ n ≥ n0
: f (n) ≥ c · g (n)}
150
Nur Intuition!
c1 · n
100
f2 (n) 6= ω(n)
50
0
0
2
4
7 Timo Bingmann, Christian Schulz
1. Übung – Algorithmen I
n0 →
6
8
10
12
14
16
18
20
Fakultät für Informatik
Institut für Theoretische Informatik
O-Kalkül
Für nicht-negative f , g : N → R gelten folgende Äquivalenzen:
1
f (n) = O(g (n))
⇐⇒
0 ≤ lim sup
n→∞
8 Timo Bingmann, Christian Schulz
1. Übung – Algorithmen I
f (n)
< ∞,
g (n )
Fakultät für Informatik
Institut für Theoretische Informatik
O-Kalkül
Für nicht-negative f , g : N → R gelten folgende Äquivalenzen:
1
f (n) = O(g (n))
⇐⇒
2
f (n) = Ω (g (n))
⇐⇒
3
f (n) = o(g (n))
⇐⇒
4
f (n) = ω(g (n))
⇐⇒
5
f (n) = Θ(g (n))
8 Timo Bingmann, Christian Schulz
1. Übung – Algorithmen I
⇐=
f (n)
< ∞,
n→∞ g (n)
f (n)
≤ ∞,
0 < lim inf
n→∞ g (n)
f (n)
lim
= 0,
n→∞ g (n)
f (n)
lim
= ∞,
n→∞ g (n)
f (n )
lim
= c > 0.
n→∞ g (n)
0 ≤ lim sup
Fakultät für Informatik
Institut für Theoretische Informatik
Basis des Logarithmus
O(log n)
FAQ: Zu welcher Basis ist der Logarithmus?
9 Timo Bingmann, Christian Schulz
1. Übung – Algorithmen I
Fakultät für Informatik
Institut für Theoretische Informatik
Basis des Logarithmus
O(log n)
FAQ: Zu welcher Basis ist der Logarithmus?
Im Zweifelsfall zur Basis 2 (in der Informatik).
Im O(·)-Kalkül meistens egal:
z. B. O . . . · logk n für fixes k
denn loga x = logb x / logb a = c logb x für eine Konstante c
⇒ kein Unterschied im O-Kalkül
9 Timo Bingmann, Christian Schulz
1. Übung – Algorithmen I
Fakultät für Informatik
Institut für Theoretische Informatik
Invarianten in der Informatik
10 Timo Bingmann, Christian Schulz
1. Übung – Algorithmen I
Fakultät für Informatik
Institut für Theoretische Informatik
Invarianten in der Informatik
Idee der Anwendung
finde Schleifeninvariante
zeige Schleifeninvariante
Schleifeninvariante und sonstiges Wissen
⇒ Korrektheit des Algorithmus
Function max(A : Array [0..n] of R) :
assert A.size() > 0
i=0 : N≥0
for j := 1 to n do
if A[j ] > A[i ] then i := j
assert i = argmax`≤n A[`]
return i
11 Timo Bingmann, Christian Schulz
1. Übung – Algorithmen I
//
//
Vorbedingung
Nachbedingung
Fakultät für Informatik
Institut für Theoretische Informatik
Invarianten in der Informatik
Beispiel I
for j
:= 0 to n do
if A[j ] > A[i ] then i := j
assert i = argmax`≤j A[`]
//
Invariante
Beweis:
j = 0: klar
j − 1 → j: es gilt i = argmax`<j A[`], also A[i ] = max`<j A[`]
1
2
Fall 1: A[j ] > A[i ] = max`<j A[`] → update i → Beh.
Fall 2: A[j ] ≤ A[i ] = max`<j A[`] → kein update → Beh.
12 Timo Bingmann, Christian Schulz
1. Übung – Algorithmen I
Fakultät für Informatik
Institut für Theoretische Informatik
Invarianten in der Informatik
Beispiel I
Function max(A : Array [0..n] of R) :
assert A.size() > 0
i=0 : N≥0
for j := 1 to n do
if A[j ] > A[i ] then i := j
assert i = argmax`≤j A[`]
assert i = argmax`≤n A[`]
return i
//
Vorbedingung
//
//
Invariante
Nachbedingung
Nach Beenden der Schleife gilt j = n und i = argmax`≤j A[`]
Also die Nachbedingung: i = argmax`≤n A[`]
und damit die Korrektheit unseres Algorithmus
13 Timo Bingmann, Christian Schulz
1. Übung – Algorithmen I
Fakultät für Informatik
Institut für Theoretische Informatik
Invarianten in der Informatik
Beispiel II
Function funWithAlgorithms(n : N) :
assert n odd
Z := {1, . . . , 2n}
P
P2n
S := z ∈Z z = i =1 i
while |Z | > 1 do
pick a, b with a 6= b from Z
Z ← Z \{a, b}
//
Z ← ∪{|a − b|}
assert |Z | = 1
14 Timo Bingmann, Christian Schulz
1. Übung – Algorithmen I
//
Vorbedingung
enferne zwei zufällige Zahlen aus Z
// füge |a − b| hinzu
// Nachbedingung I
Fakultät für Informatik
Institut für Theoretische Informatik
Invarianten in der Informatik
Beispiel II
Ziel: Zeige die Zahl die übrig bleibt ist ungerade
Function funWithAlgorithms(n : N) :
assert n odd
Z := {1, . . . , 2n}
P
P2n
S := z ∈Z z = i =1 i
while |Z | > 1 do
pick a, b with a 6= b from Z
Z ← Z \{a, b}
//
Z ← ∪{|a − b|}
assert |Z | = 1
assert Z [0] odd
15 Timo Bingmann, Christian Schulz
1. Übung – Algorithmen I
//
Vorbedingung
enferne zwei zufällige Zahlen aus Z
// füge |a − b| hinzu
// Nachbedingung I
// Nachbedingung II
Fakultät für Informatik
Institut für Theoretische Informatik
Invarianten in der Informatik
Beispiel II
Ziel: Zeige die Zahl die übrig bleibt ist ungerade
Function funWithAlgorithms(n : N) :
assert n odd
Z := {1, . . . , 2n}
P
P2n
S := z ∈Z z = i =1 i
assert S odd
while |Z | > 1 do
pick a, b with a 6= b from Z
Z ← Z \{a, b}
//
Z ←Z∪
{|
a
−
b
|}
P
assert z ∈Z z odd
assert Z [0] odd
16 Timo Bingmann, Christian Schulz
1. Übung – Algorithmen I
//
Vorbedingung
//
Vorbedingung
enferne zwei zufällige Zahlen aus Z
//
//
füge
|a − b| hinzu
// Invariante
Nachbedingung I
Fakultät für Informatik
Institut für Theoretische Informatik
Invarianten
Beispiel II
P2n
IA: S = i =1 i = 21 (2n(2n + 1)) = n(2n + 1) ungerade
P
IS: Annahme S = z ∈Z z ungerade
P
zu zeigen: S 0 := z ∈Z \{a,b}∪{|a−b|} z ungerade
Beweis:
S 0 = S − a − b + |a − b|
= S − 2 · min a, b
Also
P
z ∈Z
z bleibt ungerade!
17 Timo Bingmann, Christian Schulz
1. Übung – Algorithmen I
Fakultät für Informatik
Institut für Theoretische Informatik
Invarianten in der Informatik
Beispiel III
Ziel: Nach Terminierung enthält b die binäre Repräsentation von n
Function convertToBinary(n : N) :
b := Array < 0, . . . , 0 >
t := n
k := −1
while t > 0 do
k := k + 1
b[k ] := t mod 2
t := t div 2
18 Timo Bingmann, Christian Schulz
1. Übung – Algorithmen I
//
binary representation of
n
Fakultät für Informatik
Institut für Theoretische Informatik
Invarianten in der Informatik
Beispiel III
Wieder drei Schritte zu tun:
1
Hypothese vor Beginn der Schleife wahr
2
Invar. gilt im k ’ten ⇒ Invar. gilt im k + 1’ten Schritt
3
Nach Terminierung, Invariante ⇒ Korrektheit des Algorithmus
Invariante: n = t · 2k +1 + m
mit m die Zahl, die durch b[0, . . . , k ] repräsentiert wird
19 Timo Bingmann, Christian Schulz
1. Übung – Algorithmen I
Fakultät für Informatik
Institut für Theoretische Informatik
Invarianten in der Informatik
Beispiel III - Anfang
m die Zahl, die durch b[0, . . . , k ] repräsentiert wird
Function convertToBinary(n : N) :
b := Array < 0, . . . , 0 >
t := n
k := −1
assert n = t · 2k +1 + m
while t > 0 do
k := k + 1
b[k ] := t mod 2
t := t div 2
20 Timo Bingmann, Christian Schulz
1. Übung – Algorithmen I
//
binary representation of
n
Fakultät für Informatik
Institut für Theoretische Informatik
Invarianten in der Informatik
Beispiel III - Schluss
m die Zahl, die durch b[0, . . . , k ] repräsentiert wird
k := k + 1
b[k ] := t mod 2
t := t div 2
Beweis (k → k + 1):
es gelte vor der Iteration n = t · 2k +1 + m
Fall 1: t gerade
1
2
3
b[k + 1] = t mod 2 = 0
t 0 := t /2
k 0 := k + 1, m unverändert
nach der Iteration:
t /2 · 2k +2 + m = t · 2k +1 + m = n
21 Timo Bingmann, Christian Schulz
1. Übung – Algorithmen I
Fakultät für Informatik
Institut für Theoretische Informatik
Invarianten in der Informatik
Beispiel III - IS
m die Zahl, die durch b[0, . . . , k ] repräsentiert wird
Beweis (k → k + 1):
es gelte vor der Iteration n = t · 2k +1 + m
Fall 2: t ungerade
1
2
3
b[k + 1] = t mod 2 = 1 → m0 := m + 2k +1
t 0 := (t − 1)/2
k 0 := k + 1
nach der Iteration:
(t − 1)/2 · 2k +2 + m + 2k +1
=
(t − 1) · 2k +1 + m + 2k +1
= t · 2k +1 + m = n
22 Timo Bingmann, Christian Schulz
1. Übung – Algorithmen I
Fakultät für Informatik
Institut für Theoretische Informatik
Invarianten in der Informatik
Beispiel III - Schluss
m die Zahl, die durch b[0, . . . , k ] repräsentiert wird
while t > 0 do
k := k + 1
b[k ] := t mod 2
t := t div 2
assert n = t · 2k +1 + m
nach der Ausführung der Schleife t = 0
damit folgt die Korrektheit des Algorithmus
23 Timo Bingmann, Christian Schulz
1. Übung – Algorithmen I
Fakultät für Informatik
Institut für Theoretische Informatik
Modellierungen mit Graphen
24 Timo Bingmann, Christian Schulz
1. Übung – Algorithmen I
Fakultät für Informatik
Institut für Theoretische Informatik
Modellierungen
Tasks mit Abhängigkeiten
Problem:
Frage:
Menge von Aufgaben/Task und Abhängigkeiten
Aufgaben ausführbar? Reihenfolge?
Welche der dargestellten Pläne sind ausführbar?
25 Timo Bingmann, Christian Schulz
1. Übung – Algorithmen I
Fakultät für Informatik
Institut für Theoretische Informatik
Modellierungen
Tasks mit Abhängigkeiten
Problem:
Frage:
Menge von Aufgaben/Task und Abhängigkeiten
Aufgaben ausführbar? Reihenfolge?
s
t
z
v
w
x
y
u
Wie findet man einen Schedule? w, y, u, t, ...
26 Timo Bingmann, Christian Schulz
1. Übung – Algorithmen I
Fakultät für Informatik
Institut für Theoretische Informatik
Modellierungen
Tasks mit Abhängigkeiten
Problem:
Frage:
Menge von Aufgaben/Task und Abhängigkeiten
Aufgaben ausführbar? Reihenfolge?
Wie findet man einen Schedule?
w, y, u, t, ...
Algorithmus aus der VL (DAG)!
Iteratives entfernen von Knoten mit
Ausgangsgrad 0!
27 Timo Bingmann, Christian Schulz
1. Übung – Algorithmen I
Fakultät für Informatik
Institut für Theoretische Informatik
Modellierungen
Tasks mit Abhängigkeiten
Iteratives entfernen von Knoten mit Ausgangsgrad 0!
w
28 Timo Bingmann, Christian Schulz
1. Übung – Algorithmen I
Fakultät für Informatik
Institut für Theoretische Informatik
Modellierungen
Tasks mit Abhängigkeiten
Iteratives entfernen von Knoten mit Ausgangsgrad 0!
y,w
29 Timo Bingmann, Christian Schulz
1. Übung – Algorithmen I
Fakultät für Informatik
Institut für Theoretische Informatik
Modellierungen
Tasks mit Abhängigkeiten
Iteratives entfernen von Knoten mit Ausgangsgrad 0!
u,y,w
30 Timo Bingmann, Christian Schulz
1. Übung – Algorithmen I
Fakultät für Informatik
Institut für Theoretische Informatik
Modellierungen
Tasks mit Abhängigkeiten
Iteratives entfernen von Knoten mit Ausgangsgrad 0!
t,u,y,w
31 Timo Bingmann, Christian Schulz
1. Übung – Algorithmen I
Fakultät für Informatik
Institut für Theoretische Informatik
Modellierungen
Tasks mit Abhängigkeiten
Iteratives entfernen von Knoten mit Ausgangsgrad 0!
...,s,t,u,y,w
32 Timo Bingmann, Christian Schulz
1. Übung – Algorithmen I
Fakultät für Informatik
Institut für Theoretische Informatik
Modellierungen
Topologische Sortieren
Topologische Sortierung t: ∀(u , v ) ∈ E : t (u ) < t (v )
x
1
v
2
z
3
s
4
t
5
u
w
y
7
6
8
Merke: isDAG (aus VL) kann topologischen Sortieren
nur falls G kreisfrei
33 Timo Bingmann, Christian Schulz
1. Übung – Algorithmen I
Fakultät für Informatik
Institut für Theoretische Informatik
Herunterladen