Skip to content
Snippets Groups Projects
Commit 2fec4398 authored by Florian Unger's avatar Florian Unger
Browse files

Kapitel 1.2 neu strukturiert, ähnlicher zur Vorlesung.

parent bc6c8614
No related branches found
No related tags found
No related merge requests found
......@@ -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)
eines Programms in Abhängigkeit von der Inputlänge $n$ beschreiben:
\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
\begin{itemize}
\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
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:
\begin{example}[$T^{\text{is}}_{\text{avg}} \in \Theta(n^2)$]
Zuerst zeigen wir, dass $T^{\text{is}}_{\text{avg}} = a_2 n^2 + a_1 n + a_0 \in \mathcal{O}(n^2)$:
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 = 3m$. 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:
\begin{example}[$T^{\text{is}}_{\text{bc}} \in O(n)$]
Die best-case-Laufzeit von $\texttt{insertionsort}$ ist $T^{\text{is}}_{\text{bc}}(n) = w_0 + w_1 n$.
Es gilt
\[
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
für Laufzeitfunktionen sinnvolle Einschränkung.
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
$T^{\text{is}}_{\text{bc}} \in Θ(n)$.
\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.
\begin{example}[$6n^3 \notin \mathcal{O}(n^2)$]
Als nächstes schauen wir, ob $6n^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 $6n^3 \leq cn^2$ für alle $n > n_0$. Dann können wir die
Ungleichung aber mit $\frac{1}{6n^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}
Betrachten wir nun ein spannenderes Beispiel: Ist $\ln(n) \in \mathcal{O}(\sqrt{n})$? Mit unserer Quantorendefinition
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}
Um in Zukunft asymptotische Schranken genauer zu bestimmen, formulieren wir ein paar Rechenregeln:
\begin{lemma}
Seien $f, f', g, g', h: \mathbb{N} \rightarrow \mathbb{R}^+$.
\begin{labeling}{Multiplikation\ \ }
......@@ -249,7 +162,6 @@ Damit können wir nicht nur Kriterien für asymptotisches Wachstum benennen, son
\end{lemma}
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.
\begin{proof}
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
......@@ -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.
\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
\mathbb{R}^+$, dann gilt:
\[
......@@ -277,23 +270,68 @@ immernoch $f+f' ∈ \mathcal{O}(m)$, wobei $m(n) = \text{max}(g(n), g'(n))$ das
vernachlässigbar ist.
\end{proof}
\subsection{Beispiele}
Wir betrachten nun einige Beispiele, die die Relation gängiger Wachstumskategorien im Beispiel belegen:
\subsection{Die gängigsten Wachstumsklassen}
Auch wenn es vollkommen korrekt sein mag zu sagen, dass dieser oder jender Algorithmus in $\mathcal{O}(n^2 + 2n)$ 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)$ & $3n+4$ & Maximum finden \\
\hline
linearlogarithmisch & $\mathcal{O}(n\cdot\log(n))$ & $2n\cdot \ln(n)$ & Sortieren \\
\hline
polynominal & $\mathcal{O}(n^{c}),c>1$ & $4n^{2}+7n+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]
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.
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
$\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 \infty} \frac{a!}{b^x \log(b)^a} =
\lim_{x \rightarrow } \frac{x^a}{b^x} =
\lim_{x \rightarrow } \frac{a!}{b^x \log(b)^a} =
0.
\]
Damit gilt auch für die diskrete Variante $n^a \in \mathcal{O}(b^n)$. Exponentielles Wachstum trumpft also
polynomielles Wachstum.
\end{example}
\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 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
\end{example}
\subsection{Die gängigsten Wachstumsklassen}
Hier ist eine Auflistung der gebräuchlichsten Wachstumsklassen im Kontext der Informatik. Die Liste ist aufsteigend gestaltet,
also $\mathcal{O}(1) \subseteq \mathcal{O}(\log(n)) \subseteq \cdots \subseteq \mathcal{O}(n!)$.
\subsection{Definition der asymptotischen Schranken über den Limes*}
\label{subsection:limes_superior}<++>
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)$ & $3n+4$ & Maximum finden \\
\hline
linearlogarithmisch & $\mathcal{O}(n\cdot\log(n))$ & $2n\cdot \ln(n)$ & Sortieren \\
\hline
polynominal & $\mathcal{O}(n^{c}),c>1$ & $4n^{2}+7n+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}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment