Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
D
Datenstrukturen und Algorithm Skript
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Package registry
Container registry
Model registry
Operate
Environments
Terraform modules
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
GitLab community forum
Contribute to GitLab
Provide feedback
Terms and privacy
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
Unger, Florian Fedor Fridolin
Datenstrukturen und Algorithm Skript
Commits
2fec4398
Commit
2fec4398
authored
2 years ago
by
Florian Unger
Browse files
Options
Downloads
Patches
Plain Diff
Kapitel 1.2 neu strukturiert, ähnlicher zur Vorlesung.
parent
bc6c8614
Branches
Branches containing commit
No related tags found
No related merge requests found
Changes
1
Show whitespace changes
Inline
Side-by-side
Showing
1 changed file
102_Asymptotische_Schranken.tex
+174
-129
174 additions, 129 deletions
102_Asymptotische_Schranken.tex
with
174 additions
and
129 deletions
102_Asymptotische_Schranken.tex
+
174
−
129
View file @
2fec4398
...
@@ -8,7 +8,7 @@ Programms als auch der Speicherbedarf $S(n)$ meist durch \emph{asymptotische Sch
...
@@ -8,7 +8,7 @@ Programms als auch der Speicherbedarf $S(n)$ meist durch \emph{asymptotische Sch
Wir schließen das Kapitel mit einer formaleren Definition, wie wir die Laufzeit (und Speicherverbrauch)
Wir schließen das Kapitel mit einer formaleren Definition, wie wir die Laufzeit (und Speicherverbrauch)
eines Programms in Abhängigkeit von der Inputlänge
$
n
$
beschreiben:
eines Programms in Abhängigkeit von der Inputlänge
$
n
$
beschreiben:
\begin{definition}
[Laufzeit
$
T
(
n
)
$
und Speicherverbrauch
$
S
(
n
)
$
]
\begin{definition}
[Laufzeit
$
T
(
n
)
$
und Speicherverbrauch
$
S
(
n
)
$
]
Sei
$
I
$
der Input für unseren Algorithmus,
$
\abs
{
I
}
<
\infty
$
die Größe des Inputs. Sei
$
T
(
I
)
\in
\mathbb
{
R
}^
+
$
die
Sei
$
I
$
der Input für unseren Algorithmus,
$
\abs
{
I
}
<
∞
$
die Größe des Inputs. Sei
$
T
(
I
)
\in
\mathbb
{
R
}^
+
$
die
Laufzeit, die unser Algorithmus für Input
$
I
$
benötigt. Dann definieren wir
Laufzeit, die unser Algorithmus für Input
$
I
$
benötigt. Dann definieren wir
\begin{itemize}
\begin{itemize}
\item
$
T
_{
\text
{
wc
}}
(
n
)
=
\max\{
T
(
I
)
:
\abs
{
I
}
=
n
\}
$
ist die
\emph
{
worst case
}
Laufzeit.
\item
$
T
_{
\text
{
wc
}}
(
n
)
=
\max\{
T
(
I
)
:
\abs
{
I
}
=
n
\}
$
ist die
\emph
{
worst case
}
Laufzeit.
...
@@ -133,108 +133,21 @@ Man sieht direkt, dass
...
@@ -133,108 +133,21 @@ Man sieht direkt, dass
f
\in
\Theta
(
g
)
\Leftrightarrow
f
\in
\mathcal
{
O
}
(
g
)
\text
{
und
}
f
\in
\Omega
(
g
)
.
f
\in
\Theta
(
g
)
\Leftrightarrow
f
\in
\mathcal
{
O
}
(
g
)
\text
{
und
}
f
\in
\Omega
(
g
)
.
\]
\]
Wir können nun direkt mit dieser Definition den Asymptotischen Aufwand von
$
T
^{
\text
{
is
}}_{
\text
{
avg
}}
(
n
)
$
Wir können nun direkt mit dieser Definition den Asymptotischen Aufwand von
$
T
^{
\text
{
is
}}_{
\text
{
bc
}}
(
n
)
$
klassifizieren:
klassifizieren:
\begin{example}
[
$
T
^{
\text
{
is
}}_{
\text
{
avg
}}
\in
\Theta
(
n
^
2
)
$
]
\begin{example}
[
$
T
^{
\text
{
is
}}_{
\text
{
bc
}}
\in
O
(
n
)
$
]
Zuerst zeigen wir, dass
$
T
^{
\text
{
is
}}_{
\text
{
avg
}}
=
a
_
2
n
^
2
+
a
_
1
n
+
a
_
0
\in
\mathcal
{
O
}
(
n
^
2
)
$
:
Die best-case-Laufzeit von
$
\texttt
{
insertionsort
}$
ist
$
T
^{
\text
{
is
}}_{
\text
{
bc
}}
(
n
)
=
w
_
0
+
w
_
1
n
$
.
Es gilt
Gesucht werden
$
c
\in
\mathbb
{
R
}^
+
, n
_
0
\in
\mathbb
{
N
}$
sodass für alle
$
n > n
_
0
:
$
\[
a
_
2
n
^
2
+
a
_
1
n
+
a
_
0
\leq
c n
^
2
.
\]
Wähle mit
$
m
=
\max
(
\{
a
_
0
, a
_
1
, a
_
2
\}
)
$
die Konstante
$
c
=
3
m
$
. Dann gilt für
$
n >
1
$
:
\begin{align*}
c n
^
2
&
= mn
^
2 + mn
^
2 + mn
^
2
\\
&
\geq
a
_
2 n
^
2 + a
_
1 n + a
_
0,
\end{align*}
da
$
n
^
2
\geq
n
$
und
$
n
^
2
\geq
1
$
für alle
$
n >
1
$
.
Für
$
T
^{
\text
{
is
}}_{
\text
{
avg
}}
\in
\Omega
(
n
^
2
)
$
nehmen wir noch an, dass
$
a
_
0
, a
_
1
, a
_
2
>
0
$
. Dann ist mit
$
c
=
a
_
2
$
klar:
\[
\[
c n
^
2
\leq
a
_
2
n
^
2
+
a
_
1
n
+
a
_
0
\text
{
für alle
}
n
\geq
0
.
w
_
0
+
w
_
1
n ≤ n
+
w
_
1
n
=
(
w
_
1
+
1
)
n
\text
{
für alle
}
n
≥ w
_
0
.
\]
\]
Auch ohne die Einschränkung
$
a
_
0
, a
_
1
, a
_
2
>
0
$
gilt
$
T
^{
\text
{
is
}}_{
\text
{
avg
}}
\in
\Theta
(
n
^
2
)
$
, aber es ist eine
Setzen wir als
$
c
=
w
_
1
+
1
$
und
$
n
_
0
=
w
_
0
$
, so gilt
$
w
_
0
+
w
_
1
n ≤ c n
$
für alle
$
n ≥ n
_
0
$
und damit
für Laufzeitfunktionen sinnvolle Einschränkung.
$
T
^{
\text
{
is
}}_{
\text
{
bc
}}
\in
Θ
(
n
)
$
.
\end{example}
\begin{example}
[
$
6
n
^
3
\notin
\mathcal
{
O
}
(
n
^
2
)
$
]
Als nächstes schauen wir, ob
$
6
n
^
3
$
asymptotisch langsamer wächst als
$
n
^
2
$
. Gehen wir also davon aus, dass es
$
c
\in
\mathbb
{
R
}^
+
$
und
$
n
_
0
\in
\mathbb
{
N
}$
gäbe, sodass
$
6
n
^
3
\leq
cn
^
2
$
für alle
$
n > n
_
0
$
. Dann können wir die
Ungleichung aber mit
$
\frac
{
1
}{
6
n
^
2
}$
multiplizieren und hätten
$
n
\leq
\frac
{
c
}{
6
}$
für alle
$
n > n
_
0
$
. Da
$
c
$
eine
Konstante ist, ist dies ein Widerspruch.
\end{example}
\end{example}
Dieses Beispiel zeigt, das man die Quantorendefinition zwar direkt nutzen kann, aber dabei jedes mal nachdenken muss,
wie
$
c
$
und
$
n
_
0
$
geschickt zu wählen sind.
Betrachten wir nun ein spannenderes Beispiel: Ist
$
\ln
(
n
)
\in
\mathcal
{
O
}
(
\sqrt
{
n
}
)
$
? Mit unserer Quantorendefinition
Um in Zukunft asymptotische Schranken genauer zu bestimmen, formulieren wir ein paar Rechenregeln:
kommen wir erstmal nicht weiter. Aber gefühlt wächst
$
\ln
$
langsamer! Wir können ja die kontinuierlichen Varianten
$
\ln
(
x
)
$
und
$
\sqrt
{
x
}$
betrachten, die die Ableitung
$
\frac
{
1
}{
x
}$
respektive
$
\frac
{
1
}{
2
\sqrt
{
x
}}$
haben. Anscheinend
wächst der Logarithmus ja wirklich bedeutend langsamer! Das Grenzwertkriterium (und die Regel von L'Hôpital) hilt uns
dabei enorm:
\subsection
{
Grenzwertkriterium
}
Oftmals ist Nachweis gewissen asymptotischen Verhaltens auf diese direkte Art recht umständlich. Existiert der Grenzwert
$
\frac
{
f
(
n
)
}{
g
(
n
)
}$
im Infinitesimalen, so können wir das Grenzwertverhalten direkt ablesen:
\begin{lemma}
\label
{
lemma
_
asymptotic
_
limit
}
Seien
$
f,g:
\mathbb
{
N
}
\rightarrow
\mathbb
{
R
}^
+
$
zwei positive Funktionen. Existiert der Grenzwert
$
\lim
_{
n
\rightarrow
\infty
}
\frac
{
f
(
n
)
}{
g
(
n
)
}
=
K
$
, so gilt:
\begin{itemize}
\item
Ist
$
0
\le
K <
\infty
$
, so folgt
$
f
\in
\mathcal
{
O
}
(
g
)
$
\item
Ist
$
0
< K
\leq
\infty
$
, so folgt
$
f
\in
\Omega
(
g
)
$
\item
Ist
$
0
< K <
\infty
$
, so folgt
$
f
\in
\Theta
(
g
)
$
\end{itemize}
\end{lemma}
Damit können wir das Logarithmusbeispiel lösen:
\begin{example}
[
$
\ln
(
n
)
\in
\mathcal
{
O
}
(
\sqrt
{
n
}
)
$
]
Wir betrachten weiterhin die kontinuierlichen Versionen. Dann gilt:
\[
\lim
_{
x
\rightarrow
\infty
}
\frac
{
\ln
(
x
)
}{
\sqrt
{
x
}}
=
\frac
{
\infty
}{
\infty
}
,
\]
wir müssen uns also um die Regel von L'Hôpital bemühen. Nach dieser existiert obiger Limes, solange der Limes der
Ableitungen existiert.
\[
\lim
_{
x
\rightarrow
\infty
}
\frac
{
\ln
(
x
)
}{
\sqrt
{
x
}}
=
\lim
_{
x
\rightarrow
\infty
}
\frac
{
\frac
{
\partial
\ln
(
x
)
}{
\partial
x
}}{
\frac
{
\partial
\sqrt
{
x
}}{
\partial
x
}}
=
\lim
_{
x
\rightarrow
\infty
}
\frac
{
2
\sqrt
{
x
}}{
x
}
=
\lim
_{
x
\rightarrow
\infty
}
\frac
{
2
}{
\sqrt
{
x
}}
=
0
.
\]
\end{example}
Zu beachten ist, dass die Umkehrung nicht unbedingt gilt, z.B.,
$
f
(
n
)
=
\sin
(
\frac
{
n
}{
100
}
)
+
1
$
. Es gilt
$
f
(
n
)=
\mathcal
{
O
}
(
1
)
$
, aber der Grenzwert
$
\lim
_{
n
\to
\infty
}
\frac
{
f
(
n
)
}{
1
}$
existiert nicht. Das ist
die Motivation für die folgende Alternativdefinition:
\subsection
{
Definition der asymptotischen Schranken über den Limes
}
Wir erinnern uns an die Definition des Limes superior bzw Limes inferior:
\begin{definition}
[Limes superior und Limes inferior]
Sei
$
f:
\mathbb
{
N
}
\rightarrow
\mathbb
{
R
}^
+
$
eine positive Funktion. Wir definieren
\[
\limsup
_{
n
\rightarrow
\infty
}
f
(
n
)
:
=
\inf
_{
n
_
0
\in
\mathbb
{
N
}}
\sup
_{
n
\ge
n
_
0
}
g
(
n
)
\]
und analog
\[
\liminf
_{
n
\rightarrow
\infty
}
f
(
n
)
:
=
\sup
_{
n
_
0
\in
\mathbb
{
N
}}
\inf
_{
n
\ge
n
_
0
}
g
(
n
)
\]
\end{definition}
Für uns der größte Vorteil ist, dass unter den gegebenen Umständen sowohl der Limes superior als auch der Limes inferior
stets existieren und Werte in
$
\mathbb
{
R
}^
+
\cup
\{\infty\}
$
annehmen.
Damit können wir nicht nur Kriterien für asymptotisches Wachstum benennen, sondern sogar Äquivalenzen.
\begin{theorem}
Seien
$
f,g:
\mathbb
{
N
}
\rightarrow
\mathbb
{
R
}^
+
$
positive reelle Funktionen. Es gilt
\begin{itemize}
\item
$
f
\in
\mathcal
{
O
}
(
g
)
\Leftrightarrow
\limsup
_{
n
\rightarrow
\infty
}
\frac
{
f
(
n
)
}{
g
(
n
)
}
<
\infty
$
,
\item
$
f
\in
\Omega
(
g
)
\Leftrightarrow
\liminf
_{
n
\rightarrow
\infty
}
\frac
{
f
(
n
)
}{
g
(
n
)
}
>
0
$
,
\item
$
f
\in
\Theta
(
g
)
\Leftrightarrow
\limsup
_{
n
\rightarrow
\infty
}
\frac
{
f
(
n
)
}{
g
(
n
)
}
<
\infty
\text
{
und
}
\liminf
_{
n
\rightarrow
\infty
}
\frac
{
f
(
n
)
}{
g
(
n
)
}
>
0
$
.
\end{itemize}
\label
{
theorem:limit
_
definition
}
\end{theorem}
\subsection
{
Rechenregeln für die
$
\mathcal
{
O
}$
-Notation
}
\begin{lemma}
\begin{lemma}
Seien
$
f, f', g, g', h:
\mathbb
{
N
}
\rightarrow
\mathbb
{
R
}^
+
$
.
Seien
$
f, f', g, g', h:
\mathbb
{
N
}
\rightarrow
\mathbb
{
R
}^
+
$
.
\begin{labeling}
{
Multiplikation
\ \
}
\begin{labeling}
{
Multiplikation
\ \
}
...
@@ -249,7 +162,6 @@ Damit können wir nicht nur Kriterien für asymptotisches Wachstum benennen, son
...
@@ -249,7 +162,6 @@ Damit können wir nicht nur Kriterien für asymptotisches Wachstum benennen, son
\end{lemma}
\end{lemma}
Anmerkung: Gilt die zusätzliche Bedingung
$
g ∈
\mathcal
{
O
}
(
g'
)
$
nicht (und in keine der beiden Richtungen), so gilt
Anmerkung: Gilt die zusätzliche Bedingung
$
g ∈
\mathcal
{
O
}
(
g'
)
$
nicht (und in keine der beiden Richtungen), so gilt
immernoch
$
f
+
f' ∈
\mathcal
{
O
}
(
m
)
$
, wobei
$
m
(
n
)
=
\text
{
max
}
(
g
(
n
)
, g'
(
n
))
$
das elementweise Maximum von
$
g
$
und
$
g'
$
ist.
immernoch
$
f
+
f' ∈
\mathcal
{
O
}
(
m
)
$
, wobei
$
m
(
n
)
=
\text
{
max
}
(
g
(
n
)
, g'
(
n
))
$
das elementweise Maximum von
$
g
$
und
$
g'
$
ist.
\begin{proof}
\begin{proof}
Wir betrachten zur Veranschaulichung die Transitivität genauer.
Wir betrachten zur Veranschaulichung die Transitivität genauer.
Nach Voraussetzung gibt es
$
c, c'
\in
\mathbb
{
R
}^
+
$
und
$
n
_
0
, n'
_
0
\in
\mathbb
{
N
}$
, sodass
$
f
\le
cg
(
n
)
$
für alle
Nach Voraussetzung gibt es
$
c, c'
\in
\mathbb
{
R
}^
+
$
und
$
n
_
0
, n'
_
0
\in
\mathbb
{
N
}$
, sodass
$
f
\le
cg
(
n
)
$
für alle
...
@@ -258,6 +170,87 @@ immernoch $f+f' ∈ \mathcal{O}(m)$, wobei $m(n) = \text{max}(g(n), g'(n))$ das
...
@@ -258,6 +170,87 @@ immernoch $f+f' ∈ \mathcal{O}(m)$, wobei $m(n) = \text{max}(g(n), g'(n))$ das
Die anderen Rechenregeln verlaufen meist analog und sind eine gute Fingerübung.
Die anderen Rechenregeln verlaufen meist analog und sind eine gute Fingerübung.
\end{proof}
\end{proof}
Es ist eine gute Übung, sich zu überlegen, welche der obigen Rechenregeln auch für
$
Θ
$
-Notation gelten.
\begin{lemma}
Ist
$
k ≤ l
$
, so gilt
$
\mathcal
{
O
}
(
n
^
k
)
⊆
\mathcal
{
O
}
(
n
^
l
)
$
.
\label
{
lemma:rechenregel
_
potenzen
}
\end{lemma}
\begin{proof}
Übungsaufgabe.
\end{proof}
Mit den zwei vorherigen Lemmata können wir nun allgemeine Polynome abschätzen:
\begin{lemma}
Sei
$
f
(
n
)
=
a
_
k n
^
k
+
a
_{
k
-
1
}
n
^{
k
-
1
}
+
\cdots
+
a
_
1
n
+
a
_
0
$
ein Polynom von Grad~
$
k
$
. Dann gilt:
\[
f
(
n
)
∈ Θ
(
n
^
k
)
\]
\label
{
lemma:polynome
}
\end{lemma}
\begin{proof}
Es ist
$
a
_
i n
^
i ∈
\mathcal
{
O
}
(
n
^
i
)
$
. Das kann man entweder direkt zeigen (wähle
$
c
=
a
_
i
$
) oder via der
Multiplikationsregel. Desweiteren dominiert
$
x
^
k
$
als größte Potenz alle anderen Summanden (Lemma~
\ref
{
lemma:rechenregel
_
potenzen
}
). Nun kann man iterativ die Summenregel anwenden, bis nur noch
$
n
^
k
$
übrig bleibt.
Die andere Abschätzungsrichtung geschieht ähnlich.
\end{proof}
\begin{example}
Mit Lemma
\ref
{
lemma:polynome
}
ist klar:
$
T
_{
\text
{
wc
}}^{
\text
{
is
}}
(
n
)
∈
\mathcal
{
O
}
n
^
2
$
.
\end{example}
\subsection
{
Grenzwertkriterium
}
Betrachten wir nun ein spannenderes Beispiel: Ist
$
\ln
(
n
)
\in
\mathcal
{
O
}
(
\sqrt
{
n
}
)
$
?
Mit unserer Quantorendefinition kommen wir erstmal nicht weiter.
Aber hieß es nicht in der Schule, der natürliche Logarithmus
$
\ln
$
wachse langsamer als jede andere Funktion?
Um diese Frage beantworten zu können, führen wir das Grenzwertkriterium ein: Existiert der Grenzwert
$
\frac
{
f
(
n
)
}{
g
(
n
)
}$
im Infinitesimalen, so können wir das Grenzwertverhalten direkt ablesen:
\begin{lemma}
\label
{
lemma
_
asymptotic
_
limit
}
Seien
$
f,g:
\mathbb
{
N
}
\rightarrow
\mathbb
{
R
}^
+
$
zwei positive Funktionen. Existiert der Grenzwert
$
\lim
_{
n
\rightarrow
∞
}
\frac
{
f
(
n
)
}{
g
(
n
)
}
=
K
$
, so gilt:
\begin{itemize}
\item
Ist
$
0
\le
K < ∞
$
, so folgt
$
f
\in
\mathcal
{
O
}
(
g
)
$
,
\item
Ist
$
0
< K
\leq
∞
$
, so folgt
$
f
\in
Ω
(
g
)
$
,
\item
Ist
$
0
< K < ∞
$
, so folgt
$
f
\in
Θ
(
g
)
$
.
\end{itemize}
\end{lemma}
\begin{proof}
Die Beweisidee ist die folgende:
\[
\lim
_{
n
\rightarrow
∞
}
\frac
{
f
(
n
)
}{
g
(
n
)
}
=
K
\text
{
impliziert
}
\forall
ε >
0
\ \exists
n
_
0
∈
\mathbb
{
N
}
\text
{
sodass
}
\frac
{
f
(
n
)
}{
g
(
n
)
}
∈ B
_
ε
(
K
)
.
\]
Wir für gegebenes
$
c
$
wählen wir uns also
$
ε
$
sodass
$
c
=
\frac
{
1
}{
K
+
ε
}$
und
$
n
_
0
$
ist dann durch die Definition des
Limes gegeben.
\end{proof}
Zu beachten ist, dass dies keine Äquivalente Formulierung darstellt, siehe Unterkapitel
\ref
{
subsection:limes
_
superior
}
.
Damit können wir das Logarithmusbeispiel lösen:
\begin{example}
[
$
\ln
(
n
)
\in
\mathcal
{
O
}
(
\sqrt
{
n
}
)
$
]
Wir berechnen:
\[
\lim
_{
n
\rightarrow
∞
}
\frac
{
\ln
(
x
)
}{
\sqrt
{
x
}}
=
\frac
{
∞
}{
∞
}
.
\]
Hier kommen wir erstmal nicht weiter. Wir erinnern uns an die Regel von L'Hôspital: Nach dieser existiert
obiger Limes, solange der Limes der Ableitungen existiert. Wir betrachten also die kontinuerlichen Varianten obiger
Funktionen,
$
\ln
(
x
)
$
und
$
\sqrt
{
x
}$
:
\[
\lim
_{
x
\rightarrow
∞
}
\frac
{
\ln
(
x
)
}{
\sqrt
{
x
}}
=
\lim
_{
x
\rightarrow
∞
}
\frac
{
\frac
{
\partial
\ln
(
x
)
}{
\partial
x
}}{
\frac
{
\partial
\sqrt
{
x
}}{
\partial
x
}}
=
\lim
_{
x
\rightarrow
∞
}
\frac
{
2
\sqrt
{
x
}}{
x
}
=
\lim
_{
x
\rightarrow
∞
}
\frac
{
2
}{
\sqrt
{
x
}}
=
0
.
\]
Da der kontinuierliche Limes per Definition bedeutet, das alle möglichen diskreten Teilfolgen konvergieren,
konvergiert insbesondere die Teilfolge
$
0
,
1
,
2
,
\cdots
$
und es unser obiger diskreter Limes ist auch 0. Durch das
Grenzwertkriterium wissen wir nun:
$
\log
n ∈
\mathcal
{
O
}
(
\sqrt
{
n
}
)
$
.
\end{example}
\subsection
{
Rechenregeln für die
$
\mathcal
{
O
}$
-Notation
}
\begin{lemma}
Die Basis des Logarithmus ist für asymptotische Betrachtung nicht interessant. Seien
$
b, b'
\in
\begin{lemma}
Die Basis des Logarithmus ist für asymptotische Betrachtung nicht interessant. Seien
$
b, b'
\in
\mathbb
{
R
}^
+
$
, dann gilt:
\mathbb
{
R
}^
+
$
, dann gilt:
\[
\[
...
@@ -277,23 +270,68 @@ immernoch $f+f' ∈ \mathcal{O}(m)$, wobei $m(n) = \text{max}(g(n), g'(n))$ das
...
@@ -277,23 +270,68 @@ immernoch $f+f' ∈ \mathcal{O}(m)$, wobei $m(n) = \text{max}(g(n), g'(n))$ das
vernachlässigbar ist.
vernachlässigbar ist.
\end{proof}
\end{proof}
\subsection
{
Beispiele
}
\subsection
{
Die gängigsten Wachstumsklassen
}
Wir betrachten nun einige Beispiele, die die Relation gängiger Wachstumskategorien im Beispiel belegen:
Auch wenn es vollkommen korrekt sein mag zu sagen, dass dieser oder jender Algorithmus in
$
\mathcal
{
O
}
(
n
^
2
+
2
n
)
$
liegt,
ist es nicht die übliche Notation. Hier ist eine Auflistung der gebräuchlichsten Wachstumsklassen im Kontext der
Informatik. Die Liste ist aufsteigend gestaltet, und alles Teilmengenbeziehungen sind echt,
also mit
$
0
< c
_
1
<
1
c
_
2
$
und
$
b >
1
$
:
\[
\mathcal
{
O
}
(
1
)
\subset
\mathcal
{
O
}
(
\log
(
n
))
\subset
\mathcal
{
O
}
(
n
^{
c
_
1
}
)
\subset
\mathcal
{
O
}
(
n
)
\subset
\mathcal
{
O
}
(
n
\log
n
)
\subset
\mathcal
{
O
}
(
n
^{
c
_
2
}
)
\subset
\mathcal
{
O
}
(
b
^
n
)
\subset
\mathcal
{
O
}
(
n
!)
.
\]
\vspace
{
1cm
}
\noindent
\begin{tabular}
{
|c|c|c|c|
}
\hline
Name
&
$
\mathcal
{
O
}$
-Notation
&
Bsp.-Funktion
&
Bsp.-Algorithmus
\\
\hline
\hline
konstant
&
$
\mathcal
{
O
}
(
1
)
$
&
3
&
Addition
\\
\hline
logarithmisch
&
$
\mathcal
{
O
}
(
\log
(
n
))
$
&
$
\log
_
2
(
n
)
,
\ln
(
n
)
$
&
Suchen
\\
\hline
Wurzelfunktion
&
$
\mathcal
{
O
}
(
n
^{
c
}
)
,
$$
0
<c<
1
$
&
$
\sqrt
{
n
}
,n
^{
\frac
{
1
}{
3
}}$
&
Primzahltest
\\
\hline
linear
&
$
\mathcal
{
O
}
(
n
)
$
&
$
3
n
+
4
$
&
Maximum finden
\\
\hline
linearlogarithmisch
&
$
\mathcal
{
O
}
(
n
\cdot\log
(
n
))
$
&
$
2
n
\cdot
\ln
(
n
)
$
&
Sortieren
\\
\hline
polynominal
&
$
\mathcal
{
O
}
(
n
^{
c
}
)
,c>
1
$
&
$
4
n
^{
2
}
+
7
n
+
10
$
&
Matrizenoperationen
\\
\hline
exponential
&
$
\mathcal
{
O
}
(
c
^{
n
}
)
,c>
1
$
&
$
2
^{
n
}
,
10
^{
n
}$
&
NP-vollst
\"
{
a
}
ndige Alg.
\\
\hline
Fakultät
&
$
\mathcal
{
O
}
(
n
!)
$
&
$
n
!
$
&
\\
\hline
\end{tabular}
Im Folgenden wollen wir einige der hier angegebenen Relationen noch Begründen:
\begin{lemma}
$
\mathcal
{
O
}
(
n
)
\subset
\mathcal
{
O
}
(
n
\log
n
)
$
.
Es gibt also Funktionen in
$
\mathcal
{
O
}
(
n
\log
n
)
$
, welche nicht bereits in
$
\mathcal
{
O
}
(
n
)
$
liegen.
\label
{
lemma:linearlogarithmis
_
echt
_
größer
}
\end{lemma}
\begin{proof}
Übungsaufgabe.
\end{proof}
\begin{example}
[Polynomielles versus exponentielles Wachstum]
\begin{example}
[Polynomielles versus exponentielles Wachstum]
Wir zeigen
$
n
^
a
\in
\mathcal
{
O
}
(
b
^
n
)
$
für
$
1
< b
\in
\mathbb
{
R
}$
,
$
a >
0
$
. Der Einfachheit halber nehmen wir
Wir zeigen
$
n
^
a
\in
\mathcal
{
O
}
(
b
^
n
)
$
für
$
1
< b
\in
\mathbb
{
R
}$
,
$
a >
0
$
. Der Einfachheit halber nehmen wir
$
a
\in
\mathbb
{
N
}$
an.
$
a
\in
\mathbb
{
N
}$
an.
Beim Betrachten des Limes des kontinuerlichen Falles
$
\lim
_{
x
\rightarrow
\infty
}
\frac
{
x
^
a
}{
b
^
x
}$
stellen wir schnell
Beim Betrachten des Limes des kontinuerlichen Falles
$
\lim
_{
x
\rightarrow
∞
}
\frac
{
x
^
a
}{
b
^
x
}$
stellen wir schnell
fest, dass wir
$
a
$
-mal die Regel von L'Hôpital anwenden müssen. Mit
$
\frac
{
\partial
^
a x
^
a
}{
\partial
x
^
a
}
=
a
!
$
und
fest, dass wir
$
a
$
-mal die Regel von L'Hôpital anwenden müssen. Mit
$
\frac
{
\partial
^
a x
^
a
}{
\partial
x
^
a
}
=
a
!
$
und
$
\frac
{
\partial
^
a b
^
x
}{
\partial
x
^
a
}
=
b
^
x
\log
(
b
)
^
a
$
sehen wir:
$
\frac
{
\partial
^
a b
^
x
}{
\partial
x
^
a
}
=
b
^
x
\log
(
b
)
^
a
$
sehen wir:
\[
\[
\lim
_{
x
\rightarrow
\infty
}
\frac
{
x
^
a
}{
b
^
x
}
=
\lim
_{
x
\rightarrow
∞
}
\frac
{
x
^
a
}{
b
^
x
}
=
\lim
_{
x
\rightarrow
\infty
}
\frac
{
a
!
}{
b
^
x
\log
(
b
)
^
a
}
=
\lim
_{
x
\rightarrow
∞
}
\frac
{
a
!
}{
b
^
x
\log
(
b
)
^
a
}
=
0
.
0
.
\]
\]
Damit gilt auch für die diskrete Variante
$
n
^
a
\in
\mathcal
{
O
}
(
b
^
n
)
$
. Exponentielles Wachstum trumpft also
Damit gilt auch für die diskrete Variante
$
n
^
a
\in
\mathcal
{
O
}
(
b
^
n
)
$
. Exponentielles Wachstum trumpft also
polynomielles Wachstum.
polynomielles Wachstum.
\end{example}
\end{example}
\begin{example}
[Exponentielles Wachstum versus die Fakultätsfunktion]
\begin{example}
[Exponentielles Wachstum versus die Fakultätsfunktion]
Wir betrachten als Beispiel
$
2
^
n
\in
\mathcal
{
O
}
(
n
!)
$
. Dies geschieht wieder über die Quantorendefinition:
Wir betrachten als Beispiel
$
2
^
n
\in
\mathcal
{
O
}
(
n
!)
$
. Dies geschieht wieder über die Quantorendefinition:
Wir wählen
$
c
=
1
$
und
$
n
_
0
=
4
$
. Damit haben wir
Wir wählen
$
c
=
1
$
und
$
n
_
0
=
4
$
. Damit haben wir
...
@@ -309,31 +347,38 @@ Wir betrachten nun einige Beispiele, die die Relation gängiger Wachstumskategor
...
@@ -309,31 +347,38 @@ Wir betrachten nun einige Beispiele, die die Relation gängiger Wachstumskategor
\end{example}
\end{example}
\subsection
{
Die gängigsten Wachstumsklassen
}
\subsection
{
Definition der asymptotischen Schranken über den Limes*
}
Hier ist eine Auflistung der gebräuchlichsten Wachstumsklassen im Kontext der Informatik. Die Liste ist aufsteigend gestaltet,
\label
{
subsection:limes
_
superior
}
<++>
also
$
\mathcal
{
O
}
(
1
)
\subseteq
\mathcal
{
O
}
(
\log
(
n
))
\subseteq
\cdots
\subseteq
\mathcal
{
O
}
(
n
!)
$
.
Das Limeskriterium ist nur das: Ein Kriterium. Betrachten wir z.B.,
$
f
(
n
)
=
\sin
(
\frac
{
n
}{
100
}
)
+
1
$
, so gilt
$
f
(
n
)=
\mathcal
{
O
}
(
1
)
$
, aber der Grenzwert
$
\lim
_{
n
\to
∞
}
\frac
{
f
(
n
)
}{
1
}$
existiert nicht.
Das ist die Motivation für die folgende Alternativdefinition:
Wir erinnern uns an die Definition des Limes superior bzw Limes inferior:
\begin{definition}
[Limes superior und Limes inferior]
Sei
$
f:
\mathbb
{
N
}
\rightarrow
\mathbb
{
R
}^
+
$
eine positive Funktion. Wir definieren
\[
\limsup
_{
n
\rightarrow
∞
}
f
(
n
)
:
=
\inf
_{
n
_
0
\in
\mathbb
{
N
}}
\sup
_{
n
\ge
n
_
0
}
g
(
n
)
\]
und analog
\[
\liminf
_{
n
\rightarrow
∞
}
f
(
n
)
:
=
\sup
_{
n
_
0
\in
\mathbb
{
N
}}
\inf
_{
n
\ge
n
_
0
}
g
(
n
)
\]
\end{definition}
Für uns der größte Vorteil ist, dass unter den gegebenen Umständen sowohl der Limes superior als auch der Limes inferior
stets existieren und Werte in
$
\mathbb
{
R
}^
+
\cup
\{
∞
\}
$
annehmen.
Damit können wir nicht nur Kriterien für asymptotisches Wachstum benennen, sondern sogar Äquivalenzen.
\begin{theorem}
Seien
$
f,g:
\mathbb
{
N
}
\rightarrow
\mathbb
{
R
}^
+
$
positive reelle Funktionen. Es gilt
\begin{itemize}
\item
$
f
\in
\mathcal
{
O
}
(
g
)
\Leftrightarrow
\limsup
_{
n
\rightarrow
∞
}
\frac
{
f
(
n
)
}{
g
(
n
)
}
< ∞
$
,
\item
$
f
\in
\Omega
(
g
)
\Leftrightarrow
\liminf
_{
n
\rightarrow
∞
}
\frac
{
f
(
n
)
}{
g
(
n
)
}
>
0
$
,
\item
$
f
\in
\Theta
(
g
)
\Leftrightarrow
\limsup
_{
n
\rightarrow
∞
}
\frac
{
f
(
n
)
}{
g
(
n
)
}
< ∞
\text
{
und
}
\liminf
_{
n
\rightarrow
∞
}
\frac
{
f
(
n
)
}{
g
(
n
)
}
>
0
$
.
\end{itemize}
\label
{
theorem:limit
_
definition
}
\end{theorem}
\begin{tabular}
{
|c|c|c|c|
}
\hline
Name
&
$
\mathcal
{
O
}$
-Notation
&
Bsp.-Funktion
&
Bsp.-Algorithmus
\\
\hline
\hline
konstant
&
$
\mathcal
{
O
}
(
1
)
$
&
3
&
Addition
\\
\hline
logarithmisch
&
$
\mathcal
{
O
}
(
\log
(
n
))
$
&
$
\log
_
2
(
n
)
,
\ln
(
n
)
$
&
Suchen
\\
\hline
Wurzelfunktion
&
$
\mathcal
{
O
}
(
n
^{
c
}
)
,
$$
0
<c<
1
$
&
$
\sqrt
{
n
}
,n
^{
\frac
{
1
}{
3
}}$
&
Primzahltest
\\
\hline
linear
&
$
\mathcal
{
O
}
(
n
)
$
&
$
3
n
+
4
$
&
Maximum finden
\\
\hline
linearlogarithmisch
&
$
\mathcal
{
O
}
(
n
\cdot\log
(
n
))
$
&
$
2
n
\cdot
\ln
(
n
)
$
&
Sortieren
\\
\hline
polynominal
&
$
\mathcal
{
O
}
(
n
^{
c
}
)
,c>
1
$
&
$
4
n
^{
2
}
+
7
n
+
10
$
&
Matrizenoperationen
\\
\hline
exponential
&
$
\mathcal
{
O
}
(
c
^{
n
}
)
,c>
1
$
&
$
2
^{
n
}
,
10
^{
n
}$
&
NP-vollst
\"
{
a
}
ndige Alg.
\\
\hline
Fakultät
&
$
\mathcal
{
O
}
(
n
!)
$
&
$
n
!
$
&
\\
\hline
\end{tabular}
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment