Datenstrukturen und Algorithmen
Christian Sohler
FG Algorithmen & Komplexität
Stand der Dinge
Teile & Herrsche:
• Teile Eingabe in mehrere Teile auf
• Löse das Problem rekursiv auf den Teilen
• Füge die Teillösungen zu einer Gesamtlösung zusammen
Eigenschaften:
• Vielseitig anwendbbar: MergeSort, binäre Suche, Integer Multiplikation
• Analyse: Rekursionsbäume, Substitutionsmethode, Iterationsmethode
Stand der Dinge
Laufzeiten der Form:
T(n) = a ⋅ T(n/b) + f(n)
Stand der Dinge
Laufzeiten der Form:
T(n) = a ⋅ T(n/b) + f(n)
Anzahl
Unterprobleme
Stand der Dinge
Laufzeiten der Form:
T(n) = a ⋅ T(n/b) + f(n)
Anzahl
Unterprobleme
Größe der Unterprobleme
Stand der Dinge
Laufzeiten der Form:
T(n) = a ⋅ T(n/b) + f(n)
Anzahl
Unterprobleme
Größe der Unterprobleme
(bestimmt Höhe des Rekursionsbaums)
Stand der Dinge
Laufzeiten der Form:
T(n) = a ⋅ T(n/b) + f(n)
Anzahl
Unterprobleme
Aufwand für Aufteilen und Zusammenfügen Größe der Unterprobleme
(bestimmt Höhe des Rekursionsbaums)
Stand der Dinge
Laufzeiten der Form:
T(n) = a ⋅ T(n/b) + f(n)
Anzahl
Unterprobleme
Aufwand für Aufteilen und Zusammenfügen Größe der Unterprobleme
(bestimmt Höhe des Rekursionsbaums) Welche unterschiedlichen Fälle gibt es?
Master Theorem
Laufzeit:
a ⋅ T(n/b) + f(n) , n> 1 Θ(1) , n= 1 T(n)=
n
n/b n/b n/b
f(n)
… …
Master Theorem
Laufzeit:
a ⋅ T(n/b) + f(n) , n> 1 Θ(1) , n= 1 T(n)=
n
n/b n/b n/b
f(n)
… …
a-mal
Master Theorem
Laufzeit:
a ⋅ T(n/b) + f(n) , n> 1 Θ(1) , n= 1 T(n)=
n
n/b n/b n/b
f(n) a⋅f(n/b)
… …
a-mal
Master Theorem
Laufzeit:
a ⋅ T(n/b) + f(n) , n> 1 Θ(1) , n= 1 T(n)=
n
n/b n/b n/b
f(n) a⋅f(n/b)
1 1 1 1 1 1 a ⋅Θ(1)h
… …
Master Theorem
Laufzeit:
a ⋅ T(n/b) + f(n) , n> 1 Θ(1) , n= 1
Höhe des Baums: h = log n T(n)=
n
n/b n/b n/b
f(n) a⋅f(n/b)
1 1 1 1 1 1 a ⋅Θ(1)h
… …
h
Master Theorem
Analyse:
Setze a ⋅ f(n/b) = c ⋅ f(n)
Höhe des Baums: h = log n
n
n/b n/b n/b
f(n) a⋅f(n/b)
1 1 1 1 1 1 a ⋅Θ(1)h
h
… …
Analyse:
Setze a ⋅ f(n/b) = c ⋅ f(n)
Höhe des Baums: h = log n
Master Theorem
n
n/b n/b n/b
f(n) a⋅f(n/b)
1 1 1 1 1 1 a ⋅Θ(1)h
… …
Fallunterscheidung nach Konstante c
h
Analyse:
Setze a ⋅ f(n/b) = c ⋅ f(n)
Höhe des Baums: h = log n
Master Theorem
n
n/b n/b n/b
f(n) a⋅f(n/b)
1 1 1 1 1 1 a ⋅Θ(1)h
… …
Fall 1:
c<1
Θ(f(n))
h
Analyse:
Setze a ⋅ f(n/b) = c ⋅ f(n)
Höhe des Baums: h = log n
Master Theorem
n
n/b n/b n/b
f(n) a⋅f(n/b)
1 1 1 1 1 1 a ⋅Θ(1)h
… …
Fall 1:
c=1
Θ(f(n)⋅log n)
h
Analyse:
Setze a ⋅ f(n/b) = c ⋅ f(n)
Höhe des Baums: h = log n
Master Theorem
n
n/b n/b n/b
f(n) a⋅f(n/b)
1 1 1 1 1 1 a ⋅Θ(1)h
… …
Fall 1:
c>1
Θ(alog nb )
h
Analyse:
Setze a ⋅ f(n/b) = c ⋅ f(n)
Höhe des Baums: h = log n
Master Theorem
n
n/b n/b n/b
f(n) a⋅f(n/b)
1 1 1 1 1 1 a ⋅Θ(1)h
… …
Fall 1:
c>1
Θ(nlog ab )
h
Matrix Multiplikation
3 7 5 4 2 1 1 0 0 3 2 4 0 0 1 3 10 2 1 0 3 1 1 0 1 0 1 0 2 3 2 2
=
Matrix Multiplikation
3 7 5 4 2 1 1 0 0 3 2 4 0 0 1 3
10 2 1 0 3 1 1 0 1 0 1 0 2 3 2 2
Zeile × Spalte:
3 ⋅ 2 + 7 ⋅ 0 + 5 ⋅ 3 + 4 ⋅ 2 = 29
=
Matrix Multiplikation
3 7 5 4 2 1 1 0 29 0 3 2 4 0 0 1 3
10 2 1 0 3 1 1 0 1 0 1 0 2 3 2 2
Zeile × Spalte:
3 ⋅ 2 + 7 ⋅ 0 + 5 ⋅ 3 + 4 ⋅ 2 = 29
=
Matrix Multiplikation
3 7 5 4 2 1 1 0 29 20 0 3 2 4 0 0 1 3
10 2 1 0 3 1 1 0 1 0 1 0 2 3 2 2
Zeile × Spalte:
3 ⋅ 1 + 7 ⋅ 0 + 5 ⋅ 1 + 4 ⋅ 3 = 20
=
Matrix Multiplikation
3 7 5 4 2 1 1 0 29 20 23 0 3 2 4 0 0 1 3
10 2 1 0 3 1 1 0 1 0 1 0 2 3 2 2
=
Matrix Multiplikation
3 7 5 4 2 1 1 0 29 20 23 29 0 3 2 4 0 0 1 3
10 2 1 0 3 1 1 0 1 0 1 0 2 3 2 2
=
Matrix Multiplikation
=
3 7 5 4 2 1 1 0 29 20 23 29 0 3 2 4 0 0 1 3 14
10 2 1 0 3 1 1 0 1 0 1 0 2 3 2 2
Matrix Multiplikation
=
3 7 5 4 2 1 1 0 29 20 23 29 0 3 2 4 0 0 1 3 14 14
10 2 1 0 3 1 1 0 1 0 1 0 2 3 2 2
Matrix Multiplikation
3 7 5 4 2 1 1 0 29 20 23 29 0 3 2 4 0 0 1 3 14 14 … 10 2 1 0 3 1 1 0 …
1 0 1 0 2 3 2 2 …
=
Matrix Multiplikation
Teile & Herrsche – noch ein Beispiel:
• Problem: Berechne das Produkt zweier n×n Matrizen
• Eingabe: Matrizen X,Y
• Ausgabe: Matrix Z = X⋅Y
⎟⎟
⎟⎟
⎟
⎠
⎞
⎜⎜
⎜⎜
⎜
⎝
⎛
=
4,4 4,3
4,2 4,1
3,4 3,3
3,2 3,1
2,4 2,3
2,2 2,1
1,4 1,3
1,2 1,1
x x
x x
x x
x x
x x
x x
x x
x x
X
⎟⎟
⎟⎟
⎟
⎠
⎞
⎜⎜
⎜⎜
⎜
⎝
⎛
=
4,4 4,3
4,2 4,1
3,4 3,3
3,2 3,1
2,4 2,3
2,2 2,1
1,4 1,3
1,2 1,1
y y
y y
y y
y y
y y
y y
y y
y y
, Y
Matrix Multiplikation
MatrixMultiplikation(Array X, Y, n) 1. new array Z[1,..,n][1,..,n]
2. for i←1 to n do
3. for j ← 1 to n do 4. Z[i][j] ← 0
5. for k ←1 to n do
6. Z[i][j] ← Z[i][j] + X[i][k] ⋅ Y[k][j]
7. return Z
Matrix Multiplikation
MatrixMultiplikation(Array X, Y, n) 1. new array Z[1,..,n][1,..,n]
2. for i←1 to n do
3. for j ← 1 to n do 4. Z[i][j] ← 0
5. for k ←1 to n do
6. Z[i][j] ← Z[i][j] + X[i][k] ⋅ Y[k][j]
7. return Z
Matrix Multiplikation
MatrixMultiplikation(Array X, Y, n) 1. new array Z[1,..,n][1,..,n]
2. for i←1 to n do
3. for j ← 1 to n do 4. Z[i][j] ← 0
5. for k ←1 to n do
6. Z[i][j] ← Z[i][j] + X[i][k] ⋅ Y[k][j]
7. return Z
Matrix Multiplikation
MatrixMultiplikation(Array X, Y, n) 1. new array Z[1,..,n][1,..,n]
2. for i←1 to n do
3. for j ← 1 to n do 4. Z[i][j] ← 0
5. for k ←1 to n do
6. Z[i][j] ← Z[i][j] + X[i][k] ⋅ Y[k][j]
7. return Z
Matrix Multiplikation
MatrixMultiplikation(Array X, Y, n) 1. new array Z[1,..,n][1,..,n]
2. for i←1 to n do
3. for j ← 1 to n do 4. Z[i][j] ← 0
5. for k ←1 to n do
6. Z[i][j] ← Z[i][j] + X[i][k] ⋅ Y[k][j]
7. return Z
Matrix Multiplikation
MatrixMultiplikation(Array X, Y, n) 1. new array Z[1,..,n][1,..,n]
2. for i←1 to n do
3. for j ← 1 to n do 4. Z[i][j] ← 0
5. for k ←1 to n do
6. Z[i][j] ← Z[i][j] + X[i][k] ⋅ Y[k][j]
7. return Z
Matrix Multiplikation
MatrixMultiplikation(Array X, Y, n) 1. new array Z[1,..,n][1,..,n]
2. for i←1 to n do
3. for j ← 1 to n do 4. Z[i][j] ← 0
5. for k ←1 to n do
6. Z[i][j] ← Z[i][j] + X[i][k] ⋅ Y[k][j]
7. return Z
Matrix Multiplikation
MatrixMultiplikation(Array X, Y, n) 1. new array Z[1,..,n][1,..,n]
2. for i←1 to n do
3. for j ← 1 to n do 4. Z[i][j] ← 0
5. for k ←1 to n do
6. Z[i][j] ← Z[i][j] + X[i][k] ⋅ Y[k][j]
7. return Z
Matrix Multiplikation
MatrixMultiplikation(Array X, Y, n) Laufzeit:
1. new array Z[1,..,n][1,..,n] Θ(n²) 2. for i←1 to n do
3. for j ← 1 to n do 4. Z[i][j] ← 0
5. for k ←1 to n do
6. Z[i][j] ← Z[i][j] + X[i][k] ⋅ Y[k][j]
7. return Z
Matrix Multiplikation
MatrixMultiplikation(Array X, Y, n) Laufzeit:
1. new array Z[1,..,n][1,..,n] Θ(n²)
2. for i←1 to n do Θ(n)
3. for j ← 1 to n do 4. Z[i][j] ← 0
5. for k ←1 to n do
6. Z[i][j] ← Z[i][j] + X[i][k] ⋅ Y[k][j]
7. return Z
Matrix Multiplikation
MatrixMultiplikation(Array X, Y, n) Laufzeit:
1. new array Z[1,..,n][1,..,n] Θ(n²)
2. for i←1 to n do Θ(n)
3. for j ← 1 to n do Θ(n²) 4. Z[i][j] ← 0
5. for k ←1 to n do
6. Z[i][j] ← Z[i][j] + X[i][k] ⋅ Y[k][j]
7. return Z
Matrix Multiplikation
MatrixMultiplikation(Array X, Y, n) Laufzeit:
1. new array Z[1,..,n][1,..,n] Θ(n²)
2. for i←1 to n do Θ(n)
3. for j ← 1 to n do Θ(n²)
4. Z[i][j] ← 0 Θ(n²)
5. for k ←1 to n do
6. Z[i][j] ← Z[i][j] + X[i][k] ⋅ Y[k][j]
7. return Z
Matrix Multiplikation
MatrixMultiplikation(Array X, Y, n) Laufzeit:
1. new array Z[1,..,n][1,..,n] Θ(n²)
2. for i←1 to n do Θ(n)
3. for j ← 1 to n do Θ(n²)
4. Z[i][j] ← 0 Θ(n²)
5. for k ←1 to n do Θ(n³) 6. Z[i][j] ← Z[i][j] + X[i][k] ⋅ Y[k][j]
7. return Z
Matrix Multiplikation
MatrixMultiplikation(Array X, Y, n) Laufzeit:
1. new array Z[1,..,n][1,..,n] Θ(n²)
2. for i←1 to n do Θ(n)
3. for j ← 1 to n do Θ(n²)
4. Z[i][j] ← 0 Θ(n²)
5. for k ←1 to n do Θ(n³) 6. Z[i][j] ← Z[i][j] + X[i][k] ⋅ Y[k][j] Θ(n ) 7. return Z
3
Matrix Multiplikation
MatrixMultiplikation(Array X, Y, n) Laufzeit:
1. new array Z[1,..,n][1,..,n] Θ(n²)
2. for i←1 to n do Θ(n)
3. for j ← 1 to n do Θ(n²)
4. Z[i][j] ← 0 Θ(n²)
5. for k ←1 to n do Θ(n³) 6. Z[i][j] ← Z[i][j] + X[i][k] ⋅ Y[k][j] Θ(n ) 7. return Z Θ(1)
3
Matrix Multiplikation
MatrixMultiplikation(Array X, Y, n) Laufzeit:
1. new array Z[1,..,n][1,..,n] Θ(n²)
2. for i←1 to n do Θ(n)
3. for j ← 1 to n do Θ(n²)
4. Z[i][j] ← 0 Θ(n²)
5. for k ←1 to n do Θ(n³) 6. Z[i][j] ← Z[i][j] + X[i][k] ⋅ Y[k][j] Θ(n ) 7. return Z Θ(1)
Θ(n³)
3
Matrix Multiplikation
Teile und Herrsche:
Aufwand:
• 8 Multiplikationen von n/2×n/2 Matrizen
• 4 Additionen von n/2×n/2 Matrizen
⎟⎟ ⎠
⎜⎜ ⎞
⎝
⎛
+ +
+
= +
⎟⎟ ⎠
⎜⎜ ⎞
⎝
× ⎛
⎟⎟ ⎠
⎜⎜ ⎞
⎝
⎛
DH CF
DG CE
BH AF
BG AE
H G
F E
D C
B
A
Matrix Multiplikation
Teile und Herrsche:
Aufwand:
• 8 Multiplikationen von n/2×n/2 Matrizen
• 4 Additionen von n/2×n/2 Matrizen
Laufzeit:
• T(n) = 8⋅T(n/2) + Θ(n²)
⎟⎟ ⎠
⎜⎜ ⎞
⎝
⎛
+ +
+
= +
⎟⎟ ⎠
⎜⎜ ⎞
⎝
× ⎛
⎟⎟ ⎠
⎜⎜ ⎞
⎝
⎛
DH CF
DG CE
BH AF
BG AE
H G
F E
D C
B
A
Matrix Multiplikation
Laufzeit:
• T(n) = 8 ⋅ T(n/2) + k⋅n²
Master Theorem:
• f(n) = k ⋅ n²
• 8 ⋅ f(n/2)
a b f(n)
Matrix Multiplikation
Laufzeit:
• T(n) = 8 ⋅ T(n/2) + k⋅n²
Master Theorem:
• f(n) = k ⋅ n²
• 8 ⋅ f(n/2) = 8 ⋅ k²n²/4
a b f(n)
Matrix Multiplikation
Laufzeit:
• T(n) = 8 ⋅ T(n/2) + k⋅n²
Master Theorem:
• f(n) = k ⋅ n²
• 8 ⋅ f(n/2) = 8 ⋅ k²n²/4 = 2 ⋅ k²n²
a b f(n)
Matrix Multiplikation
Laufzeit:
• T(n) = 8 ⋅ T(n/2) + k⋅n²
Master Theorem:
• f(n) = k ⋅ n²
• 8 ⋅ f(n/2) = 8 ⋅ k²n²/4 = 2 ⋅ k²n² = 2 ⋅ f(n)
a b f(n)
Matrix Multiplikation
Laufzeit:
• T(n) = 8 ⋅ T(n/2) + k⋅n²
Master Theorem:
• f(n) = k ⋅ n²
• 8 ⋅ f(n/2) = 8 ⋅ k²n²/4 = 2 ⋅ k²n² = 2 ⋅ f(n)
a b f(n)
Matrix Multiplikation
Laufzeit:
• T(n) = 8 ⋅ T(n/2) + k⋅n²
Master Theorem:
• f(n) = k ⋅ n²
• 8 ⋅ f(n/2) = 8 ⋅ k²n²/4 = 2 ⋅ k²n² = 2 ⋅ f(n) c>1
a b f(n)
Matrix Multiplikation
Laufzeit:
• T(n) = 8 ⋅ T(n/2) + k⋅n²
Master Theorem:
• f(n) = k ⋅ n²
• 8 ⋅ f(n/2) = 8 ⋅ k²n²/4 = 2 ⋅ k²n² = 2 ⋅ f(n)
• Fall 3: Laufzeit Θ(nlog ab )
a b f(n)
c>1
Matrix Multiplikation
Laufzeit:
• T(n) = 8 ⋅ T(n/2) + k⋅n²
Master Theorem:
• f(n) = k ⋅ n²
• 8 ⋅ f(n/2) = 8 ⋅ k²n²/4 = 2 ⋅ k²n² = 2 ⋅ f(n)
• Fall 3: Laufzeit Θ(nlog ab ) = Θ(n³)
a b f(n)
c>1
Matrix Multiplikation
Laufzeit:
• T(n) = 8 ⋅ T(n/2) + k⋅n²
Master Theorem:
• f(n) = k ⋅ n²
• 8 ⋅ f(n/2) = 8 ⋅ k²n²/4 = 2 ⋅ k²n² = 2 ⋅ f(n)
• Fall 3: Laufzeit Θ(n ) = Θ(n³)
• Formaler Beweis durch Induktion!!
log a b
a b f(n)
c>1
Matrix Multiplikation
Laufzeit:
• T(n) = 8 ⋅ T(n/2) + k⋅n²
Master Theorem:
• f(n) = k ⋅ n²
• 8 ⋅ f(n/2) = 8 ⋅ k²n²/4 = 2 ⋅ k²n² = 2 ⋅ f(n)
• Fall 3: Laufzeit Θ(n ) = Θ(n³)
• Formaler Beweis durch Induktion!!
• Nicht besser als einfacher Algorithmus
log a b
a b f(n)
c>1
Matrix Multiplikation
Teile und Herrsche:
Trick (wie bei Integer Multiplikation):
P = A⋅(F-H) P = (A+D)⋅(E+H) P = (A+B)⋅H P = (B-D)⋅(G+H) P = (C+D)⋅E P = (A-C)⋅(E+F) P = D⋅(G-E)
⎟⎟ ⎠
⎜⎜ ⎞
⎝
⎛
+ +
+
= +
⎟⎟ ⎠
⎜⎜ ⎞
⎝
× ⎛
⎟⎟ ⎠
⎜⎜ ⎞
⎝
⎛
DH CF
DG CE
BH AF
BG AE
H G
F E
D C
B A
1 2 3 4
5 6 7
Matrix Multiplikation
Teile und Herrsche:
Trick (wie bei Integer Multiplikation):
P = A⋅(F-H) P = (A+D)⋅(E+H) AE+BG = P + P - P + P P = (A+B)⋅H P = (B-D)⋅(G+H) AF+BH = P + P
P = (C+D)⋅E P = (A-C)⋅(E+F) CE+DG = P + P
P = D⋅(G-E) CF+DH = P + P - P - P
⎟⎟ ⎠
⎜⎜ ⎞
⎝
⎛
+ +
+
= +
⎟⎟ ⎠
⎜⎜ ⎞
⎝
× ⎛
⎟⎟ ⎠
⎜⎜ ⎞
⎝
⎛
DH CF
DG CE
BH AF
BG AE
H G
F E
D C
B A
1 2 3 4
5 6 7
5 4 2 6
1 2
3 4
5 1 3 7
60
Matrix Multiplikation
Teile und Herrsche:
Trick (wie bei Integer Multiplikation):
P = A⋅(F-H) P = (A+D)⋅(E+H) AE+BG = P + P - P + P P = (A+B)⋅H P = (B-D)⋅(G+H) AF+BH = P + P
P = (C+D)⋅E P = (A-C)⋅(E+F) CE+DG = P + P
P = D⋅(G-E) CF+DH = P + P - P - P
⎟⎟ ⎠
⎜⎜ ⎞
⎝
⎛
+ +
+
= +
⎟⎟ ⎠
⎜⎜ ⎞
⎝
× ⎛
⎟⎟ ⎠
⎜⎜ ⎞
⎝
⎛
DH CF
DG CE
BH AF
BG AE
H G
F E
D C
B A
1 2 3 4
5 6 7
5 4 2 6
1 2
3 4
5 1 3 7
7 Multiplikationen!!!
Matrix Multiplikation
Laufzeit:
• T(n) = 7 ⋅ T(n/2) + k⋅n²
Master Theorem:
• f(n) = k ⋅ n²
a b f(n)
Matrix Multiplikation
Laufzeit:
• T(n) = 7 ⋅ T(n/2) + k⋅n²
Master Theorem:
• f(n) = k ⋅ n²
• 7 ⋅ f(n/2) = 7 ⋅ k n²/4
a b f(n)
Matrix Multiplikation
Laufzeit:
• T(n) = 7 ⋅ T(n/2) + k⋅n²
Master Theorem:
• f(n) = k ⋅ n²
• 7 ⋅ f(n/2) = 7 ⋅ k n²/4 = 7/4 ⋅ k n²
a b f(n)
Matrix Multiplikation
Laufzeit:
• T(n) = 7 ⋅ T(n/2) + k⋅n²
Master Theorem:
• f(n) = k ⋅ n²
• 7 ⋅ f(n/2) = 7 ⋅ k n²/4 = 7/4 ⋅ k n² = 7/4 ⋅ f(n)
a b f(n)
Matrix Multiplikation
Laufzeit:
• T(n) = 7 ⋅ T(n/2) + k⋅n²
Master Theorem:
• f(n) = k ⋅ n²
• 7 ⋅ f(n/2) = 7 ⋅ k n²/4 = 7/4 ⋅ k n² = 7/4 ⋅ f(n)
a b f(n)
Matrix Multiplikation
Laufzeit:
• T(n) = 7 ⋅ T(n/2) + k⋅n²
Master Theorem:
• f(n) = k ⋅ n²
• 7 ⋅ f(n/2) = 7 ⋅ k n²/4 = 7/4 ⋅ k n² = 7/4 ⋅ f(n)
a b f(n)
Wieder Fall c>1
Matrix Multiplikation
Laufzeit:
• T(n) = 7 ⋅ T(n/2) + k⋅n²
Master Theorem:
• f(n) = k ⋅ n²
• 7 ⋅ f(n/2) = 7 ⋅ k n²/4 = 7/4 ⋅ k n² = 7/4 ⋅ f(n)
• Fall 3: Laufzeit Θ(n )
a b f(n)
Wieder Fall c>1
log a b
Matrix Multiplikation
Laufzeit:
• T(n) = 7 ⋅ T(n/2) + k⋅n²
Master Theorem:
• f(n) = k ⋅ n²
• 7 ⋅ f(n/2) = 7 ⋅ k n²/4 = 7/4 ⋅ k n² = 7/4 ⋅ f(n)
• Fall 3: Laufzeit Θ(n )=Θ(n )
a b f(n)
Wieder Fall c>1
log a
b log 72
Matrix Multiplikation
Laufzeit:
• T(n) = 7 ⋅ T(n/2) + k⋅n²
Master Theorem:
• f(n) = k ⋅ n²
• 7 ⋅ f(n/2) = 7 ⋅ k n²/4 = 7/4 ⋅ k n² = 7/4 ⋅ f(n)
• Fall 3: Laufzeit Θ(n )=Θ(n ) = Θ(n )
• Verbesserter Algorithmus!
(Erheblicher Unterschied für große Eingaben)
a b f(n)
Wieder Fall c>1
log a
b log 72 2,81
Matrix Multiplikation
Satz 6
Das Produkt zweier n×n Matrizen kann in Θ(n ) Laufzeit berechnet werden.
2,81