From cad4d266a363ecbf4abec4c5b09de4853cb5669e Mon Sep 17 00:00:00 2001 From: pblan <p.blaneck@gmail.com> Date: Thu, 4 Nov 2021 13:37:28 +0000 Subject: [PATCH] added semester 3 classes --- LICENSE | 42 +- README.md | 2 +- algo/algo.bib | 12 +- algo/algo.pdf | Bin 440365 -> 553236 bytes algo/algo.tex | 460 ++-- algo/baeume.tex | 4585 +++++++++++++++++++------------------ algo/btreevis.sty | 816 +++---- algo/datenstrukturen.tex | 1605 ++++++------- algo/floyd.java | 16 +- algo/formale_sprachen.tex | 1313 +++++++++++ algo/graphen.tex | 3165 +++++++++++++------------ algo/grundbegriffe.tex | 202 +- algo/insertionsort.java | 18 + algo/selectionsort.java | 11 + algo/simplesort.java | 9 + algo/sortierverfahren.tex | 1454 ++++++++++++ algo/warshall.java | 7 + ana1/ana1.tex | 3126 ++++++++++++------------- ana2/ana2.pdf | Bin 300023 -> 300006 bytes ana2/ana2.tex | 3484 ++++++++++++++-------------- itg/itg.tex | 3088 ++++++++++++------------- la1/la1.tex | 1338 +++++------ la2/la2.pdf | Bin 301292 -> 301292 bytes la2/la2.tex | 3148 ++++++++++++------------- or/or.bib | 34 +- or/or.pdf | Bin 175578 -> 175142 bytes or/or.tex | 152 +- spicker.cls | 452 ++-- tgi/tgi.pdf | Bin 257132 -> 257136 bytes tgi/tgi.tex | 1026 ++++----- 30 files changed, 16224 insertions(+), 13341 deletions(-) create mode 100644 algo/formale_sprachen.tex create mode 100644 algo/insertionsort.java create mode 100644 algo/selectionsort.java create mode 100644 algo/simplesort.java create mode 100644 algo/sortierverfahren.tex create mode 100644 algo/warshall.java diff --git a/LICENSE b/LICENSE index e24214a..bd57688 100644 --- a/LICENSE +++ b/LICENSE @@ -1,21 +1,21 @@ -MIT License - -Copyright (c) 2021 Patrick Gustav Blaneck - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. +MIT License + +Copyright (c) 2021 Patrick Gustav Blaneck + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/README.md b/README.md index 1413059..ec1fe02 100644 --- a/README.md +++ b/README.md @@ -1 +1 @@ -# matse-spicker +# matse-spicker diff --git a/algo/algo.bib b/algo/algo.bib index b05a176..fc5587f 100644 --- a/algo/algo.bib +++ b/algo/algo.bib @@ -1,7 +1,7 @@ -@misc{wiki:Landau-Symbole, - author = {Wikipedia}, - title = {{Landau-Symbole} --- {W}ikipedia{,} The Free Encyclopedia}, - year = {2021}, - howpublished = {\url{http://de.wikipedia.org/w/index.php?title=Landau-Symbole&oldid=212674123}}, - note = {[Online; accessed 05-June-2021]} +@misc{wiki:Landau-Symbole, + author = {Wikipedia}, + title = {{Landau-Symbole} --- {W}ikipedia{,} The Free Encyclopedia}, + year = {2021}, + howpublished = {\url{http://de.wikipedia.org/w/index.php?title=Landau-Symbole&oldid=212674123}}, + note = {[Online; accessed 05-June-2021]} } \ No newline at end of file diff --git a/algo/algo.pdf b/algo/algo.pdf index b7b3be364da8d0b3b6949573f07dd138eb1a1309..f23478ee370536307c4fffd15698e55bae050ef6 100644 GIT binary patch delta 358596 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�$ABrz5)b-xI=Gm2v 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 delta 246084 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�d*vhb{L@waW3yE{%;ou11g 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�s6KqAQjq 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 CwgZ{~ diff --git a/algo/algo.tex b/algo/algo.tex index b97f80e..7cec7ab 100644 --- a/algo/algo.tex +++ b/algo/algo.tex @@ -1,289 +1,171 @@ -\documentclass[german]{../spicker} - -\usepackage{amsmath} - -\usepackage{graphicx} -\usepackage{tabularx, multirow} -\usepackage{forest} -\usepackage{color, colortbl} - -\usetikzlibrary{tikzmark,calc,arrows.meta,chains,decorations.pathreplacing,scopes,shapes.misc,shapes.multipart} - -\definecolor{javared}{rgb}{0.6,0,0} % for strings -\definecolor{javagreen}{rgb}{0.25,0.5,0.35} % comments -\definecolor{javapurple}{rgb}{0.5,0,0.35} % keywords -\definecolor{javadocblue}{rgb}{0.25,0.35,0.75} % javadoc - -\lstset{language=Java, -basicstyle=\ttfamily, -keywordstyle=\color{javapurple}\bfseries, -stringstyle=\color{javared}, -commentstyle=\color{javagreen}, -morecomment=[s][\color{javadocblue}]{/**}{*/}, -tabsize=4, -showspaces=false, -showstringspaces=false} - -\tikzset{ - weight/.style = { - scale=0.7, - }, - prim node/.style = { - fill = blue!50, - text = white, - }, - prim edge/.style = { - draw=blue, - very thick, - }, - current/.style = { - fill = teal!50, - }, - visited/.style = { - fill = teal!30, - %text=white, - opacity = 0.5, - }, -} - -\forestset{% -empty node/.style = { - dashed, - opacity = .2, - fill opacity = 0.2, - edge = {opacity=.2}, - }, -r/.style = { - fill = red!50, - text=white, - draw=red, - calign angle=30, - calign=fixed edge angles, - %fill opacity = 0.5, -}, -b/.style = { - fill = black!50, - text=white, - draw=black, - calign angle=30, - calign=fixed edge angles, - %fill opacity = 0.5, -}, -rbn/.style = { %red black not defined - fill = blue!50, - text=white, - draw=black, - calign angle=30, - calign=fixed edge angles, - %fill opacity = 0.5, -}, -nil/.style = { - fill = black!50, - minimum size=1em, - calign angle=30, - calign=fixed edge angles, - %fill opacity = 0.5, -}, -mpn/.style args = {#1/#2/#3/#4}{draw, -rectangle split, rectangle split horizontal, -rectangle split parts=4, -on chain=A, -draw=black!50, -node contents={ \nodepart{one} $#1$ - \nodepart{two} $#2$ - \nodepart{three} $#3$ - \nodepart{four} $#4$} - }, -} - -\newcommand\mpnc[4]{\nodepart{one} $#1$ - \nodepart{two} $#2$ - \nodepart{three} $#3$ - \nodepart{four} $#4$ - } - -\addbibresource{algo.bib} - -\title{Algorithmen} -\author{Patrick Gustav Blaneck} -\makeindex[intoc] -\makeindex[intoc, name=Beispiele,title=Beispiele] - -\newenvironment{allintypewriter}{\ttfamily}{\par} - -\newcommand{\BF}{\operatorname{BF}} -\newcommand{\vektor}[1]{\begin{pmatrix*}[c] #1 \end{pmatrix*}} - -\pgfmathsetmacro\twopi{2*pi} - -\pgfmathdeclarefunction{lngamma}{1}{% - \pgfmathsetmacro\lngammatmp{#1*#1*#1}% - \pgfmathparse{% - #1*ln(#1) - #1 - .5*ln(#1/\twopi) - + 1/12/#1 - 1/360/\lngammatmp + 1/1260/\lngammatmp/#1/#1 - }% -} - -\pgfmathdeclarefunction{facreal}{1}{% - \pgfmathparse{exp(lngamma(#1+1))}% -} - -\begin{document} -\maketitle -\tableofcontents -\newpage - -\include{grundbegriffe.tex} - -\include{datenstrukturen.tex} - -\include{baeume.tex} - -\include{graphen.tex} - -\section{Formale Sprachen} -% Textsuche - -% Reguläre Ausdrücke - -% PCRE - -% Kleene - -\section{Sortierverfahren} - -\begin{defi}{Heapsort} - Der Heap ist Grundlage für das Sortierverfahren \emph{Heapsort}. - - \begin{itemize} - \item Zu Beginn: Unsortiertes Feld - \item Phase 1: - \begin{itemize} - \item Alle Elemente werden nacheinander in einen Heap eingefügt - \item Resultat ist ein Heap, der in ein Feld eingebettet ist - \end{itemize} - \item Phase 2: - \begin{itemize} - \item Die Elemente werden in absteigender Reihenfolge entfernt (Wurzel!) - \item Heap schrumpft immer weiter - \end{itemize} - \end{itemize} - - \begin{center} - \begin{tikzpicture} - [ - start chain, - node distance = 0pt, - HeapBlock/.style={draw, minimum width=2em, minimum height=2em, outer sep=0pt, on chain, fill=teal!30}, - SortedBlock/.style={draw, minimum width=2em, minimum height=2em, outer sep=0pt, on chain, fill=blue!30}, - ] - - { start chain = going right - \node [HeapBlock, label=above:\texttt{root}] (1) {$0$}; - \node [HeapBlock] (2) {$1$}; - \node [HeapBlock] (3) {$2$}; - \node [HeapBlock] (dots) {$\ldots$}; - \node [HeapBlock] (n2) {$n-2$}; - \node [HeapBlock] (n1) {$n-1$}; - \node [HeapBlock] (n) {$n$}; - - \draw[->, blue] ([yshift=1em] 1.north east) to[bend left=30] ([yshift=.5em] n.north); - - \draw [decorate,decoration={brace,amplitude=5pt,mirror,raise=.5em}] - (1.south west) -- (n.south east) node[midway,yshift=-2em]{Heap}; - %\draw[->] (val.south) [out=-30, in=-150] to (4.south); - } - \end{tikzpicture} - \hspace{4em} - \begin{tikzpicture} - [ - start chain, - node distance = 0pt, - HeapBlock/.style={draw, minimum width=2em, minimum height=2em, outer sep=0pt, on chain, fill=teal!30}, - SortedBlock/.style={draw, minimum width=2em, minimum height=2em, outer sep=0pt, on chain, fill=blue!30}, - ] - - { start chain = going right - \node [HeapBlock, label=above:\texttt{root}] (1) {$0$}; - \node [HeapBlock] (2) {$1$}; - \node [HeapBlock] (3) {$2$}; - \node [HeapBlock] (dots) {$\ldots$}; - \node [HeapBlock] (n2) {$n-2$}; - \node [HeapBlock] (n1) {$n-1$}; - \node [SortedBlock] (n) {$n$}; - - \draw[->, blue] ([yshift=1em] 1.north east) to[bend left=30] ([yshift=.5em] n1.north); - - \draw [decorate,decoration={brace,amplitude=5pt,mirror,raise=.5em}] - (1.south west) -- (n1.south east) node[midway,yshift=-2em]{Heap}; - - \draw [decorate,decoration={brace,amplitude=5pt,mirror,raise=.5em}] - (n.south west) -- (n.south east) node[midway,yshift=-2em]{sortiertes Array}; - %\draw[->] (val.south) [out=-30, in=-150] to (4.south); - } - \end{tikzpicture} - - \begin{tikzpicture} - [ - start chain, - node distance = 0pt, - HeapBlock/.style={draw, minimum width=2em, minimum height=2em, outer sep=0pt, on chain, fill=teal!30}, - SortedBlock/.style={draw, minimum width=2em, minimum height=2em, outer sep=0pt, on chain, fill=blue!30}, - ] - - { start chain = going right - \node [HeapBlock, label=above:\texttt{root}] (1) {$0$}; - \node [HeapBlock] (2) {$1$}; - \node [HeapBlock] (3) {$2$}; - \node [HeapBlock] (dots) {$\ldots$}; - \node [HeapBlock] (n2) {$n-2$}; - \node [SortedBlock] (n1) {$n-1$}; - \node [SortedBlock] (n) {$n$}; - \node [xshift=2em, on chain] (dots2) {$\ldots$}; - - \draw[->, blue] ([yshift=1em] 1.north east) to[bend left=30] ([yshift=.5em] n2.north); - - \draw [decorate,decoration={brace,amplitude=5pt,mirror,raise=.5em}] - (1.south west) -- (n2.south east) node[midway,yshift=-2em]{Heap}; - - \draw [decorate,decoration={brace,amplitude=5pt,mirror,raise=.5em}] - (n1.south west) -- (n.south east) node[midway,yshift=-2em]{sortiertes Array}; - %\draw[->] (val.south) [out=-30, in=-150] to (4.south); - } - \end{tikzpicture} - \hspace{1em} - \begin{tikzpicture} - [ - start chain, - node distance = 0pt, - HeapBlock/.style={draw, minimum width=2em, minimum height=2em, outer sep=0pt, on chain, fill=teal!30}, - SortedBlock/.style={draw, minimum width=2em, minimum height=2em, outer sep=0pt, on chain, fill=blue!30}, - ] - - { start chain = going right - \node [SortedBlock] (1) {$0$}; - \node [SortedBlock] (2) {$1$}; - \node [SortedBlock] (3) {$2$}; - \node [SortedBlock] (dots) {$\ldots$}; - \node [SortedBlock] (n2) {$n-2$}; - \node [SortedBlock] (n1) {$n-1$}; - \node [SortedBlock] (n) {$n$}; - - %\draw[->, blue] ([yshift=1em] 1.north) to[bend left=30] ([yshift=.5em] n2.north); - - %\draw [decorate,decoration={brace,amplitude=5pt,mirror,raise=.5em}] - %(1.south west) -- (n2.south east) node[midway,yshift=-2em]{Heap}; - - \draw [decorate,decoration={brace,amplitude=5pt,mirror,raise=.5em}] - (1.south west) -- (n.south east) node[midway,yshift=-2em]{sortiertes Array}; - %\draw[->] (val.south) [out=-30, in=-150] to (4.south); - } - \end{tikzpicture} - \end{center} -\end{defi} - -\printindex -\printindex[Beispiele] - -\printbibliography -\end{document} +\documentclass[german]{../spicker} + +\usepackage{amsmath} + +\usepackage{graphicx} +\usepackage{tabularx, multirow} +\usepackage{forest} +\usepackage{color, colortbl} + +\usetikzlibrary{tikzmark,bbox,calc,automata,arrows.meta,chains,decorations.pathreplacing,scopes,shapes.misc,shapes.multipart} + +\definecolor{javared}{rgb}{0.6,0,0} % for strings +\definecolor{javagreen}{rgb}{0.25,0.5,0.35} % comments +\definecolor{javapurple}{rgb}{0.5,0,0.35} % keywords +\definecolor{javadocblue}{rgb}{0.25,0.35,0.75} % javadoc + +\lstset{language=Java, +basicstyle=\ttfamily, +keywordstyle=\color{javapurple}\bfseries, +stringstyle=\color{javared}, +commentstyle=\color{javagreen}, +morecomment=[s][\color{javadocblue}]{/**}{*/}, +tabsize=4, +showspaces=false, +showstringspaces=false} + +\tikzset{ + weight/.style = { + scale=0.7, + }, + prim node/.style = { + fill = blue!50, + text = white, + }, + prim edge/.style = { + draw=blue, + very thick, + }, + current/.style = { + fill = teal!50, + }, + marked/.style = { + fill = teal!25, + }, + visited/.style = { + fill = teal!30, + %text=white, + opacity = 0.5, + }, + new/.style = { + red, + }, + index small/.style = { + minimum width=1.5em, + minimum height=0.5em, + fill = gray!25, + }, + index/.style = { + minimum width=2em, + minimum height=0.5em, + fill = gray!25, + }, + every state/.style = { + minimum size=2em + } +} + +\forestset{% +empty node/.style = { + dashed, + opacity = .2, + fill opacity = 0.2, + edge = {opacity=.2}, + }, +r/.style = { + fill = red!50, + text=white, + draw=red, + calign angle=30, + calign=fixed edge angles, + %fill opacity = 0.5, +}, +b/.style = { + fill = black!50, + text=white, + draw=black, + calign angle=30, + calign=fixed edge angles, + %fill opacity = 0.5, +}, +rbn/.style = { %red black not defined + fill = blue!50, + text=white, + draw=black, + calign angle=30, + calign=fixed edge angles, + %fill opacity = 0.5, +}, +nil/.style = { + fill = black!50, + minimum size=1em, + calign angle=30, + calign=fixed edge angles, + %fill opacity = 0.5, +}, +mpn/.style args = {#1/#2/#3/#4}{draw, +rectangle split, rectangle split horizontal, +rectangle split parts=4, +on chain=A, +draw=black!50, +node contents={ \nodepart{one} $#1$ + \nodepart{two} $#2$ + \nodepart{three} $#3$ + \nodepart{four} $#4$} + }, +} + +\newcommand\mpnc[4]{\nodepart{one} $#1$ + \nodepart{two} $#2$ + \nodepart{three} $#3$ + \nodepart{four} $#4$ + } + +\addbibresource{algo.bib} + +\title{Algorithmen} +\author{Patrick Gustav Blaneck} +\makeindex[intoc] +\makeindex[intoc, name=Beispiele,title=Beispiele] + +\newenvironment{allintypewriter}{\ttfamily}{\par} + +\newcommand{\BF}{\operatorname{BF}} +\newcommand{\vektor}[1]{\begin{pmatrix*}[c] #1 \end{pmatrix*}} + +\pgfmathsetmacro\twopi{2*pi} + +\pgfmathdeclarefunction{lngamma}{1}{% + \pgfmathsetmacro\lngammatmp{#1*#1*#1}% + \pgfmathparse{% + #1*ln(#1) - #1 - .5*ln(#1/\twopi) + + 1/12/#1 - 1/360/\lngammatmp + 1/1260/\lngammatmp/#1/#1 + }% +} + +\pgfmathdeclarefunction{facreal}{1}{% + \pgfmathparse{exp(lngamma(#1+1))}% +} + +\begin{document} +\maketitle +\tableofcontents +\newpage + +\include{grundbegriffe.tex} + +\include{datenstrukturen.tex} + +\include{baeume.tex} + +\include{graphen.tex} + +\include{formale_sprachen.tex} + +\include{sortierverfahren.tex} + +\printindex +\printindex[Beispiele] + +\printbibliography +\end{document} diff --git a/algo/baeume.tex b/algo/baeume.tex index cfb52a0..9773757 100644 --- a/algo/baeume.tex +++ b/algo/baeume.tex @@ -1,2259 +1,2326 @@ -\section{Bäume} - -\begin{defi}{Baum} - Ein \emph{Baum} ist eine hierarchische (rekursive) Datenstruktur. - Es gilt: - \begin{itemize} - \item alle Wege gehen von einer \emph{Wurzel} aus - \item $A$ heißt \emph{Vorgänger} von $B$ bzw. $B$ \emph{Nachfolger} von $A$, wenn $A$ auf einem Weg von der Wurzel zu $B$ liegt - \item $A$ heißt \emph{Elterknoten} von $B$, bzw. $B$ heißt \emph{Kind} von $A$, wenn $(A, B) \in E$ - \item Knoten ohne Kinder heißen \emph{Blätter} - \item Knoten mit Kindern heißen \emph{innere Knoten} - \item ein Knoten $S$ mit allen Nachfolgern wird \emph{Teilbaum} eines Baumes $T$ genannt, falls $S$ nicht Wurzel von $T$ ist - \item der \emph{Verzweigungsgrad} eines Knotens ist die Anzahl seiner Kinder - \end{itemize} - - \vspace{1em} - - \begin{center} - \begin{forest} - for tree={s sep=5mm, fit=band} - [Wurzel, name=root - [Blatt, name=blatt1] - [Innerer Knoten, name=inner1 [Blatt, name=blatt2] - [Innerer Knoten, name=inner2 - [Blatt, name=blatt3] - [Innerer Knoten, name=inner3 [Blatt, name=blatt4] - [Blatt, name=blatt5]]]]] - \node [draw, label=left:Level 0, dashed, fit={(root) (blatt1.west |- root.center) (inner3.east |- root.center)}] {}; - \node [draw, label=left:Level 1, dashed, fit={(blatt1) (inner3.east |- blatt1.center)}] {}; - \node [draw, label=left:Level 2, dashed, fit={(blatt2) (blatt1.west |- blatt2.center) (inner3.east |- blatt2.center)}] {}; - \node [draw, label=left:Level 3, dashed, fit={(blatt3) (blatt1.west |- blatt3.center) (inner3)}] {}; - \node [draw, label=left:Level 4, dashed, fit={(blatt4) (blatt1.west |- blatt5.center) (blatt5) (inner3.east |- blatt5.center)}] {}; - \node [draw, red, fit={(inner2) (inner3) (blatt5) (blatt3)},label=right:{\color{red}Teilbaum}] {}; - \end{forest} - \end{center} -\end{defi} - -% Binärbäume - -\begin{defi}{Binärbaum} - Die Knoten eines \emph{Binärbaums (binary tree)} haben höchstens den Verzweigungsgrad $2$. - - Bei einem \emph{geordneten Binärbaum} ist die Reihenfolge der Kinder durch die Indizes eindeutig festgelegt: - \begin{itemize} - \item $T_l$: linkes Kind, linker Teilbaum - \item $T_r$: rechtes Kind, rechter Teilbaum - \end{itemize} - - Ein Binärbaum heißt \emph{minimal} (bezogen auf die Höhe), wenn kein Binärbaum mit gleicher Knotenzahl aber kleinerer Höhe existiert. - - Ein \emph{links-vollständiger Binärbaum} ist ein minimaler Binärbaum, in dem die Knoten auf dem untersten Level so weit wie möglich links stehen. - - Alle Blätter eines \emph{vollständigen Binärbaums} haben den gleichen Level. - - Ein vollständiger Binärbaum der Höhe $H$ hat - $$ - n = 1 + 2 + 4 + \ldots + 2^H = \frac{2^{H+1}-1}{2-1} = 2^{H+1}-1 \ \text{Knoten} - $$ -\end{defi} - -\begin{halfboxl} - \begin{example}{Linksvollständiger Binärbaum} - \centering - \begin{forest} - for tree={circle, draw, - minimum size=1.75em, % <-- added - inner sep=1pt} - [ - [ - [ - [] - [] - ] - [ - [] - [] - ] - ] - [ - [] - [] - ] - ] - \end{forest} - \end{example} -\end{halfboxl} -\begin{halfboxr} - \begin{example}{Vollständiger Binärbaum} - \centering - \begin{forest} - for tree={circle, draw, - minimum size=1.75em, % <-- added - inner sep=1pt} - [ - [ - [ - [] - [] - ] - [ - [] - [] - ] - ] - [ - [ - [] - [] - ] - [ - [] - [] - ] - ] - ] - \end{forest} - \end{example} -\end{halfboxr} - -\subsection{Binäre Suchbäume} -% Binäre Suchbäume - -\begin{defi}{Binärer Suchbaum} - Ein \emph{binärer Suchbaum} ist ein Binärbaum, bei dem für jeden Knoten des Baumes gilt: - - Alle Schlüssel im linken Teilbaum sind kleiner, alle im rechten Teilbaum sind größer oder gleich dem Schlüssel in diesem Knoten. -\end{defi} - -\begin{algo}{Suchen im binären Suchbaum} - Suchen ist ohne Probleme durch einfaches Vergleichen ($<$ bzw. $\geq$) möglich. - - Suchen der $50$ in \textcolor{red}{rot} bzw. (erfolgloses) Suchen der $80$ in \textcolor{blue}{blau}. - - \vspace{1em} - - \centering - \forestset{% - empty node/.style={dashed} - } - \begin{forest} - for tree={circle, draw, - minimum size=2em, % <-- added - inner sep=1pt} - [60 - [ - 20,edge={->,dashed,red,thick} - [10 [,empty node][,empty node]] - [30,edge={->,dashed,red,thick} - [,empty node] - [50,edge={->,dashed,red,thick}, draw=red [,empty node][,empty node]] - ] - ] - [ - 70,edge={->,dashed,blue,thick} - [,empty node] - [110,edge={->,dashed,blue,thick} - [90,edge={->,dashed,blue,thick} - [,empty node,edge={->,dashed,blue,thick},draw=blue][,empty node] - ] - [,empty node] - ] - ] - ] - \end{forest} -\end{algo} - -\begin{algo}{Einfügen im binären Suchbaum} - Ein Knoten kann ohne Probleme hinzugefügt werden, indem man solange sucht, bis man auf einen leeren Kindknoten trifft und dort einfügt. - - Einfügen der $40$ in \textcolor{red}{rot}. - - \vspace{1em} - - \centering - \begin{forest} - for tree={circle, draw, - minimum size=2em, % <-- added - inner sep=1pt} - [60 - [ - 20,edge={->,dashed,red,thick} - [10 [,empty node][,empty node]] - [30,edge={->,dashed,red,thick} - [,empty node] - [50,edge={->,dashed,red,thick} [ - 40,edge={->,dashed,red,thick},draw=red - ][,empty node]] - ] - ] - [ - 70 - [,empty node] - [110 - [90 - [,empty node][,empty node] - ] - [,empty node] - ] - ] - ] - \end{forest} -\end{algo} - -\begin{algo}{Löschen im binären Suchbaum (Blatt)} - Ein Blatt kann problemlos gelöscht werden. - - Löschen der $50$ in \textcolor{red}{rot}. - - \vspace{1em} - - \centering - \begin{forest} - baseline,anchor=north, - for tree={circle, draw, - minimum size=2em, % <-- added - inner sep=1pt} - [20,edge={->,dashed,red,thick} - [10 - [,empty node] - [,empty node] - ] - [30,edge={->,dashed,red,thick} - [,empty node] - [50,edge={->,dashed,red,thick}, draw=red - [,empty node] - [,empty node] - ] - ] - ] - \end{forest} - \hspace{5em} - \begin{forest} - baseline,anchor=north, - for tree={circle, draw, - minimum size=2em, % <-- added - inner sep=1pt} - [20 - [10 - [,empty node] - [,empty node] - ] - [30 - [,empty node] - [,empty node,draw=red] - ] - ] - \end{forest} -\end{algo} - -\begin{algo}{Löschen im binären Suchbaum (Innerer Knoten mit einem Kind)} - Soll ein innerer Knoten mit einem Kind gelöscht werden, rückt das Kind an die Stelle des Elterknotens. - - Löschen der $30$ in \textcolor{red}{rot}. - - \vspace{1em} - - \centering - \begin{forest} - baseline,anchor=north, - for tree={circle, draw, - minimum size=2em, % <-- added - inner sep=1pt} - [20,edge={->,dashed,red,thick} - [10 - [,empty node] - [,empty node] - ] - [30,edge={->,dashed,red,thick}, draw=red - [,empty node] - [50,draw=blue - [,empty node] - [,empty node] - ] - {\draw[->,blue] () to[bend right=45] node[midway,above right,font=\small]{Vorrücken} (!u.east);} - ] - ] - \end{forest} - \hspace{5em} - \begin{forest} - baseline,anchor=north, - for tree={circle, draw, - minimum size=2em, % <-- added - inner sep=1pt} - [20 - [10 - [,empty node] - [,empty node] - ] - [50,draw=blue - [,empty node] - [,empty node] - ] - ] - \end{forest} -\end{algo} - -\begin{algo}{Löschen im binären Suchbaum (Innerer Knoten mit zwei Kindern)} - Soll ein innerer Knoten mit zwei Kindern gelöscht werden, nimmt der nächstgrößere Knoten seinen Platz ein. - - Dieser wird wie folgt ermittelt (in \textcolor{purple}{lila}): - \begin{enumerate} - \item Gehe einen Schritt nach rechts. - \item Gehe solange nach links, bis es kein linkes Kind mehr gibt. - \end{enumerate} - - Löschen der $20$ in \textcolor{red}{rot}. - - \vspace{1em} - - \centering - \begin{forest} - baseline,anchor=north, - for tree={circle, draw, - minimum size=2em, % <-- added - inner sep=1pt} - [20,draw=red - [10 - [,empty node] - [,empty node] - ] - [30,edge={->,dashed,purple,thick},draw=purple - [,empty node,edge={->,dashed,purple,thick}] - [50 - [,empty node] - [,empty node] - ] - ]{\draw[->,blue] () to[bend right=45] node[midway,above right,font=\small]{Platz einnehmen} (!u.east);} - ] - \end{forest} - %\hspace{1em} - \begin{forest} - baseline,anchor=north, - for tree={circle, draw, - minimum size=2em, % <-- added - inner sep=1pt} - [30,draw=purple - [10 - [,empty node] - [,empty node] - ] - [,empty node - %[,empty node] - [50,draw=blue - [,empty node] - [,empty node] - ] - {\draw[->,blue] () to[bend right=45] node[midway,above right,font=\small]{Vorrücken} (!u.east);} - ] - ] - \end{forest} - %\hspace{1em} - \begin{forest} - baseline,anchor=north, - for tree={circle, draw, - minimum size=2em, % <-- added - inner sep=1pt} - [30,draw=purple - [10 - [,empty node] - [,empty node] - ] - [50,draw=blue - [,empty node] - [,empty node] - ] - ] - \end{forest} -\end{algo} - -\begin{bonus}{Komplexität beim Suchen, Löschen und Einfügen in Binärbäumen} - Die Komplexität der Funktionen Suchen, Löschen und Einfügen werden durch die Komplexität des Suchens eines Elements bestimmt. - - Im schlechtesten Fall ist die Anzahl der zu durchsuchenden Elemente gleich der Höhe des Baumes $+1$. - Dabei hängt die Höhe stark von der Reihenfolge der Einfügeoperationen ab. - - \vspace{1em} - - \centering - \begin{forest} - baseline,anchor=north, - for tree={circle, draw, - minimum size=2em, % <-- added - inner sep=1pt} - [10 - [,empty node] - [ - 20 - [,empty node] - [ - 30 - [,empty node] - [ - 40 - [,empty node] - [ - 50 - [,empty node] - [ - 60 - [,empty node] - [,empty node] - ] - ] - ] - ] - ] - ] - \end{forest} - \hspace{5em} - \begin{forest} - baseline,anchor=north, - for tree={circle, draw, - minimum size=2em, % <-- added - inner sep=1pt} - [ - 40 - [ - 20 - [ - 10 - [,empty node] - [,empty node] - ] - [ - 30 - [,empty node] - [,empty node] - ] - ] - [ - 50 - [,empty node] - [ - 60 - [,empty node] - [,empty node] - ] - ] - ] - \end{forest} -\end{bonus} - -% Balancierte Bäume - -\begin{defi}{Balanciertheit} - - Ein Binärbaum mit $n$ Knoten hat im besten Fall (\emph{optimal balanciert}) die Höhe - $$ - H = \lceil \log_2(n+1) \rceil - 1 = \lfloor \log_2(n) \rfloor - $$ - Dabei ist Suchen in $\bigo(\log n)$. - - Ein Binärbaum mit $n$ Knoten hat im schlechtesten Fall (\emph{entartet/degeneriert}) die Höhe - $$ - H = n-1 - $$ - Dabei ist Suchen in $\bigo(n)$. -\end{defi} - -\begin{defi}{Balance-Kriterien} - \begin{enumerate} - \item Abgeschwächtes Kriterium für ausgeglichene Höhe - \begin{itemize} - \item lokale Umordnungsoperationen reichen aus - \item z.B. \emph{AVL-Bäume} und Rot-Schwarz-Bäume - \end{itemize} - \item Jeder neue Knoten wandert an die Wurzel des Baumes - \begin{itemize} - \item Vorteil: Zuletzt eingefügte Elemente lassen sich schneller finden - \item durch spezielles Einfügeverfahren wird Baum zusätzlich (teilweise) ausgeglichen - \item z.B. Splay-Bäume - \end{itemize} - \item Unausgeglichener Verzweigungsgrad ermöglicht ausgeglichene Höhe - \begin{itemize} - \item z.B. \emph{B-Bäume} - \end{itemize} - \end{enumerate} -\end{defi} - -\subsection{AVL-Bäume} - -% AVL-Bäume - -\begin{defi}{AVL-Baum} - Bei einem \emph{AVL-Baum} unterscheiden sich die Höhen zweier Teilbäume des gleichen Knotens maximal um $1$. - - Der sogenannte \emph{Balance-Index} (oder Balance-Faktor) $\BF$ eines Knotens $T$ ist die Differenz - $$ - \BF(T) := H(T_r) - H(T_l) - $$ - Dabei gilt: - \begin{itemize} - \item Jeder Knoten hat einen Balance-Index. - \item Er darf nur die Werte $-1$, $0$ oder $1$ annehmen. - \end{itemize} - - %\vspace{2em} - - \centering - \begin{forest} - baseline,anchor=north, - for tree={circle, draw, - minimum size=2em, % <-- added - inner sep=1pt} - [ - J, label=right:{\small\textcolor{blue}{+1}} - [ - F, label=right:{\small\textcolor{blue}{-1}} - [ - D, label=right:{\small\textcolor{blue}{-1}} - [ - C, label=left:{\small\textcolor{blue}{0}} - [,empty node] - [,empty node] - ] - [,empty node] - ] - [ - G, label=right:{\small\textcolor{blue}{0}} - [,empty node] - [,empty node] - ] - ] - [ - P, label=right:{\small\textcolor{blue}{+1}} - [ - L, label=right:{\small\textcolor{blue}{+1}} - [,empty node] - [ - N, label=right:{\small\textcolor{blue}{0}} - [,empty node] - [,empty node] - ] - ] - [ - V, label=right:{\small\textcolor{blue}{-1}} - [ - S, label=right:{\small\textcolor{blue}{0}} - [ - Q, label=right:{\small\textcolor{blue}{0}} - [,empty node] - [,empty node] - ] - [ - U, label=left:{\small\textcolor{blue}{0}} - [,empty node] - [,empty node] - ] - ] - [ - X, label=right:{\small\textcolor{blue}{0}} - [,empty node] - [,empty node] - ] - ] - ] - ] - \end{forest} -\end{defi} - -\begin{algo}{Einfügen in einem AVL-Baum} - Beim Einfügen in einen AVL-Baum wird zu Beginn analog zu einem regulären Binärbaum eingefügt. - - Anschließend wird sich der unmittelbare Elterknoten $E$ angeschaut und es gibt für den dortigen Balance-Index $\BF(E)$ drei Fälle: - \begin{enumerate} - \item $\BF(E)$ wird $0$: - \begin{itemize}[-] - \item $\BF(E)$ war vorher $-1$ - \item man kommt von einem Kindbaum, der vorher niedriger war - \item Höhe des Knotens ändert sich nicht - \item oberhalb bleiben alle Balance-Indizes gleich - \item $\implies$ AVL-Kriterium ist für den ganzen Baum erfüllt - \end{itemize} - \item $\BF(E)$ wird $\pm 1$: - \begin{itemize}[-] - \item $\BF(E)$ war vorher $0$ - \item Höhe des Teilbaums erhöht sich um $1$ - \item $\implies$ Überprüfung der Balance-Indizes muss beim Elternknoten von $E$ fortgesetzt werden - \end{itemize} - \item $\BF(E)$ wird $\pm 2$: - \begin{itemize}[-] - \item $\BF(E)$ war vorher $\pm 1$ - \item $\implies$ Teilbaum muss \emph{rebalanciert} werden - \end{itemize} - \end{enumerate} -\end{algo} - -\begin{algo}{Löschen in einem AVL-Baum} - Beim Löschen in einen AVL-Baum wird zu Beginn analog zu einem regulären Binärbaum gelöscht. - - Anschließend wird sich der unmittelbare Elterknoten $E$ angeschaut und es gibt für den dortigen Balance-Index $\BF(E)$ drei Fälle: - \begin{enumerate} - \item $\BF(E)$ wird $\pm 1$: - \begin{itemize}[-] - \item $\BF(E)$ war vorher $0$ - \item Höhe des Knotens ändert sich nicht - \item oberhalb bleiben alle Balance-Indizes gleich - \item $\implies$ AVL-Kriterium ist für den ganzen Baum erfüllt - \end{itemize} - \item $\BF(E)$ wird $0$: - \begin{itemize}[-] - \item $\BF(E)$ war vorher $0$ - \item Höhe des Teilbaums verringert sich um $1$ - \item $\implies$ Überprüfung der Balance-Indizes muss beim Elternknoten von $E$ fortgesetzt werden - \end{itemize} - \item $\BF(E)$ wird $\pm 2$: - \begin{itemize}[-] - \item $\BF(E)$ war vorher $\pm 1$ - \item $\implies$ Teilbaum muss \emph{rebalanciert} werden - \end{itemize} - \end{enumerate} -\end{algo} - -\begin{algo}{Rebalancierung} - Wenn bei einer Opeation ein Höhenunterschied von mehr als $1$ zwischen zwei Geschwister-Teilbäumen entsteht, ist beim Elterknoten das AVL-Kriterium verletzt. - Eine entsprechende Korrektur heißt \emph{Rebalancierung}. - Als Werkzeuge eignen sich hierfür die sogenannten \emph{Rotationen}. -\end{algo} - -\begin{algo}{Einfachrotation} - Wird ein AVL-Baum unbalanciert, wenn ein Knoten in den \emph{rechten Teilbaum des rechten Teilbaums} eingefügt wird (Rechts-Rechts-Situation), dann wird das durch eine \emph{Einfachrotation nach links} gelöst. - - Zuletzt wurde $9$ eingefügt. Linksrotation in \textcolor{purple}{lila}. - - \vspace{1em} - - \begin{center} - \begin{forest} - baseline,anchor=north, - for tree={circle, draw, - minimum size=2em, % <-- added - inner sep=1pt} - [3%, label=right:{\small\textcolor{red}{+2}} - [1%, label=below right:{\small\textcolor{blue}{0}} - [,empty node] - [,empty node] - ] - [7, label=above:{\small\textcolor{red}{+2}}, draw=teal, name=7 - [,empty node] - [8, label=right:{\small\textcolor{blue}{+1}}, draw=purple, edge={teal,thick} - [,empty node, name=8c] - [9, label=right:{\small\textcolor{blue}{0}}, edge={purple,thick},draw=purple - ] - ] - {\draw[->,purple] () to[bend right=45] node[midway,above right,font=\small]{Linksrotation} (!u.east);} - ] - ] - \draw[->,teal] (7) to[bend right=45] (8c); - \end{forest} - \hspace{5em} - \begin{forest} - baseline,anchor=north, - for tree={circle, draw, - minimum size=2em, % <-- added - inner sep=1pt} - [3, label=right:{\small\textcolor{blue}{+1}} - [1, label=right:{\small\textcolor{blue}{0}} - [,empty node] - [,empty node] - ] - [8, label=right:{\small\textcolor{blue}{0}}, draw=purple - [7, label=right:{\small\textcolor{blue}{0}}, draw=teal, edge={teal,thick} - [,empty node] - [,empty node] - ] - [9, label=right:{\small\textcolor{blue}{0}}, edge={purple,thick},draw=purple - [,empty node] - [,empty node] - ] - ] - ] - \end{forest} - \end{center} - - \vspace{1em} - - Wird ein AVL-Baum unbalanciert, wenn ein Knoten in den \emph{linken Teilbaum des linken Teilbaums} eingefügt wird (Links-Links-Situation), dann wird das durch eine \emph{Einfachrotation nach rechts} gelöst. - - Zuletzt wurde $1$ eingefügt. Rechtsrotation in \textcolor{purple}{lila}. - - \vspace{1em} - - \begin{center} - \begin{forest} - baseline,anchor=north, - for tree={circle, draw, - minimum size=2em, % <-- added - inner sep=1pt} - [ - 7 - [ - 3, label=above:{\small\textcolor{red}{-2}}, draw=teal, name=3 - [ - 2, label=left:{\small\textcolor{blue}{-1}}, draw=purple, edge={teal,thick},draw=purple - [ - 1, label=left:{\small\textcolor{blue}{0}}, draw=purple, edge={purple,thick},draw=purple - ] - [,empty node, name=2c] - ] - {\draw[->,purple] () to[bend left=45] node[midway,above left,font=\small]{Rechtsrotation} (!u.west);} - [,empty node] - ] - [ - 8 - [,empty node] - [,empty node] - ] - ] - \draw[->,teal] (3) to[bend left=45] (2c); - \end{forest} - \hspace{5em} - \begin{forest} - baseline,anchor=north, - for tree={circle, draw, - minimum size=2em, % <-- added - inner sep=1pt} - [ - 7, label=left:{\small\textcolor{blue}{-1}} - [ - 2, label=left:{\small\textcolor{blue}{0}}, draw=purple,draw=purple - [ - 1, label=left:{\small\textcolor{blue}{0}}, draw=purple, edge={purple,thick},draw=purple - [,empty node] - [,empty node] - ] - [3, label=left:{\small\textcolor{blue}{0}}, draw=teal, name=3, edge={teal,thick} - [,empty node] - [,empty node] - ] - ] - [ - 8, label=left:{\small\textcolor{blue}{0}} - [,empty node] - [,empty node] - ] - ] - \end{forest} - \end{center} -\end{algo} - -\begin{algo}{Doppelrotation} - Wird ein AVL-Baum unbalanciert, wenn ein Knoten in den \emph{rechten Teilbaum des linken Teilbaums} eingefügt wird, dann wird das durch eine \emph{Doppelrotation} (Linksrotation, gefolgt von Rechtsrotation) gelöst. - - Zuletzt wurde $4$ eingefügt. Rotationen in \textcolor{purple}{lila}. - - \vspace{1em} - - \begin{center} - \begin{forest} - baseline,anchor=north, - for tree={circle, draw, - minimum size=2em, % <-- added - inner sep=1pt} - [ - 7, label=left:{\small\textcolor{red}{-2}} - [ - 3, label=left:{\small\textcolor{blue}{+1}}, draw=teal, name=3 - [,empty node] - [4, draw=purple, label=right:{\small\textcolor{blue}{0}}, edge={teal,thick},draw=purple - [,empty node, draw=none, edge={draw=none}, name=4c] - [,empty node, draw=none, edge={draw=none}] - ] - {\draw[->,purple] () to[bend right=45] node[midway,above right,font=\small]{Linksrotation} (!u.east);} - ] - [,empty node] - ] - \draw[->,teal] (3) to[bend right=45] (4c); - \end{forest} - \hspace{-2em} - \begin{forest} - baseline,anchor=north, - for tree={circle, draw, - minimum size=2em, % <-- added - inner sep=1pt} - [ - 7, draw=teal, name=7, label=right:{\small\textcolor{red}{-2}} - [ - 4, draw=purple, edge={teal,thick}, label=left:{\small\textcolor{blue}{-1}} - [ - 3, draw=purple, edge={purple,thick}, label=left:{\small\textcolor{blue}{0}} - [,empty node] - [,empty node] - ] - [,empty node, name=4c] - ] - {\draw[->,purple] () to[bend left=45] node[midway,above left,font=\small]{Rechtsrotation} (!u.west);} - [,empty node] - ] - \draw[->,teal] (7) to[bend left=45] (4c); - \end{forest} - \hspace{3em} - \begin{forest} - baseline,anchor=north, - for tree={circle, draw, - minimum size=2em, % <-- added - inner sep=1pt} - [ - 4, draw=purple, label=right:{\small\textcolor{blue}{0}} - [ - 3, draw=purple, edge={purple,thick}, label=right:{\small\textcolor{blue}{0}} - [,empty node] - [,empty node] - ] - [ - 7, draw=teal, edge={teal,thick}, label=right:{\small\textcolor{blue}{0}} - [,empty node] - [,empty node] - ] - ] - \end{forest} - \end{center} - - \vspace{1em} - - Wird ein AVL-Baum unbalanciert, wenn ein Knoten in den \emph{linken Teilbaum des rechten Teilbaums} eingefügt wird, dann wird das durch eine \emph{Doppelrotation} (Rechtsrotation, gefolgt von Linksrotation) gelöst. - - Zuletzt wurde $3$ eingefügt. Rotationen in \textcolor{purple}{lila}. - - \vspace{1em} - - \begin{center} - \begin{forest} - baseline,anchor=north, - for tree={circle, draw, - minimum size=2em, % <-- added - inner sep=1pt} - [ - 2, label=right:{\small\textcolor{red}{+2}} - [,empty node] - [ - 5, label=right:{\small\textcolor{blue}{-1}}, draw=teal, name=5 - [3, draw=purple, label=left:{\small\textcolor{blue}{0}}, edge={teal,thick},draw=purple - [,empty node, draw=none, edge={draw=none}] - [,empty node, draw=none, edge={draw=none}, name=3c] - ] - {\draw[->,purple] () to[bend left=45] node[midway,above left,font=\small]{Rechtsrotation} (!u.west);} - [,empty node] - ] - ] - \draw[->,teal] (5) to[bend left=45] (3c); - \end{forest} - \hspace{5em} - \begin{forest} - baseline,anchor=north, - for tree={circle, draw, - minimum size=2em, % <-- added - inner sep=1pt} - [ - 2, label=left:{\small\textcolor{red}{+2}}, draw=teal, name=2 - [,empty node] - [ - 3, label=right:{\small\textcolor{blue}{+1}}, draw=purple, edge={teal,thick} - [,empty node, name=3c] - [5, draw=purple, label=right:{\small\textcolor{blue}{0}}, edge={purple,thick},draw=purple - [,empty node] - [,empty node] - ] - ] - {\draw[->,purple] () to[bend right=45] node[midway,above right,font=\small]{Linksrotation} (!u.east);} - ] - \draw[->,teal] (2) to[bend right=45] (3c); - \end{forest} - \hspace{1em} - \begin{forest} - baseline,anchor=north, - for tree={circle, draw, - minimum size=2em, % <-- added - inner sep=1pt} - [ - 3, label=right:{\small\textcolor{blue}{0}},draw=purple - [ - 2, label=right:{\small\textcolor{blue}{0}}, edge={teal,thick},draw=teal - [,empty node] - [,empty node] - ] - [ - 5, label=right:{\small\textcolor{blue}{0}}, edge={purple,thick},draw=purple - [,empty node] - [,empty node] - ] - ] - \end{forest} - \end{center} -\end{algo} - - -\begin{defi}{Komplexität von AVL-Bäumen} - \begin{itemize} - \item Einfügen - \begin{itemize} - \item Element muss gesucht werden: $\bigo(\log n)$ - \item Element muss angehängt werden: $\bigo(1)$ - \item Baum muss ausgeglichen werden: $\bigo(\log n)$ - \end{itemize} - \item Löschen - \begin{itemize} - \item Element muss gesucht werden: $\bigo(\log n)$ - \item nächstgrößeres Element muss gesucht werden: $\bigo(\log n)$ - \item Elemente müssen verschoben werden: $\bigo(1)$ - \item Baum muss ausgeglichen werden: $\bigo(\log n)$ - \end{itemize} - \item Prüfen/Auslesen - \begin{itemize} - \item Element muss gesucht werden: $\bigo(\log n)$ - \end{itemize} - \end{itemize} -\end{defi} - -\subsection{B-Bäume} -% B-Bäume - -\begin{defi}{B-Baum} - Jeder Knoten in einem \emph{B-Baum der Ordnung d} enthält $d$ bis $2d$ Elemente. - - Die Wurzel bildet die einzige Ausnahme, sie kann $1$ bis $2d$ Elemente enthalten. - - Die Elemente in einem Knoten sind aufsteigend sortiert. - - Die Anzahl der Kinder in einem B-Baum ist entweder $0$ (Blatt) oder um eins größer als die Anzahl der Elemente, die der Knoten enthält. - - Alle Blätter liegen auf demselben Level. - \begin{itemize}[-] - \item garantierte Zugriffszeiten - \item bei realistischen Parametern (z.B. Ordnung $1000$) sind sehr wenige ($<5$) Zugriffe auf das externe Medium nötig - \end{itemize} - - B-Bäume besitzen ausgeglichene Höhe, lassen aber unausgeglichenen Verzweigungsgrad und Knotenfüllgrad zu. - - Der längste Weg in einem B-Baum der Ordnung $d$ ist in $\bigo(\log_{d+1} n)$. - - B-Baum der Ordnung $2$: - \vspace{1em} - - \centering - \begin{forest} - for tree = { - draw, - rectangle split, rectangle split horizontal, - rectangle split parts=4, - %on chain=A, - parent anchor=south, - child anchor=north, - text width=1em, - text centered, - %edge = {->}, - l sep=12mm, - s sep=2em, - } - [{\mpnc{\textcolor{red}{30}}{\textcolor{violet}{38}}{\textcolor{blue}{42}}{\times}} - [{\mpnc{10}{20}{25}{\times}}, name=c1, edge path={ - \noexpand\path [draw, \forestoption{edge}] ([xshift=-3.4em]!u.parent anchor) -- (.child anchor)\forestoption{edge label}; - }] - [{\mpnc{32}{34}{35}{\times}}, name=c2, edge path={ - \noexpand\path [draw, \forestoption{edge}] ([xshift=-1.7em]!u.parent anchor) -- (.child anchor)\forestoption{edge label}; - }] - [{\mpnc{40}{41}{\times}{\times}}, name=c3, edge path={ - \noexpand\path [draw, \forestoption{edge}] (!u.parent anchor) -- (.child anchor)\forestoption{edge label}; - }] - [{\mpnc{44}{50}{56}{58}}, name=c4, edge path={ - \noexpand\path [draw, \forestoption{edge}] ([xshift=1.7em]!u.parent anchor) -- (.child anchor)\forestoption{edge label}; - }] - ] - \node[fit=(c1), label=below:{$\in [-\infty, \text{\textcolor{red}{30}}]$}] {}; - \node[fit=(c2), label=below:{$\in [\text{\textcolor{red}{30}}, \text{\textcolor{purple}{38}}]$}] {}; - \node[fit=(c3), label=below:{$\in [\text{\textcolor{purple}{38}}, \text{\textcolor{blue}{42}}]$}] {}; - \node[fit=(c4), label=below:{$\in [\text{\textcolor{blue}{42}}, \infty]$}] {}; - \end{forest} -\end{defi} - -\begin{algo}{Suchen in einem B-Baum} - Ausgehend von der Wurzel: - \begin{enumerate} - \item Prüfe, ob der gerade betrachtete Knoten den gesuchten Schlüssel $m$ enthält. - \subitem (Suche innerhalb eines Knotens entweder linear oder binär.) - \item Falls nicht, bestimme den kleinsten Schlüssel $k_i$, der größer als $m$ ist. - \begin{itemize} - \item $k_i$ gefunden: Weiter bei Schritt 1 mit linkem Kind von $k_i$ ($p_{i-1}$) - \item $k_i$ nicht gefunden: Weiter mit letztem Kind ($p_{n}$) - \end{itemize} - \end{enumerate} -\end{algo} - -\begin{algo}{Einfügen in einem B-Baum der Ordnung $d$} - \begin{enumerate} - \item Suche nach Schlüssel endet in einem Blatt \texttt{node} (in \textcolor{purple}{lila}) - \item Schlüssel wird in Sortierreihenfolge eingefügt (und neuer leerer Verweis eingefügt) - \item Falls \texttt{node} überfüllt ist: \texttt{node} aufteilen - \subitem $k$ sei mittlerer Eintrag von \texttt{node} - \begin{enumerate} - \item Neuen Knoten \texttt{current} anlegen und mit den $d$ größeren Schlüsseln (rechts von $k$) belegen. - \item Die $d$ kleineren Schlüssel (links von $k$) bleiben in \texttt{node}. - \item $k$ in Elterknoten \texttt{parent} von \texttt{node} verschieben. - \item Verweis rechts von $k$ in \texttt{parent} mit \texttt{current} verbinden. - \end{enumerate} - \item Falls \texttt{parent} nun überfüllt ist: \texttt{parent} aufteilen (Siehe Schritt 3) - \end{enumerate} - - Einfügen der 60 in \textcolor{red}{rot}. - - \vspace{1em} - - \centering - \begin{forest} - for tree = { - draw, - rectangle split, rectangle split horizontal, - rectangle split parts=4, - %on chain=A, - parent anchor=south, - child anchor=north, - text width=1em, - text centered, - %edge = {->}, - l sep=12mm, - s sep=1em, - } - [{\mpnc{30}{38}{42}{\times}} - [{\mpnc{10}{20}{25}{\times}}, name=c1, edge path={ - \noexpand\path [draw, \forestoption{edge}] ([xshift=-3.4em]!u.parent anchor) -- (.child anchor)\forestoption{edge label}; - }] - [{\mpnc{32}{34}{35}{\times}}, name=c2, edge path={ - \noexpand\path [draw, \forestoption{edge}] ([xshift=-1.7em]!u.parent anchor) -- (.child anchor)\forestoption{edge label}; - }] - [{\mpnc{40}{41}{\times}{\times}}, name=c3, edge path={ - \noexpand\path [draw, \forestoption{edge}] (!u.parent anchor) -- (.child anchor)\forestoption{edge label}; - }] - [{\mpnc{44}{50}{56}{58}}, name=c4, edge={dashed,purple,thick}, draw=purple, edge path={ - \noexpand\path [draw, \forestoption{edge}] ([xshift=1.7em]!u.parent anchor) -- (.child anchor)\forestoption{edge label}; - }] - ] - \node[draw, above of=c4, rectangle, red, node distance=5em] (60) {60}; - \draw[->, red] (60) to (c4); - \end{forest} - - \vspace{1em} - - \begin{forest} - for tree = { - draw, - rectangle split, rectangle split horizontal, - rectangle split parts=4, - %on chain=A, - parent anchor=south, - child anchor=north, - text width=1em, - text centered, - %edge = {->}, - l sep=12mm, - s sep=1em, - } - [{\mpnc{30}{38}{42}{\times}}, name=r - [{\mpnc{10}{20}{25}{\times}}, name=c1, edge path={ - \noexpand\path [draw, \forestoption{edge}] ([xshift=-3.4em]!u.parent anchor) -- (.child anchor)\forestoption{edge label}; - }] - [{\mpnc{32}{34}{35}{\times}}, name=c2, edge path={ - \noexpand\path [draw, \forestoption{edge}] ([xshift=-1.7em]!u.parent anchor) -- (.child anchor)\forestoption{edge label}; - }] - [{\mpnc{40}{41}{\times}{\times}}, name=c3] - [{\mpnc{44}{50}{\times}{\times}}, name=c4, draw=red, edge={draw=none}] - [{\mpnc{58}{\textcolor{red}{60}}{\times}{\times}}, name=c5, draw=red, edge={draw=none}] - ] - \node[draw, above right of=c4, rectangle, blue, node distance=sqrt(2)*4em] (56) {56}; - \draw[->, blue, bend right=15] (56) to (r); - \end{forest} - - \vspace{1em} - - \begin{forest} - for tree = { - draw, - rectangle split, rectangle split horizontal, - rectangle split parts=4, - %on chain=A, - parent anchor=south, - child anchor=north, - text width=1em, - text centered, - %edge = {->}, - l sep=12mm, - s sep=1em, - } - [{\mpnc{30}{38}{42}{\textcolor{blue}{56}}}, name=r - [{\mpnc{10}{20}{25}{\times}}, name=c1, edge path={ - \noexpand\path [draw, \forestoption{edge}] ([xshift=-3.4em]!u.parent anchor) -- (.child anchor)\forestoption{edge label}; - }] - [{\mpnc{32}{34}{35}{\times}}, name=c2, edge path={ - \noexpand\path [draw, \forestoption{edge}] ([xshift=-1.7em]!u.parent anchor) -- (.child anchor)\forestoption{edge label}; - }] - [{\mpnc{40}{41}{\times}{\times}}, name=c3] - [{\mpnc{44}{50}{\times}{\times}}, name=c4, draw=red, edge={red}, edge path={ - \noexpand\path [draw, \forestoption{edge}] ([xshift=1.7em]!u.parent anchor) -- (.child anchor)\forestoption{edge label}; - }] - [{\mpnc{58}{\textcolor{red}{60}}{\times}{\times}}, name=c5, draw=red, edge={red}, edge path={ - \noexpand\path [draw, \forestoption{edge}] ([xshift=3.4em]!u.parent anchor) -- (.child anchor)\forestoption{edge label}; - }] - ] - \end{forest} -\end{algo} - -\begin{algo}{Löschen in einem B-Baum der Ordnung $d$ (Blatt)} - In einem Blatt mit Struktur - \begin{center} - \texttt{(null, $k_1$, null, $\ldots$, $k_i$, null, $\ldots$, $k_n$, null)} - \end{center} - (\texttt{null} sind hier die Kinder an der jeweiligen Stelle) - wird der Wert $x = k_i$ zusammen mit der darauf folgenden \texttt{null}-Referenz gelöscht. - - Ein \emph{Underflow} tritt auf, falls $n=d$ war. -\end{algo} - -\begin{algo}{Löschen in einem B-Baum der Ordnung $d$ (Innerer Knoten)} - In einem inneren Knoten mit Struktur - - \begin{center} - \texttt{($p_0$, $k_1$, $p_1$, $\ldots$, $k_i$, $p_i$, $\ldots$, $k_n$, $p_n$)} - \end{center} - - ($p_j$ sind hier die Kinder an der jeweiligen Stelle) - haben alle Referenzen einen Wert ungleich \texttt{null}. - - Das Löschen eines Wertes $x = k_i$ funktioniert analog zum Löschen aus einem binären Suchbaum: - \begin{enumerate} - \item Finde kleinsten Schlüssel $s$ im durch $p_i$ referenzierten Teilbaum (in einem Blatt) - \item Ersetze $k_i$ durch $s$ und lösche $s$ aus dem Blatt - \end{enumerate} - - Löschen der 38 in \textcolor{red}{rot}. - - \centering - \vspace{1em} - - \begin{forest} - for tree = { - draw, - rectangle split, rectangle split horizontal, - rectangle split parts=4, - %on chain=A, - parent anchor=south, - child anchor=north, - text width=1em, - text centered, - %edge = {->}, - l sep=12mm, - s sep=1em, - } - [{\mpnc{30}{\textcolor{red}{38}}{42}{56}}, name=r - [{\mpnc{10}{20}{25}{\times}}, name=c1, edge path={ - \noexpand\path [draw, \forestoption{edge}] ([xshift=-3.4em]!u.parent anchor) -- (.child anchor)\forestoption{edge label}; - }] - [{\mpnc{32}{34}{35}{\times}}, name=c2, edge path={ - \noexpand\path [draw, \forestoption{edge}] ([xshift=-1.7em]!u.parent anchor) -- (.child anchor)\forestoption{edge label}; - }] - [{\mpnc{40}{41}{\times}{\times}}, name=c3] - [{\mpnc{44}{50}{\times}{\times}}, name=c4, edge path={ - \noexpand\path [draw, \forestoption{edge}] ([xshift=1.7em]!u.parent anchor) -- (.child anchor)\forestoption{edge label}; - }] - [{\mpnc{58}{60}{\times}{\times}}, name=c5, edge path={ - \noexpand\path [draw, \forestoption{edge}] ([xshift=3.4em]!u.parent anchor) -- (.child anchor)\forestoption{edge label}; - }] - ] - \end{forest} - - \vspace{1em} - - \begin{forest} - for tree = { - draw, - rectangle split, rectangle split horizontal, - rectangle split parts=4, - %on chain=A, - parent anchor=south, - child anchor=north, - text width=1em, - text centered, - %edge = {->}, - l sep=12mm, - s sep=1em, - } - [{\mpnc{30}{\phantom{38}}{42}{56}}, name=r - [{\mpnc{10}{20}{25}{\times}}, name=c1, edge path={ - \noexpand\path [draw, \forestoption{edge}] ([xshift=-3.4em]!u.parent anchor) -- (.child anchor)\forestoption{edge label}; - }] - [{\mpnc{32}{34}{35}{\times}}, name=c2, edge path={ - \noexpand\path [draw, \forestoption{edge}] ([xshift=-1.7em]!u.parent anchor) -- (.child anchor)\forestoption{edge label}; - }] - [{\mpnc{\textcolor{blue}{40}}{41}{\times}{\times}}, name=c3] - [{\mpnc{44}{50}{\times}{\times}}, name=c4, edge path={ - \noexpand\path [draw, \forestoption{edge}] ([xshift=1.7em]!u.parent anchor) -- (.child anchor)\forestoption{edge label}; - }] - [{\mpnc{58}{60}{\times}{\times}}, name=c5, edge path={ - \noexpand\path [draw, \forestoption{edge}] ([xshift=3.4em]!u.parent anchor) -- (.child anchor)\forestoption{edge label}; - }] - ] - \draw[->, blue] ([xshift=-2.55em] c3.north) to[bend left=15] ([xshift=-0.75em]r.south); - \end{forest} - - \vspace{1em} - - \begin{forest} - for tree = { - draw, - rectangle split, rectangle split horizontal, - rectangle split parts=4, - %on chain=A, - parent anchor=south, - child anchor=north, - text width=1em, - text centered, - %edge = {->}, - l sep=12mm, - s sep=1em, - } - [{\mpnc{30}{\textcolor{blue}{40}}{42}{56}}, name=r - [{\mpnc{10}{20}{25}{\times}}, name=c1, edge path={ - \noexpand\path [draw, \forestoption{edge}] ([xshift=-3.4em]!u.parent anchor) -- (.child anchor)\forestoption{edge label}; - }] - [{\mpnc{32}{34}{35}{\times}}, name=c2, edge path={ - \noexpand\path [draw, \forestoption{edge}] ([xshift=-1.7em]!u.parent anchor) -- (.child anchor)\forestoption{edge label}; - }] - [{\mpnc{41}{\times}{\times}{\times}}, name=c3, draw=purple, label=below:\textcolor{purple}{Underflow!}] - [{\mpnc{44}{50}{\times}{\times}}, name=c4, edge path={ - \noexpand\path [draw, \forestoption{edge}] ([xshift=1.7em]!u.parent anchor) -- (.child anchor)\forestoption{edge label}; - }] - [{\mpnc{58}{60}{\times}{\times}}, name=c5, edge path={ - \noexpand\path [draw, \forestoption{edge}] ([xshift=3.4em]!u.parent anchor) -- (.child anchor)\forestoption{edge label}; - }] - ] - \end{forest} -\end{algo} - -\begin{defi}{Underflow} - Ein \emph{Underflow} tritt in einem B-Baum genau dann auf, wenn zu wenig ($<d$) Schlüssel im Knoten sind. -\end{defi} - -\begin{algo}{Ausgleich zwischen Geschwisterknoten} - Voraussetzung: Knoten $q$ mit Underflow hat einen Geschwisterknoten $p$ mit $>d$ Schlüsseln. - - Annahme: - \begin{itemize} - \item $p$ ist linker Geschwisterknoten von $q$ (analog mit rechtem Geschwisterknoten) - \item im Elterknoten \texttt{parent} (von $p$ und $q$) trennt der Schlüssel $t$ die Verweise auf $p$ und $q$ - \end{itemize} - - Idee: $p$ schenkt $q$ ein Element (\glqq Umweg\grqq über Elterknoten) - - \begin{forest} - for tree = { - draw, - rectangle split, rectangle split horizontal, - rectangle split parts=4, - %on chain=A, - parent anchor=south, - child anchor=north, - text width=1em, - text centered, - %edge = {->}, - l sep=12mm, - s sep=1em, - } - [{\mpnc{30}{\textcolor{blue}{40}}{42}{56}}, name=r - [{\mpnc{10}{20}{25}{\times}}, name=c1, edge path={ - \noexpand\path [draw, \forestoption{edge}] ([xshift=-3.4em]!u.parent anchor) -- (.child anchor)\forestoption{edge label}; - }] - [{\mpnc{32}{34}{\textcolor{blue}{35}}{\times}}, name=c2, edge path={ - \noexpand\path [draw, \forestoption{edge}] ([xshift=-1.7em]!u.parent anchor) -- (.child anchor)\forestoption{edge label}; - }] - [{\mpnc{41}{\times}{\times}{\times}}, name=c3, draw=purple] - [{\mpnc{44}{50}{\times}{\times}}, name=c4, edge path={ - \noexpand\path [draw, \forestoption{edge}] ([xshift=1.7em]!u.parent anchor) -- (.child anchor)\forestoption{edge label}; - }] - [{\mpnc{58}{60}{\times}{\times}}, name=c5, edge path={ - \noexpand\path [draw, \forestoption{edge}] ([xshift=3.4em]!u.parent anchor) -- (.child anchor)\forestoption{edge label}; - }] - ] - \draw[->, blue] ([xshift=0.75em] c2.north) to[bend left=90] ([xshift=2.25em] r.north west); - \draw[<-, blue] ([xshift=-3.4em] c3.north) to[bend right=10] ([xshift=-0.75em] r.south); - \end{forest} - - \vspace{1em} - - \begin{forest} - for tree = { - draw, - rectangle split, rectangle split horizontal, - rectangle split parts=4, - %on chain=A, - parent anchor=south, - child anchor=north, - text width=1em, - text centered, - %edge = {->}, - l sep=12mm, - s sep=1em, - } - [{\mpnc{30}{\textcolor{blue}{35}}{42}{56}}, name=r - [{\mpnc{10}{20}{25}{\times}}, name=c1, edge path={ - \noexpand\path [draw, \forestoption{edge}] ([xshift=-3.4em]!u.parent anchor) -- (.child anchor)\forestoption{edge label}; - }] - [{\mpnc{32}{34}{\times}{\times}}, name=c2, edge path={ - \noexpand\path [draw, \forestoption{edge}] ([xshift=-1.7em]!u.parent anchor) -- (.child anchor)\forestoption{edge label}; - }] - [{\mpnc{\textcolor{blue}{40}}{41}{\times}{\times}}, name=c3] - [{\mpnc{44}{50}{\times}{\times}}, name=c4, edge path={ - \noexpand\path [draw, \forestoption{edge}] ([xshift=1.7em]!u.parent anchor) -- (.child anchor)\forestoption{edge label}; - }] - [{\mpnc{58}{60}{\times}{\times}}, name=c5, edge path={ - \noexpand\path [draw, \forestoption{edge}] ([xshift=3.4em]!u.parent anchor) -- (.child anchor)\forestoption{edge label}; - }] - ] - \end{forest} -\end{algo} - -\begin{algo}{Verschmelzen von Geschwisterknoten} - Voraussetzung: Knoten $q$ hat Geschwisterknoten mit $d$ Schlüsseln - - Annahme: - \begin{itemize} - \item $p$ ist linker Geschwisterknoten von $q$ (analog mit rechtem Geschwisterknoten) - \item im Elterknoten \texttt{parent} (von $p$ und $q$) trennt der Schlüssel $t$ die Verweise auf $p$ und $q$ - \end{itemize} - - Idee: $p$ und $q$ mit dem trennenden Element aus \texttt{parent} verschmelzen. - - Beachte: - \begin{itemize} - \item Eventueller Underflow in \texttt{parent} muss behandelt werden (rekursiv) - \item Falls letzter Schlüssel der Wurzel gelöscht wird, wird der einzige Nachfolger der Wurzel die neue Wurzel (Höhe des B-Baums wird um 1 verringert). - \end{itemize} - - \vspace{1em} - - \centering - \begin{forest} - for tree = { - draw, - rectangle split, rectangle split horizontal, - rectangle split parts=4, - %on chain=A, - parent anchor=south, - child anchor=north, - text width=1em, - text centered, - %edge = {->}, - l sep=12mm, - s sep=1em, - } - [{\mpnc{30}{40}{\textcolor{blue}{42}}{56}}, name=r - [{\mpnc{10}{20}{25}{\times}}, name=c1, edge path={ - \noexpand\path [draw, \forestoption{edge}] ([xshift=-3.4em]!u.parent anchor) -- (.child anchor)\forestoption{edge label}; - }] - [{\mpnc{32}{34}{35}{\times}}, name=c2, edge path={ - \noexpand\path [draw, \forestoption{edge}] ([xshift=-1.7em]!u.parent anchor) -- (.child anchor)\forestoption{edge label}; - }] - [{\mpnc{41}{\times}{\times}{\times}}, name=c3, draw=purple] - [{\mpnc{44}{50}{\times}{\times}}, name=c4, draw=blue, edge={blue}, edge path={ - \noexpand\path [draw, \forestoption{edge}] ([xshift=1.7em]!u.parent anchor) -- (.child anchor)\forestoption{edge label}; - }] - [{\mpnc{58}{60}{\times}{\times}}, name=c5, edge path={ - \noexpand\path [draw, \forestoption{edge}] ([xshift=3.4em]!u.parent anchor) -- (.child anchor)\forestoption{edge label}; - }] - ] - \draw[<-, blue] ([xshift=-0.75em] c3.north) to[bend left=10] ([xshift=0.75em] r.south); - \draw[<-, blue] ([xshift=0.75em] c3.north) to[bend left=45] ([xshift=-3.4em] c4.north); - \end{forest} - - \vspace{1em} - - \begin{forest} - for tree = { - draw, - rectangle split, rectangle split horizontal, - rectangle split parts=4, - %on chain=A, - parent anchor=south, - child anchor=north, - text width=1em, - text centered, - %edge = {->}, - l sep=12mm, - s sep=1em, - } - [{\mpnc{30}{40}{56}{\times}}, name=r - [{\mpnc{10}{20}{25}{\times}}, name=c1, edge path={ - \noexpand\path [draw, \forestoption{edge}] ([xshift=-3.4em]!u.parent anchor) -- (.child anchor)\forestoption{edge label}; - }] - [{\mpnc{32}{34}{35}{\times}}, name=c2, edge path={ - \noexpand\path [draw, \forestoption{edge}] ([xshift=-1.7em]!u.parent anchor) -- (.child anchor)\forestoption{edge label}; - }] - [{\mpnc{41}{\textcolor{blue}{42}}{\textcolor{blue}{44}}{\textcolor{blue}{50}}}, name=c3] - [{\mpnc{58}{60}{\times}{\times}}, name=c5, edge path={ - \noexpand\path [draw, \forestoption{edge}] ([xshift=1.7em]!u.parent anchor) -- (.child anchor)\forestoption{edge label}; - }] - ] - \end{forest} -\end{algo} - -\begin{defi}{B+-Baum} - Im Unterschied zu B-Bäumen speichern \emph{B+-Bäume} ihre Datensätze ausschließlich in den Blättern. - - Dies ist bei der Anwendung für Datenbanken naheliegend und sinnvoll. -\end{defi} - -\subsection{Rot-Schwarz-Bäume} - -\begin{defi}{Rot-Schwarz-Baum} - Ein \emph{Rot-Schwarz-Baum} ist ein balancierter binärer Suchbaum, in dem jeder innere Knoten zwei Kinder hat. - - Jeder innere Knoten hat eine Farbe, so dass gilt: - \begin{itemize} - \item Die Wurzel ist schwarz. - \item Alle Blätter (\text{null}-Knoten) sind schwarz. - \item Für jeden Knoten gilt, dass jeder Pfad zu den Blättern die gleiche Anzahl an schwarzen Knoten hat. (Schwarz-Tiefe) - \item Beide Kinder eines roten Knotens sind schwarz. - \end{itemize} -\end{defi} - -\begin{algo}{Einfügen in einen Rot-Schwarz-Baum} - Zuerst wird wie in einem normalen Binärbaum eingefügt, danach werden die Rot-Schwarz-Bedingungen repariert. - - Annahmen: - \begin{itemize} - \item eingefügter Knoten $v$ ist rot - \item Elterknoten $u$ von $v$ ist rot (sonst fertig) - \item $v$ ist linkes Kind von $u$ (anderer Fall symmetrisch) - \item Geschwisterknoten $w$ (rechtes Kind von $u$) ist schwarz - \item Alle roten Knoten außer $u$ haben 2 schwarze Kinder - \end{itemize} - - - \begin{center} - - \begin{forest} - baseline,anchor=north, - for tree={circle, draw, - minimum size=2em, % <-- added - inner sep=1pt} - [ - p, b - [ - u, r - [ - v, r - ] - [ - w, b, name=w - ] - ] - [ - q, rbn - ] - ] - \end{forest} - \hspace{7em} - \begin{forest} - baseline,anchor=north, - for tree={circle, draw, - minimum size=2em, % <-- added - inner sep=1pt} - [ - p, b - [ - q, rbn - ] - [ - u, r - [ - v, r - ] - [ - w, b, name=w - ] - ] - ] - \end{forest} - \end{center} -\end{algo} - -\begin{algo}{Einfügen in einen Rot-Schwarz-Baum (Fall 1)} - - \textbf{Fall 1: Onkelknoten $q$ von $v$ ist schwarz}\\ - Fall 1a: $u$ ist linkes Kind von $p$ ($v$-$u$-$p$ bilden eine Linie) - \vspace{1em} - - \begin{center} - \begin{forest} - baseline,anchor=north, - for tree={circle, draw, - minimum size=2em, % <-- added - inner sep=1pt} - [ - p, b - [ - u, r - [ - v, r - ] - [ - w, b, name=w - ] - %{\draw[->,blue, dashed] () to[bend left=30] (!u.south);} - ] - {\draw[->,blue] () to[bend left=45] node[midway,above left,font=\small]{Rechtsrotation} (!u.west);} - [ - q, b - ] - ] - %{\draw[->,blue, dashed] () to[bend left=45] (w.north east);} - \end{forest} - \hspace{3em} - \begin{forest} - baseline,anchor=north, - for tree={circle, draw, - minimum size=2em, % <-- added - inner sep=1pt} - [ - u, r - [ - v, r - ] - [ - p, b - [ - w, b - ] - [ - q, b - ] - ] - {\draw[<->,blue] () to[bend right=45] node[midway,above right,font=\small]{Umfärben} (!u.east);} - ] - %{\draw[->,blue, dashed] () to[bend left=45] (w.north east);} - \end{forest} - \hspace{1em} - \begin{forest} - baseline,anchor=north, - for tree={circle, draw, - minimum size=2em, % <-- added - inner sep=1pt} - [ - u, b - [ - v, r - ] - [ - p, r - [ - w, b - ] - [ - q, b - ] - ] - %{\draw[<->,blue] () to[bend right=45] node[midway,above right,font=\small]{Umfärben} (!u.east);} - ] - %{\draw[->,blue, dashed] () to[bend left=45] (w.north east);} - \end{forest} - \end{center} - - \vspace{1em} - Fall 1b: $u$ ist rechtes Kind von $p$ ($v$-$u$-$p$ bilden ein Dreieck) - - \begin{center} - \begin{forest} - baseline,anchor=north, - for tree={circle, draw, - minimum size=2em, % <-- added - inner sep=1pt} - [ - p, b - [ - q, b - ] - [ - u, r - [ - v, r - ] - {\draw[->,blue] () to[bend left=45] node[midway,below left=1em,font=\small]{Rechtsrotation} (!u.west);} - [ - w, b, name=w - ] - %{\draw[->,blue, dashed] () to[bend left=30] (!u.south);} - ] - ] - %{\draw[->,blue, dashed] () to[bend left=45] (w.north east);} - \end{forest} - \hspace{5em} - \begin{forest} - baseline,anchor=north, - for tree={circle, draw, - minimum size=2em, % <-- added - inner sep=1pt} - [ - p, b - [ - q, b - ] - [ - v, r - [,nil] - [ - u, r - [,nil] - [ - w, b - ] - ] - ] - {\draw[->,blue] () to[bend right=45] node[midway,above right,font=\small]{Linksrotation} (!u.east);} - ] - \end{forest} - - \vspace{1em} - - \begin{forest} - baseline,anchor=north, - for tree={circle, draw, - minimum size=2em, % <-- added - inner sep=1pt} - [ - v, r - [ - p, b - [ - q, b - ] - [, nil] - ] - {\draw[<->,blue] () to[bend left=45] node[midway,above left,font=\small]{Umfärben} (!u.west);} - [ - u, r - [, nil] - [ - w, b - ] - ] - ] - \end{forest} - \hspace{2em} - \begin{forest} - baseline,anchor=north, - for tree={circle, draw, - minimum size=2em, % <-- added - inner sep=1pt} - [ - v, b - [ - p, r - [ - q, b - ] - [, nil] - ] - [ - u, r - [, nil] - [ - w, b - ] - ] - ] - \end{forest} - \end{center} -\end{algo} - -\begin{algo}{Einfügen in einen Rot-Schwarz-Baum (Fall 2)} - \textbf{Fall 2: Geschwisterknoten $q$ von $u$ ist rot} - - \begin{center} - \begin{forest} - baseline,anchor=north, - for tree={circle, draw, - minimum size=2em, % <-- added - inner sep=1pt} - [ - p, b, name=p - [ - u, r, name=u - [ - v, r - ] - [ - w, b, name=w - ] - ] - [ - q, r, name=q - ] - ] - \node [draw, fit={(p)(u)(q)}, blue, label=above:\textcolor{blue}{Umfärben}] () {}; - \end{forest} - \hspace{7em} - \begin{forest} - baseline,anchor=north, - for tree={circle, draw, - minimum size=2em, % <-- added - inner sep=1pt} - [ - p, r - [ - u, b - [ - v, r - ] - [ - w, b, name=w - ] - ] - [ - q, b - ] - ] - \end{forest} - \end{center} - - \vspace{1em} - - beziehungsweise - - \vspace{1em} - - \begin{center} - \begin{forest} - baseline,anchor=north, - for tree={circle, draw, - minimum size=2em, % <-- added - inner sep=1pt} - [ - p, b, name=p - [ - q, r, name=q - ] - [ - u, r, name=u - [ - v, r - ] - [ - w, b, name=w - ] - ] - ] - \node [draw, fit={(p)(u)(q)}, blue, label=above:\textcolor{blue}{Umfärben}] () {}; - \end{forest} - \hspace{7em} - \begin{forest} - baseline,anchor=north, - for tree={circle, draw, - minimum size=2em, % <-- added - inner sep=1pt} - [ - p, r - [ - q, b - ] - [ - u, b - [ - v, r - ] - [ - w, b, name=w - ] - ] - ] - \end{forest} - \end{center} - - \vspace{1em} - - \begin{itemize} - \item Falls der Elterknoten von $p$ schwarz ist, sind wir fertig - \item Falls $p$ die Wurzel ist, färbe $p$ schwarz - \item Sonst behandle $p$ wie $v$ und wiederhole - \end{itemize} -\end{algo} - -\begin{algo}{Löschen in einem Rot-Schwarz-Baum} - Das Löschen in einem Rot-Schwarz-Baum kann schnell sehr schwierig zu visualisieren werden. - - Ich will hier gern einmal folgende Videos empfehlen: - \begin{itemize} - \item \url{https://youtu.be/eO3GzpCCUSg} (ausführliche Beispiele, englisch) - \item \url{https://youtu.be/bDT1woMULVw} (ausführliche Erklärung, Pseudocode, deutsch) - \end{itemize} -\end{algo} - -\subsection{Heaps} - -\begin{bonus}{Heap (Wortbedeutungen)} - Das Wort \emph{Heap} hat zwei Bedeutungen: - \begin{itemize} - \item Besonderer Speicherbereich, in dem Objekte und Klassen gespeichert werden. - \item Datenstruktur zur effizienten Implementierung einer Prioritätswarteschlange. - \end{itemize} -\end{bonus} - -\begin{defi}{Heap} - Ein \emph{Heap} ist ein Binärbaum mit folgenden Eigenschaften: - \begin{itemize} - \item linksvollständig - \item Kinder eines Knotens höchstens so groß wie der Knoten selbst (Max-Heap) - \item größtes Element befindet sich an der Wurzel (Max-Heap) - \item entlang jedes Pfades von einem Knoten zur Wurzel sind Knoteninhalte aufsteigend sortiert - \end{itemize} -\end{defi} - -\begin{algo}{Einfügen in einem Heap} - Das Einfügen eines Elements in den Heap erfolgt, indem das neue Element an das Ende des Heaps gesetzt wird. - - Weil das neu eingesetzte Element die Eigenschaften des Heaps verzerren kann, wird die Operation \emph{Up-Heapify} durchgeführt, um die Eigenschaften des Heaps in einem Bottom-up-Ansatz zu erhalten. -\end{algo} - -\begin{algo}{Löschen in einem Heap} - Das Entfernen eines Elements erfolgt, indem das gelöscht Element durch das letzte Element im Heap ersetzt wird. Dann wird das letzte Element aus dem Heap gelöscht. Nun wird das letzte Element an einer Stelle im Heap platziert. - - Es kann die Heap-Bedingung nicht erfüllen, sodass die Operation \emph{Down-Heapify} durchgeführt wird, um die Eigenschaften des Heaps aufrechtzuerhalten. -\end{algo} - -\begin{defi}{Heapify} - Heapify ist eine Operation, um die Elemente des Heaps neu anzuordnen, um die Heap-Bedingung aufrechtzuerhalten. - - Die Heapify kann in zwei Methoden erfolgen: - \begin{itemize} - \item Up-Heapify (erfolgt beim Einfügen) - \item Down-Heapify (erfolgt beim Löschen) - \end{itemize} - -\end{defi} - -\begin{algo}{Up-Heapify (Einfügen)} - Einfügen der $90$ in \textcolor{red}{rot}. - - \vspace{1em} - \begin{center} - \scalebox{0.9}{ - \begin{forest} - baseline,anchor=north, - for tree={circle, draw, - minimum size=2em, % <-- added - inner sep=1pt} - [ - 90 - [ - 36 - [ - 25 - [ - 2 - %[,empty node] - %[,empty node] - ] - [ - 3 - %[,empty node] - %[,empty node] - ] - ] - [ - 26,draw=blue - [ - 19 - %[,empty node] - %[,empty node] - ] - [45 ,edge={red,thick}, draw=red] - {\draw[<->,blue] () to[bend right=45] node[midway,below right,font=\small]{Vertauschen} (!u.east);} - ] - ] - [ - 17 - [ - 7 - [,empty node] - [,empty node] - ] - [ - 1 - [,empty node] - [,empty node] - ] - ] - ] - \end{forest} - } - \hspace{1em} - \scalebox{0.9}{ - \begin{forest} - baseline,anchor=north, - for tree={circle, draw, - minimum size=2em, % <-- added - inner sep=1pt} - [ - 90 - [ - 36,draw=blue - [ - 25 - [ - 2 - %[,empty node] - %[,empty node] - ] - [ - 3 - %[,empty node] - %[,empty node] - ] - ] - [ - 45,edge={red,thick}, draw=red - [ - 19 - %[,empty node] - %[,empty node] - ] - [26,edge={teal,thick}, draw=teal] - ] - {\draw[<->,blue] () to[bend right=45] node[midway,above right,font=\small]{Vertauschen} (!u.east);} - ] - [ - 17 - [ - 7 - [,empty node] - [,empty node] - ] - [ - 1 - [,empty node] - [,empty node] - ] - ] - ] - \end{forest} - } - - \vspace{1em} - - \scalebox{0.9}{ - \begin{forest} - baseline,anchor=north, - for tree={circle, draw, - minimum size=2em, % <-- added - inner sep=1pt} - [ - 90,draw=teal - [ - 45,edge={teal,thick}, draw=teal - [ - 25 - [ - 2 - %[,empty node] - %[,empty node] - ] - [ - 3 - %[,empty node] - %[,empty node] - ] - ] - [ - 36,edge={teal,thick}, draw=teal - [ - 19 - %[,empty node] - %[,empty node] - ] - [26,edge={teal,thick}, draw=teal] - ] - ] - [ - 17 - [ - 7 - [,empty node] - [,empty node] - ] - [ - 1 - [,empty node] - [,empty node] - ] - ] - ] - \end{forest} - } - \end{center} -\end{algo} - -\begin{algo}{Down-Heapify (Löschen)} - Löschen der $90$ in \textcolor{red}{rot}. - - \vspace{1em} - \begin{center} - - \scalebox{0.9}{ - \begin{forest} - baseline,anchor=north, - for tree={circle, draw, - minimum size=2em, % <-- added - inner sep=1pt} - [ - 90,draw=red - [ - 45 - [ - 25 - [ - 2 - %[,empty node] - %[,empty node] - ] - [ - 3 - %[,empty node] - %[,empty node] - ] - ] - [ - 36 - [ - 19 - %[,empty node] - %[,empty node] - ] - [26 - ] - ] - ] - [ - 17 - [ - 7 - [,empty node] - [,empty node] - ] - [ - 1 - [,empty node] - [,empty node] - ] - ] - ] - \end{forest} - } - \hspace{1em} - \scalebox{0.9}{ - \begin{forest} - baseline,anchor=north, - for tree={circle, draw, - minimum size=2em, % <-- added - inner sep=1pt} - [ - ,empty node, name=90 - [ - 45 - [ - 25 - [ - 2 - %[,empty node] - %[,empty node] - ] - [ - 3 - %[,empty node] - %[,empty node] - ] - ] - [ - 36 - [ - 19 - %[,empty node] - %[,empty node] - ] - [26, draw=blue, name=26 - ] - ] - ] - [ - 17 - [ - 7 - [,empty node] - [,empty node] - ] - [ - 1 - [,empty node] - [,empty node] - ] - ] - ] - \draw[->, blue] (26) to[bend right=45] node[midway,above left,font=\small]{Nachrücken} (90); - \end{forest} - } - - \vspace{1em} - - \scalebox{0.9}{ - \begin{forest} - baseline,anchor=north, - for tree={circle, draw, - minimum size=2em, % <-- added - inner sep=1pt} - [ - 26, draw=red - [ - 45, edge={draw=red},draw=blue - [ - 25 - [ - 2 - %[,empty node] - %[,empty node] - ] - [ - 3 - %[,empty node] - %[,empty node] - ] - ] - [ - 36 - [ - 19 - %[,empty node] - %[,empty node] - ] - [,empty node] - ] - ] - {\draw[<->,blue] () to[bend left=45] node[midway,above left,font=\small]{Vertauschen} (!u.west);} - [ - 17 - [ - 7 - [,empty node] - [,empty node] - ] - [ - 1 - [,empty node] - [,empty node] - ] - ] - ] - \end{forest} - } - \hspace{1em} - \scalebox{0.9}{ - \begin{forest} - baseline,anchor=north, - for tree={circle, draw, - minimum size=2em, % <-- added - inner sep=1pt} - [ - 45,draw=teal - [ - 26, draw=red, edge={draw=teal} - [ - 25 - [ - 2 - %[,empty node] - %[,empty node] - ] - [ - 3 - %[,empty node] - %[,empty node] - ] - ] - [ - 36, edge={draw=red},draw=blue - [ - 19 - %[,empty node] - %[,empty node] - ] - [,empty node] - ] - {\draw[<->,blue] () to[bend right=45] node[midway,above right,font=\small]{Vertauschen} (!u.east);} - ] - [ - 17 - [ - 7 - [,empty node] - [,empty node] - ] - [ - 1 - [,empty node] - [,empty node] - ] - ] - ] - \end{forest} - } - - \vspace{1em} - - \scalebox{0.9}{ - \begin{forest} - baseline,anchor=north, - for tree={circle, draw, - minimum size=2em, % <-- added - inner sep=1pt} - [ - 45,draw=teal - [ - 36, draw=teal, edge={draw=teal} - [ - 25 - [ - 2 - %[,empty node] - %[,empty node] - ] - [ - 3 - %[,empty node] - %[,empty node] - ] - ] - [ - 26, edge={draw=teal},draw=teal - [ - 19, edge={draw=teal},draw=teal - %[,empty node] - %[,empty node] - ] - [,empty node] - ] - ] - [ - 17 - [ - 7 - [,empty node] - [,empty node] - ] - [ - 1 - [,empty node] - [,empty node] - ] - ] - ] - \end{forest} - } - \end{center} -\end{algo} - -% Baumdurchlauf +\section{Bäume} + +\begin{defi}{Baum} + Ein \emph{Baum} ist eine hierarchische (rekursive) Datenstruktur. + Es gilt: + \begin{itemize} + \item alle Wege gehen von einer \emph{Wurzel} aus + \item $A$ heißt \emph{Vorgänger} von $B$ bzw. $B$ \emph{Nachfolger} von $A$, wenn $A$ auf einem Weg von der Wurzel zu $B$ liegt + \item $A$ heißt \emph{Elterknoten} von $B$, bzw. $B$ heißt \emph{Kind} von $A$, wenn $(A, B) \in E$ + \item Knoten ohne Kinder heißen \emph{Blätter} + \item Knoten mit Kindern heißen \emph{innere Knoten} + \item ein Knoten $S$ mit allen Nachfolgern wird \emph{Teilbaum} eines Baumes $T$ genannt, falls $S$ nicht Wurzel von $T$ ist + \item der \emph{Verzweigungsgrad} eines Knotens ist die Anzahl seiner Kinder + \end{itemize} + + \vspace{1em} + + \begin{center} + \begin{forest} + for tree={s sep=5mm, fit=band} + [Wurzel, name=root + [Blatt, name=blatt1] + [Innerer Knoten, name=inner1 [Blatt, name=blatt2] + [Innerer Knoten, name=inner2 + [Blatt, name=blatt3] + [Innerer Knoten, name=inner3 [Blatt, name=blatt4] + [Blatt, name=blatt5]]]]] + \node [draw, label=left:Level 0, dashed, fit={(root) (blatt1.west |- root.center) (inner3.east |- root.center)}] {}; + \node [draw, label=left:Level 1, dashed, fit={(blatt1) (inner3.east |- blatt1.center)}] {}; + \node [draw, label=left:Level 2, dashed, fit={(blatt2) (blatt1.west |- blatt2.center) (inner3.east |- blatt2.center)}] {}; + \node [draw, label=left:Level 3, dashed, fit={(blatt3) (blatt1.west |- blatt3.center) (inner3)}] {}; + \node [draw, label=left:Level 4, dashed, fit={(blatt4) (blatt1.west |- blatt5.center) (blatt5) (inner3.east |- blatt5.center)}] {}; + \node [draw, red, fit={(inner2) (inner3) (blatt5) (blatt3)},label=right:{\color{red}Teilbaum}] {}; + \end{forest} + \end{center} +\end{defi} + +% Binärbäume + +\begin{defi}{Binärbaum} + Die Knoten eines \emph{Binärbaums (binary tree)} haben höchstens den Verzweigungsgrad $2$. + + Bei einem \emph{geordneten Binärbaum} ist die Reihenfolge der Kinder durch die Indizes eindeutig festgelegt: + \begin{itemize} + \item $T_l$: linkes Kind, linker Teilbaum + \item $T_r$: rechtes Kind, rechter Teilbaum + \end{itemize} + + Ein Binärbaum heißt \emph{minimal} (bezogen auf die Höhe), wenn kein Binärbaum mit gleicher Knotenzahl aber kleinerer Höhe existiert. + + Ein \emph{links-vollständiger Binärbaum} ist ein minimaler Binärbaum, in dem die Knoten auf dem untersten Level so weit wie möglich links stehen. + + Alle Blätter eines \emph{vollständigen Binärbaums} haben den gleichen Level und dieser ist vollbesetzt. + + Ein vollständiger Binärbaum der Höhe $H$ hat + $$ + n = 1 + 2 + 4 + \ldots + 2^H = \frac{2^{H+1}-1}{2-1} = 2^{H+1}-1 \ \text{Knoten} + $$ +\end{defi} + +\begin{halfboxl} + \begin{example}{Linksvollständiger Binärbaum} + \centering + \begin{forest} + for tree={circle, draw, + minimum size=1.75em, % <-- added + inner sep=1pt} + [ + [ + [ + [] + [] + ] + [ + [] + [] + ] + ] + [ + [] + [] + ] + ] + \end{forest} + \end{example} +\end{halfboxl} +\begin{halfboxr} + \begin{example}{Vollständiger Binärbaum} + \centering + \begin{forest} + for tree={circle, draw, + minimum size=1.75em, % <-- added + inner sep=1pt} + [ + [ + [ + [] + [] + ] + [ + [] + [] + ] + ] + [ + [ + [] + [] + ] + [ + [] + [] + ] + ] + ] + \end{forest} + \end{example} +\end{halfboxr} + +\subsection{Binäre Suchbäume} +% Binäre Suchbäume + +\begin{defi}{Binärer Suchbaum} + Ein \emph{binärer Suchbaum} ist ein Binärbaum, bei dem für jeden Knoten des Baumes gilt: + + Alle Schlüssel im linken Teilbaum sind kleiner, alle im rechten Teilbaum sind größer oder gleich dem Schlüssel in diesem Knoten. +\end{defi} + +\begin{algo}{Suchen im binären Suchbaum} + Suchen ist ohne Probleme durch einfaches Vergleichen ($<$ bzw. $\geq$) möglich. + + Suchen der $50$ in \textcolor{red}{rot} bzw. (erfolgloses) Suchen der $80$ in \textcolor{blue}{blau}. + + \vspace{1em} + + \centering + \forestset{% + empty node/.style={dashed} + } + \begin{forest} + for tree={circle, draw, + minimum size=2em, % <-- added + inner sep=1pt} + [60 + [ + 20,edge={->,dashed,red,thick} + [10 [,empty node][,empty node]] + [30,edge={->,dashed,red,thick} + [,empty node] + [50,edge={->,dashed,red,thick}, draw=red [,empty node][,empty node]] + ] + ] + [ + 70,edge={->,dashed,blue,thick} + [,empty node] + [110,edge={->,dashed,blue,thick} + [90,edge={->,dashed,blue,thick} + [,empty node,edge={->,dashed,blue,thick},draw=blue][,empty node] + ] + [,empty node] + ] + ] + ] + \end{forest} +\end{algo} + +\begin{algo}{Einfügen im binären Suchbaum} + Ein Knoten kann ohne Probleme hinzugefügt werden, indem man solange sucht, bis man auf einen leeren Kindknoten trifft und dort einfügt. + + Einfügen der $40$ in \textcolor{red}{rot}. + + \vspace{1em} + + \centering + \begin{forest} + for tree={circle, draw, + minimum size=2em, % <-- added + inner sep=1pt} + [60 + [ + 20,edge={->,dashed,red,thick} + [10 [,empty node][,empty node]] + [30,edge={->,dashed,red,thick} + [,empty node] + [50,edge={->,dashed,red,thick} [ + 40,edge={->,dashed,red,thick},draw=red + ][,empty node]] + ] + ] + [ + 70 + [,empty node] + [110 + [90 + [,empty node][,empty node] + ] + [,empty node] + ] + ] + ] + \end{forest} +\end{algo} + +\begin{algo}{Löschen im binären Suchbaum (Blatt)} + Ein Blatt kann problemlos gelöscht werden. + + Löschen der $50$ in \textcolor{red}{rot}. + + \vspace{1em} + + \centering + \begin{forest} + baseline,anchor=north, + for tree={circle, draw, + minimum size=2em, % <-- added + inner sep=1pt} + [20,edge={->,dashed,red,thick} + [10 + [,empty node] + [,empty node] + ] + [30,edge={->,dashed,red,thick} + [,empty node] + [50,edge={->,dashed,red,thick}, draw=red + [,empty node] + [,empty node] + ] + ] + ] + \end{forest} + \hspace{5em} + \begin{forest} + baseline,anchor=north, + for tree={circle, draw, + minimum size=2em, % <-- added + inner sep=1pt} + [20 + [10 + [,empty node] + [,empty node] + ] + [30 + [,empty node] + [,empty node,draw=red] + ] + ] + \end{forest} +\end{algo} + +\begin{algo}{Löschen im binären Suchbaum (Innerer Knoten mit einem Kind)} + Soll ein innerer Knoten mit einem Kind gelöscht werden, rückt das Kind an die Stelle des Elterknotens. + + Löschen der $30$ in \textcolor{red}{rot}. + + \vspace{1em} + + \centering + \begin{forest} + baseline,anchor=north, + for tree={circle, draw, + minimum size=2em, % <-- added + inner sep=1pt} + [20,edge={->,dashed,red,thick} + [10 + [,empty node] + [,empty node] + ] + [30,edge={->,dashed,red,thick}, draw=red + [,empty node] + [50,draw=blue + [,empty node] + [,empty node] + ] + {\draw[->,blue] () to[bend right=45] node[midway,above right,font=\small]{Vorrücken} (!u.east);} + ] + ] + \end{forest} + \hspace{5em} + \begin{forest} + baseline,anchor=north, + for tree={circle, draw, + minimum size=2em, % <-- added + inner sep=1pt} + [20 + [10 + [,empty node] + [,empty node] + ] + [50,draw=blue + [,empty node] + [,empty node] + ] + ] + \end{forest} +\end{algo} + +\begin{algo}{Löschen im binären Suchbaum (Innerer Knoten mit zwei Kindern)} + Soll ein innerer Knoten mit zwei Kindern gelöscht werden, nimmt der nächstgrößere Knoten seinen Platz ein. + + Dieser wird wie folgt ermittelt (in \textcolor{purple}{lila}): + \begin{enumerate} + \item Gehe einen Schritt nach rechts. + \item Gehe solange nach links, bis es kein linkes Kind mehr gibt. + \end{enumerate} + + Löschen der $20$ in \textcolor{red}{rot}. + + \vspace{1em} + + \centering + \begin{forest} + baseline,anchor=north, + for tree={circle, draw, + minimum size=2em, % <-- added + inner sep=1pt} + [20,draw=red + [10 + [,empty node] + [,empty node] + ] + [30,edge={->,dashed,purple,thick},draw=purple + [,empty node,edge={->,dashed,purple,thick}] + [50 + [,empty node] + [,empty node] + ] + ]{\draw[->,blue] () to[bend right=45] node[midway,above right,font=\small]{Platz einnehmen} (!u.east);} + ] + \end{forest} + %\hspace{1em} + \begin{forest} + baseline,anchor=north, + for tree={circle, draw, + minimum size=2em, % <-- added + inner sep=1pt} + [30,draw=purple + [10 + [,empty node] + [,empty node] + ] + [,empty node + %[,empty node] + [50,draw=blue + [,empty node] + [,empty node] + ] + {\draw[->,blue] () to[bend right=45] node[midway,above right,font=\small]{Vorrücken} (!u.east);} + ] + ] + \end{forest} + %\hspace{1em} + \begin{forest} + baseline,anchor=north, + for tree={circle, draw, + minimum size=2em, % <-- added + inner sep=1pt} + [30,draw=purple + [10 + [,empty node] + [,empty node] + ] + [50,draw=blue + [,empty node] + [,empty node] + ] + ] + \end{forest} +\end{algo} + +\begin{bonus}{Komplexität beim Suchen, Löschen und Einfügen in Binärbäumen} + Die Komplexität der Funktionen Suchen, Löschen und Einfügen werden durch die Komplexität des Suchens eines Elements bestimmt. + + Im schlechtesten Fall ist die Anzahl der zu durchsuchenden Elemente gleich der Höhe des Baumes $+1$. + Dabei hängt die Höhe stark von der Reihenfolge der Einfügeoperationen ab. + + \vspace{1em} + + \centering + \begin{forest} + baseline,anchor=north, + for tree={circle, draw, + minimum size=2em, % <-- added + inner sep=1pt} + [10 + [,empty node] + [ + 20 + [,empty node] + [ + 30 + [,empty node] + [ + 40 + [,empty node] + [ + 50 + [,empty node] + [ + 60 + [,empty node] + [,empty node] + ] + ] + ] + ] + ] + ] + \end{forest} + \hspace{5em} + \begin{forest} + baseline,anchor=north, + for tree={circle, draw, + minimum size=2em, % <-- added + inner sep=1pt} + [ + 40 + [ + 20 + [ + 10 + [,empty node] + [,empty node] + ] + [ + 30 + [,empty node] + [,empty node] + ] + ] + [ + 50 + [,empty node] + [ + 60 + [,empty node] + [,empty node] + ] + ] + ] + \end{forest} +\end{bonus} + +% Balancierte Bäume + +\begin{defi}{Balanciertheit} + + Ein Binärbaum mit $n$ Knoten hat im besten Fall (\emph{optimal balanciert}) die Höhe + $$ + H = \lceil \log_2(n+1) \rceil - 1 = \lfloor \log_2(n) \rfloor + $$ + Dabei ist Suchen in $\bigo(\log n)$. + + Ein Binärbaum mit $n$ Knoten hat im schlechtesten Fall (\emph{entartet/degeneriert}) die Höhe + $$ + H = n-1 + $$ + Dabei ist Suchen in $\bigo(n)$. +\end{defi} + +\begin{defi}{Balance-Kriterien} + \begin{enumerate} + \item Abgeschwächtes Kriterium für ausgeglichene Höhe + \begin{itemize} + \item lokale Umordnungsoperationen reichen aus + \item z.B. \emph{AVL-Bäume} und Rot-Schwarz-Bäume + \end{itemize} + \item Jeder neue Knoten wandert an die Wurzel des Baumes + \begin{itemize} + \item Vorteil: Zuletzt eingefügte Elemente lassen sich schneller finden + \item durch spezielles Einfügeverfahren wird Baum zusätzlich (teilweise) ausgeglichen + \item z.B. Splay-Bäume + \end{itemize} + \item Unausgeglichener Verzweigungsgrad ermöglicht ausgeglichene Höhe + \begin{itemize} + \item z.B. \emph{B-Bäume} + \end{itemize} + \end{enumerate} +\end{defi} + +\subsection{AVL-Bäume} + +% AVL-Bäume + +\begin{defi}{AVL-Baum} + Bei einem \emph{AVL-Baum} unterscheiden sich die Höhen zweier Teilbäume des gleichen Knotens maximal um $1$. + + Der sogenannte \emph{Balance-Index} (oder Balance-Faktor) $\BF$ eines Knotens $T$ ist die Differenz + $$ + \BF(T) := H(T_r) - H(T_l) + $$ + Dabei gilt: + \begin{itemize} + \item Jeder Knoten hat einen Balance-Index. + \item Er darf nur die Werte $-1$, $0$ oder $1$ annehmen. + \end{itemize} + + %\vspace{2em} + + \centering + \begin{forest} + baseline,anchor=north, + for tree={circle, draw, + minimum size=2em, % <-- added + inner sep=1pt} + [ + J, label=right:{\small\textcolor{blue}{+1}} + [ + F, label=right:{\small\textcolor{blue}{-1}} + [ + D, label=right:{\small\textcolor{blue}{-1}} + [ + C, label=left:{\small\textcolor{blue}{0}} + [,empty node] + [,empty node] + ] + [,empty node] + ] + [ + G, label=right:{\small\textcolor{blue}{0}} + [,empty node] + [,empty node] + ] + ] + [ + P, label=right:{\small\textcolor{blue}{+1}} + [ + L, label=right:{\small\textcolor{blue}{+1}} + [,empty node] + [ + N, label=right:{\small\textcolor{blue}{0}} + [,empty node] + [,empty node] + ] + ] + [ + V, label=right:{\small\textcolor{blue}{-1}} + [ + S, label=right:{\small\textcolor{blue}{0}} + [ + Q, label=right:{\small\textcolor{blue}{0}} + [,empty node] + [,empty node] + ] + [ + U, label=left:{\small\textcolor{blue}{0}} + [,empty node] + [,empty node] + ] + ] + [ + X, label=right:{\small\textcolor{blue}{0}} + [,empty node] + [,empty node] + ] + ] + ] + ] + \end{forest} +\end{defi} + +\begin{algo}{Einfügen in einem AVL-Baum} + Beim Einfügen in einen AVL-Baum wird zu Beginn analog zu einem regulären Binärbaum eingefügt. + + Anschließend wird sich der unmittelbare Elterknoten $E$ angeschaut und es gibt für den dortigen Balance-Index $\BF(E)$ drei Fälle: + \begin{enumerate} + \item $\BF(E)$ wird $0$: + \begin{itemize}[-] + \item $\BF(E)$ war vorher $-1$ + \item man kommt von einem Kindbaum, der vorher niedriger war + \item Höhe des Knotens ändert sich nicht + \item oberhalb bleiben alle Balance-Indizes gleich + \item $\implies$ AVL-Kriterium ist für den ganzen Baum erfüllt + \end{itemize} + \item $\BF(E)$ wird $\pm 1$: + \begin{itemize}[-] + \item $\BF(E)$ war vorher $0$ + \item Höhe des Teilbaums erhöht sich um $1$ + \item $\implies$ Überprüfung der Balance-Indizes muss beim Elternknoten von $E$ fortgesetzt werden + \end{itemize} + \item $\BF(E)$ wird $\pm 2$: + \begin{itemize}[-] + \item $\BF(E)$ war vorher $\pm 1$ + \item $\implies$ Teilbaum muss \emph{rebalanciert} werden + \end{itemize} + \end{enumerate} +\end{algo} + +\begin{algo}{Löschen in einem AVL-Baum} + Beim Löschen in einen AVL-Baum wird zu Beginn analog zu einem regulären Binärbaum gelöscht. + + Anschließend wird sich der unmittelbare Elterknoten $E$ angeschaut und es gibt für den dortigen Balance-Index $\BF(E)$ drei Fälle: + \begin{enumerate} + \item $\BF(E)$ wird $\pm 1$: + \begin{itemize}[-] + \item $\BF(E)$ war vorher $0$ + \item Höhe des Knotens ändert sich nicht + \item oberhalb bleiben alle Balance-Indizes gleich + \item $\implies$ AVL-Kriterium ist für den ganzen Baum erfüllt + \end{itemize} + \item $\BF(E)$ wird $0$: + \begin{itemize}[-] + \item $\BF(E)$ war vorher $0$ + \item Höhe des Teilbaums verringert sich um $1$ + \item $\implies$ Überprüfung der Balance-Indizes muss beim Elternknoten von $E$ fortgesetzt werden + \end{itemize} + \item $\BF(E)$ wird $\pm 2$: + \begin{itemize}[-] + \item $\BF(E)$ war vorher $\pm 1$ + \item $\implies$ Teilbaum muss \emph{rebalanciert} werden + \end{itemize} + \end{enumerate} +\end{algo} + +\begin{algo}{Rebalancierung} + Wenn bei einer Opeation ein Höhenunterschied von mehr als $1$ zwischen zwei Geschwister-Teilbäumen entsteht, ist beim Elterknoten das AVL-Kriterium verletzt. + Eine entsprechende Korrektur heißt \emph{Rebalancierung}. + Als Werkzeuge eignen sich hierfür die sogenannten \emph{Rotationen}. +\end{algo} + +\begin{algo}{Einfachrotation} + Wird ein AVL-Baum unbalanciert, wenn ein Knoten in den \emph{rechten Teilbaum des rechten Teilbaums} eingefügt wird (Rechts-Rechts-Situation), dann wird das durch eine \emph{Einfachrotation nach links} gelöst. + + Zuletzt wurde $9$ eingefügt. Linksrotation in \textcolor{purple}{lila}. + + \vspace{1em} + + \begin{center} + \begin{forest} + baseline,anchor=north, + for tree={circle, draw, + minimum size=2em, % <-- added + inner sep=1pt} + [3%, label=right:{\small\textcolor{red}{+2}} + [1%, label=below right:{\small\textcolor{blue}{0}} + [,empty node] + [,empty node] + ] + [7, label=above:{\small\textcolor{red}{+2}}, draw=teal, name=7 + [,empty node] + [8, label=right:{\small\textcolor{blue}{+1}}, draw=purple, edge={teal,thick} + [,empty node, name=8c] + [9, label=right:{\small\textcolor{blue}{0}}, edge={purple,thick},draw=purple + ] + ] + {\draw[->,purple] () to[bend right=45] node[midway,above right,font=\small]{Linksrotation} (!u.east);} + ] + ] + \draw[->,teal] (7) to[bend right=45] (8c); + \end{forest} + \hspace{5em} + \begin{forest} + baseline,anchor=north, + for tree={circle, draw, + minimum size=2em, % <-- added + inner sep=1pt} + [3, label=right:{\small\textcolor{blue}{+1}} + [1, label=right:{\small\textcolor{blue}{0}} + [,empty node] + [,empty node] + ] + [8, label=right:{\small\textcolor{blue}{0}}, draw=purple + [7, label=right:{\small\textcolor{blue}{0}}, draw=teal, edge={teal,thick} + [,empty node] + [,empty node] + ] + [9, label=right:{\small\textcolor{blue}{0}}, edge={purple,thick},draw=purple + [,empty node] + [,empty node] + ] + ] + ] + \end{forest} + \end{center} + + \vspace{1em} + + Wird ein AVL-Baum unbalanciert, wenn ein Knoten in den \emph{linken Teilbaum des linken Teilbaums} eingefügt wird (Links-Links-Situation), dann wird das durch eine \emph{Einfachrotation nach rechts} gelöst. + + Zuletzt wurde $1$ eingefügt. Rechtsrotation in \textcolor{purple}{lila}. + + \vspace{1em} + + \begin{center} + \begin{forest} + baseline,anchor=north, + for tree={circle, draw, + minimum size=2em, % <-- added + inner sep=1pt} + [ + 7 + [ + 3, label=above:{\small\textcolor{red}{-2}}, draw=teal, name=3 + [ + 2, label=left:{\small\textcolor{blue}{-1}}, draw=purple, edge={teal,thick},draw=purple + [ + 1, label=left:{\small\textcolor{blue}{0}}, draw=purple, edge={purple,thick},draw=purple + ] + [,empty node, name=2c] + ] + {\draw[->,purple] () to[bend left=45] node[midway,above left,font=\small]{Rechtsrotation} (!u.west);} + [,empty node] + ] + [ + 8 + [,empty node] + [,empty node] + ] + ] + \draw[->,teal] (3) to[bend left=45] (2c); + \end{forest} + \hspace{5em} + \begin{forest} + baseline,anchor=north, + for tree={circle, draw, + minimum size=2em, % <-- added + inner sep=1pt} + [ + 7, label=left:{\small\textcolor{blue}{-1}} + [ + 2, label=left:{\small\textcolor{blue}{0}}, draw=purple,draw=purple + [ + 1, label=left:{\small\textcolor{blue}{0}}, draw=purple, edge={purple,thick},draw=purple + [,empty node] + [,empty node] + ] + [3, label=left:{\small\textcolor{blue}{0}}, draw=teal, name=3, edge={teal,thick} + [,empty node] + [,empty node] + ] + ] + [ + 8, label=left:{\small\textcolor{blue}{0}} + [,empty node] + [,empty node] + ] + ] + \end{forest} + \end{center} +\end{algo} + +\begin{algo}{Doppelrotation} + Wird ein AVL-Baum unbalanciert, wenn ein Knoten in den \emph{rechten Teilbaum des linken Teilbaums} eingefügt wird, dann wird das durch eine \emph{Doppelrotation} (Linksrotation, gefolgt von Rechtsrotation) gelöst. + + Zuletzt wurde $4$ eingefügt. Rotationen in \textcolor{purple}{lila}. + + \vspace{1em} + + \begin{center} + \begin{forest} + baseline,anchor=north, + for tree={circle, draw, + minimum size=2em, % <-- added + inner sep=1pt} + [ + 7, label=left:{\small\textcolor{red}{-2}} + [ + 3, label=left:{\small\textcolor{blue}{+1}}, draw=teal, name=3 + [,empty node] + [4, draw=purple, label=right:{\small\textcolor{blue}{0}}, edge={teal,thick},draw=purple + [,empty node, draw=none, edge={draw=none}, name=4c] + [,empty node, draw=none, edge={draw=none}] + ] + {\draw[->,purple] () to[bend right=45] node[midway,above right,font=\small]{Linksrotation} (!u.east);} + ] + [,empty node] + ] + \draw[->,teal] (3) to[bend right=45] (4c); + \end{forest} + \hspace{-2em} + \begin{forest} + baseline,anchor=north, + for tree={circle, draw, + minimum size=2em, % <-- added + inner sep=1pt} + [ + 7, draw=teal, name=7, label=right:{\small\textcolor{red}{-2}} + [ + 4, draw=purple, edge={teal,thick}, label=left:{\small\textcolor{blue}{-1}} + [ + 3, draw=purple, edge={purple,thick}, label=left:{\small\textcolor{blue}{0}} + [,empty node] + [,empty node] + ] + [,empty node, name=4c] + ] + {\draw[->,purple] () to[bend left=45] node[midway,above left,font=\small]{Rechtsrotation} (!u.west);} + [,empty node] + ] + \draw[->,teal] (7) to[bend left=45] (4c); + \end{forest} + \hspace{3em} + \begin{forest} + baseline,anchor=north, + for tree={circle, draw, + minimum size=2em, % <-- added + inner sep=1pt} + [ + 4, draw=purple, label=right:{\small\textcolor{blue}{0}} + [ + 3, draw=purple, edge={purple,thick}, label=right:{\small\textcolor{blue}{0}} + [,empty node] + [,empty node] + ] + [ + 7, draw=teal, edge={teal,thick}, label=right:{\small\textcolor{blue}{0}} + [,empty node] + [,empty node] + ] + ] + \end{forest} + \end{center} + + \vspace{1em} + + Wird ein AVL-Baum unbalanciert, wenn ein Knoten in den \emph{linken Teilbaum des rechten Teilbaums} eingefügt wird, dann wird das durch eine \emph{Doppelrotation} (Rechtsrotation, gefolgt von Linksrotation) gelöst. + + Zuletzt wurde $3$ eingefügt. Rotationen in \textcolor{purple}{lila}. + + \vspace{1em} + + \begin{center} + \begin{forest} + baseline,anchor=north, + for tree={circle, draw, + minimum size=2em, % <-- added + inner sep=1pt} + [ + 2, label=right:{\small\textcolor{red}{+2}} + [,empty node] + [ + 5, label=right:{\small\textcolor{blue}{-1}}, draw=teal, name=5 + [3, draw=purple, label=left:{\small\textcolor{blue}{0}}, edge={teal,thick},draw=purple + [,empty node, draw=none, edge={draw=none}] + [,empty node, draw=none, edge={draw=none}, name=3c] + ] + {\draw[->,purple] () to[bend left=45] node[midway,above left,font=\small]{Rechtsrotation} (!u.west);} + [,empty node] + ] + ] + \draw[->,teal] (5) to[bend left=45] (3c); + \end{forest} + \hspace{5em} + \begin{forest} + baseline,anchor=north, + for tree={circle, draw, + minimum size=2em, % <-- added + inner sep=1pt} + [ + 2, label=left:{\small\textcolor{red}{+2}}, draw=teal, name=2 + [,empty node] + [ + 3, label=right:{\small\textcolor{blue}{+1}}, draw=purple, edge={teal,thick} + [,empty node, name=3c] + [5, draw=purple, label=right:{\small\textcolor{blue}{0}}, edge={purple,thick},draw=purple + [,empty node] + [,empty node] + ] + ] + {\draw[->,purple] () to[bend right=45] node[midway,above right,font=\small]{Linksrotation} (!u.east);} + ] + \draw[->,teal] (2) to[bend right=45] (3c); + \end{forest} + \hspace{1em} + \begin{forest} + baseline,anchor=north, + for tree={circle, draw, + minimum size=2em, % <-- added + inner sep=1pt} + [ + 3, label=right:{\small\textcolor{blue}{0}},draw=purple + [ + 2, label=right:{\small\textcolor{blue}{0}}, edge={teal,thick},draw=teal + [,empty node] + [,empty node] + ] + [ + 5, label=right:{\small\textcolor{blue}{0}}, edge={purple,thick},draw=purple + [,empty node] + [,empty node] + ] + ] + \end{forest} + \end{center} +\end{algo} + + +\begin{defi}{Komplexität von AVL-Bäumen} + \begin{itemize} + \item Einfügen + \begin{itemize} + \item Element muss gesucht werden: $\bigo(\log n)$ + \item Element muss angehängt werden: $\bigo(1)$ + \item Baum muss ausgeglichen werden: $\bigo(\log n)$ + \end{itemize} + \item Löschen + \begin{itemize} + \item Element muss gesucht werden: $\bigo(\log n)$ + \item nächstgrößeres Element muss gesucht werden: $\bigo(\log n)$ + \item Elemente müssen verschoben werden: $\bigo(1)$ + \item Baum muss ausgeglichen werden: $\bigo(\log n)$\footnote{Im Worst-Case muss für jede Ebene eine Doppelrotation durchgeführt werden $\implies \bigo(\log n)$} + \end{itemize} + \item Prüfen/Auslesen + \begin{itemize} + \item Element muss gesucht werden: $\bigo(\log n)$ + \end{itemize} + \end{itemize} +\end{defi} + +\subsection{B-Bäume} +% B-Bäume + +\begin{defi}{B-Baum} + Jeder Knoten in einem \emph{B-Baum der Ordnung d} enthält $d$ bis $2d$ Elemente. + + Die Wurzel bildet die einzige Ausnahme, sie kann $1$ bis $2d$ Elemente enthalten. + + Die Elemente in einem Knoten sind aufsteigend sortiert. + + Die Anzahl der Kinder in einem B-Baum ist entweder $0$ (Blatt) oder um eins größer als die Anzahl der Elemente, die der Knoten enthält. + + Alle Blätter liegen auf demselben Level. + \begin{itemize}[-] + \item garantierte Zugriffszeiten + \item bei realistischen Parametern (z.B. Ordnung $1000$) sind sehr wenige ($<5$) Zugriffe auf das externe Medium nötig + \end{itemize} + + B-Bäume besitzen ausgeglichene Höhe, lassen aber unausgeglichenen Verzweigungsgrad und Knotenfüllgrad zu. + + Der längste Weg in einem B-Baum der Ordnung $d$ ist in $\bigo(\log_{d+1} n)$. + + B-Baum der Ordnung $2$: + \vspace{1em} + + \centering + \begin{forest} + for tree = { + draw, + rectangle split, rectangle split horizontal, + rectangle split parts=4, + %on chain=A, + parent anchor=south, + child anchor=north, + text width=1em, + text centered, + %edge = {->}, + l sep=12mm, + s sep=2em, + } + [{\mpnc{\textcolor{red}{30}}{\textcolor{violet}{38}}{\textcolor{blue}{42}}{\times}} + [{\mpnc{10}{20}{25}{\times}}, name=c1, edge path={ + \noexpand\path [draw, \forestoption{edge}] ([xshift=-3.4em]!u.parent anchor) -- (.child anchor)\forestoption{edge label}; + }] + [{\mpnc{32}{34}{35}{\times}}, name=c2, edge path={ + \noexpand\path [draw, \forestoption{edge}] ([xshift=-1.7em]!u.parent anchor) -- (.child anchor)\forestoption{edge label}; + }] + [{\mpnc{40}{41}{\times}{\times}}, name=c3, edge path={ + \noexpand\path [draw, \forestoption{edge}] (!u.parent anchor) -- (.child anchor)\forestoption{edge label}; + }] + [{\mpnc{44}{50}{56}{58}}, name=c4, edge path={ + \noexpand\path [draw, \forestoption{edge}] ([xshift=1.7em]!u.parent anchor) -- (.child anchor)\forestoption{edge label}; + }] + ] + \node[fit=(c1), label=below:{$\in [-\infty, \text{\textcolor{red}{30}}]$}] {}; + \node[fit=(c2), label=below:{$\in [\text{\textcolor{red}{30}}, \text{\textcolor{purple}{38}}]$}] {}; + \node[fit=(c3), label=below:{$\in [\text{\textcolor{purple}{38}}, \text{\textcolor{blue}{42}}]$}] {}; + \node[fit=(c4), label=below:{$\in [\text{\textcolor{blue}{42}}, \infty]$}] {}; + \end{forest} +\end{defi} + +\begin{algo}{Suchen in einem B-Baum} + Ausgehend von der Wurzel: + \begin{enumerate} + \item Prüfe, ob der gerade betrachtete Knoten den gesuchten Schlüssel $m$ enthält. + \subitem (Suche innerhalb eines Knotens entweder linear oder binär.) + \item Falls nicht, bestimme den kleinsten Schlüssel $k_i$, der größer als $m$ ist. + \begin{itemize} + \item $k_i$ gefunden: Weiter bei Schritt 1 mit linkem Kind von $k_i$ ($p_{i-1}$) + \item $k_i$ nicht gefunden: Weiter mit letztem Kind ($p_{n}$) + \end{itemize} + \end{enumerate} +\end{algo} + +\begin{algo}{Einfügen in einem B-Baum der Ordnung $d$} + \begin{enumerate} + \item Suche nach Schlüssel endet in einem Blatt \texttt{node} (in \textcolor{purple}{lila}) + \item Schlüssel wird in Sortierreihenfolge eingefügt (und neuer leerer Verweis eingefügt) + \item Falls \texttt{node} überfüllt ist: \texttt{node} aufteilen + \subitem $k$ sei mittlerer Eintrag von \texttt{node} + \begin{enumerate} + \item Neuen Knoten \texttt{current} anlegen und mit den $d$ größeren Schlüsseln (rechts von $k$) belegen. + \item Die $d$ kleineren Schlüssel (links von $k$) bleiben in \texttt{node}. + \item $k$ in Elterknoten \texttt{parent} von \texttt{node} verschieben. + \item Verweis rechts von $k$ in \texttt{parent} mit \texttt{current} verbinden. + \end{enumerate} + \item Falls \texttt{parent} nun überfüllt ist: \texttt{parent} aufteilen (Siehe Schritt 3) + \end{enumerate} + + Einfügen der 60 in \textcolor{red}{rot}. + + \vspace{1em} + + \centering + \begin{forest} + for tree = { + draw, + rectangle split, rectangle split horizontal, + rectangle split parts=4, + %on chain=A, + parent anchor=south, + child anchor=north, + text width=1em, + text centered, + %edge = {->}, + l sep=12mm, + s sep=1em, + } + [{\mpnc{30}{38}{42}{\times}} + [{\mpnc{10}{20}{25}{\times}}, name=c1, edge path={ + \noexpand\path [draw, \forestoption{edge}] ([xshift=-3.4em]!u.parent anchor) -- (.child anchor)\forestoption{edge label}; + }] + [{\mpnc{32}{34}{35}{\times}}, name=c2, edge path={ + \noexpand\path [draw, \forestoption{edge}] ([xshift=-1.7em]!u.parent anchor) -- (.child anchor)\forestoption{edge label}; + }] + [{\mpnc{40}{41}{\times}{\times}}, name=c3, edge path={ + \noexpand\path [draw, \forestoption{edge}] (!u.parent anchor) -- (.child anchor)\forestoption{edge label}; + }] + [{\mpnc{44}{50}{56}{58}}, name=c4, edge={dashed,purple,thick}, draw=purple, edge path={ + \noexpand\path [draw, \forestoption{edge}] ([xshift=1.7em]!u.parent anchor) -- (.child anchor)\forestoption{edge label}; + }] + ] + \node[draw, above of=c4, rectangle, red, node distance=5em] (60) {60}; + \draw[->, red] (60) to (c4); + \end{forest} + + \vspace{1em} + + \begin{forest} + for tree = { + draw, + rectangle split, rectangle split horizontal, + rectangle split parts=4, + %on chain=A, + parent anchor=south, + child anchor=north, + text width=1em, + text centered, + %edge = {->}, + l sep=12mm, + s sep=1em, + } + [{\mpnc{30}{38}{42}{\times}}, name=r + [{\mpnc{10}{20}{25}{\times}}, name=c1, edge path={ + \noexpand\path [draw, \forestoption{edge}] ([xshift=-3.4em]!u.parent anchor) -- (.child anchor)\forestoption{edge label}; + }] + [{\mpnc{32}{34}{35}{\times}}, name=c2, edge path={ + \noexpand\path [draw, \forestoption{edge}] ([xshift=-1.7em]!u.parent anchor) -- (.child anchor)\forestoption{edge label}; + }] + [{\mpnc{40}{41}{\times}{\times}}, name=c3] + [{\mpnc{44}{50}{\times}{\times}}, name=c4, draw=red, edge={draw=none}] + [{\mpnc{58}{\textcolor{red}{60}}{\times}{\times}}, name=c5, draw=red, edge={draw=none}] + ] + \node[draw, above right of=c4, rectangle, blue, node distance=sqrt(2)*4em] (56) {56}; + \draw[->, blue, bend right=15] (56) to (r); + \end{forest} + + \vspace{1em} + + \begin{forest} + for tree = { + draw, + rectangle split, rectangle split horizontal, + rectangle split parts=4, + %on chain=A, + parent anchor=south, + child anchor=north, + text width=1em, + text centered, + %edge = {->}, + l sep=12mm, + s sep=1em, + } + [{\mpnc{30}{38}{42}{\textcolor{blue}{56}}}, name=r + [{\mpnc{10}{20}{25}{\times}}, name=c1, edge path={ + \noexpand\path [draw, \forestoption{edge}] ([xshift=-3.4em]!u.parent anchor) -- (.child anchor)\forestoption{edge label}; + }] + [{\mpnc{32}{34}{35}{\times}}, name=c2, edge path={ + \noexpand\path [draw, \forestoption{edge}] ([xshift=-1.7em]!u.parent anchor) -- (.child anchor)\forestoption{edge label}; + }] + [{\mpnc{40}{41}{\times}{\times}}, name=c3] + [{\mpnc{44}{50}{\times}{\times}}, name=c4, draw=red, edge={red}, edge path={ + \noexpand\path [draw, \forestoption{edge}] ([xshift=1.7em]!u.parent anchor) -- (.child anchor)\forestoption{edge label}; + }] + [{\mpnc{58}{\textcolor{red}{60}}{\times}{\times}}, name=c5, draw=red, edge={red}, edge path={ + \noexpand\path [draw, \forestoption{edge}] ([xshift=3.4em]!u.parent anchor) -- (.child anchor)\forestoption{edge label}; + }] + ] + \end{forest} +\end{algo} + +\begin{algo}{Löschen in einem B-Baum der Ordnung $d$ (Blatt)} + In einem Blatt mit Struktur + \begin{center} + \texttt{(null, $k_1$, null, $\ldots$, $k_i$, null, $\ldots$, $k_n$, null)} + \end{center} + (\texttt{null} sind hier die Kinder an der jeweiligen Stelle) + wird der Wert $x = k_i$ zusammen mit der darauf folgenden \texttt{null}-Referenz gelöscht. + + Ein \emph{Underflow} tritt auf, falls $n=d$ war. +\end{algo} + +\begin{algo}{Löschen in einem B-Baum der Ordnung $d$ (Innerer Knoten)} + In einem inneren Knoten mit Struktur + + \begin{center} + \texttt{($p_0$, $k_1$, $p_1$, $\ldots$, $k_i$, $p_i$, $\ldots$, $k_n$, $p_n$)} + \end{center} + + ($p_j$ sind hier die Kinder an der jeweiligen Stelle) + haben alle Referenzen einen Wert ungleich \texttt{null}. + + Das Löschen eines Wertes $x = k_i$ funktioniert analog zum Löschen aus einem binären Suchbaum: + \begin{enumerate} + \item Finde kleinsten Schlüssel $s$ im durch $p_i$ referenzierten Teilbaum (in einem Blatt) + \item Ersetze $k_i$ durch $s$ und lösche $s$ aus dem Blatt + \end{enumerate} + + Löschen der 38 in \textcolor{red}{rot}. + + \centering + \vspace{1em} + + \begin{forest} + for tree = { + draw, + rectangle split, rectangle split horizontal, + rectangle split parts=4, + %on chain=A, + parent anchor=south, + child anchor=north, + text width=1em, + text centered, + %edge = {->}, + l sep=12mm, + s sep=1em, + } + [{\mpnc{30}{\textcolor{red}{38}}{42}{56}}, name=r + [{\mpnc{10}{20}{25}{\times}}, name=c1, edge path={ + \noexpand\path [draw, \forestoption{edge}] ([xshift=-3.4em]!u.parent anchor) -- (.child anchor)\forestoption{edge label}; + }] + [{\mpnc{32}{34}{35}{\times}}, name=c2, edge path={ + \noexpand\path [draw, \forestoption{edge}] ([xshift=-1.7em]!u.parent anchor) -- (.child anchor)\forestoption{edge label}; + }] + [{\mpnc{40}{41}{\times}{\times}}, name=c3] + [{\mpnc{44}{50}{\times}{\times}}, name=c4, edge path={ + \noexpand\path [draw, \forestoption{edge}] ([xshift=1.7em]!u.parent anchor) -- (.child anchor)\forestoption{edge label}; + }] + [{\mpnc{58}{60}{\times}{\times}}, name=c5, edge path={ + \noexpand\path [draw, \forestoption{edge}] ([xshift=3.4em]!u.parent anchor) -- (.child anchor)\forestoption{edge label}; + }] + ] + \end{forest} + + \vspace{1em} + + \begin{forest} + for tree = { + draw, + rectangle split, rectangle split horizontal, + rectangle split parts=4, + %on chain=A, + parent anchor=south, + child anchor=north, + text width=1em, + text centered, + %edge = {->}, + l sep=12mm, + s sep=1em, + } + [{\mpnc{30}{\phantom{38}}{42}{56}}, name=r + [{\mpnc{10}{20}{25}{\times}}, name=c1, edge path={ + \noexpand\path [draw, \forestoption{edge}] ([xshift=-3.4em]!u.parent anchor) -- (.child anchor)\forestoption{edge label}; + }] + [{\mpnc{32}{34}{35}{\times}}, name=c2, edge path={ + \noexpand\path [draw, \forestoption{edge}] ([xshift=-1.7em]!u.parent anchor) -- (.child anchor)\forestoption{edge label}; + }] + [{\mpnc{\textcolor{blue}{40}}{41}{\times}{\times}}, name=c3] + [{\mpnc{44}{50}{\times}{\times}}, name=c4, edge path={ + \noexpand\path [draw, \forestoption{edge}] ([xshift=1.7em]!u.parent anchor) -- (.child anchor)\forestoption{edge label}; + }] + [{\mpnc{58}{60}{\times}{\times}}, name=c5, edge path={ + \noexpand\path [draw, \forestoption{edge}] ([xshift=3.4em]!u.parent anchor) -- (.child anchor)\forestoption{edge label}; + }] + ] + \draw[->, blue] ([xshift=-2.55em] c3.north) to[bend left=15] ([xshift=-0.75em]r.south); + \end{forest} + + \vspace{1em} + + \begin{forest} + for tree = { + draw, + rectangle split, rectangle split horizontal, + rectangle split parts=4, + %on chain=A, + parent anchor=south, + child anchor=north, + text width=1em, + text centered, + %edge = {->}, + l sep=12mm, + s sep=1em, + } + [{\mpnc{30}{\textcolor{blue}{40}}{42}{56}}, name=r + [{\mpnc{10}{20}{25}{\times}}, name=c1, edge path={ + \noexpand\path [draw, \forestoption{edge}] ([xshift=-3.4em]!u.parent anchor) -- (.child anchor)\forestoption{edge label}; + }] + [{\mpnc{32}{34}{35}{\times}}, name=c2, edge path={ + \noexpand\path [draw, \forestoption{edge}] ([xshift=-1.7em]!u.parent anchor) -- (.child anchor)\forestoption{edge label}; + }] + [{\mpnc{41}{\times}{\times}{\times}}, name=c3, draw=purple, label=below:\textcolor{purple}{Underflow!}] + [{\mpnc{44}{50}{\times}{\times}}, name=c4, edge path={ + \noexpand\path [draw, \forestoption{edge}] ([xshift=1.7em]!u.parent anchor) -- (.child anchor)\forestoption{edge label}; + }] + [{\mpnc{58}{60}{\times}{\times}}, name=c5, edge path={ + \noexpand\path [draw, \forestoption{edge}] ([xshift=3.4em]!u.parent anchor) -- (.child anchor)\forestoption{edge label}; + }] + ] + \end{forest} +\end{algo} + +\begin{defi}{Underflow} + Ein \emph{Underflow} tritt in einem B-Baum genau dann auf, wenn zu wenig ($<d$) Schlüssel im Knoten sind. +\end{defi} + +\begin{algo}{Ausgleich zwischen Geschwisterknoten} + Voraussetzung: + Knoten $q$ mit Underflow hat \emph{benachbarten} Geschwisterknoten $p$ mit $>d$ Schlüsseln. + + Annahme: + \begin{itemize} + \item $p$ ist linker Geschwisterknoten von $q$ (analog mit rechtem Geschwisterknoten) + \item im Elterknoten \texttt{parent} (von $p$ und $q$) trennt der Schlüssel $t$ die Verweise auf $p$ und $q$ + \end{itemize} + + Idee: $p$ schenkt $q$ ein Element (\glqq Umweg\grqq über Elterknoten) + + \begin{forest} + for tree = { + draw, + rectangle split, rectangle split horizontal, + rectangle split parts=4, + %on chain=A, + parent anchor=south, + child anchor=north, + text width=1em, + text centered, + %edge = {->}, + l sep=12mm, + s sep=1em, + } + [{\mpnc{30}{\textcolor{blue}{40}}{42}{56}}, name=r + [{\mpnc{10}{20}{25}{\times}}, name=c1, edge path={ + \noexpand\path [draw, \forestoption{edge}] ([xshift=-3.4em]!u.parent anchor) -- (.child anchor)\forestoption{edge label}; + }] + [{\mpnc{32}{34}{\textcolor{blue}{35}}{\times}}, name=c2, edge path={ + \noexpand\path [draw, \forestoption{edge}] ([xshift=-1.7em]!u.parent anchor) -- (.child anchor)\forestoption{edge label}; + }] + [{\mpnc{41}{\times}{\times}{\times}}, name=c3, draw=purple] + [{\mpnc{44}{50}{\times}{\times}}, name=c4, edge path={ + \noexpand\path [draw, \forestoption{edge}] ([xshift=1.7em]!u.parent anchor) -- (.child anchor)\forestoption{edge label}; + }] + [{\mpnc{58}{60}{\times}{\times}}, name=c5, edge path={ + \noexpand\path [draw, \forestoption{edge}] ([xshift=3.4em]!u.parent anchor) -- (.child anchor)\forestoption{edge label}; + }] + ] + \draw[->, blue] ([xshift=0.75em] c2.north) to[bend left=90] ([xshift=2.25em] r.north west); + \draw[<-, blue] ([xshift=-3.4em] c3.north) to[bend right=10] ([xshift=-0.75em] r.south); + \end{forest} + + \vspace{1em} + + \begin{forest} + for tree = { + draw, + rectangle split, rectangle split horizontal, + rectangle split parts=4, + %on chain=A, + parent anchor=south, + child anchor=north, + text width=1em, + text centered, + %edge = {->}, + l sep=12mm, + s sep=1em, + } + [{\mpnc{30}{\textcolor{blue}{35}}{42}{56}}, name=r + [{\mpnc{10}{20}{25}{\times}}, name=c1, edge path={ + \noexpand\path [draw, \forestoption{edge}] ([xshift=-3.4em]!u.parent anchor) -- (.child anchor)\forestoption{edge label}; + }] + [{\mpnc{32}{34}{\times}{\times}}, name=c2, edge path={ + \noexpand\path [draw, \forestoption{edge}] ([xshift=-1.7em]!u.parent anchor) -- (.child anchor)\forestoption{edge label}; + }] + [{\mpnc{\textcolor{blue}{40}}{41}{\times}{\times}}, name=c3] + [{\mpnc{44}{50}{\times}{\times}}, name=c4, edge path={ + \noexpand\path [draw, \forestoption{edge}] ([xshift=1.7em]!u.parent anchor) -- (.child anchor)\forestoption{edge label}; + }] + [{\mpnc{58}{60}{\times}{\times}}, name=c5, edge path={ + \noexpand\path [draw, \forestoption{edge}] ([xshift=3.4em]!u.parent anchor) -- (.child anchor)\forestoption{edge label}; + }] + ] + \end{forest} +\end{algo} + +\begin{algo}{Verschmelzen von Geschwisterknoten} + Voraussetzung: + Knoten $q$ hat \emph{benachbarten} Geschwisterknoten mit $d$ Schlüsseln. + + Annahme: + \begin{itemize} + \item $p$ ist linker Geschwisterknoten von $q$ (analog mit rechtem Geschwisterknoten) + \item im Elterknoten \texttt{parent} (von $p$ und $q$) trennt der Schlüssel $t$ die Verweise auf $p$ und $q$ + \end{itemize} + + Idee: $p$ und $q$ mit dem trennenden Element aus \texttt{parent} verschmelzen. + + Beachte: + \begin{itemize} + \item Eventueller Underflow in \texttt{parent} muss behandelt werden (rekursiv) + \item Falls letzter Schlüssel der Wurzel gelöscht wird, wird der einzige Nachfolger der Wurzel die neue Wurzel (Höhe des B-Baums wird um 1 verringert). + \end{itemize} + + \vspace{1em} + + \centering + \begin{forest} + for tree = { + draw, + rectangle split, rectangle split horizontal, + rectangle split parts=4, + %on chain=A, + parent anchor=south, + child anchor=north, + text width=1em, + text centered, + %edge = {->}, + l sep=12mm, + s sep=1em, + } + [{\mpnc{30}{40}{\textcolor{blue}{42}}{56}}, name=r + [{\mpnc{10}{20}{25}{\times}}, name=c1, edge path={ + \noexpand\path [draw, \forestoption{edge}] ([xshift=-3.4em]!u.parent anchor) -- (.child anchor)\forestoption{edge label}; + }] + [{\mpnc{32}{34}{35}{\times}}, name=c2, edge path={ + \noexpand\path [draw, \forestoption{edge}] ([xshift=-1.7em]!u.parent anchor) -- (.child anchor)\forestoption{edge label}; + }] + [{\mpnc{41}{\times}{\times}{\times}}, name=c3, draw=purple] + [{\mpnc{44}{50}{\times}{\times}}, name=c4, draw=blue, edge={blue}, edge path={ + \noexpand\path [draw, \forestoption{edge}] ([xshift=1.7em]!u.parent anchor) -- (.child anchor)\forestoption{edge label}; + }] + [{\mpnc{58}{60}{\times}{\times}}, name=c5, edge path={ + \noexpand\path [draw, \forestoption{edge}] ([xshift=3.4em]!u.parent anchor) -- (.child anchor)\forestoption{edge label}; + }] + ] + \draw[<-, blue] ([xshift=-0.75em] c3.north) to[bend left=10] ([xshift=0.75em] r.south); + \draw[<-, blue] ([xshift=0.75em] c3.north) to[bend left=45] ([xshift=-3.4em] c4.north); + \end{forest} + + \vspace{1em} + + \begin{forest} + for tree = { + draw, + rectangle split, rectangle split horizontal, + rectangle split parts=4, + %on chain=A, + parent anchor=south, + child anchor=north, + text width=1em, + text centered, + %edge = {->}, + l sep=12mm, + s sep=1em, + } + [{\mpnc{30}{40}{56}{\times}}, name=r + [{\mpnc{10}{20}{25}{\times}}, name=c1, edge path={ + \noexpand\path [draw, \forestoption{edge}] ([xshift=-3.4em]!u.parent anchor) -- (.child anchor)\forestoption{edge label}; + }] + [{\mpnc{32}{34}{35}{\times}}, name=c2, edge path={ + \noexpand\path [draw, \forestoption{edge}] ([xshift=-1.7em]!u.parent anchor) -- (.child anchor)\forestoption{edge label}; + }] + [{\mpnc{41}{\textcolor{blue}{42}}{\textcolor{blue}{44}}{\textcolor{blue}{50}}}, name=c3] + [{\mpnc{58}{60}{\times}{\times}}, name=c5, edge path={ + \noexpand\path [draw, \forestoption{edge}] ([xshift=1.7em]!u.parent anchor) -- (.child anchor)\forestoption{edge label}; + }] + ] + \end{forest} +\end{algo} + +\begin{defi}{B+-Baum} + Im Unterschied zu B-Bäumen speichern \emph{B+-Bäume} ihre Datensätze ausschließlich in den Blättern. + + Dies ist bei der Anwendung für Datenbanken naheliegend und sinnvoll. +\end{defi} + +\subsection{Rot-Schwarz-Bäume} + +\begin{defi}{Rot-Schwarz-Baum} + Ein \emph{Rot-Schwarz-Baum} ist ein balancierter binärer Suchbaum, in dem jeder innere Knoten zwei Kinder hat. + + Jeder innere Knoten hat eine Farbe, so dass gilt: + \begin{itemize} + \item Die Wurzel ist schwarz. + \item Alle Blätter (\text{null}-Knoten) sind schwarz. + \item Für jeden Knoten gilt, dass jeder Pfad zu den Blättern die gleiche Anzahl an schwarzen Knoten hat. (Schwarz-Tiefe) + \item Beide Kinder eines roten Knotens sind schwarz. + \end{itemize} + + Rot-Schwarz-Bäume sind eine gängige Alternative zu AVL-Bäumen. +\end{defi} + +\begin{algo}{Einfügen in einen Rot-Schwarz-Baum} + Zuerst wird wie in einem normalen Binärbaum eingefügt, danach werden die Rot-Schwarz-Bedingungen repariert. + + Annahmen: + \begin{itemize} + \item eingefügter Knoten $v$ ist rot + \item Elterknoten $u$ von $v$ ist rot (sonst fertig) + \item $v$ ist linkes Kind von $u$ (anderer Fall symmetrisch) + \item Geschwisterknoten $w$ (rechtes Kind von $u$) ist schwarz + \item Alle roten Knoten außer $u$ haben 2 schwarze Kinder + \end{itemize} + + + \begin{center} + + \begin{forest} + baseline,anchor=north, + for tree={circle, draw, + minimum size=2em, % <-- added + inner sep=1pt} + [ + p, b + [ + u, r + [ + v, r + ] + [ + w, b, name=w + ] + ] + [ + q, rbn + ] + ] + \end{forest} + \hspace{7em} + \begin{forest} + baseline,anchor=north, + for tree={circle, draw, + minimum size=2em, % <-- added + inner sep=1pt} + [ + p, b + [ + q, rbn + ] + [ + u, r + [ + v, r + ] + [ + w, b, name=w + ] + ] + ] + \end{forest} + \end{center} +\end{algo} + +\begin{algo}{Einfügen in einen Rot-Schwarz-Baum (Fall 1)} + + \textbf{Fall 1: Onkelknoten $q$ von $v$ ist schwarz}\\ + Fall 1a: $u$ ist linkes Kind von $p$ ($v$-$u$-$p$ bilden eine Linie) + \vspace{1em} + + \begin{center} + \begin{forest} + baseline,anchor=north, + for tree={circle, draw, + minimum size=2em, % <-- added + inner sep=1pt} + [ + p, b + [ + u, r + [ + v, r + ] + [ + w, b, name=w + ] + %{\draw[->,blue, dashed] () to[bend left=30] (!u.south);} + ] + {\draw[->,blue] () to[bend left=45] node[midway,above left,font=\small]{Rechtsrotation} (!u.west);} + [ + q, b + ] + ] + %{\draw[->,blue, dashed] () to[bend left=45] (w.north east);} + \end{forest} + \hspace{3em} + \begin{forest} + baseline,anchor=north, + for tree={circle, draw, + minimum size=2em, % <-- added + inner sep=1pt} + [ + u, r + [ + v, r + ] + [ + p, b + [ + w, b + ] + [ + q, b + ] + ] + {\draw[<->,blue] () to[bend right=45] node[midway,above right,font=\small]{Umfärben} (!u.east);} + ] + %{\draw[->,blue, dashed] () to[bend left=45] (w.north east);} + \end{forest} + \hspace{1em} + \begin{forest} + baseline,anchor=north, + for tree={circle, draw, + minimum size=2em, % <-- added + inner sep=1pt} + [ + u, b + [ + v, r + ] + [ + p, r + [ + w, b + ] + [ + q, b + ] + ] + %{\draw[<->,blue] () to[bend right=45] node[midway,above right,font=\small]{Umfärben} (!u.east);} + ] + %{\draw[->,blue, dashed] () to[bend left=45] (w.north east);} + \end{forest} + \end{center} + + \vspace{1em} + Fall 1b: $u$ ist rechtes Kind von $p$ ($v$-$u$-$p$ bilden ein Dreieck) + + \begin{center} + \begin{forest} + baseline,anchor=north, + for tree={circle, draw, + minimum size=2em, % <-- added + inner sep=1pt} + [ + p, b + [ + q, b + ] + [ + u, r + [ + v, r + ] + {\draw[->,blue] () to[bend left=45] node[midway,below left=1em,font=\small]{Rechtsrotation} (!u.west);} + [ + w, b, name=w + ] + %{\draw[->,blue, dashed] () to[bend left=30] (!u.south);} + ] + ] + %{\draw[->,blue, dashed] () to[bend left=45] (w.north east);} + \end{forest} + \hspace{5em} + \begin{forest} + baseline,anchor=north, + for tree={circle, draw, + minimum size=2em, % <-- added + inner sep=1pt} + [ + p, b + [ + q, b + ] + [ + v, r + [,nil] + [ + u, r + [,nil] + [ + w, b + ] + ] + ] + {\draw[->,blue] () to[bend right=45] node[midway,above right,font=\small]{Linksrotation} (!u.east);} + ] + \end{forest} + + \vspace{1em} + + \begin{forest} + baseline,anchor=north, + for tree={circle, draw, + minimum size=2em, % <-- added + inner sep=1pt} + [ + v, r + [ + p, b + [ + q, b + ] + [, nil] + ] + {\draw[<->,blue] () to[bend left=45] node[midway,above left,font=\small]{Umfärben} (!u.west);} + [ + u, r + [, nil] + [ + w, b + ] + ] + ] + \end{forest} + \hspace{2em} + \begin{forest} + baseline,anchor=north, + for tree={circle, draw, + minimum size=2em, % <-- added + inner sep=1pt} + [ + v, b + [ + p, r + [ + q, b + ] + [, nil] + ] + [ + u, r + [, nil] + [ + w, b + ] + ] + ] + \end{forest} + \end{center} +\end{algo} + +\begin{algo}{Einfügen in einen Rot-Schwarz-Baum (Fall 2)} + \textbf{Fall 2: Geschwisterknoten $q$ von $u$ ist rot} + + \begin{center} + \begin{forest} + baseline,anchor=north, + for tree={circle, draw, + minimum size=2em, % <-- added + inner sep=1pt} + [ + p, b, name=p + [ + u, r, name=u + [ + v, r + ] + [ + w, b, name=w + ] + ] + [ + q, r, name=q + ] + ] + \node [draw, fit={(p)(u)(q)}, blue, label=above:\textcolor{blue}{Umfärben}] () {}; + \end{forest} + \hspace{7em} + \begin{forest} + baseline,anchor=north, + for tree={circle, draw, + minimum size=2em, % <-- added + inner sep=1pt} + [ + p, r + [ + u, b + [ + v, r + ] + [ + w, b, name=w + ] + ] + [ + q, b + ] + ] + \end{forest} + \end{center} + + \vspace{1em} + + beziehungsweise + + \vspace{1em} + + \begin{center} + \begin{forest} + baseline,anchor=north, + for tree={circle, draw, + minimum size=2em, % <-- added + inner sep=1pt} + [ + p, b, name=p + [ + q, r, name=q + ] + [ + u, r, name=u + [ + v, r + ] + [ + w, b, name=w + ] + ] + ] + \node [draw, fit={(p)(u)(q)}, blue, label=above:\textcolor{blue}{Umfärben}] () {}; + \end{forest} + \hspace{7em} + \begin{forest} + baseline,anchor=north, + for tree={circle, draw, + minimum size=2em, % <-- added + inner sep=1pt} + [ + p, r + [ + q, b + ] + [ + u, b + [ + v, r + ] + [ + w, b, name=w + ] + ] + ] + \end{forest} + \end{center} + + \vspace{1em} + + \begin{itemize} + \item Falls der Elterknoten von $p$ schwarz ist, sind wir fertig + \item Falls $p$ die Wurzel ist, färbe $p$ schwarz + \item Sonst behandle $p$ wie $v$ und wiederhole + \end{itemize} +\end{algo} + +\begin{algo}{Löschen in einem Rot-Schwarz-Baum} + Das Löschen in einem Rot-Schwarz-Baum kann schnell sehr schwierig zu visualisieren werden. + + Ich will hier gern einmal folgende Videos empfehlen: + \begin{itemize} + \item \url{https://youtu.be/eO3GzpCCUSg} (ausführliche Beispiele, englisch) + \item \url{https://youtu.be/bDT1woMULVw} (ausführliche Erklärung, Pseudocode, deutsch) + \end{itemize} +\end{algo} + +\subsection{Heaps} + +\begin{bonus}{Heap (Wortbedeutungen)} + Das Wort \emph{Heap} hat zwei Bedeutungen: + \begin{itemize} + \item Besonderer Speicherbereich, in dem Objekte und Klassen gespeichert werden. + \item Datenstruktur zur effizienten Implementierung einer Prioritätswarteschlange. + \end{itemize} +\end{bonus} + +\begin{defi}{Heap} + Ein \emph{Heap} ist ein Binärbaum mit folgenden Eigenschaften: + \begin{itemize} + \item linksvollständig + \item Kinder eines Knotens höchstens so groß wie der Knoten selbst (Max-Heap) + \item größtes Element befindet sich an der Wurzel (Max-Heap) + \item entlang jedes Pfades von einem Knoten zur Wurzel sind Knoteninhalte aufsteigend sortiert + \end{itemize} + + Ein Heap lässt sich insbesondere als Array sehr leicht speichern. + Dabei gilt: + \begin{itemize} + \item \texttt{heap[0]} ist die Wurzel + \item \texttt{heap[(i-1)/2]} ist der Elterknoten des Knoten $i$ + \item \texttt{heap[(2*i)+1]} ist das linke Kind des Knoten $i$ + \item \texttt{heap[(2*i)+2]} ist das rechte Kind des Knoten $i$ + \end{itemize} + + Das enstpricht einem Level-Order-Baumdurchlauf. +\end{defi} + +\begin{example}{Heap als Array} + \begin{center} + \begin{forest} + baseline,anchor=north, + for tree={circle, draw, + minimum size=2em, % <-- added + inner sep=1pt} + [ + 90 + [ + 45 + [ + 27 + [ + 2 + ] + [ + 3 + ] + ] + [ + 36 + [ + 19 + ] + [26] + ] + ] + [ + 17 + [ + 7 + [,empty node] + [,empty node] + ] + [ + 1 + [,empty node] + [,empty node] + ] + ] + ] + \end{forest} + \end{center} + + \vspace{1em} + + Für den Heap oben gilt die Array-Darstellung: + \begin{center} + \texttt{[90,45,17,27,36,7,1,2,3,19,26]} + \end{center} +\end{example} + +\begin{algo}{Einfügen in einem Heap} + Das Einfügen eines Elements in den Heap erfolgt, indem das neue Element an das Ende des Heaps gesetzt wird. + + Weil das neu eingesetzte Element die Eigenschaften des Heaps verzerren kann, wird die Operation \emph{Up-Heapify} durchgeführt, um die Eigenschaften des Heaps in einem Bottom-up-Ansatz zu erhalten. +\end{algo} + +\begin{algo}{Löschen in einem Heap} + Das Entfernen eines Elements erfolgt, indem das gelöscht Element durch das letzte Element im Heap ersetzt wird. Dann wird das letzte Element aus dem Heap gelöscht. Nun wird das letzte Element an einer Stelle im Heap platziert. + + Es kann die Heap-Bedingung nicht erfüllen, sodass die Operation \emph{Down-Heapify} durchgeführt wird, um die Eigenschaften des Heaps aufrechtzuerhalten. +\end{algo} + +\begin{defi}{Heapify} + Heapify ist eine Operation, um die Elemente des Heaps neu anzuordnen, um die Heap-Bedingung aufrechtzuerhalten. + + Die Heapify kann in zwei Methoden erfolgen: + \begin{itemize} + \item Up-Heapify (erfolgt beim Einfügen) + \item Down-Heapify (erfolgt beim Löschen) + \end{itemize} +\end{defi} + +\begin{algo}{Up-Heapify (Einfügen)} + Einfügen der $45$ in \textcolor{red}{rot}. + + \vspace{1em} + \begin{center} + \scalebox{0.9}{ + \begin{forest} + baseline,anchor=north, + for tree={circle, draw, + minimum size=2em, % <-- added + inner sep=1pt} + [ + 90 + [ + 36 + [ + 27 + [ + 2 + %[,empty node] + %[,empty node] + ] + [ + 3 + %[,empty node] + %[,empty node] + ] + ] + [ + 26,draw=blue + [ + 19 + %[,empty node] + %[,empty node] + ] + [45 ,edge={red,thick}, draw=red] + {\draw[<->,blue] () to[bend right=45] node[midway,below right,font=\small]{Vertauschen} (!u.east);} + ] + ] + [ + 17 + [ + 7 + [,empty node] + [,empty node] + ] + [ + 1 + [,empty node] + [,empty node] + ] + ] + ] + \end{forest} + } + \hspace{1em} + \scalebox{0.9}{ + \begin{forest} + baseline,anchor=north, + for tree={circle, draw, + minimum size=2em, % <-- added + inner sep=1pt} + [ + 90 + [ + 36,draw=blue + [ + 27 + [ + 2 + %[,empty node] + %[,empty node] + ] + [ + 3 + %[,empty node] + %[,empty node] + ] + ] + [ + 45,edge={red,thick}, draw=red + [ + 19 + %[,empty node] + %[,empty node] + ] + [26,edge={teal,thick}, draw=teal] + ] + {\draw[<->,blue] () to[bend right=45] node[midway,above right,font=\small]{Vertauschen} (!u.east);} + ] + [ + 17 + [ + 7 + [,empty node] + [,empty node] + ] + [ + 1 + [,empty node] + [,empty node] + ] + ] + ] + \end{forest} + } + + \vspace{1em} + + \scalebox{0.9}{ + \begin{forest} + baseline,anchor=north, + for tree={circle, draw, + minimum size=2em, % <-- added + inner sep=1pt} + [ + 90,draw=teal + [ + 45,edge={teal,thick}, draw=teal + [ + 27 + [ + 2 + %[,empty node] + %[,empty node] + ] + [ + 3 + %[,empty node] + %[,empty node] + ] + ] + [ + 36,edge={teal,thick}, draw=teal + [ + 19 + %[,empty node] + %[,empty node] + ] + [26,edge={teal,thick}, draw=teal] + ] + ] + [ + 17 + [ + 7 + [,empty node] + [,empty node] + ] + [ + 1 + [,empty node] + [,empty node] + ] + ] + ] + \end{forest} + } + \end{center} +\end{algo} + +\begin{algo}{Down-Heapify (Löschen)} + Löschen der $90$ in \textcolor{red}{rot}. + + \vspace{1em} + \begin{center} + + \scalebox{0.9}{ + \begin{forest} + baseline,anchor=north, + for tree={circle, draw, + minimum size=2em, % <-- added + inner sep=1pt} + [ + 90,draw=red + [ + 45 + [ + 27 + [ + 2 + %[,empty node] + %[,empty node] + ] + [ + 3 + %[,empty node] + %[,empty node] + ] + ] + [ + 36 + [ + 19 + %[,empty node] + %[,empty node] + ] + [26 + ] + ] + ] + [ + 17 + [ + 7 + [,empty node] + [,empty node] + ] + [ + 1 + [,empty node] + [,empty node] + ] + ] + ] + \end{forest} + } + \hspace{1em} + \scalebox{0.9}{ + \begin{forest} + baseline,anchor=north, + for tree={circle, draw, + minimum size=2em, % <-- added + inner sep=1pt} + [ + ,empty node, name=90 + [ + 45 + [ + 27 + [ + 2 + %[,empty node] + %[,empty node] + ] + [ + 3 + %[,empty node] + %[,empty node] + ] + ] + [ + 36 + [ + 19 + %[,empty node] + %[,empty node] + ] + [26, draw=blue, name=26 + ] + ] + ] + [ + 17 + [ + 7 + [,empty node] + [,empty node] + ] + [ + 1 + [,empty node] + [,empty node] + ] + ] + ] + \draw[->, blue] (26) to[bend right=45] node[midway,above left,font=\small]{Nachrücken} (90); + \end{forest} + } + + \vspace{1em} + + \scalebox{0.9}{ + \begin{forest} + baseline,anchor=north, + for tree={circle, draw, + minimum size=2em, % <-- added + inner sep=1pt} + [ + 26, draw=red + [ + 45, edge={draw=red},draw=blue + [ + 27 + [ + 2 + %[,empty node] + %[,empty node] + ] + [ + 3 + %[,empty node] + %[,empty node] + ] + ] + [ + 36 + [ + 19 + %[,empty node] + %[,empty node] + ] + [,empty node] + ] + ] + {\draw[<->,blue] () to[bend left=45] node[midway,above left,font=\small]{Vertauschen} (!u.west);} + [ + 17 + [ + 7 + [,empty node] + [,empty node] + ] + [ + 1 + [,empty node] + [,empty node] + ] + ] + ] + \end{forest} + } + \hspace{1em} + \scalebox{0.9}{ + \begin{forest} + baseline,anchor=north, + for tree={circle, draw, + minimum size=2em, % <-- added + inner sep=1pt} + [ + 45,draw=teal + [ + 26, draw=red, edge={draw=teal} + [ + 27 + [ + 2 + %[,empty node] + %[,empty node] + ] + [ + 3 + %[,empty node] + %[,empty node] + ] + ] + [ + 36, edge={draw=red},draw=blue + [ + 19 + %[,empty node] + %[,empty node] + ] + [,empty node] + ] + {\draw[<->,blue] () to[bend right=45] node[midway,above right,font=\small]{Vertauschen} (!u.east);} + ] + [ + 17 + [ + 7 + [,empty node] + [,empty node] + ] + [ + 1 + [,empty node] + [,empty node] + ] + ] + ] + \end{forest} + } + + \vspace{1em} + + \scalebox{0.9}{ + \begin{forest} + baseline,anchor=north, + for tree={circle, draw, + minimum size=2em, % <-- added + inner sep=1pt} + [ + 45,draw=teal + [ + 36, draw=teal, edge={draw=teal} + [ + 27 + [ + 2 + %[,empty node] + %[,empty node] + ] + [ + 3 + %[,empty node] + %[,empty node] + ] + ] + [ + 26, edge={draw=teal},draw=teal + [ + 19, edge={draw=teal},draw=teal + %[,empty node] + %[,empty node] + ] + [,empty node] + ] + ] + [ + 17 + [ + 7 + [,empty node] + [,empty node] + ] + [ + 1 + [,empty node] + [,empty node] + ] + ] + ] + \end{forest} + } + \end{center} +\end{algo} + +% Baumdurchlauf diff --git a/algo/btreevis.sty b/algo/btreevis.sty index 5dc1b7b..c7a7273 100644 --- a/algo/btreevis.sty +++ b/algo/btreevis.sty @@ -1,408 +1,408 @@ -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% Author: Daniel Kocher -% Email: Daniel.Kocher@stud.sbg.ac.at -% Github: www.github.com/danielkocher -% Institute: University of Salzburg -% Department of Computer Sciences -% Database Research Group (dbresearch.uni-salzburg.at) -% -% Project: www.github.com/danielkocher/btreevis -% License: MIT license -% Description: Drawing B+ trees is a usual task when teaching and/or working on -% database index structures (and other algorithms and data -% structure stuff). The default TikZ features do not provide a -% good and uncomplicated way to draw such a B+ tree. Furthermore -% they do not look 'good'. 'Good' in the sense that they do not -% look like real B+ tree. This package tackles this problem. -% -% It provides macros to simplify and beautify the drawing of a B+ -% tree in LaTeX using TikZ. To keep drawing the trees simple, the -% standard tree environment of TikZ is used. So, all the nodes -% are placed by this environment in a tree-like way. The content -% of the nodes is a matrix of nodes, generated by a macro, which -% generates key and pointer nodes alternating (starting with a -% pointer node) - see \CreateBTreeNode[4] for further details. -% The TikZ tree environment connects the nodes of tree by default. -% This feature is disabled by a default style (BTreeDefault) -% because these connections do not correspond to the connections -% we want for a realistic B+ tree visualization. To accomplish -% such a realistic B+ tree visualization, this package provides -% two macros: one to draw connections between inner nodes -% (vertically) and one to draw connections between leaf nodes -% (horizontally). See \ConnectBTreeNodes[5] and -% \ConnectBTreeLeaves[2] for further information. To simplify the -% macros, a global number of pointers per node is used. This is -% necessary because the \Connect* macros need to know how many -% keys can be stored in a B+ tree node at most in order to allow -% proper arrow drawing (the source of every arrow has to be an -% an arrow field of the B+ tree node and the destination of every -% arrow has to be in the middle of the .north of a B+ tree node. -% The package also provides two default tikzstyles, one for the -% B+ tree node and one for the whole tikzpicture of the B+ tree. -% Those styles also contain useful information when creating own -% tikzstyles (see tikzstyles BTreeDefault and BTreeNodeDefault for -% further information). -% -% There are two macros for internal usage which may be used -% outside this package but at your own risk. -% -% Please contact me using the email at the top of this header for -% bugs, criticism and comments. -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -\NeedsTeXFormat{LaTeX2e} -\ProvidesPackage{btreevis}[2015/06/24 B+ Tree Visualization Package] - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% PACKAGES -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -\RequirePackage{tikz} -\RequirePackage{ifthen} -\RequirePackage{etoolbox} -%\RequirePackage{calc} - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% LIBRARIES -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -% TikZ -\usetikzlibrary{arrows, matrix, calc} - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% COUNTERS (GLOBAL) -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -% The number of pointers per node (often referred to as m in B+ tree context) -\newcount\noOfPointersPerNode% - -% Used to number pointers and keys consecutively inside a B+ tree node -\newcount\pointerCounter% - -% Used in the connect macros to know where the arrows have to start -\newcount\pointerNumber% - -% Used in the connect macros to hold the number of the current (source) node to -% connect to -\newcount\nodeNumber% - -% Used in the connect macros to hold the number of the next (destination) node -% to connect to -\newcount\nextNodeNumber% - -% Used temporarily in the connect macros -\newcount\tempCounter% - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% DEFAULT STYLES (GLOBAL) -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -% Default style of a B+ tree node. Provides all important properties a B+ tree -% node should have such that the resulting B^+ tree looks beautiful. -% May be overridden by an own style. -\tikzstyle{BTreeNodeDefault} = [ - draw, - matrix, - matrix of nodes, - % must be used; otherwise the matrix content generation does not work - ampersand replacement=\&, - % if inner sep != 0, there is a border around the matrix of nodes - inner sep = 0, - nodes = { - draw, - rectangle, - % better readability; otherwise node border and content do overlay - inner sep = 1mm, - % workaround to make nodes look better; - % better in the sense that all nodes in the matrix of nodes have the same - % height and depth independent of their content - text height = height("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmopqrstuvwxyz0123456789"), - text depth = depth("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmopqrstuvwxyz0123456789"), - % scaling factor of nodes; nodes have to be scaled independently from the - % whole tikzpicture (at least in some cases) - scale = 1 - } -] - -% Default style of a B+ tree. -% May be overriden by own styles but has all important properties. -\tikzstyle{BTreeDefault} = [ - % scaling factor of the whole picture - scale = 1, - % must be used; otherwise the tree environment draws its own connecting arrows - edge from parent/.style = {} -] - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% MACROS (PACKAGE INTERNAL) -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -%% -% Helper macro (only for package internal usage). -% Creates the content for two nodes (to be used in a matrix of nodes). -% One with a given content (a key node) and one corresponding pointer node -% (left of the key node). The naming of both key and pointer nodes is done -% automatically. This macro is used to generate the content of the matrix of -% nodes for a B+ tree node in the macro \CreateBTreeNode[4]. -% -% Be careful when modifying this macros: Because the content just generates a -% part of a matrix no blank lines should be inserted in this macros (this may -% causes strange errors when compiling). -% -% Naming schema: l#3-n#4-k#2 for search keys and l#3-n#4-p#2 for pointers. -% -% Arguments: -% #1 ... The value to be inserted into the node. If empty an empty node is -% generated. -% #2 ... The pointer/key number, e.g. if #2 is 2, the pointer nodes third -% part of the name is '-p2' and the value nodes third part of the name -% is '-k2' -% #3 ... The level number, e.g. if #3 is 3, the nodes first part of the name -% is 'l3' -% #4 ... The node number, e.g. if #4 is 4, the nodes second part of the name -% is '-n4' -% -% Example of the usage: -% \@create@key@matrix@node{3}{1}{2}{1} -% -% (Never needed because it is more of an internal macro to draw the B+ tree). -% Generates two nodes: the left (pointer) node named 'l2-n1-p1' containing no -% value and a node right of it named 'l2-n1-k1' containing the value '3'. So -% if the initial matrix was an empty matrix of nodes [], the subsequent matrix -% contains two nodes [| 3]. -%% -\newcommand{\@create@key@matrix@node}[4] {% - % empty pointer node (left) - |(l#3-n#4-p#2) [fill=blue!20]| {\vphantom{1}} \&% - % check presence of argument #1 - \ifx&% - % empty key node (right) - |(l#3-n#4-k#2)| {\hphantom{1}} \&% - \else% - % key node with value (right) - |(l#3-n#4-k#2)| {#1} \&% - \fi% -}% - -%% -% Helper macro (only for package internal usage). -% Creates the content for an empty node (to be used in a matrix of nodes). -% The naming of this node is done automatically. This macro is used to generate -% the content of the matrix of nodes for a B+ tree node in the macro -% \CreateBTreeNode[4]. -% -% Naming schema: l#2-n#3-p#1 -% -% Arguments: -% #1 ... The pointer number, e.g. if #1 is 2, the pointer nodes third part of -% the name is '-p2' -% #2 ... The level number, e.g. if #2 is 3, the nodes first part of the name -% is 'l3' -% #3 ... The node number, e.g. if #3 is 4, the nodes second part of the name -% is '-n4' -% -% Example of the usage: -% \@create@key@matrix@node{5}{2}{1} -% -% (Never needed because it is more of an internal macro to draw the B+ tree). -% Generates a single empty node named 'l2-n1-p5' (which is in most cases is -% the rightmost part of a B+ tree node). So if the initial matrix is -% [| 3 | 5], the subsequent matrix is [| 3 | 5 |]. -%% -\newcommand{\@create@pointer@matrix@node}[3] {% - % empty pointer node - |(l#2-n#3-p#1) [fill=blue!20]| {\vphantom{1}} \&% -}% - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% MACROS (GLOBAL) -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -%% -% Just a setter to set the \noOfPointersPerNode variable. -% -% Arguments: -% #1 ... The value to be assigned to \noOfPointersPerNode -% -% Example of the usage: -% \setNoOfPoinersPerNode{4} -% -% Sets \noOfPointersPerNode to 4. -%% -\newcommand{\SetNoOfPoinersPerNode}[1]{% - \noOfPointersPerNode = #1% -}% - -%% -% Generates the content of a complete B+ tree node (matrix of nodes) for given -% values supplied as comma-separated list. This generated content is stored into -% a variable supplied as argument. If the comma-separated list contains less -% than (\noOfPointersPerNode - 1) elements, the remaining nodes are left empty -% but are generated to be visualized. Hence, if \noOfPointersPerNode is set to 4 -% and only a list of 2 elements is supplied as key list, the node contains of -% the two keys and two empty nodes ([| key1 | key2 | | |]). -% The other way round, if the comma-separated list contains more than -% \noOfPointersPerNode elements, the oversupplied elements are simply ignored -% and thus are not contained in the matrix of nodes. -% The generated matrix of nodes is not named because this is not needed to -% connect the nodes. However, the nodes inside this matrix of nodes are named -% (see macros \@create@key@matrix@node and \@create@key@matrix@node). -% -% Todo: Encapsulate the part inside the \whiledo and \ifthenelse, respectively, -% into an own macros (if possible; may not be possible because of the -% expanding of the arguments/counters). By now this is more or less -% duplicated code. -% -% Arguments: -% #1 ... The level of the node (used for naming in called macros) -% #2 ... Number of the node of level #1 -% #3 ... Values as comma-separated list -% #4 ... Name of the variable the B+ tree node content is stored to -% -% Example of the usage: -% \SetNoOfPoinersPerNode{4} -% \CreateBTreeNode{0}{1}{{5}}{\levelZeroNodeOne} -% \node[BTreeNodeDefault] {\levelZeroNodeOne}; -% -% The first line set the number of pointers per node to a maximum of 4. The -% second line generates the content of the matrix of nodes, stored in -% \levelZeroNodeOne. \levelZeroNodeOne afterwards contains of a matrix of -% nodes [| 5 | | |]. So \levelZeroNodeOne can be used as content for the -% subsequent call of node, which then has to be a matrix of nodes -% (\levelZeroNodeOne is a matrix content separated by & and \\). -%% -\newcommand{\CreateBTreeNode}[4] {% - % initialize pointer counter (is then incremented for each pointer generated) - \pointerCounter = 1% - - % initialize variable the node content is stored into (set it empty) - \let#4\empty% - - % for each value of the comma-separated list - \foreach \x in #3 {% - % only insert until the maximum number of pointers per node is reached - \ifthenelse{\not{\the\pointerCounter < \noOfPointersPerNode}}{\breakforeach}{% - % expand first two arguments upfront (necessary) - \edef\tmpexpand{{\x}{\the\pointerCounter}}% - % the \@create@key@matrix@node macros generates a part of the whole node - % matrix and this content is then appended here - % also the arguments are expanded accordingly - \expandafter\gappto\expandafter#4\expandafter{% - \expandafter\@create@key@matrix@node\tmpexpand{#1}{#2}% - }% - % increment pointer counter - \global\advance\pointerCounter by 1% - }% - }% - - % here the remaining empty key nodes of the matrix are produced (if there are - % less keys than (number of pointers per node - 1) supplied) - \whiledo{\the\pointerCounter < \noOfPointersPerNode}{% - % expand first two arguments upfront (necessary) - \edef\tmpexpand{{}{\the\pointerCounter}}% - % the \@create@key@matrix@node macros generates a part of the whole node - % matrix and this content is then appended here (in essence, here the empty - % nodes are generated and appended). - % also the arguments are expanded accordingly - \expandafter\gappto\expandafter#4\expandafter{% - \expandafter\@create@key@matrix@node\tmpexpand{#1}{#2}% - }% - % increment pointer counter - \global\advance\pointerCounter by 1% - }% - - % here the last pointer node is appended to the matrix - \expandafter\gappto\expandafter#4\expandafter{% - \expandafter\@create@pointer@matrix@node% - \expandafter{\the\pointerCounter}{#1}{#2}% - }% - - % append the line of the matrix of nodes is finished (with \\) - \gappto#4{\\}% -}% - -%% -% Connects all pointers of a given node on a given (source) level to all its -% children of a given (destination level) with an arrow (solid). This only works -% if the nodes of the B+ tree are named like mentioned in the -% \@create@key@matrix@node and \@create@pointer@matrix@node, respectively. -% -% Arguments: -% #1 ... Number of source (tree) level -% #2 ... Number of source node (parent node) -% #3 ... Number of destination (tree) level -% #4 ... Number of (child) nodes to be connected with parent -% #5 ... Number of the first (child) node to be connected with parent -% -% Example of the usage: -% \ConnectBTreeNodes{0}{1}{1}{2}{1} -% -% Generates arrows from node 1 of the top level (0) to 2 child nodes of the -% subsequent level (1) of the tree. We have 2 children on the subsequent level -% and the first node to be connect (on the subsequent level) is node 1. A node -% contains 3 search keys, hence it has 4 pointers. The incoming arrows on any -% node on the subsequent level arrives at the north center of the node. -%% -\newcommand{\ConnectBTreeNodes}[5] {% - % initialize temporary counter (just used to iterate) - \tempCounter = 0% - - % draw a vertical arrow (connect) from the source node to each child node - \whiledo{\the\tempCounter < #4} {% - % compute current node number: - % temporary counter + the number of the node to start with - \nodeNumber = \the\tempCounter% - \advance\nodeNumber by #5% - - % compute current pointer number: temporary counter + 1 - \pointerNumber = \the\tempCounter% - \advance\pointerNumber by 1% - - % draw an arrow from south of the computed pointer number to middle of the - % north of the node with the previously computed number - \draw[->, >=stealth] (l#1-n#2-p\the\pointerNumber.south) -- - ($(l#3-n\the\nodeNumber-p1.north)!0.5!(l#3-n\the\nodeNumber-p\the\noOfPointersPerNode.north)$);% - - % increment temporary counter - \global\advance\tempCounter by 1% - }% -}% - -%% -% Connects all leaf nodes of a given (leaf) level with a dotted arrow. The arrow -% starts at .east of the rightmost node inside the leaf and ends at .west -% of the leftmost node inside the next leaf. This only works if the nodes of the -% B+ tree are named like mentioned in in the \@create@key@matrix@node and -% \@create@pointer@matrix@node, respectively. -% -% Arguments: -% #1 ... Number of the (tree) level of the leaves -% #2 ... Number of leaf nodes to be connected -% -% Example of the usage: -% \ConnectBTreeLeaves{2}{5} -% -% Generates arrows between 5 nodes of the leaf level (here 2). -%% -\newcommand{\ConnectBTreeLeaves}[2] {% - % initialize node number (used to iterate) - \nodeNumber = 1% - - % draw horizontal, dotted arrows (connect) between all leaf nodes - % arrows are drawn from left to right - \whiledo{\the\nodeNumber < #2} {% - % compute next node number: current node number + 1 - \nextNodeNumber = \nodeNumber% - \advance\nextNodeNumber by 1% - - % draw a dotted arrow between two leaf nodes (from left to right) - \draw[->, >=stealth, dotted] - (l#1-n\the\nodeNumber-p\the\noOfPointersPerNode.east) -- - (l#1-n\the\nextNodeNumber-p1.west);% - - % increment node number - \global\advance\nodeNumber by 1% - }% -}% - -\endinput +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% Author: Daniel Kocher +% Email: Daniel.Kocher@stud.sbg.ac.at +% Github: www.github.com/danielkocher +% Institute: University of Salzburg +% Department of Computer Sciences +% Database Research Group (dbresearch.uni-salzburg.at) +% +% Project: www.github.com/danielkocher/btreevis +% License: MIT license +% Description: Drawing B+ trees is a usual task when teaching and/or working on +% database index structures (and other algorithms and data +% structure stuff). The default TikZ features do not provide a +% good and uncomplicated way to draw such a B+ tree. Furthermore +% they do not look 'good'. 'Good' in the sense that they do not +% look like real B+ tree. This package tackles this problem. +% +% It provides macros to simplify and beautify the drawing of a B+ +% tree in LaTeX using TikZ. To keep drawing the trees simple, the +% standard tree environment of TikZ is used. So, all the nodes +% are placed by this environment in a tree-like way. The content +% of the nodes is a matrix of nodes, generated by a macro, which +% generates key and pointer nodes alternating (starting with a +% pointer node) - see \CreateBTreeNode[4] for further details. +% The TikZ tree environment connects the nodes of tree by default. +% This feature is disabled by a default style (BTreeDefault) +% because these connections do not correspond to the connections +% we want for a realistic B+ tree visualization. To accomplish +% such a realistic B+ tree visualization, this package provides +% two macros: one to draw connections between inner nodes +% (vertically) and one to draw connections between leaf nodes +% (horizontally). See \ConnectBTreeNodes[5] and +% \ConnectBTreeLeaves[2] for further information. To simplify the +% macros, a global number of pointers per node is used. This is +% necessary because the \Connect* macros need to know how many +% keys can be stored in a B+ tree node at most in order to allow +% proper arrow drawing (the source of every arrow has to be an +% an arrow field of the B+ tree node and the destination of every +% arrow has to be in the middle of the .north of a B+ tree node. +% The package also provides two default tikzstyles, one for the +% B+ tree node and one for the whole tikzpicture of the B+ tree. +% Those styles also contain useful information when creating own +% tikzstyles (see tikzstyles BTreeDefault and BTreeNodeDefault for +% further information). +% +% There are two macros for internal usage which may be used +% outside this package but at your own risk. +% +% Please contact me using the email at the top of this header for +% bugs, criticism and comments. +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\NeedsTeXFormat{LaTeX2e} +\ProvidesPackage{btreevis}[2015/06/24 B+ Tree Visualization Package] + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% PACKAGES +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\RequirePackage{tikz} +\RequirePackage{ifthen} +\RequirePackage{etoolbox} +%\RequirePackage{calc} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% LIBRARIES +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +% TikZ +\usetikzlibrary{arrows, matrix, calc} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% COUNTERS (GLOBAL) +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +% The number of pointers per node (often referred to as m in B+ tree context) +\newcount\noOfPointersPerNode% + +% Used to number pointers and keys consecutively inside a B+ tree node +\newcount\pointerCounter% + +% Used in the connect macros to know where the arrows have to start +\newcount\pointerNumber% + +% Used in the connect macros to hold the number of the current (source) node to +% connect to +\newcount\nodeNumber% + +% Used in the connect macros to hold the number of the next (destination) node +% to connect to +\newcount\nextNodeNumber% + +% Used temporarily in the connect macros +\newcount\tempCounter% + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% DEFAULT STYLES (GLOBAL) +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +% Default style of a B+ tree node. Provides all important properties a B+ tree +% node should have such that the resulting B^+ tree looks beautiful. +% May be overridden by an own style. +\tikzstyle{BTreeNodeDefault} = [ + draw, + matrix, + matrix of nodes, + % must be used; otherwise the matrix content generation does not work + ampersand replacement=\&, + % if inner sep != 0, there is a border around the matrix of nodes + inner sep = 0, + nodes = { + draw, + rectangle, + % better readability; otherwise node border and content do overlay + inner sep = 1mm, + % workaround to make nodes look better; + % better in the sense that all nodes in the matrix of nodes have the same + % height and depth independent of their content + text height = height("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmopqrstuvwxyz0123456789"), + text depth = depth("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmopqrstuvwxyz0123456789"), + % scaling factor of nodes; nodes have to be scaled independently from the + % whole tikzpicture (at least in some cases) + scale = 1 + } +] + +% Default style of a B+ tree. +% May be overriden by own styles but has all important properties. +\tikzstyle{BTreeDefault} = [ + % scaling factor of the whole picture + scale = 1, + % must be used; otherwise the tree environment draws its own connecting arrows + edge from parent/.style = {} +] + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% MACROS (PACKAGE INTERNAL) +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +%% +% Helper macro (only for package internal usage). +% Creates the content for two nodes (to be used in a matrix of nodes). +% One with a given content (a key node) and one corresponding pointer node +% (left of the key node). The naming of both key and pointer nodes is done +% automatically. This macro is used to generate the content of the matrix of +% nodes for a B+ tree node in the macro \CreateBTreeNode[4]. +% +% Be careful when modifying this macros: Because the content just generates a +% part of a matrix no blank lines should be inserted in this macros (this may +% causes strange errors when compiling). +% +% Naming schema: l#3-n#4-k#2 for search keys and l#3-n#4-p#2 for pointers. +% +% Arguments: +% #1 ... The value to be inserted into the node. If empty an empty node is +% generated. +% #2 ... The pointer/key number, e.g. if #2 is 2, the pointer nodes third +% part of the name is '-p2' and the value nodes third part of the name +% is '-k2' +% #3 ... The level number, e.g. if #3 is 3, the nodes first part of the name +% is 'l3' +% #4 ... The node number, e.g. if #4 is 4, the nodes second part of the name +% is '-n4' +% +% Example of the usage: +% \@create@key@matrix@node{3}{1}{2}{1} +% +% (Never needed because it is more of an internal macro to draw the B+ tree). +% Generates two nodes: the left (pointer) node named 'l2-n1-p1' containing no +% value and a node right of it named 'l2-n1-k1' containing the value '3'. So +% if the initial matrix was an empty matrix of nodes [], the subsequent matrix +% contains two nodes [| 3]. +%% +\newcommand{\@create@key@matrix@node}[4] {% + % empty pointer node (left) + |(l#3-n#4-p#2) [fill=blue!20]| {\vphantom{1}} \&% + % check presence of argument #1 + \ifx&% + % empty key node (right) + |(l#3-n#4-k#2)| {\hphantom{1}} \&% + \else% + % key node with value (right) + |(l#3-n#4-k#2)| {#1} \&% + \fi% +}% + +%% +% Helper macro (only for package internal usage). +% Creates the content for an empty node (to be used in a matrix of nodes). +% The naming of this node is done automatically. This macro is used to generate +% the content of the matrix of nodes for a B+ tree node in the macro +% \CreateBTreeNode[4]. +% +% Naming schema: l#2-n#3-p#1 +% +% Arguments: +% #1 ... The pointer number, e.g. if #1 is 2, the pointer nodes third part of +% the name is '-p2' +% #2 ... The level number, e.g. if #2 is 3, the nodes first part of the name +% is 'l3' +% #3 ... The node number, e.g. if #3 is 4, the nodes second part of the name +% is '-n4' +% +% Example of the usage: +% \@create@key@matrix@node{5}{2}{1} +% +% (Never needed because it is more of an internal macro to draw the B+ tree). +% Generates a single empty node named 'l2-n1-p5' (which is in most cases is +% the rightmost part of a B+ tree node). So if the initial matrix is +% [| 3 | 5], the subsequent matrix is [| 3 | 5 |]. +%% +\newcommand{\@create@pointer@matrix@node}[3] {% + % empty pointer node + |(l#2-n#3-p#1) [fill=blue!20]| {\vphantom{1}} \&% +}% + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% MACROS (GLOBAL) +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +%% +% Just a setter to set the \noOfPointersPerNode variable. +% +% Arguments: +% #1 ... The value to be assigned to \noOfPointersPerNode +% +% Example of the usage: +% \setNoOfPoinersPerNode{4} +% +% Sets \noOfPointersPerNode to 4. +%% +\newcommand{\SetNoOfPoinersPerNode}[1]{% + \noOfPointersPerNode = #1% +}% + +%% +% Generates the content of a complete B+ tree node (matrix of nodes) for given +% values supplied as comma-separated list. This generated content is stored into +% a variable supplied as argument. If the comma-separated list contains less +% than (\noOfPointersPerNode - 1) elements, the remaining nodes are left empty +% but are generated to be visualized. Hence, if \noOfPointersPerNode is set to 4 +% and only a list of 2 elements is supplied as key list, the node contains of +% the two keys and two empty nodes ([| key1 | key2 | | |]). +% The other way round, if the comma-separated list contains more than +% \noOfPointersPerNode elements, the oversupplied elements are simply ignored +% and thus are not contained in the matrix of nodes. +% The generated matrix of nodes is not named because this is not needed to +% connect the nodes. However, the nodes inside this matrix of nodes are named +% (see macros \@create@key@matrix@node and \@create@key@matrix@node). +% +% Todo: Encapsulate the part inside the \whiledo and \ifthenelse, respectively, +% into an own macros (if possible; may not be possible because of the +% expanding of the arguments/counters). By now this is more or less +% duplicated code. +% +% Arguments: +% #1 ... The level of the node (used for naming in called macros) +% #2 ... Number of the node of level #1 +% #3 ... Values as comma-separated list +% #4 ... Name of the variable the B+ tree node content is stored to +% +% Example of the usage: +% \SetNoOfPoinersPerNode{4} +% \CreateBTreeNode{0}{1}{{5}}{\levelZeroNodeOne} +% \node[BTreeNodeDefault] {\levelZeroNodeOne}; +% +% The first line set the number of pointers per node to a maximum of 4. The +% second line generates the content of the matrix of nodes, stored in +% \levelZeroNodeOne. \levelZeroNodeOne afterwards contains of a matrix of +% nodes [| 5 | | |]. So \levelZeroNodeOne can be used as content for the +% subsequent call of node, which then has to be a matrix of nodes +% (\levelZeroNodeOne is a matrix content separated by & and \\). +%% +\newcommand{\CreateBTreeNode}[4] {% + % initialize pointer counter (is then incremented for each pointer generated) + \pointerCounter = 1% + + % initialize variable the node content is stored into (set it empty) + \let#4\empty% + + % for each value of the comma-separated list + \foreach \x in #3 {% + % only insert until the maximum number of pointers per node is reached + \ifthenelse{\not{\the\pointerCounter < \noOfPointersPerNode}}{\breakforeach}{% + % expand first two arguments upfront (necessary) + \edef\tmpexpand{{\x}{\the\pointerCounter}}% + % the \@create@key@matrix@node macros generates a part of the whole node + % matrix and this content is then appended here + % also the arguments are expanded accordingly + \expandafter\gappto\expandafter#4\expandafter{% + \expandafter\@create@key@matrix@node\tmpexpand{#1}{#2}% + }% + % increment pointer counter + \global\advance\pointerCounter by 1% + }% + }% + + % here the remaining empty key nodes of the matrix are produced (if there are + % less keys than (number of pointers per node - 1) supplied) + \whiledo{\the\pointerCounter < \noOfPointersPerNode}{% + % expand first two arguments upfront (necessary) + \edef\tmpexpand{{}{\the\pointerCounter}}% + % the \@create@key@matrix@node macros generates a part of the whole node + % matrix and this content is then appended here (in essence, here the empty + % nodes are generated and appended). + % also the arguments are expanded accordingly + \expandafter\gappto\expandafter#4\expandafter{% + \expandafter\@create@key@matrix@node\tmpexpand{#1}{#2}% + }% + % increment pointer counter + \global\advance\pointerCounter by 1% + }% + + % here the last pointer node is appended to the matrix + \expandafter\gappto\expandafter#4\expandafter{% + \expandafter\@create@pointer@matrix@node% + \expandafter{\the\pointerCounter}{#1}{#2}% + }% + + % append the line of the matrix of nodes is finished (with \\) + \gappto#4{\\}% +}% + +%% +% Connects all pointers of a given node on a given (source) level to all its +% children of a given (destination level) with an arrow (solid). This only works +% if the nodes of the B+ tree are named like mentioned in the +% \@create@key@matrix@node and \@create@pointer@matrix@node, respectively. +% +% Arguments: +% #1 ... Number of source (tree) level +% #2 ... Number of source node (parent node) +% #3 ... Number of destination (tree) level +% #4 ... Number of (child) nodes to be connected with parent +% #5 ... Number of the first (child) node to be connected with parent +% +% Example of the usage: +% \ConnectBTreeNodes{0}{1}{1}{2}{1} +% +% Generates arrows from node 1 of the top level (0) to 2 child nodes of the +% subsequent level (1) of the tree. We have 2 children on the subsequent level +% and the first node to be connect (on the subsequent level) is node 1. A node +% contains 3 search keys, hence it has 4 pointers. The incoming arrows on any +% node on the subsequent level arrives at the north center of the node. +%% +\newcommand{\ConnectBTreeNodes}[5] {% + % initialize temporary counter (just used to iterate) + \tempCounter = 0% + + % draw a vertical arrow (connect) from the source node to each child node + \whiledo{\the\tempCounter < #4} {% + % compute current node number: + % temporary counter + the number of the node to start with + \nodeNumber = \the\tempCounter% + \advance\nodeNumber by #5% + + % compute current pointer number: temporary counter + 1 + \pointerNumber = \the\tempCounter% + \advance\pointerNumber by 1% + + % draw an arrow from south of the computed pointer number to middle of the + % north of the node with the previously computed number + \draw[->, >=stealth] (l#1-n#2-p\the\pointerNumber.south) -- + ($(l#3-n\the\nodeNumber-p1.north)!0.5!(l#3-n\the\nodeNumber-p\the\noOfPointersPerNode.north)$);% + + % increment temporary counter + \global\advance\tempCounter by 1% + }% +}% + +%% +% Connects all leaf nodes of a given (leaf) level with a dotted arrow. The arrow +% starts at .east of the rightmost node inside the leaf and ends at .west +% of the leftmost node inside the next leaf. This only works if the nodes of the +% B+ tree are named like mentioned in in the \@create@key@matrix@node and +% \@create@pointer@matrix@node, respectively. +% +% Arguments: +% #1 ... Number of the (tree) level of the leaves +% #2 ... Number of leaf nodes to be connected +% +% Example of the usage: +% \ConnectBTreeLeaves{2}{5} +% +% Generates arrows between 5 nodes of the leaf level (here 2). +%% +\newcommand{\ConnectBTreeLeaves}[2] {% + % initialize node number (used to iterate) + \nodeNumber = 1% + + % draw horizontal, dotted arrows (connect) between all leaf nodes + % arrows are drawn from left to right + \whiledo{\the\nodeNumber < #2} {% + % compute next node number: current node number + 1 + \nextNodeNumber = \nodeNumber% + \advance\nextNodeNumber by 1% + + % draw a dotted arrow between two leaf nodes (from left to right) + \draw[->, >=stealth, dotted] + (l#1-n\the\nodeNumber-p\the\noOfPointersPerNode.east) -- + (l#1-n\the\nextNodeNumber-p1.west);% + + % increment node number + \global\advance\nodeNumber by 1% + }% +}% + +\endinput diff --git a/algo/datenstrukturen.tex b/algo/datenstrukturen.tex index 7a23120..a9ac654 100644 --- a/algo/datenstrukturen.tex +++ b/algo/datenstrukturen.tex @@ -1,799 +1,806 @@ -\section{Elementare Datenstrukturen} - -\begin{defi}{Homogene Datenstruktur} - In einer \emph{homogenen Datenstruktur} haben alle Komponenten den \emph{gleichen} Datentyp. -\end{defi} - -\begin{defi}{Heterogene Datenstruktur} - In einer \emph{heterogenen Datenstruktur} haben die Komponenten \emph{unterschiedliche} Datentypen. -\end{defi} - -% ADTs -\begin{defi}{Abstrakte Datentypen (ADTs)} - Anforderungen an die Definition eines Datentyps: - \begin{itemize} - \item \emph{Spezifikation} eines Datentyps unabhängig von der Implementierung - \item Reduzierung der von außen sichtbaren Aspekte auf die \emph{Schnittstelle} des Datentyps - \end{itemize} - - Daraus entstehen \textbf{zwei Prinzipien}: - \begin{itemize} - \item \emph{Kapselung:} - \subitem Zu einem ADT gehört eine Schnittstelle. - \subitem Zugriffe auf den ADT erfolgen ausschließlich über die Schnittstelle. - \item \emph{Geheimnisprinzip:} - \subitem Interne Realisierung eines ADT-Moduls bleibt verborgen. - \end{itemize} -\end{defi} - -\begin{bonus}{ADTs in Java} - Viele wichtige abstrakte Datentypen werden in Java durch \emph{Interfaces} beschrieben. - - Es gibt ein oder mehrere Implementierungen dieser Interfaces mit unterschiedlichen dahinter stehenden Konzepten. - - In Java: Package \texttt{java.util} - - Wichtig in der Vorlesung: - - \begin{tabular}{l|l|l} - ADT & Grund-ADT/Interface & Java-Klassen \\ - \hline - Feld & & (Felder), HashMap \\ - Liste & List & ArrayList, LinkedList \\ - Menge & Set & HashSet, TreeSet \\ - Prioritätswarteschlange & & PriorityQueue \\ - Stack & List & \\ - Queue & List & \\ - Deque & List & Deque (Interface), ArrayDeque \\ - Map & Set & Map (Interface), HashMap, TreeMap \\ - BidiMap & Map & BidiMap, BiMap (Interface) \\ - MultiSet, Bag & Map & Bag, Multiset (Interface) - \end{tabular} -\end{bonus} - -\subsection{Felder und abstrakte Datenstrukturen} - -\begin{defi}{Array} - Ein \emph{Array} hat folgende spezielle Eigenschaften: - \begin{itemize} - \item Feste Anzahl an Datenobjekten - \item Auf jedes Objekt kann direkt lesend oder schreibend zugegriffen werden - \end{itemize} - - \begin{center} - \begin{tikzpicture}[ - % -{Stealth[length = 2.5pt]}, - start chain, - node distance = 0pt, - StackBlock/.style={draw, minimum width=2em, minimum height=2em, outer sep=0pt, on chain}, - ] - { start chain = going right - \node [StackBlock, label=$0$] (0) {}; - \node [StackBlock, label=$1$] (1) {}; - \node [StackBlock, label=$2$] (2) {}; - \node [StackBlock, label=$3$] (3) {}; - \node [StackBlock, label=$\ldots$] (d1) {}; - \node [StackBlock, label=$k$] (k) {}; - \node [StackBlock, label=$\ldots$] (d2) {}; - \node [StackBlock, label=$n-1$] (n1) {}; - \node [StackBlock, label=$n$] (n) {}; - } - \end{tikzpicture} - \end{center} - - \textbf{Performance:} - - \begin{center} - \begin{tabular}{c|c|c|c|c} - Zugriff & Suche & Einf./Lösch. (Anfang) & Einf./Lösch. (Ende) & Einf./Lösch. (Mitte) \\ - \hline - $\Theta(1)$ & $\Theta(n)$ & - & - & - \\ - \end{tabular} - \end{center} -\end{defi} - - -\begin{defi}{Stack} - \begin{itemize} - \item Daten können an einem Ende hinzugefügt oder entnommen werden. - \end{itemize} - - \begin{center} - \begin{tikzpicture}[ - % -{Stealth[length = 2.5pt]}, - start chain, - node distance = 0pt, - StackBlock/.style={draw, minimum width=2em, minimum height=2em, outer sep=0pt, on chain}, - ] - { start chain = going right - \node [StackBlock,draw=none] (0) {}; - - \node [StackBlock,xshift=4em] (1) {}; - \node [StackBlock] (2) {}; - \node [StackBlock] (3) {}; - \node [StackBlock] (4) {}; - \node [StackBlock] (5) {}; - - \node [StackBlock,xshift=4em,draw=none] (6) {}; - - \draw[->] ([yshift=0.5em, xshift=0.25em] 5.east) [out=0, in=180] to ([yshift=0.5em, xshift=-0.25em] 6.west); - \draw[->] ([yshift=-0.5em, xshift=-0.25em] 6.west) [out=180, in=0] to ([yshift=-0.5em, xshift=0.25em] 5.east); - } - \end{tikzpicture} - \end{center} -\end{defi} - -\begin{defi}{Queue} - \begin{itemize} - \item Daten können an einem Ende hinzugefügt und am anderen Ende entnommen werden. - \end{itemize} - - \begin{center} - \begin{tikzpicture}[ - % -{Stealth[length = 2.5pt]}, - start chain, - node distance = 0pt, - StackBlock/.style={draw, minimum width=2em, minimum height=2em, outer sep=0pt, on chain}, - ] - { start chain = going right - \node [StackBlock,draw=none] (0) {}; - - \node [StackBlock,xshift=4em] (1) {}; - \node [StackBlock] (2) {}; - \node [StackBlock] (3) {}; - \node [StackBlock] (4) {}; - \node [StackBlock] (5) {}; - - \node [StackBlock,xshift=4em,draw=none] (6) {}; - - \draw[<-] ([xshift=0.25em] 0.east) [out=0, in=180] to ([xshift=-0.25em] 1.west); - \draw[->] ([xshift=-0.25em] 6.west) [out=180, in=0] to ([xshift=0.25em] 5.east); - } - \end{tikzpicture} - \end{center} -\end{defi} - -\begin{defi}{Deque (\glqq Double ended queue\grqq)} - \begin{itemize} - \item Daten können an beiden Enden hinzugefügt und entnommen werden. - \end{itemize} - - \begin{center} - \begin{tikzpicture}[ - % -{Stealth[length = 2.5pt]}, - start chain, - node distance = 0pt, - StackBlock/.style={draw, minimum width=2em, minimum height=2em, outer sep=0pt, on chain}, - ] - { start chain = going right - \node [StackBlock,draw=none] (0) {}; - - \node [StackBlock,xshift=4em] (1) {}; - \node [StackBlock] (2) {}; - \node [StackBlock] (3) {}; - \node [StackBlock] (4) {}; - \node [StackBlock] (5) {}; - - \node [StackBlock,xshift=4em,draw=none] (6) {}; - - \draw[->] ([yshift=0.5em, xshift=0.25em] 5.east) [out=0, in=180] to ([yshift=0.5em, xshift=-0.25em] 6.west); - \draw[->] ([yshift=-0.5em, xshift=-0.25em] 6.west) [out=180, in=0] to ([yshift=-0.5em, xshift=0.25em] 5.east); - - \draw[<-] ([yshift=0.5em, xshift=0.25em] 0.east) [out=0, in=180] to ([yshift=0.5em, xshift=-0.25em] 1.west); - \draw[<-] ([yshift=-0.5em, xshift=-0.25em] 1.west) [out=180, in=0] to ([yshift=-0.5em, xshift=0.25em] 0.east); - } - \end{tikzpicture} - \end{center} -\end{defi} - -% Dynamische Felder -\begin{defi}{Dynamisches Feld} - Ein \emph{dynamisches Feld} besteht aus: - \begin{itemize} - \item Einem normalen Feld, das nicht vollständig gefüllt ist. - \item Einem Zeiger, der anzeigt, welches das erste unbesetzte Element ist. - \end{itemize} - - \begin{center} - \begin{tikzpicture}[ - % -{Stealth[length = 2.5pt]}, - start chain, - node distance = 0pt, - StackBlock/.style={draw, minimum width=2em, minimum height=2em, outer sep=0pt, on chain}, - ] - { start chain = going right - \node [StackBlock, fill=red!50, label=$0$] (0) {}; - \node [StackBlock, fill=red!50, label=$1$] (1) {}; - \node [StackBlock, fill=red!50, label=$2$] (2) {}; - \node [StackBlock, fill=red!50, label=$3$] (3) {}; - \node [StackBlock, fill=red!50, label=$\ldots$] (d1) {}; - \node [StackBlock, label=$k$] (k) {}; - \node [StackBlock, label=$\ldots$] (d2) {}; - \node [StackBlock, label=$n-1$] (n1) {}; - \node [StackBlock, label=$n$] (n) {}; - - { [continue chain = going below] - \chainin (k); - \node[StackBlock,yshift=-1em] (pointer) {$k$}; - \draw[->] (pointer.north) [out=90, in=-90] to (k.south); - } - - } - %\begin{scope}[-{Stealth[length = 2.5pt]}] - %\draw (1.north) [out=25, in=155] to (2.north); - %\draw (1.north) [out=30, in=155] to (3.north); - %\draw (1.north) [out=35, in=155] to (4.north); - %\draw (6.north) [out=40, in=155] to (6.north); - %\end{scope} - %\draw[decorate,decoration={brace, amplitude=10pt, raise=5pt, mirror}] - %(2.south west) to node[black,midway,below= 15pt] {$k$-elements} (7.south east);% - - \end{tikzpicture} - \end{center} - - \textbf{Performance:} - - \begin{center} - \begin{tabular}{c|c|c|c|c} - Zugriff & Suche & Einf./Lösch. (Anfang) & Einf./Lösch. (Ende) & Einf./Lösch. (Mitte) \\ - \hline - $\Theta(1)$ & $\Theta(n)$ & $\Theta(n)$ & $\Theta(1)/\Theta(n)$\footnote{Wenn das Feld schon voll ist, muss der komplette Inhalt kopiert werden.} & $\Theta(n)$ \\ - \end{tabular} - \end{center} - - Damit ist ein dynamisches Feld gut für einen \emph{Stack} geeignet! -\end{defi} - -% Zirkuläre dynamische Felder -\begin{defi}{Zirkuläres (dynamisches) Feld} - Ein \emph{zirkuläres Feld} besitzt einen Speicher fester Größe. - Dabei speichern zwei Zeiger jeweils den Anfang (\texttt{head}) des Speichers, bzw. auf die nächste freie Speicheradresse (\texttt{tail}) im Speicher. - - Wird ein Element am Anfang \glqq abgearbeitet\grqq, bewegt sich \texttt{head} eine Position weiter. - Wird ein Element am Ende eingefügt, bewegt sich \texttt{tail} eine Position weiter. - \begin{center} - \begin{tikzpicture}[ - % -{Stealth[length = 2.5pt]}, - start chain, - node distance = 0pt, - StackBlock/.style={draw, minimum width=2em, minimum height=2em, outer sep=0pt, on chain}, - ] - { start chain = going right - \node [StackBlock,label=above:$15$] (15) {}; - \node [StackBlock,label=above:$0$, fill=red!50] (0) {}; - \node [StackBlock,label=above:$1$, fill=red!50] (1) {}; - \node [StackBlock,label=above:$2$, fill=red!50] (2) {}; - \node [StackBlock,label=above:$3$, fill=red!50] (3) {}; - - { [continue chain = going below] - \chainin (3); - \node [StackBlock,label=right:$4$, fill=red!50] (4) {}; - \node [StackBlock,label=right:$5$] (5) {}; - \node [StackBlock,label=below:$6$] (6) {}; - } - - { [continue chain = going left] - \chainin (6); - \node [StackBlock,label=below:$7$] (7) {}; - \node [StackBlock,label=below:$8$] (8) {}; - \node [StackBlock,label=below:$9$] (9) {}; - \node [StackBlock,label=below:$10$] (10) {}; - \node [StackBlock,label=below:$11$] (11) {}; - } - - { [continue chain = going above] - \chainin (11); - \node [StackBlock,label=left:$12$] (12) {}; - \node [StackBlock,label=left:$13$] (13) {}; - \node [StackBlock,label=above:$14$] (14) {}; - } - - - { [continue chain = going above] - \chainin (0); - \node[StackBlock,yshift=2em,xshift=-0.5em,label=\texttt{head}] (head) {$0$}; - \draw[->] (head.south) [out=-90, in=90] to (0.north west); - } - - { [continue chain = going right] - \chainin (5); - \node[StackBlock,yshift=0.5em,xshift=2em,label=above:\texttt{tail}] (tail) {$9$}; - \draw[->] (tail.west) [out=180, in=0] to (5.north east); - } - } - %\begin{scope}[-{Stealth[length = 2.5pt]}] - %\draw (1.north) [out=25, in=155] to (2.north); - %\draw (1.north) [out=30, in=155] to (3.north); - %\draw (1.north) [out=35, in=155] to (4.north); - %\draw (6.north) [out=40, in=155] to (6.north); - %\end{scope} - %\draw[decorate,decoration={brace, amplitude=10pt, raise=5pt, mirror}] - %(2.south west) to node[black,midway,below= 15pt] {$k$-elements} (7.south east);% - - \end{tikzpicture} - \end{center} - - \textbf{Performance:} (dynamisch, bei unterliegender Datenstruktur Array) - - \begin{center} - \begin{tabular}{c|c|c|c|c} - Zugriff & Suche & Einf./Lösch. (Anfang) & Einf./Lösch. (Ende) & Einf./Lösch. (Mitte) \\ - \hline - $\Theta(1)$ & $\Theta(n)$ & $\Theta(1)/\Theta(n)$\footnote{Wenn das Feld schon voll ist, muss der komplette Inhalt kopiert werden.} & $\Theta(1)/\Theta(n)$\footnote{Siehe Fußnote a.} & $\Theta(n)$ \\ - \end{tabular} - \end{center} - - Damit ist ein zirkuläres (dynamisches) Feld gut für eine \emph{Queue/Deque} geeignet! -\end{defi} - -\begin{bonus}{Prioritätswarteschlange} - Eine \emph{Prioritätswarteschlange} ist eine Warteschlange, deren Elemente einen Schlüssel (\emph{Priorität}) besitzen. - - \textbf{Implementierung:} - - In Java dient zur Implementierung die Klasse \texttt{PriorityQueue}, alternativ auch \texttt{TreeSet}. -\end{bonus} - -% Mengen -\begin{defi}{Menge} - Eine \emph{Menge (Set)} ist eine Sammlung von Elementen des gleichen Datentyps. - Innerhalb der Menge sind die Elemente ungeordnet. - Jedes Element kann nur einmal in der Menge vorkommen. - - \textbf{Implementierung:} - - In Java ist \emph{Set} ein Interface, das unter anderem folgende Klassen implementiert: - \begin{itemize} - \item \texttt{TreeSet}: Basiert auf der Datenstruktur Rot-Schwarz-Baum, implementiert Erweiterung \texttt{SortedMap}. - \item \texttt{HashSet}: Basiert auf der Datenstruktur Hashtabelle. - \end{itemize} -\end{defi} - -% Listen -\begin{defi}{Liste} - Im Vergleich zu einem Array kann eine \emph{Liste} schrumpfen und wachsen. - - \begin{center} - \begin{tikzpicture}[ - % -{Stealth[length = 2.5pt]}, - start chain, - node distance = 0pt, - StackBlock/.style={draw, minimum width=2em, minimum height=2em, outer sep=0pt, on chain}, - ] - { start chain = going right - \node [StackBlock, label=$0$] (0) {}; - \node [StackBlock, label=\texttt{next}] (0p) {}; - \node [StackBlock, label=$1$,xshift=2em] (1) {}; - \node [StackBlock, label=\texttt{next}] (1p) {}; - \node [StackBlock, label=$2$,xshift=2em] (2) {}; - \node [StackBlock, label=\texttt{next}] (2p) {}; - \node [StackBlock, label=$\ldots$,xshift=2em] (dots) {}; - \node [StackBlock] (dotsp) {}; - \node [StackBlock, label=$n$,xshift=2em] (n) {}; - \node [StackBlock, label=\texttt{next}] (np) {}; - \node [StackBlock, label=\texttt{null}, xshift=2em] (null) {}; - - - \draw[->] (0p.center) [out=0, in=180] to (1.west); - \draw[->] (1p.center) [out=0, in=180] to (2.west); - \draw[->] (2p.center) [out=0, in=180] to (dots.west); - \draw[->] (dotsp.center) [out=0, in=180] to (n.west); - \draw[->] (np.center) [out=0, in=180] to (null.west); - } - \end{tikzpicture} - \end{center} - - \textbf{Performance:} - - \begin{center} - \begin{tabular}{c|c|c|c|c} - Zugriff & Suche & Einf./Lösch. (Anfang) & Einf./Lösch. (Ende) & Einf./Lösch. (Mitte) \\ - \hline - $\Theta(n)$ & $\Theta(n)$ & $\Theta(1)$ & $\Theta(1)/\Theta(n)$\footnote{$\Theta(1)$, wenn das letzte Element bekannt ist, $\Theta(n)$ sonst} & Suchzeit + $\Theta(1)$ \\ - \end{tabular} - \end{center} -\end{defi} - - -\begin{defi}{Doppelt verkettete Liste} - Im Vergleich zu einer einfach verketteten Liste besitzt die \emph{doppelt verkettete Liste} zusätzlich einen Verweis auf den Vorgänger. - - \begin{center} - \begin{tikzpicture}[ - % -{Stealth[length = 2.5pt]}, - start chain, - node distance = 0pt, - StackBlock/.style={draw, minimum width=2em, minimum height=2em, outer sep=0pt, on chain}, - ] - { start chain = going right - \node [StackBlock,label=\texttt{null}] (nulll) {}; - - \node [StackBlock,label={[label distance=-.35ex]above:\texttt{prev}}, xshift=2em] (0p) {}; - \node [StackBlock,label=$0$] (0) {}; - \node [StackBlock,label=\texttt{next}] (0n) {}; - \node [StackBlock,label={[label distance=-.35ex]above:\texttt{prev}},xshift=2em] (1p) {}; - \node [StackBlock,label=$1$] (1) {}; - \node [StackBlock,label=\texttt{next}] (1n) {}; - \node [StackBlock,xshift=2em] (dotsp) {}; - \node [StackBlock,label=$\ldots$] (dots) {}; - \node [StackBlock] (dotsn) {}; - \node [StackBlock,label={[label distance=-.35ex]above:\texttt{prev}},xshift=2em] (np) {}; - \node [StackBlock,label=$n$] (n) {}; - \node [StackBlock,label=\texttt{next}] (nn) {}; - - \node [StackBlock,label=\texttt{null}, xshift=2em] (nullr) {}; - - %\draw[->] ([yshift=0.5em, xshift=0.25em] 5.east) [out=0, in=180] to ([yshift=0.5em, xshift=-0.25em] 6.west); - - % next arrows - \draw[->] ([yshift=0.5em] 0n.center) [out=0, in=180] to ([yshift=0.5em] 1p.west); - \draw[->] ([yshift=0.5em] 1n.center) [out=0, in=180] to ([yshift=0.5em] dotsp.west); - \draw[->] ([yshift=0.5em] dotsn.center) [out=0, in=180] to ([yshift=0.5em] np.west); - - \draw[->] (nn.center) [out=0, in=180] to (nullr.west); - - % prev arrows - \draw[<-] ([yshift=-0.5em] 0n.east) [out=0, in=180] to ([yshift=-0.5em] 1p.center); - \draw[<-] ([yshift=-0.5em] 1n.east) [out=0, in=180] to ([yshift=-0.5em] dotsp.center); - \draw[<-] ([yshift=-0.5em] dotsn.east) [out=0, in=180] to ([yshift=-0.5em] np.center); - - \draw[->] (0p.center) [out=180, in=0] to (nulll.east); - } - \end{tikzpicture} - \end{center} - - \textbf{Performance:} - - \begin{center} - \begin{tabular}{c|c|c|c|c} - Zugriff & Suche & Einf./Lösch. (Anfang) & Einf./Lösch. (Ende) & Einf./Lösch. (Mitte) \\ - \hline - $\Theta(n)$ & $\Theta(n)$ & $\Theta(1)$ & $\Theta(1)$ & Suchzeit + $\Theta(1)$ \\ - \end{tabular} - \end{center} -\end{defi} - -% Assoziative Felder -\begin{defi}{Assoziatives Feld} - Ein \emph{assoziatives Feld} ist eine Sonderform des Feldes: - \begin{itemize} - \item Verwendet keinen numerischen Index zur Adressierung eines Elements. - \item Verwendet zur Adressierung einen Schlüssel (z.B. \texttt{a["Meier"]}). - \end{itemize} - - Assoziative Felder eignen sich dazu, Datenelemente in einer großen Datenmenge aufzufinden. - Jedes Datenelement wird durch einen \emph{eindeutigen Schlüssel} identifiziert. - - \textbf{Implementierung:} - - In Java entspricht ein \emph{assoziatives Feld} dem Interface \texttt{java.util.Map}, das folgende Klassen implementiert: - \begin{itemize} - \item \texttt{TreeMap}: Basiert auf der Datenstruktur Rot-Schwarz-Baum, implementiert Erweiterung \texttt{SortedMap}. - \item \texttt{HashMap}: Basiert auf der Datenstruktur Hashtabelle. - \end{itemize} -\end{defi} - -% Verkettete Listen - -\subsection{Hashing} - -% Hashtabellen - -\begin{defi}{Hashfunktion} - Eine Hashfunktion oder Streuwertfunktion ist eine Abbildung $h : S \to I$, die eine große Eingabemenge, die Schlüssel $S$, auf eine kleinere Zielmenge, die Hashwerte $I$, abbildet.\footnote{Eine Hashfunktion ist daher im Allgemeinen nicht injektiv, aber surjektiv.} - - Die Bildmenge $h(S) \subseteq I$ bezeichnet die Menge der \emph{Hash-Indizes}. - - - \begin{center} - \begin{tikzpicture}[ - % -{Stealth[length = 2.5pt]}, - start chain = going {right=of \tikzchainprevious.north east}, - KeyBlock/.style={minimum width=4em, minimum height=2em, outer sep=0pt, on chain}, - HashBlock/.style={minimum width=2em, minimum height=2em, outer sep=0pt, on chain}, - FunctionBlock/.style={minimum width=10em, minimum height=26em, outer sep=0pt, on chain, very thick,fill=blue!20}, - every node/.style={draw, label distance=0.5em}, - every on chain/.style={anchor=north west}, - node distance=4em - ] - { - \node [KeyBlock, label=above:Schlüssel] (k0) {Jürgen}; - \node [FunctionBlock, label=above:Hashfunktion] (fun) {}; - \node [HashBlock, label=above:Hashwerte] (h00) {00}; - - { [continue chain = going {below=of \tikzchainprevious.south west}, node distance=2em] - \chainin (k0); - \node [KeyBlock] (k1) {Felix}; - \node [KeyBlock] (k2) {Finn}; - \node [KeyBlock] (k3) {Tim}; - \node [KeyBlock] (k4) {Benno}; - \node [KeyBlock] (k5) {Lukas}; - \node [KeyBlock] (k6) {Julia}; - } - - { [continue chain = going {below=of \tikzchainprevious.south west}, node distance=0pt] - \chainin (h00); - \node [HashBlock] (h01) {01}; - \node [HashBlock] (h02) {02}; - \node [HashBlock] (h03) {03}; - \node [HashBlock] (h04) {04}; - \node [HashBlock] (h05) {05}; - \node [HashBlock] (h06) {06}; - \node [HashBlock] (h07) {07}; - \node [HashBlock] (h08) {08}; - \node [HashBlock] (h09) {09}; - \node [HashBlock] (h10) {10}; - \node [HashBlock] (hdots) {$\ldots$}; - \node [HashBlock] (h15) {15}; - } - - \draw[->] (k0.east) -- ++(2, 0) -- ($(h05.west)-(2,0)$) -- (h05.west); - \draw[->] (k1.east) -- ++(2, 0) -- ($(h09.west)-(2,0)$) -- (h09.west); - \draw[->] (k2.east) -- ++(2, 0) -- ($(h00.west)-(2,0)$) -- (h00.west); - \draw[->] (k3.east) -- ++(2, 0) -- ($(h15.west)-(2,0)$) -- (h15.west); - \draw[->] (k4.east) -- ++(2, 0) -- ($(h02.west)-(2,0)$) -- (h02.west); - \draw[->] (k5.east) -- ++(2, 0) -- ($(h10.west)-(2,0)$) -- (h10.west); - \draw[->] (k6.east) -- ++(2, 0) -- ($(h03.west)-(2,0)$) -- (h03.west); - } - \end{tikzpicture} - \end{center} -\end{defi} - -\begin{example}{Divisions-Hash} - Die \emph{Divisionsrest-Methode (Divisions-Hash)} um Integer zu hashen wird definiert durch: - $$ - h(x) = x \operatorname{mod} N - $$ - - Sie wird bevorzugt, wenn die Schlüsselverteilung nicht bekannt ist. - Etwaige Regelmäßigkeiten in der Schlüsselverteilung sollte sich nicht in der Adressverteilung auswirken. Daher sollte $N$ eine Primzahl sein. -\end{example} - -\begin{example}{Hashfunktionen für verschiedene Datentypen} - \begin{itemize} - \item Alle Datenypen: Verwenden der Speicheradresse - \item Strings: ASCII/Unicode-Werte addieren (evtl. von einigen Buchstaben, evtl. gewichtet) - \end{itemize} -\end{example} - -\begin{defi}{Kollision} - Sei $S$ eine Schlüsselmenge und $h$ eine Hashfunktion. - Ist - $$ - s_1, s_2 \in S, \ s_1 \neq s_2 : h(s_1) = h(s_2) - $$ - so spricht man von einer \emph{Kollision}. - - Die Wahrscheinlichkeit von Kollisionen ist abhängig von der gewählten Hashfunktion. - Hashfunktionen sollten also möglichst gut \emph{streuen}, aber dennoch effizient berechenbar sein. - - \begin{center} - \begin{tikzpicture}[ - % -{Stealth[length = 2.5pt]}, - start chain = going {right=of \tikzchainprevious.north east}, - KeyBlock/.style={minimum width=4em, minimum height=2em, outer sep=0pt, on chain}, - HashBlock/.style={minimum width=2em, minimum height=2em, outer sep=0pt, on chain}, - FunctionBlock/.style={minimum width=10em, minimum height=26em, outer sep=0pt, on chain,fill=blue!20}, - every node/.style={draw, label distance=0.5em}, - every on chain/.style={anchor=north west}, - node distance=4em - ] - { - \node [KeyBlock, label=above:Schlüssel, very thick] (k0) {Jürgen}; - \node [FunctionBlock, label=above:Hashfunktion] (fun) {}; - \node [HashBlock, label=above:Hashwerte] (h00) {00}; - - { [continue chain = going {below=of \tikzchainprevious.south west}, node distance=2em] - \chainin (k0); - \node [KeyBlock] (k1) {Felix}; - \node [KeyBlock] (k2) {Finn}; - \node [KeyBlock] (k3) {Tim}; - \node [KeyBlock] (k4) {Benno}; - \node [KeyBlock] (k5) {Lukas}; - \node [KeyBlock, very thick] (k6) {Julia}; - } - - { [continue chain = going {below=of \tikzchainprevious.south west}, node distance=0pt] - \chainin (h00); - \node [HashBlock] (h01) {01}; - \node [HashBlock] (h02) {02}; - \node [HashBlock] (h03) {03}; - \node [HashBlock] (h04) {04}; - \node [HashBlock, very thick] (h05) {05}; - \node [HashBlock] (h06) {06}; - \node [HashBlock] (h07) {07}; - \node [HashBlock] (h08) {08}; - \node [HashBlock] (h09) {09}; - \node [HashBlock] (h10) {10}; - \node [HashBlock] (hdots) {$\ldots$}; - \node [HashBlock] (h15) {15}; - } - - \draw[->, very thick, color=red] (k0.east) -- ++(2, 0) -- ($(h05.west)-(2,0)$) -- (h05.west); - \draw[->] (k1.east) -- ++(2, 0) -- ($(h09.west)-(2,0)$) -- (h09.west); - \draw[->] (k2.east) -- ++(2, 0) -- ($(h00.west)-(2,0)$) -- (h00.west); - \draw[->] (k3.east) -- ++(2, 0) -- ($(h15.west)-(2,0)$) -- (h15.west); - \draw[->] (k4.east) -- ++(2, 0) -- ($(h02.west)-(2,0)$) -- (h02.west); - \draw[->] (k5.east) -- ++(2, 0) -- ($(h10.west)-(2,0)$) -- (h10.west); - \draw[->, very thick, color=red] (k6.east) -- ++(2, 0) -- ($(h05.west)-(2,0)$) -- (h05.west); - } - \end{tikzpicture} - \end{center} - -\end{defi} - -\begin{defi}{Kollisionsbehandlung} - Um Kollisionen zu handhaben, existieren verschiedene Strategien: - \begin{itemize} - \item \emph{Hashing mit Verkettung} - \begin{itemize} - \item Hashtabelle besteht aus $N$ linearen Listen - \item $h(s)$ gibt dann an, in welche Teilliste der Datensatz gehört - \item Daten werden innerhalb der Teillisten sequentiell gespeichert - \end{itemize} - \item \emph{Hashing mit offener Adressierung} - \begin{itemize} - \item Suchen einer alternativen Position innerhalb des Feldes - \begin{enumerate} - \item Lineares Sondieren (Verschiebung um konstantes Intervall) - \item Doppeltes Hashing (Intervall wird quadriert) - \item Quadratisches Sondieren (Nutzen einer weiteren Hashfunktion) - \end{enumerate} - \end{itemize} - \end{itemize} -\end{defi} - -\begin{defi}{Schrittzahl} - Die \emph{Schrittzahl} $S(s)$, die nötig ist, um den Datensatz mit Schlüssel $s$ zu speichern bzw. wiederzufinden, setzt sich z.B. beim Hashing mit Verkettung zusammen aus: - \begin{itemize} - \item der Berechnung der Hash-Funktion und - \item dem Aufwand für die Suche bzw. Speicherung innerhalb der Teilliste. - \end{itemize} -\end{defi} - -\begin{defi}{Füllgrad} - Der \emph{Füllgrad} einer Hashtabelle ist der Quotient - $$ - \alpha = \frac{n}{N} - $$ - mit - \begin{itemize} - \item $N$ als Größe der Hashtabelle - \item $n$ als Anzahl der gespeicherten Datensätze - \end{itemize} -\end{defi} - -\begin{example}{Schrittzahl beim Suchen in Teillisten} - Bei idealer Speicherung entfallen $\alpha$ Elemente auf jede Teilliste. - Dabei gilt: - \begin{itemize} - \item erfolgreiche Suche: $c_1 + c_2 \cdot \frac{\alpha}{2}$ - \item erfolglose Suche: $c_1 + c_2 \cdot \alpha$ - \end{itemize} - Damit ist der Suchaufwand in $\bigo(\alpha) = \bigo(\frac{n}{N})$. - - Wird der Füllgrad $\alpha$ zu groß, sollte die Hashtabelle vergrößert werden. -\end{example} - -\begin{defi}{Dynamisches Hashing} - Um viele Kollisionen zu vermeiden, muss die Hashtabelle ab einem gewissen Füllgrad vergrößert werden.\footnote{nach Sedgewick sollte stets $\alpha < 0.5$ gelten} - - Als Folge muss die gesamte Hashtabelle aber auch neu aufgebaut werden. -\end{defi} - -\begin{defi}{Offene Adressierung (Sondieren)} - Beim Speichern wird bei \emph{Hashing mit offener Adressieren (Sondierung)} so lang ein neuer Hashindex berechnet, bis dort ein freier Speicherplatz vorhanden ist. - - Das Suchen funktioniert analog, allerdings ist das Löschen sehr aufwändig. - - \begin{itemize} - \item Lineares Sondieren - \begin{itemize} - \item Wird die Ersatzadresse bei jeder Kollision durch Erhöhen der alten Adresse um 1 berechnet, so spricht man von \emph{linearem Sondieren (linear probing)}. - \item Die $i$-te Ersatzadresse für einen Schlüssel $s$ mit Hashindex $h(s)$ wird also wie folgt berechnet: - $$ - h_i(s) = (h(s) + i) \operatorname{mod} N - $$ - \end{itemize} - \item Doppeltes Hashing - \begin{itemize} - \item Schlüssel wird nicht um $1$ erhöht, sondern der Inkrement wird mit einer zweiten Hashfunktion berechnet. - \item Beseitigt praktisch die Probleme der primären und sekundären Häufung. - \item Nicht alle Felder werden durchprobiert. Im ungünstigsten Fall kann eine neues Element nicht eingefügt werden, auch wenn noch Felder frei sind. - \end{itemize} - \end{itemize} -\end{defi} - -\begin{defi}{Primäre und sekundäre Häufung} - Bei der \emph{primären Häufung (primary clustering)} ist die Wahrscheinlichkeit, dass Plätze in einem dichtbelegten Bereich eher besetzt werden, deutlich höher. - Es kommt also zu Kettenbildung. - - Besonders häufig tritt primäre Häufung z.B. beim linearen Sondieren auf. - - \begin{center} - \begin{tikzpicture} - [ - % -{Stealth[length = 2.5pt]}, - start chain, - node distance = 0pt, - StackBlock/.style={draw, minimum width=2em, minimum height=2em, outer sep=0pt, on chain}, - ] - - \node [draw, minimum width=2em, minimum height=2em] (val) {$s$}; - - { start chain = going right - \node [StackBlock,right=2cm of val,fill=red!30] (0) {}; - \node [StackBlock] (1) {}; - \node [StackBlock] (2) {}; - \node [StackBlock,fill=red!30] (3) {}; - \node [StackBlock,fill=red!30] (4) {}; - \node [StackBlock,fill=red!30] (5) {}; - \node [StackBlock,fill=red!30] (6) {}; - \node [StackBlock,fill=red!30] (7) {}; - \node [StackBlock] (8) {$s$}; - \node [StackBlock] (9) {}; - - \draw[->] (val.south) [out=-30, in=-150] to (4.south); - \draw[->] (4.south) [out=-45, in=-135] to (5.south); - \draw[->] (5.south) [out=-45, in=-135] to (6.south); - \draw[->] (6.south) [out=-45, in=-135] to (7.south); - \draw[->] (7.south) [out=-45, in=-135] to (8.south); - } - \end{tikzpicture} - \end{center} - - - Die \emph{sekundäre Häufung (secondary clustering)} hängt von der Hashfunktion ab. - Dabei durchlaufen zwei Schlüssel $h(s)$ und $h(s')$ stets dieselbe Sondierungsfolge. - Sie behindern sich also auf den Ausweichplätzen. - - Besonders häufig tritt sekundäre Häufung z.B. beim quadratischen Sondieren auf. - - - \begin{center} - \begin{tikzpicture} - [ - % -{Stealth[length = 2.5pt]}, - start chain, - node distance = 0pt, - StackBlock/.style={draw, minimum width=2em, minimum height=2em, outer sep=0pt, on chain}, - ] - - \node [minimum width=2em, minimum height=2em] (val) {}; - - { start chain = going right - \node [StackBlock,right=2cm of val] (0) {}; - \node [StackBlock,fill=red!30] (1) {}; - \node [StackBlock,fill=red!30] (2) {}; - \node [StackBlock,fill=red!30] (3) {}; - \node [StackBlock] (4) {}; - \node [StackBlock,fill=red!30] (5) {}; - \node [StackBlock] (6) {}; - \node [StackBlock] (7) {}; - \node [StackBlock] (8) {$s$}; - \node [StackBlock] (9) {$s'$}; - - { [continue chain = going above] - \chainin (val); - \node [StackBlock] (val1) {$s$}; - } - - { [continue chain = going below] - \chainin (val); - \node [StackBlock] (val2) {$s'$}; - } - - \draw[->] (val1.east) [out=0, in=150] to (2.north); - \draw[->] (2.north) [out=45, in=135] to (3.north); - \draw[->] (3.north) [out=45, in=135] to (5.north); - \draw[->] (5.north) [out=45, in=135] to (8.north); - - \draw[->] (val2.east) [out=0, in=-150] to (2.south); - \draw[->] (2.south) [out=-45, in=-135] to (3.south); - \draw[->] (3.south) [out=-45, in=-135] to (5.south); - \draw[->] (5.south) [out=-45, in=-135] to (8.south); - \draw[->] (8.south) [out=-45, in=-135] to (9.south); - } - \end{tikzpicture} - \end{center} -\end{defi} +\section{Elementare Datenstrukturen} + +% ADTs +\begin{defi}{Abstrakte Datentypen (ADTs)} + Anforderungen an die Definition eines Datentyps: + \begin{itemize} + \item \emph{Spezifikation} eines Datentyps unabhängig von der Implementierung + \item Reduzierung der von außen sichtbaren Aspekte auf die \emph{Schnittstelle} des Datentyps + \end{itemize} + + Daraus entstehen \textbf{zwei Prinzipien}: + \begin{itemize} + \item \emph{Kapselung:} + \subitem Zu einem ADT gehört eine Schnittstelle. + \subitem Zugriffe auf den ADT erfolgen ausschließlich über die Schnittstelle. + \item \emph{Geheimnisprinzip:} + \subitem Interne Realisierung eines ADT-Moduls bleibt verborgen. + \end{itemize} +\end{defi} + +\begin{defi}{Homogene Datenstruktur} + In einer \emph{homogenen Datenstruktur} haben alle Komponenten den \emph{gleichen} Datentyp. +\end{defi} + +\begin{defi}{Heterogene Datenstruktur} + In einer \emph{heterogenen Datenstruktur} haben die Komponenten \emph{unterschiedliche} Datentypen. +\end{defi} + +\begin{bonus}{ADTs in Java} + Viele wichtige abstrakte Datentypen werden in Java durch \emph{Interfaces} beschrieben. + + Es gibt ein oder mehrere Implementierungen dieser Interfaces mit unterschiedlichen dahinter stehenden Konzepten. + + In Java: Package \texttt{java.util} + + Wichtig in der Vorlesung: + + \begin{tabular}{l|l|l} + ADT & Grund-ADT/Interface & Java-Klassen \\ + \hline + Feld & & (Felder), HashMap \\ + Liste & List & ArrayList, LinkedList \\ + Menge & Set & HashSet, TreeSet \\ + Prioritätswarteschlange & & PriorityQueue \\ + Stack & List & \\ + Queue & List & \\ + Deque & List & Deque (Interface), ArrayDeque \\ + Map & Set & Map (Interface), HashMap, TreeMap \\ + BidiMap & Map & BidiMap, BiMap (Interface) \\ + MultiSet, Bag & Map & Bag, Multiset (Interface) + \end{tabular} +\end{bonus} + +\subsection{Abstrakte Datentypen} + +\begin{defi}{Array} + Ein \emph{Array} hat folgende spezielle Eigenschaften: + \begin{itemize} + \item Feste Anzahl an Datenobjekten + \item Auf jedes Objekt kann direkt lesend oder schreibend zugegriffen werden + \end{itemize} + + \begin{center} + \begin{tikzpicture}[ + % -{Stealth[length = 2.5pt]}, + start chain, + node distance = 0pt, + StackBlock/.style={draw, minimum width=2em, minimum height=2em, outer sep=0pt, on chain}, + ] + { start chain = going right + \node [StackBlock, label=$0$] (0) {}; + \node [StackBlock, label=$1$] (1) {}; + \node [StackBlock, label=$2$] (2) {}; + \node [StackBlock, label=$3$] (3) {}; + \node [StackBlock, label=$\ldots$] (d1) {}; + \node [StackBlock, label=$k$] (k) {}; + \node [StackBlock, label=$\ldots$] (d2) {}; + \node [StackBlock, label=$n-1$] (n1) {}; + \node [StackBlock, label=$n$] (n) {}; + } + \end{tikzpicture} + \end{center} + + \textbf{Performance:} + + \begin{center} + \begin{tabular}{c|c|c|c|c} + Zugriff & Suche & Einf./Lösch. (Anfang) & Einf./Lösch. (Ende) & Einf./Lösch. (Mitte) \\ + \hline + $\Theta(1)$ & $\Theta(n)$ & - & - & - \\ + \end{tabular} + \end{center} +\end{defi} + +\begin{defi}{Liste} + Eine Liste besteht aus Elementen, die wie in einem Array linear angeordnet sind. + Auf die Elemente einer Liste muss nicht wahlfrei zugegriffen werden können\footnote{Eine Ausnahme stellt der Listenanfang dar.}. + + Die Größe einer Liste ist nicht von Anfang an bekannt und sie kann beliebig verlängert bzw. verkürzt werden. +\end{defi} + +\begin{defi}{Stack} + \begin{itemize} + \item Daten können an einem Ende hinzugefügt oder entnommen werden. + \end{itemize} + + \begin{center} + \begin{tikzpicture}[ + % -{Stealth[length = 2.5pt]}, + start chain, + node distance = 0pt, + StackBlock/.style={draw, minimum width=2em, minimum height=2em, outer sep=0pt, on chain}, + ] + { start chain = going right + \node [StackBlock,draw=none] (0) {}; + + \node [StackBlock,xshift=4em] (1) {}; + \node [StackBlock] (2) {}; + \node [StackBlock] (3) {}; + \node [StackBlock] (4) {}; + \node [StackBlock] (5) {}; + + \node [StackBlock,xshift=4em,draw=none] (6) {}; + + \draw[->] ([yshift=0.5em, xshift=0.25em] 5.east) [out=0, in=180] to ([yshift=0.5em, xshift=-0.25em] 6.west); + \draw[->] ([yshift=-0.5em, xshift=-0.25em] 6.west) [out=180, in=0] to ([yshift=-0.5em, xshift=0.25em] 5.east); + } + \end{tikzpicture} + \end{center} +\end{defi} + +\begin{defi}{Queue} + \begin{itemize} + \item Daten können an einem Ende hinzugefügt und am anderen Ende entnommen werden. + \end{itemize} + + \begin{center} + \begin{tikzpicture}[ + % -{Stealth[length = 2.5pt]}, + start chain, + node distance = 0pt, + StackBlock/.style={draw, minimum width=2em, minimum height=2em, outer sep=0pt, on chain}, + ] + { start chain = going right + \node [StackBlock,draw=none] (0) {}; + + \node [StackBlock,xshift=4em] (1) {}; + \node [StackBlock] (2) {}; + \node [StackBlock] (3) {}; + \node [StackBlock] (4) {}; + \node [StackBlock] (5) {}; + + \node [StackBlock,xshift=4em,draw=none] (6) {}; + + \draw[<-] ([xshift=0.25em] 0.east) [out=0, in=180] to ([xshift=-0.25em] 1.west); + \draw[->] ([xshift=-0.25em] 6.west) [out=180, in=0] to ([xshift=0.25em] 5.east); + } + \end{tikzpicture} + \end{center} +\end{defi} + +\begin{defi}{Deque (\glqq Double ended queue\grqq)} + \begin{itemize} + \item Daten können an beiden Enden hinzugefügt und entnommen werden. + \end{itemize} + + \begin{center} + \begin{tikzpicture}[ + % -{Stealth[length = 2.5pt]}, + start chain, + node distance = 0pt, + StackBlock/.style={draw, minimum width=2em, minimum height=2em, outer sep=0pt, on chain}, + ] + { start chain = going right + \node [StackBlock,draw=none] (0) {}; + + \node [StackBlock,xshift=4em] (1) {}; + \node [StackBlock] (2) {}; + \node [StackBlock] (3) {}; + \node [StackBlock] (4) {}; + \node [StackBlock] (5) {}; + + \node [StackBlock,xshift=4em,draw=none] (6) {}; + + \draw[->] ([yshift=0.5em, xshift=0.25em] 5.east) [out=0, in=180] to ([yshift=0.5em, xshift=-0.25em] 6.west); + \draw[->] ([yshift=-0.5em, xshift=-0.25em] 6.west) [out=180, in=0] to ([yshift=-0.5em, xshift=0.25em] 5.east); + + \draw[<-] ([yshift=0.5em, xshift=0.25em] 0.east) [out=0, in=180] to ([yshift=0.5em, xshift=-0.25em] 1.west); + \draw[<-] ([yshift=-0.5em, xshift=-0.25em] 1.west) [out=180, in=0] to ([yshift=-0.5em, xshift=0.25em] 0.east); + } + \end{tikzpicture} + \end{center} +\end{defi} + +\begin{bonus}{Prioritätswarteschlange} + Eine \emph{Prioritätswarteschlange} ist eine Warteschlange, deren Elemente einen Schlüssel (\emph{Priorität}) besitzen. + + \textbf{Implementierung:} + + In Java dient zur Implementierung die Klasse \texttt{PriorityQueue}, alternativ auch \texttt{TreeSet}. +\end{bonus} + +% Mengen +\begin{defi}{Menge} + Eine \emph{Menge (Set)} ist eine Sammlung von Elementen des gleichen Datentyps. + Innerhalb der Menge sind die Elemente ungeordnet. + Jedes Element kann nur einmal in der Menge vorkommen. + + \textbf{Implementierung:} + + In Java ist \emph{Set} ein Interface, das unter anderem folgende Klassen implementiert: + \begin{itemize} + \item \texttt{TreeSet}: Basiert auf der Datenstruktur Rot-Schwarz-Baum, implementiert Erweiterung \texttt{SortedMap}. + \item \texttt{HashSet}: Basiert auf der Datenstruktur Hashtabelle. + \end{itemize} +\end{defi} + +% Assoziative Felder +\begin{defi}{Assoziatives Feld} + Ein \emph{assoziatives Feld} ist eine Sonderform des Feldes: + \begin{itemize} + \item Verwendet keinen numerischen Index zur Adressierung eines Elements. + \item Verwendet zur Adressierung einen Schlüssel (z.B. \texttt{a["Meier"]}). + \end{itemize} + + Assoziative Felder eignen sich dazu, Datenelemente in einer großen Datenmenge aufzufinden. + Jedes Datenelement wird durch einen \emph{eindeutigen Schlüssel} identifiziert. + + \textbf{Implementierung:} + + In Java entspricht ein \emph{assoziatives Feld} dem Interface \texttt{java.util.Map}, das folgende Klassen implementiert: + \begin{itemize} + \item \texttt{TreeMap}: Basiert auf der Datenstruktur Rot-Schwarz-Baum, implementiert Erweiterung \texttt{SortedMap}. + \item \texttt{HashMap}: Basiert auf der Datenstruktur Hashtabelle. + \end{itemize} +\end{defi} + +\subsection{Datenstrukturen} +% Listen +\begin{defi}{Einfach verkettete Liste} + Im Vergleich zu einem Array kann eine \emph{Liste} schrumpfen und wachsen. + + \begin{center} + \begin{tikzpicture}[ + % -{Stealth[length = 2.5pt]}, + start chain, + node distance = 0pt, + StackBlock/.style={draw, minimum width=2em, minimum height=2em, outer sep=0pt, on chain}, + ] + { start chain = going right + \node [StackBlock, label=$0$] (0) {}; + \node [StackBlock, label=\texttt{next}] (0p) {}; + \node [StackBlock, label=$1$,xshift=2em] (1) {}; + \node [StackBlock, label=\texttt{next}] (1p) {}; + \node [StackBlock, label=$2$,xshift=2em] (2) {}; + \node [StackBlock, label=\texttt{next}] (2p) {}; + \node [StackBlock, label=$\ldots$,xshift=2em] (dots) {}; + \node [StackBlock] (dotsp) {}; + \node [StackBlock, label=$n$,xshift=2em] (n) {}; + \node [StackBlock, label=\texttt{next}] (np) {}; + \node [StackBlock, label=\texttt{null}, xshift=2em] (null) {}; + + + \draw[->] (0p.center) [out=0, in=180] to (1.west); + \draw[->] (1p.center) [out=0, in=180] to (2.west); + \draw[->] (2p.center) [out=0, in=180] to (dots.west); + \draw[->] (dotsp.center) [out=0, in=180] to (n.west); + \draw[->] (np.center) [out=0, in=180] to (null.west); + } + \end{tikzpicture} + \end{center} + + \textbf{Performance:} + + \begin{center} + \begin{tabular}{c|c|c|c|c} + Zugriff & Suche & Einf./Lösch. (Anfang) & Einf./Lösch. (Ende) & Einf./Lösch. (Mitte) \\ + \hline + $\Theta(n)$ & $\Theta(n)$ & $\Theta(1)$ & $\Theta(1)/\Theta(n)$\footnote{$\Theta(1)$, wenn das letzte Element bekannt ist, $\Theta(n)$ sonst} & Suchzeit + $\Theta(1)$ \\ + \end{tabular} + \end{center} +\end{defi} + + +\begin{defi}{Doppelt verkettete Liste} + Im Vergleich zu einer einfach verketteten Liste besitzt die \emph{doppelt verkettete Liste} zusätzlich einen Verweis auf den Vorgänger. + + \begin{center} + \begin{tikzpicture}[ + % -{Stealth[length = 2.5pt]}, + start chain, + node distance = 0pt, + StackBlock/.style={draw, minimum width=2em, minimum height=2em, outer sep=0pt, on chain}, + ] + { start chain = going right + \node [StackBlock,label=\texttt{null}] (nulll) {}; + + \node [StackBlock,label={[label distance=-.35ex]above:\texttt{prev}}, xshift=2em] (0p) {}; + \node [StackBlock,label=$0$] (0) {}; + \node [StackBlock,label=\texttt{next}] (0n) {}; + \node [StackBlock,label={[label distance=-.35ex]above:\texttt{prev}},xshift=2em] (1p) {}; + \node [StackBlock,label=$1$] (1) {}; + \node [StackBlock,label=\texttt{next}] (1n) {}; + \node [StackBlock,xshift=2em] (dotsp) {}; + \node [StackBlock,label=$\ldots$] (dots) {}; + \node [StackBlock] (dotsn) {}; + \node [StackBlock,label={[label distance=-.35ex]above:\texttt{prev}},xshift=2em] (np) {}; + \node [StackBlock,label=$n$] (n) {}; + \node [StackBlock,label=\texttt{next}] (nn) {}; + + \node [StackBlock,label=\texttt{null}, xshift=2em] (nullr) {}; + + %\draw[->] ([yshift=0.5em, xshift=0.25em] 5.east) [out=0, in=180] to ([yshift=0.5em, xshift=-0.25em] 6.west); + + % next arrows + \draw[->] ([yshift=0.5em] 0n.center) [out=0, in=180] to ([yshift=0.5em] 1p.west); + \draw[->] ([yshift=0.5em] 1n.center) [out=0, in=180] to ([yshift=0.5em] dotsp.west); + \draw[->] ([yshift=0.5em] dotsn.center) [out=0, in=180] to ([yshift=0.5em] np.west); + + \draw[->] (nn.center) [out=0, in=180] to (nullr.west); + + % prev arrows + \draw[<-] ([yshift=-0.5em] 0n.east) [out=0, in=180] to ([yshift=-0.5em] 1p.center); + \draw[<-] ([yshift=-0.5em] 1n.east) [out=0, in=180] to ([yshift=-0.5em] dotsp.center); + \draw[<-] ([yshift=-0.5em] dotsn.east) [out=0, in=180] to ([yshift=-0.5em] np.center); + + \draw[->] (0p.center) [out=180, in=0] to (nulll.east); + } + \end{tikzpicture} + \end{center} + + \textbf{Performance:} + + \begin{center} + \begin{tabular}{c|c|c|c|c} + Zugriff & Suche & Einf./Lösch. (Anfang) & Einf./Lösch. (Ende) & Einf./Lösch. (Mitte) \\ + \hline + $\Theta(n)$ & $\Theta(n)$ & $\Theta(1)$ & $\Theta(1)$ & Suchzeit + $\Theta(1)$ \\ + \end{tabular} + \end{center} +\end{defi} + +% Dynamische Felder +\begin{defi}{Dynamisches Feld} + Ein \emph{dynamisches Feld} besteht aus: + \begin{itemize} + \item Einem normalen Feld, das nicht vollständig gefüllt ist. + \item Einem Zeiger, der anzeigt, welches das erste unbesetzte Element ist. + \end{itemize} + + \begin{center} + \begin{tikzpicture}[ + % -{Stealth[length = 2.5pt]}, + start chain, + node distance = 0pt, + StackBlock/.style={draw, minimum width=2em, minimum height=2em, outer sep=0pt, on chain}, + ] + { start chain = going right + \node [StackBlock, fill=red!50, label=$0$] (0) {}; + \node [StackBlock, fill=red!50, label=$1$] (1) {}; + \node [StackBlock, fill=red!50, label=$2$] (2) {}; + \node [StackBlock, fill=red!50, label=$3$] (3) {}; + \node [StackBlock, fill=red!50, label=$\ldots$] (d1) {}; + \node [StackBlock, label=$k$] (k) {}; + \node [StackBlock, label=$\ldots$] (d2) {}; + \node [StackBlock, label=$n-1$] (n1) {}; + \node [StackBlock, label=$n$] (n) {}; + + { [continue chain = going below] + \chainin (k); + \node[StackBlock,yshift=-1em] (pointer) {$k$}; + \draw[->] (pointer.north) [out=90, in=-90] to (k.south); + } + + } + %\begin{scope}[-{Stealth[length = 2.5pt]}] + %\draw (1.north) [out=25, in=155] to (2.north); + %\draw (1.north) [out=30, in=155] to (3.north); + %\draw (1.north) [out=35, in=155] to (4.north); + %\draw (6.north) [out=40, in=155] to (6.north); + %\end{scope} + %\draw[decorate,decoration={brace, amplitude=10pt, raise=5pt, mirror}] + %(2.south west) to node[black,midway,below= 15pt] {$k$-elements} (7.south east);% + + \end{tikzpicture} + \end{center} + + \textbf{Performance:} + + \begin{center} + \begin{tabular}{c|c|c|c|c} + Zugriff & Suche & Einf./Lösch. (Anfang) & Einf./Lösch. (Ende) & Einf./Lösch. (Mitte) \\ + \hline + $\Theta(1)$ & $\Theta(n)$ & $\Theta(n)$ & $\Theta(1)/\Theta(n)$\footnote{Wenn das Feld schon voll ist, muss der komplette Inhalt kopiert werden.} & $\Theta(n)$ \\ + \end{tabular} + \end{center} + + Damit ist ein dynamisches Feld gut für einen \emph{Stack} geeignet! +\end{defi} + +% Zirkuläre dynamische Felder +\begin{defi}{Zirkuläres (dynamisches) Feld} + Ein \emph{zirkuläres Feld} besitzt einen Speicher fester Größe. + Dabei speichern zwei Zeiger jeweils den Anfang (\texttt{head}) des Speichers, bzw. auf die nächste freie Speicheradresse (\texttt{tail}) im Speicher. + + Wird ein Element am Anfang \glqq abgearbeitet\grqq, bewegt sich \texttt{head} eine Position weiter. + Wird ein Element am Ende eingefügt, bewegt sich \texttt{tail} eine Position weiter. + \begin{center} + \begin{tikzpicture}[ + % -{Stealth[length = 2.5pt]}, + start chain, + node distance = 0pt, + StackBlock/.style={draw, minimum width=2em, minimum height=2em, outer sep=0pt, on chain}, + ] + { start chain = going right + \node [StackBlock,label=above:$15$] (15) {}; + \node [StackBlock,label=above:$0$, fill=red!50] (0) {}; + \node [StackBlock,label=above:$1$, fill=red!50] (1) {}; + \node [StackBlock,label=above:$2$, fill=red!50] (2) {}; + \node [StackBlock,label=above:$3$, fill=red!50] (3) {}; + + { [continue chain = going below] + \chainin (3); + \node [StackBlock,label=right:$4$, fill=red!50] (4) {}; + \node [StackBlock,label=right:$5$] (5) {}; + \node [StackBlock,label=below:$6$] (6) {}; + } + + { [continue chain = going left] + \chainin (6); + \node [StackBlock,label=below:$7$] (7) {}; + \node [StackBlock,label=below:$8$] (8) {}; + \node [StackBlock,label=below:$9$] (9) {}; + \node [StackBlock,label=below:$10$] (10) {}; + \node [StackBlock,label=below:$11$] (11) {}; + } + + { [continue chain = going above] + \chainin (11); + \node [StackBlock,label=left:$12$] (12) {}; + \node [StackBlock,label=left:$13$] (13) {}; + \node [StackBlock,label=above:$14$] (14) {}; + } + + + { [continue chain = going above] + \chainin (0); + \node[StackBlock,yshift=2em,xshift=-0.5em,label=\texttt{head}] (head) {$0$}; + \draw[->] (head.south) [out=-90, in=90] to (0.north west); + } + + { [continue chain = going right] + \chainin (5); + \node[StackBlock,yshift=0.5em,xshift=2em,label=above:\texttt{tail}] (tail) {$9$}; + \draw[->] (tail.west) [out=180, in=0] to (5.north east); + } + } + %\begin{scope}[-{Stealth[length = 2.5pt]}] + %\draw (1.north) [out=25, in=155] to (2.north); + %\draw (1.north) [out=30, in=155] to (3.north); + %\draw (1.north) [out=35, in=155] to (4.north); + %\draw (6.north) [out=40, in=155] to (6.north); + %\end{scope} + %\draw[decorate,decoration={brace, amplitude=10pt, raise=5pt, mirror}] + %(2.south west) to node[black,midway,below= 15pt] {$k$-elements} (7.south east);% + + \end{tikzpicture} + \end{center} + + \textbf{Performance:} (dynamisch, bei unterliegender Datenstruktur Array) + + \begin{center} + \begin{tabular}{c|c|c|c|c} + Zugriff & Suche & Einf./Lösch. (Anfang) & Einf./Lösch. (Ende) & Einf./Lösch. (Mitte) \\ + \hline + $\Theta(1)$ & $\Theta(n)$ & $\Theta(1)/\Theta(n)$\footnote{Wenn das Feld schon voll ist, muss der komplette Inhalt kopiert werden.} & $\Theta(1)/\Theta(n)$\footnote{Siehe Fußnote a.} & $\Theta(n)$ \\ + \end{tabular} + \end{center} + + Damit ist ein zirkuläres (dynamisches) Feld gut für eine \emph{Queue/Deque} geeignet! +\end{defi} + +% Verkettete Listen + +\subsection{Hashing} + +% Hashtabellen + +\begin{defi}{Hashfunktion} + Eine Hashfunktion oder Streuwertfunktion ist eine Abbildung $h : S \to I$, die eine große Eingabemenge, die Schlüssel $S$, auf eine kleinere Zielmenge, die Hashwerte $I$, abbildet.\footnote{Eine Hashfunktion ist daher im Allgemeinen nicht injektiv, aber surjektiv.} + + Die Bildmenge $h(S) \subseteq I$ bezeichnet die Menge der \emph{Hash-Indizes}. + + + \begin{center} + \begin{tikzpicture}[ + % -{Stealth[length = 2.5pt]}, + start chain = going {right=of \tikzchainprevious.north east}, + KeyBlock/.style={minimum width=4em, minimum height=2em, outer sep=0pt, on chain}, + HashBlock/.style={minimum width=2em, minimum height=2em, outer sep=0pt, on chain}, + FunctionBlock/.style={minimum width=10em, minimum height=26em, outer sep=0pt, on chain, very thick,fill=blue!20}, + every node/.style={draw, label distance=0.5em}, + every on chain/.style={anchor=north west}, + node distance=4em + ] + { + \node [KeyBlock, label=above:Schlüssel] (k0) {Jürgen}; + \node [FunctionBlock, label=above:Hashfunktion] (fun) {}; + \node [HashBlock, label=above:Hashwerte] (h00) {00}; + + { [continue chain = going {below=of \tikzchainprevious.south west}, node distance=2em] + \chainin (k0); + \node [KeyBlock] (k1) {Felix}; + \node [KeyBlock] (k2) {Finn}; + \node [KeyBlock] (k3) {Tim}; + \node [KeyBlock] (k4) {Benno}; + \node [KeyBlock] (k5) {Lukas}; + \node [KeyBlock] (k6) {Julia}; + } + + { [continue chain = going {below=of \tikzchainprevious.south west}, node distance=0pt] + \chainin (h00); + \node [HashBlock] (h01) {01}; + \node [HashBlock] (h02) {02}; + \node [HashBlock] (h03) {03}; + \node [HashBlock] (h04) {04}; + \node [HashBlock] (h05) {05}; + \node [HashBlock] (h06) {06}; + \node [HashBlock] (h07) {07}; + \node [HashBlock] (h08) {08}; + \node [HashBlock] (h09) {09}; + \node [HashBlock] (h10) {10}; + \node [HashBlock] (hdots) {$\ldots$}; + \node [HashBlock] (h15) {15}; + } + + \draw[->] (k0.east) -- ++(2, 0) -- ($(h05.west)-(2,0)$) -- (h05.west); + \draw[->] (k1.east) -- ++(2, 0) -- ($(h09.west)-(2,0)$) -- (h09.west); + \draw[->] (k2.east) -- ++(2, 0) -- ($(h00.west)-(2,0)$) -- (h00.west); + \draw[->] (k3.east) -- ++(2, 0) -- ($(h15.west)-(2,0)$) -- (h15.west); + \draw[->] (k4.east) -- ++(2, 0) -- ($(h02.west)-(2,0)$) -- (h02.west); + \draw[->] (k5.east) -- ++(2, 0) -- ($(h10.west)-(2,0)$) -- (h10.west); + \draw[->] (k6.east) -- ++(2, 0) -- ($(h03.west)-(2,0)$) -- (h03.west); + } + \end{tikzpicture} + \end{center} +\end{defi} + +\begin{example}{Divisions-Hash} + Die \emph{Divisionsrest-Methode (Divisions-Hash)} um Integer zu hashen wird definiert durch: + $$ + h(x) = x \operatorname{mod} N + $$ + + Sie wird bevorzugt, wenn die Schlüsselverteilung nicht bekannt ist. + Etwaige Regelmäßigkeiten in der Schlüsselverteilung sollte sich nicht in der Adressverteilung auswirken. Daher sollte $N$ eine Primzahl sein. +\end{example} + +\begin{example}{Hashfunktionen für verschiedene Datentypen} + \begin{itemize} + \item Alle Datenypen: Verwenden der Speicheradresse + \item Strings: ASCII/Unicode-Werte addieren (evtl. von einigen Buchstaben, evtl. gewichtet) + \end{itemize} +\end{example} + +\begin{defi}{Kollision} + Sei $S$ eine Schlüsselmenge und $h$ eine Hashfunktion. + Ist + $$ + s_1, s_2 \in S, \ s_1 \neq s_2 : h(s_1) = h(s_2) + $$ + so spricht man von einer \emph{Kollision}. + + Die Wahrscheinlichkeit von Kollisionen ist abhängig von der gewählten Hashfunktion. + Hashfunktionen sollten also möglichst gut \emph{streuen}, aber dennoch effizient berechenbar sein. + + \begin{center} + \begin{tikzpicture}[ + % -{Stealth[length = 2.5pt]}, + start chain = going {right=of \tikzchainprevious.north east}, + KeyBlock/.style={minimum width=4em, minimum height=2em, outer sep=0pt, on chain}, + HashBlock/.style={minimum width=2em, minimum height=2em, outer sep=0pt, on chain}, + FunctionBlock/.style={minimum width=10em, minimum height=26em, outer sep=0pt, on chain,fill=blue!20}, + every node/.style={draw, label distance=0.5em}, + every on chain/.style={anchor=north west}, + node distance=4em + ] + { + \node [KeyBlock, label=above:Schlüssel, very thick] (k0) {Jürgen}; + \node [FunctionBlock, label=above:Hashfunktion] (fun) {}; + \node [HashBlock, label=above:Hashwerte] (h00) {00}; + + { [continue chain = going {below=of \tikzchainprevious.south west}, node distance=2em] + \chainin (k0); + \node [KeyBlock] (k1) {Felix}; + \node [KeyBlock] (k2) {Finn}; + \node [KeyBlock] (k3) {Tim}; + \node [KeyBlock] (k4) {Benno}; + \node [KeyBlock] (k5) {Lukas}; + \node [KeyBlock, very thick] (k6) {Julia}; + } + + { [continue chain = going {below=of \tikzchainprevious.south west}, node distance=0pt] + \chainin (h00); + \node [HashBlock] (h01) {01}; + \node [HashBlock] (h02) {02}; + \node [HashBlock] (h03) {03}; + \node [HashBlock] (h04) {04}; + \node [HashBlock, very thick] (h05) {05}; + \node [HashBlock] (h06) {06}; + \node [HashBlock] (h07) {07}; + \node [HashBlock] (h08) {08}; + \node [HashBlock] (h09) {09}; + \node [HashBlock] (h10) {10}; + \node [HashBlock] (hdots) {$\ldots$}; + \node [HashBlock] (h15) {15}; + } + + \draw[->, very thick, color=red] (k0.east) -- ++(2, 0) -- ($(h05.west)-(2,0)$) -- (h05.west); + \draw[->] (k1.east) -- ++(2, 0) -- ($(h09.west)-(2,0)$) -- (h09.west); + \draw[->] (k2.east) -- ++(2, 0) -- ($(h00.west)-(2,0)$) -- (h00.west); + \draw[->] (k3.east) -- ++(2, 0) -- ($(h15.west)-(2,0)$) -- (h15.west); + \draw[->] (k4.east) -- ++(2, 0) -- ($(h02.west)-(2,0)$) -- (h02.west); + \draw[->] (k5.east) -- ++(2, 0) -- ($(h10.west)-(2,0)$) -- (h10.west); + \draw[->, very thick, color=red] (k6.east) -- ++(2, 0) -- ($(h05.west)-(2,0)$) -- (h05.west); + } + \end{tikzpicture} + \end{center} + +\end{defi} + +\begin{defi}{Kollisionsbehandlung} + Um Kollisionen zu handhaben, existieren verschiedene Strategien: + \begin{itemize} + \item \emph{Hashing mit Verkettung} + \begin{itemize} + \item Hashtabelle besteht aus $N$ linearen Listen + \item $h(s)$ gibt dann an, in welche Teilliste der Datensatz gehört + \item Daten werden innerhalb der Teillisten sequentiell gespeichert + \end{itemize} + \item \emph{Hashing mit offener Adressierung} + \begin{itemize} + \item Suchen einer alternativen Position innerhalb des Feldes + \begin{enumerate} + \item Lineares Sondieren (Verschiebung um konstantes Intervall) + \item Doppeltes Hashing (Nutzen einer weiteren Hashfunktion) + \item Quadratisches Sondieren (Intervall wird quadriert) + \end{enumerate} + \end{itemize} + \end{itemize} +\end{defi} + +\begin{defi}{Schrittzahl} + Die \emph{Schrittzahl} $S(s)$, die nötig ist, um den Datensatz mit Schlüssel $s$ zu speichern bzw. wiederzufinden, setzt sich z.B. beim Hashing mit Verkettung zusammen aus: + \begin{itemize} + \item der Berechnung der Hash-Funktion und + \item dem Aufwand für die Suche bzw. Speicherung innerhalb der Teilliste. + \end{itemize} +\end{defi} + +\begin{defi}{Füllgrad} + Der \emph{Füllgrad} einer Hashtabelle ist der Quotient + $$ + \alpha = \frac{n}{N} + $$ + mit + \begin{itemize} + \item $N$ als Größe der Hashtabelle + \item $n$ als Anzahl der gespeicherten Datensätze + \end{itemize} +\end{defi} + +\begin{example}{Schrittzahl beim Suchen in Teillisten} + Bei idealer Speicherung entfallen $\alpha$ Elemente auf jede Teilliste. + Dabei gilt: + \begin{itemize} + \item erfolgreiche Suche: $c_1 + c_2 \cdot \frac{\alpha}{2}$ + \item erfolglose Suche: $c_1 + c_2 \cdot \alpha$ + \end{itemize} + Damit ist der Suchaufwand in $\bigo(\alpha) = \bigo(\frac{n}{N})$. + + Wird der Füllgrad $\alpha$ zu groß, sollte die Hashtabelle vergrößert werden. +\end{example} + +\begin{defi}{Dynamisches Hashing} + Um viele Kollisionen zu vermeiden, muss die Hashtabelle ab einem gewissen Füllgrad vergrößert werden.\footnote{nach Sedgewick sollte stets $\alpha < 0.5$ gelten} + + Als Folge muss die gesamte Hashtabelle aber auch neu aufgebaut werden. +\end{defi} + +\begin{defi}{Offene Adressierung (Sondieren)} + Beim Speichern wird bei \emph{Hashing mit offener Adressieren (Sondierung)} so lang ein neuer Hashindex berechnet, bis dort ein freier Speicherplatz vorhanden ist. + + Das Suchen funktioniert analog, allerdings ist das Löschen sehr aufwändig. + + \begin{itemize} + \item Lineares Sondieren + \begin{itemize} + \item Wird die Ersatzadresse bei jeder Kollision durch Erhöhen der alten Adresse um 1 berechnet, so spricht man von \emph{linearem Sondieren (linear probing)}. + \item Die $i$-te Ersatzadresse für einen Schlüssel $s$ mit Hashindex $h(s)$ wird also wie folgt berechnet: + $$ + h_i(s) = (h(s) + i) \operatorname{mod} N + $$ + \end{itemize} + \item Doppeltes Hashing + \begin{itemize} + \item Schlüssel wird nicht um $1$ erhöht, sondern der Inkrement wird mit einer zweiten Hashfunktion berechnet. + \item Beseitigt praktisch die Probleme der primären und sekundären Häufung. + \item Nicht alle Felder werden durchprobiert. Im ungünstigsten Fall kann eine neues Element nicht eingefügt werden, auch wenn noch Felder frei sind. + \end{itemize} + \end{itemize} +\end{defi} + +\begin{defi}{Primäre und sekundäre Häufung} + Bei der \emph{primären Häufung (primary clustering)} ist die Wahrscheinlichkeit, dass Plätze in einem dichtbelegten Bereich eher besetzt werden, deutlich höher. + Es kommt also zu Kettenbildung. + + Besonders häufig tritt primäre Häufung z.B. beim linearen Sondieren auf. + + \begin{center} + \begin{tikzpicture} + [ + % -{Stealth[length = 2.5pt]}, + start chain, + node distance = 0pt, + StackBlock/.style={draw, minimum width=2em, minimum height=2em, outer sep=0pt, on chain}, + ] + + \node [draw, minimum width=2em, minimum height=2em] (val) {$s$}; + + { start chain = going right + \node [StackBlock,right=2cm of val,fill=red!30] (0) {}; + \node [StackBlock] (1) {}; + \node [StackBlock] (2) {}; + \node [StackBlock,fill=red!30] (3) {}; + \node [StackBlock,fill=red!30] (4) {}; + \node [StackBlock,fill=red!30] (5) {}; + \node [StackBlock,fill=red!30] (6) {}; + \node [StackBlock,fill=red!30] (7) {}; + \node [StackBlock] (8) {$s$}; + \node [StackBlock] (9) {}; + + \draw[->] (val.south) [out=-30, in=-150] to (4.south); + \draw[->] (4.south) [out=-45, in=-135] to (5.south); + \draw[->] (5.south) [out=-45, in=-135] to (6.south); + \draw[->] (6.south) [out=-45, in=-135] to (7.south); + \draw[->] (7.south) [out=-45, in=-135] to (8.south); + } + \end{tikzpicture} + \end{center} + + + Die \emph{sekundäre Häufung (secondary clustering)} hängt von der Hashfunktion ab. + Dabei durchlaufen zwei Schlüssel $h(s)$ und $h(s')$ stets dieselbe Sondierungsfolge. + Sie behindern sich also auf den Ausweichplätzen. + + Besonders häufig tritt sekundäre Häufung z.B. beim quadratischen Sondieren auf. + + + \begin{center} + \begin{tikzpicture} + [ + % -{Stealth[length = 2.5pt]}, + start chain, + node distance = 0pt, + StackBlock/.style={draw, minimum width=2em, minimum height=2em, outer sep=0pt, on chain}, + ] + + \node [minimum width=2em, minimum height=2em] (val) {}; + + { start chain = going right + \node [StackBlock,right=2cm of val] (0) {}; + \node [StackBlock,fill=red!30] (1) {}; + \node [StackBlock,fill=red!30] (2) {}; + \node [StackBlock,fill=red!30] (3) {}; + \node [StackBlock] (4) {}; + \node [StackBlock,fill=red!30] (5) {}; + \node [StackBlock] (6) {}; + \node [StackBlock] (7) {}; + \node [StackBlock] (8) {$s$}; + \node [StackBlock] (9) {$s'$}; + + { [continue chain = going above] + \chainin (val); + \node [StackBlock] (val1) {$s$}; + } + + { [continue chain = going below] + \chainin (val); + \node [StackBlock] (val2) {$s'$}; + } + + \draw[->] (val1.east) [out=0, in=150] to (2.north); + \draw[->] (2.north) [out=45, in=135] to (3.north); + \draw[->] (3.north) [out=45, in=135] to (5.north); + \draw[->] (5.north) [out=45, in=135] to (8.north); + + \draw[->] (val2.east) [out=0, in=-150] to (2.south); + \draw[->] (2.south) [out=-45, in=-135] to (3.south); + \draw[->] (3.south) [out=-45, in=-135] to (5.south); + \draw[->] (5.south) [out=-45, in=-135] to (8.south); + \draw[->] (8.south) [out=-45, in=-135] to (9.south); + } + \end{tikzpicture} + \end{center} +\end{defi} diff --git a/algo/floyd.java b/algo/floyd.java index 94f55c9..65cf43e 100644 --- a/algo/floyd.java +++ b/algo/floyd.java @@ -1,9 +1,9 @@ -for(int i = 0; i < a.length; i++) { - for(int j = 0; j < a.length; j++) { - for(int k = 0; k < a.length; k++) { - if(a[j][k] > a[j][i] + a[i][k]) { - a[j][k] = a[j][i] + a[i][k]; - } - } - } +for(int i = 0; i < a.length; i++) { + for(int j = 0; j < a.length; j++) { + for(int k = 0; k < a.length; k++) { + if(a[j][k] > a[j][i] + a[i][k]) { + a[j][k] = a[j][i] + a[i][k]; + } + } + } } \ No newline at end of file diff --git a/algo/formale_sprachen.tex b/algo/formale_sprachen.tex new file mode 100644 index 0000000..d1026b1 --- /dev/null +++ b/algo/formale_sprachen.tex @@ -0,0 +1,1313 @@ +\section{Formale Sprachen} +% Textsuche +\subsection{Textsuche} + +\begin{bonus}{Textsucheverfahren} + \begin{itemize} + \item Naiver, grober, oder brute-force-Algorithmus $\in \bigo(n \cdot m)$ + \begin{itemize} + \item für kleine Texte am schnellsten + \end{itemize} + \item Knuth-Morris-Pratt, Rabin-Karp $\in \Theta(n + m)$ + \item Boyer-Moore, (Boyer-Moore)-Sunday, (Boyer-Moore)-Horsepool $\in \bigo(n + m)$ + \begin{itemize} + \item für große Texte am schnellsten + \end{itemize} + \end{itemize} +\end{bonus} + +\begin{algo}{Naive Textsuche} + Bei der \emph{naiven Textsuche} wird an allen Positionen $i$ des Textes nach dem Muster geprüft. + + Die möglichen Positionen reichen von $i=0$ (Muster linksbündig mit dem Text) bis $i = n-m$ (Muster rechtsbündig mit dem Text). + + Das Muster wird an der jeweiligen Position zeichenweise von links nach rechts mit dem Text verglichen. + + Bei einem \emph{Mismatch} oder bei vollständiger Übereinstimmung (\emph{Match}) wird das Muster um eine Position weitergeschoben und an dieser Position verglichen. +\end{algo} + +\begin{example}{Naive Textsuche} + \textbf{Aufgabe:} Finde das Muster \texttt{SINN} im Text \texttt{DASISTSINNLOSERTEXT} mithilfe naiver Textsuche. + + \centering + + \vspace{1em} + + \begin{tikzpicture}[ + start chain, + node distance = 0pt, + TextBlock/.style={draw, minimum width=2em, minimum height=2em, outer sep=0pt, on chain}, + ] + { start chain = going right + %\node [TextBlock, fill=red!50, label=$0$] (0) {}; + \node [TextBlock] (00) {D}; + \node [TextBlock] (01) {A}; + \node [TextBlock] (02) {S}; + \node [TextBlock] (03) {I}; + \node [TextBlock] (04) {S}; + \node [TextBlock] (05) {T}; + \node [TextBlock] (06) {S}; + \node [TextBlock] (07) {I}; + \node [TextBlock] (08) {N}; + \node [TextBlock] (09) {N}; + \node [TextBlock] (10) {L}; + \node [TextBlock] (11) {O}; + \node [TextBlock] (12) {S}; + \node [TextBlock] (13) {E}; + \node [TextBlock] (14) {R}; + \node [TextBlock] (15) {T}; + \node [TextBlock] (16) {E}; + \node [TextBlock] (17) {X}; + \node [TextBlock] (18) {T}; + + + { [continue chain = going right] + \chainin (00); + + \node[TextBlock, xshift=-2em, yshift=2em, index] () {\tiny 0}; + \node [TextBlock, index] () {\tiny 1}; + \node [TextBlock, index] () {\tiny 2}; + \node [TextBlock, index] () {\tiny 3}; + \node [TextBlock, index] () {\tiny 4}; + \node [TextBlock, index] () {\tiny 5}; + \node [TextBlock, index] () {\tiny 6}; + \node [TextBlock, index] () {\tiny 7}; + \node [TextBlock, index] () {\tiny 8}; + \node [TextBlock, index] () {\tiny 9}; + \node [TextBlock, index] () {\tiny 10}; + \node [TextBlock, index] () {\tiny 11}; + \node [TextBlock, index] () {\tiny 12}; + \node [TextBlock, index] () {\tiny 13}; + \node [TextBlock, index] () {\tiny 14}; + \node [TextBlock, index] () {\tiny 15}; + \node [TextBlock, index] () {\tiny 16}; + \node [TextBlock, index] () {\tiny 17}; + \node [TextBlock, index] () {\tiny 18}; + } + + { [continue chain = going right] + \chainin (00); + \node[TextBlock, xshift=-2em, yshift=-2em, fill=red!50] (1_0) {S}; + \node[TextBlock] (1_1) {I}; + \node[TextBlock] (1_2) {N}; + \node[TextBlock] (1_3) {N}; + % + \node[on chain, xshift=2em] (1_info) {\texttt{i=0; j=0} $\implies$ Mismatch!}; + } + + { [continue chain = going right] + \chainin (01); + \node[TextBlock, xshift=-2em, yshift=-4em, fill=red!50] (1_0) {S}; + \node[TextBlock] (2_1) {I}; + \node[TextBlock] (2_2) {N}; + \node[TextBlock] (2_3) {N}; + % + \node[on chain, xshift=2em] (1_info) {\texttt{i=1; j=0} $\implies$ Mismatch!}; + } + + { [continue chain = going right] + \chainin (02); + \node[TextBlock, xshift=-2em, yshift=-6em, fill=teal!50] (1_0) {S}; + \node[TextBlock, fill=teal!50] (3_1) {I}; + \node[TextBlock, fill=red!50] (3_2) {N}; + \node[TextBlock] (3_3) {N}; + % + \node[on chain, xshift=2em] (1_info) {\texttt{i=2; j=2} $\implies$ Mismatch!}; + } + + { [continue chain = going right] + \chainin (03); + \node[TextBlock, xshift=-2em, yshift=-8em, fill=red!50] (1_0) {S}; + \node[TextBlock] (4_1) {I}; + \node[TextBlock] (4_2) {N}; + \node[TextBlock] (4_3) {N}; + % + \node[on chain, xshift=2em] (1_info) {\texttt{i=3; j=0} $\implies$ Mismatch!}; + } + + { [continue chain = going right] + \chainin (04); + \node[TextBlock, xshift=-2em, yshift=-10em, fill=teal!50] (1_0) {S}; + \node[TextBlock, fill=red!50] (5_1) {I}; + \node[TextBlock] (5_2) {N}; + \node[TextBlock] (5_3) {N}; + % + \node[on chain, xshift=2em] (1_info) {\texttt{i=4; j=1} $\implies$ Mismatch!}; + } + + { [continue chain = going right] + \chainin (05); + \node[TextBlock, xshift=-2em, yshift=-12em, fill=red!50] (1_0) {S}; + \node[TextBlock] (5_1) {I}; + \node[TextBlock] (5_2) {N}; + \node[TextBlock] (5_3) {N}; + % + \node[on chain, xshift=2em] (1_info) {\texttt{i=5; j=0} $\implies$ Mismatch!}; + } + + { [continue chain = going right] + \chainin (06); + \node[TextBlock, xshift=-2em, yshift=-14em, fill=teal!50] (1_0) {S}; + \node[TextBlock, fill=teal!50] (5_1) {I}; + \node[TextBlock, fill=teal!50] (5_2) {N}; + \node[TextBlock, fill=teal!50] (5_3) {N}; + % + \node[on chain, xshift=2em] (1_info) {\textcolor{teal}{\texttt{i=6; j=4} $\implies$ Match!}}; + } + } + \end{tikzpicture} +\end{example} + +\begin{algo}{Knuth-Morris-Pratt-Algorithmus} + Der \emph{Knuth-Morris-Pratt-Algorithmus} baut auf der naiven Textsuche auf. + + Der Unterschied liegt darin, dass bei einem Mismatch das Muster nicht nur um eine Position verschoben werden kann, sondern um mehrere gleichzeitig. + Dabei gilt: + \begin{itemize} + \item \textbf{Fall 1:} Wenn die letzten überprüften Buchstaben gleich dem Anfang des Patterns sind, verschiebt man das Muster entsprechend und macht beim anschließenden Zeichen weiter. + \item \textbf{Fall 2:} Wenn die letzten überprüften Buchstaben nicht gleich dem Anfang des Musters sind, verschiebt man das Muster so, dass das erste Zeichen auf dem Mismatch zu liegen kommt. + \end{itemize} +\end{algo} + +\begin{example}{Knuth-Morris-Pratt-Algorithmus} + \textbf{Aufgabe:} Finde das Muster \texttt{UNGLEICHUNGEN} im Text \texttt{UNGLEICHUNGSTEIL...} mithilfe des Knuth-Morris-Pratt-Algorithmus. + + \vspace{1em} + + \begin{center} + \begin{tikzpicture}[ + start chain, + node distance = 0pt, + TextBlock/.style={draw, minimum width=2em, minimum height=2em, outer sep=0pt, on chain}, + ] + { start chain = going right + \node [TextBlock] (00) {U}; + \node [TextBlock] (01) {N}; + \node [TextBlock] (02) {G}; + \node [TextBlock] (03) {L}; + \node [TextBlock] (04) {E}; + \node [TextBlock] (05) {I}; + \node [TextBlock] (06) {C}; + \node [TextBlock] (07) {H}; + \node [TextBlock] (08) {U}; + \node [TextBlock] (09) {N}; + \node [TextBlock] (10) {G}; + \node [TextBlock] (11) {S}; + \node [TextBlock] (12) {T}; + \node [TextBlock] (13) {E}; + \node [TextBlock] (14) {I}; + \node [TextBlock] (15) {L}; + \node [TextBlock] (16) {$\ldots$}; + + { [continue chain = going right] + \chainin (00); + + \node[TextBlock, xshift=-2em, yshift=2em, index] () {\tiny 0}; + \node [TextBlock, index] () {\tiny 1}; + \node [TextBlock, index] () {\tiny 2}; + \node [TextBlock, index] () {\tiny 3}; + \node [TextBlock, index] () {\tiny 4}; + \node [TextBlock, index] () {\tiny 5}; + \node [TextBlock, index] () {\tiny 6}; + \node [TextBlock, index] () {\tiny 7}; + \node [TextBlock, index] () {\tiny 8}; + \node [TextBlock, index] () {\tiny 9}; + \node [TextBlock, index] () {\tiny 10}; + \node [TextBlock, index] () {\tiny 11}; + \node [TextBlock, index] () {\tiny 12}; + \node [TextBlock, index] () {\tiny 13}; + \node [TextBlock, index] () {\tiny 14}; + \node [TextBlock, index] () {\tiny 15}; + \node [TextBlock, index] () {\tiny 16}; + } + + + { [continue chain = going right] + \chainin (00); + \node[TextBlock, xshift=-2em, yshift=-2em, fill=teal!50] (1_00) {U}; + \node [TextBlock, fill=teal!50] (1_01) {N}; + \node [TextBlock, fill=teal!50] (1_02) {G}; + \node [TextBlock, fill=teal!50] (1_03) {L}; + \node [TextBlock, fill=teal!50] (1_04) {E}; + \node [TextBlock, fill=teal!50] (1_05) {I}; + \node [TextBlock, fill=teal!50] (1_06) {C}; + \node [TextBlock, fill=teal!50] (1_07) {H}; + \node [TextBlock, fill=teal!50] (1_08) {U}; + \node [TextBlock, fill=teal!50] (1_09) {N}; + \node [TextBlock, fill=teal!50] (1_10) {G}; + \node [TextBlock, fill=red!50] (1_11) {E}; + \node [TextBlock] (1_12) {N}; + % + \node[on chain, xshift=2em] (1_info) {$\implies$ Fall 1}; + } + + { [continue chain = going right] + \chainin (08); + \node[TextBlock, xshift=-2em, yshift=-4em, fill=teal!50] (2_00) {U}; + \node [TextBlock, fill=teal!50] (2_01) {N}; + \node [TextBlock, fill=teal!50] (2_02) {G}; + \node [TextBlock, fill=red!50] (2_03) {L}; + \node [TextBlock] (2_04) {E}; + \node [TextBlock] (2_05) {I}; + \node [TextBlock] (2_06) {C}; + \node [TextBlock] (2_07) {H}; + \node [TextBlock] (2_08) {$\ldots$}; + } + + { [continue chain = going below] + \chainin (2_00); + \node [on chain, minimum width=2em, minimum height=2em] (usw) {usw.}; + } + } + \node [draw, dashed, fit={(00) (01) (02) (1_00) (1_01) (1_02)}] {}; + \node [draw, dashed, fit={(08) (09) (10) (1_08) (1_09) (1_10)}] {}; + \end{tikzpicture} + \end{center} + + \textbf{Aufgabe:} Finde das Muster \texttt{UNGLEICHER} im Text \texttt{UNGLEICHUNGSTEIL...} mithilfe des Knuth-Morris-Pratt-Algorithmus. + + \vspace{1em} + + \begin{center} + \begin{tikzpicture}[ + start chain, + node distance = 0pt, + TextBlock/.style={draw, minimum width=2em, minimum height=2em, outer sep=0pt, on chain}, + ] + { start chain = going right + \node [TextBlock] (00) {U}; + \node [TextBlock] (01) {N}; + \node [TextBlock] (02) {G}; + \node [TextBlock] (03) {L}; + \node [TextBlock] (04) {E}; + \node [TextBlock] (05) {I}; + \node [TextBlock] (06) {C}; + \node [TextBlock] (07) {H}; + \node [TextBlock] (08) {U}; + \node [TextBlock] (09) {N}; + \node [TextBlock] (10) {G}; + \node [TextBlock] (11) {S}; + \node [TextBlock] (12) {T}; + \node [TextBlock] (13) {E}; + \node [TextBlock] (14) {I}; + \node [TextBlock] (15) {L}; + \node [TextBlock] (16) {$\ldots$}; + + { [continue chain = going right] + \chainin (00); + + \node[TextBlock, xshift=-2em, yshift=2em, index] () {\tiny 0}; + \node [TextBlock, index] () {\tiny 1}; + \node [TextBlock, index] () {\tiny 2}; + \node [TextBlock, index] () {\tiny 3}; + \node [TextBlock, index] () {\tiny 4}; + \node [TextBlock, index] () {\tiny 5}; + \node [TextBlock, index] () {\tiny 6}; + \node [TextBlock, index] () {\tiny 7}; + \node [TextBlock, index] () {\tiny 8}; + \node [TextBlock, index] () {\tiny 9}; + \node [TextBlock, index] () {\tiny 10}; + \node [TextBlock, index] () {\tiny 11}; + \node [TextBlock, index] () {\tiny 12}; + \node [TextBlock, index] () {\tiny 13}; + \node [TextBlock, index] () {\tiny 14}; + \node [TextBlock, index] () {\tiny 15}; + \node [TextBlock, index] () {\tiny 16}; + } + + { [continue chain = going right] + \chainin (00); + \node[TextBlock, xshift=-2em, yshift=-2em, fill=teal!50] (1_00) {U}; + \node [TextBlock, fill=teal!50] (1_01) {N}; + \node [TextBlock, fill=teal!50] (1_02) {G}; + \node [TextBlock, fill=teal!50] (1_03) {L}; + \node [TextBlock, fill=teal!50] (1_04) {E}; + \node [TextBlock, fill=teal!50] (1_05) {I}; + \node [TextBlock, fill=teal!50] (1_06) {C}; + \node [TextBlock, fill=teal!50] (1_07) {H}; + \node [TextBlock, fill=red!50] (1_08) {E}; + \node [TextBlock] (1_09) {R}; + % + \node[on chain, xshift=2em] (1_info) {$\implies$ Fall 2}; + } + + { [continue chain = going right] + \chainin (08); + \node[TextBlock, xshift=-2em, yshift=-4em, fill=teal!50] (2_00) {U}; + \node [TextBlock, fill=teal!50] (2_01) {N}; + \node [TextBlock, fill=teal!50] (2_02) {G}; + \node [TextBlock, fill=red!50] (2_03) {L}; + \node [TextBlock] (2_04) {E}; + \node [TextBlock] (2_05) {I}; + \node [TextBlock] (2_06) {C}; + \node [TextBlock] (2_07) {H}; + \node [TextBlock] (2_08) {$\ldots$}; + } + + { [continue chain = going below] + \chainin (2_00); + \node [on chain, minimum width=2em, minimum height=2em] (usw) {usw.}; + } + } + \end{tikzpicture} + \end{center} +\end{example} + +\begin{algo}{Boyer-Moore-Sunday-Algorithmus} + Beim \emph{Boyer-Moore-Sunday-Algorithmus} wird nach einem Mismatch das Zeichen betrachtet, das hinter dem Muster liegt. + + Dabei kann das Muster so weit nach vorne geschoben werden, bis ein Buchstabe des Musters mit diesem Buchstaben übereinstimmt.\footnote{Taucht der Buchstabe mehrfach im Wort auf, wird um die geringste Distanz nach vorne geschoben - also an den Buchstaben, der im Muster am weitesten hinten liegt.} + + Kommt der folgende Buchstabe im Muster nicht vor, wird das Muster über den Buchstaben hinweggeschoben, da alle Positionen vorher sowieso zwecklos sind. +\end{algo} + +\begin{example}{Boyer-Moore-Sunday-Algorithmus} + \textbf{Aufgabe:} Finde das Muster \texttt{ACBABCBA} im Text \texttt{AABBACCBACDACBABCBA} mithilfe des Boyer-Moore-Sunday-Algorithmus. + + \centering + + \vspace{1em} + + \begin{tikzpicture}[ + start chain, + node distance = 0pt, + TextBlock/.style={draw, minimum width=2em, minimum height=2em, outer sep=0pt, on chain}, + hit/.style={fill=teal!50}, + miss/.style={fill=red!50}, + next/.style={fill=blue!25}, + ] + { start chain = going right + %\node [TextBlock, fill=red!50, label=$0$] (0) {}; + \node [TextBlock] (00) {A}; + \node [TextBlock] (01) {A}; + \node [TextBlock] (02) {B}; + \node [TextBlock] (03) {B}; + \node [TextBlock] (04) {A}; + \node [TextBlock] (05) {C}; + \node [TextBlock] (06) {C}; + \node [TextBlock] (07) {B}; + \node [TextBlock] (08) {A}; + \node [TextBlock] (09) {C}; + \node [TextBlock] (10) {D}; + \node [TextBlock] (11) {A}; + \node [TextBlock] (12) {C}; + \node [TextBlock] (13) {B}; + \node [TextBlock] (14) {A}; + \node [TextBlock] (15) {B}; + \node [TextBlock] (16) {C}; + \node [TextBlock] (17) {B}; + \node [TextBlock] (18) {A}; + + { [continue chain = going right] + \chainin (00); + + \node[TextBlock, xshift=-2em, yshift=2em, index] () {\tiny 0}; + \node [TextBlock, index] () {\tiny 1}; + \node [TextBlock, index] () {\tiny 2}; + \node [TextBlock, index] () {\tiny 3}; + \node [TextBlock, index] () {\tiny 4}; + \node [TextBlock, index] () {\tiny 5}; + \node [TextBlock, index] () {\tiny 6}; + \node [TextBlock, index] () {\tiny 7}; + \node [TextBlock, index] () {\tiny 8}; + \node [TextBlock, index] () {\tiny 9}; + \node [TextBlock, index] () {\tiny 10}; + \node [TextBlock, index] () {\tiny 11}; + \node [TextBlock, index] () {\tiny 12}; + \node [TextBlock, index] () {\tiny 13}; + \node [TextBlock, index] () {\tiny 14}; + \node [TextBlock, index] () {\tiny 15}; + \node [TextBlock, index] () {\tiny 16}; + \node [TextBlock, index] () {\tiny 17}; + \node [TextBlock, index] () {\tiny 18}; + } + + { [continue chain = going right] + \chainin (00); + + \node[TextBlock, xshift=-2em, yshift=-2em, hit] (1_00) {A}; + \node [TextBlock, miss] (1_01) {C}; + \node [TextBlock] (1_02) {B}; + \node [TextBlock] (1_03) {A}; + \node [TextBlock] (1_04) {B}; + \node [TextBlock] (1_05) {C}; + \node [TextBlock] (1_06) {B}; + \node [TextBlock] (1_07) {A}; + } + + { [continue chain = going right] + \chainin (01); + + \node[TextBlock, xshift=-2em, yshift=-4em, hit] (2_00) {A}; + \node [TextBlock, miss] (2_01) {C}; + \node [TextBlock] (2_02) {B}; + \node [TextBlock] (2_03) {A}; + \node [TextBlock] (2_04) {B}; + \node [TextBlock] (2_05) {C}; + \node [TextBlock] (2_06) {B}; + \node [TextBlock, next] (2_07) {A}; + } + + { [continue chain = going right] + \chainin (04); + + \node[TextBlock, xshift=-2em, yshift=-6em, hit] (3_00) {A}; + \node [TextBlock, hit] (3_01) {C}; + \node [TextBlock, miss] (3_02) {B}; + \node [TextBlock] (3_03) {A}; + \node [TextBlock] (3_04) {B}; + \node [TextBlock, next] (3_05) {C}; + \node [TextBlock] (3_06) {B}; + \node [TextBlock] (3_07) {A}; + } + + { [continue chain = going right] + \chainin (07); + + \node[TextBlock, xshift=-2em, yshift=-8em, miss] (4_00) {A}; + \node [TextBlock] (4_01) {C}; + \node [TextBlock] (4_02) {B}; + \node [TextBlock] (4_03) {A}; + \node [TextBlock] (4_04) {B}; + \node [TextBlock, next] (4_05) {C}; + \node [TextBlock] (4_06) {B}; + \node [TextBlock] (4_07) {A}; + } + + { [continue chain = going right] + \chainin (09); + + \node[TextBlock, xshift=-2em, yshift=-10em, miss] (5_00) {A}; + \node [TextBlock] (5_01) {C}; + \node [TextBlock] (5_02) {B}; + \node [TextBlock] (5_03) {A}; + \node [TextBlock] (5_04) {B}; + \node [TextBlock] (5_05) {C}; + \node [TextBlock, next] (5_06) {B}; + \node [TextBlock] (5_07) {A}; + } + + { [continue chain = going right] + \chainin (11); + + \node[TextBlock, xshift=-2em, yshift=-12em, hit] (6_00) {A}; + \node [TextBlock, hit] (6_01) {C}; + \node [TextBlock, hit] (6_02) {B}; + \node [TextBlock, hit] (6_03) {A}; + \node [TextBlock, hit] (6_04) {B}; + \node [TextBlock, hit] (6_05) {C}; + \node [TextBlock, next] (6_06) {B}; + \node [TextBlock, hit] (6_07) {A}; + } + } + \draw[->] (08) to (2_07); + \draw[->] (09) to (3_05); + \draw[->] (12) to (4_05); + \draw[->] (15) to (5_06); + \draw[->] (17) to (6_06); + \end{tikzpicture} +\end{example} + +\begin{defi}{\texttt{last}-Tabelle} + Die \texttt{last}\emph{-Tabelle} enthält zu jedem Zeichen des Zeichensatzes die Position des letzten Vorkommens im Muster (oder $-1$, falls es nicht vorkommt). + + Die Implementierung erfolgt z.B. als Array indiziert mit (Unicode-)Zeichensatz: + \begin{itemize} + \item \texttt{A} auf Index $65$ + \item \texttt{B} auf Index $66$ + \item $\ldots$ + \item \texttt{a} auf Index $97$ + \item \texttt{b} auf Index $98$ + \item $\ldots$ + \end{itemize} + + Dabei gilt: + \begin{itemize} + \item Alte Position des Patterns: \texttt{i} (das Pattern reicht bis \texttt{i + m - 1}) + \item Verschiebedistanz: \texttt{v = m - last[text[i+m]]} + \item Neue Position des Patterns: \texttt{i + v} (das Pattern reicht bis \texttt{i + v + m - 1}) + \end{itemize} +\end{defi} + +\begin{example}{Boyer-Moore-Sunday-Algorithmus mit \texttt{last}-Tabelle} + \textbf{Aufgabe:} Finde das Muster \texttt{BANANAS} im Text \texttt{ORANGES, ANANANAS AND BANANANAS} mithilfe des Boyer-Moore-Sunday-Algorithmus und einer \texttt{last}-Tabelle. + + \centering + + \vspace{1em} + + \begin{tabular}{|l||cccc|c|} + \hline + Pattern & B & A & N & S & sonst \\ + \hline + \texttt{last}-Wert & 0 & 5 & 4 & 6 & -1 \\ + \hline + \end{tabular} + + \vspace{1em} + + \begin{tikzpicture}[ + start chain, + node distance = 0pt, + TextBlock/.style={draw, minimum width=1.5em, minimum height=1.5em, outer sep=0pt, on chain}, + hit/.style={fill=teal!50}, + miss/.style={fill=red!50}, + next/.style={fill=blue!25}, + ] + { start chain = going right + %\node [TextBlock, fill=red!50, label=$0$] (0) {}; + \node [TextBlock] (00) {O}; + \node [TextBlock] (01) {R}; + \node [TextBlock] (02) {A}; + \node [TextBlock] (03) {N}; + \node [TextBlock] (04) {G}; + \node [TextBlock] (05) {E}; + \node [TextBlock] (06) {S}; + \node [TextBlock] (07) {,}; + \node [TextBlock] (08) {}; + \node [TextBlock] (09) {A}; + \node [TextBlock] (10) {N}; + \node [TextBlock] (11) {A}; + \node [TextBlock] (12) {N}; + \node [TextBlock] (13) {A}; + \node [TextBlock] (14) {S}; + \node [TextBlock] (15) {}; + \node [TextBlock] (16) {A}; + \node [TextBlock] (17) {N}; + \node [TextBlock] (18) {D}; + \node [TextBlock] (19) {}; + \node [TextBlock] (20) {B}; + \node [TextBlock] (21) {A}; + \node [TextBlock] (22) {N}; + \node [TextBlock] (23) {A}; + \node [TextBlock] (24) {N}; + \node [TextBlock] (25) {A}; + \node [TextBlock] (26) {S}; + + { [continue chain = going right] + \chainin (00); + + \node[TextBlock, xshift=-1.5em, yshift=1.5em, index small] () {\tiny 0}; + \node [TextBlock, index small] () {\tiny 1}; + \node [TextBlock, index small] () {\tiny 2}; + \node [TextBlock, index small] () {\tiny 3}; + \node [TextBlock, index small] () {\tiny 4}; + \node [TextBlock, index small] () {\tiny 5}; + \node [TextBlock, index small] () {\tiny 6}; + \node [TextBlock, index small] () {\tiny 7}; + \node [TextBlock, index small] () {\tiny 8}; + \node [TextBlock, index small] () {\tiny 9}; + \node [TextBlock, index small] () {\tiny 10}; + \node [TextBlock, index small] () {\tiny 11}; + \node [TextBlock, index small] () {\tiny 12}; + \node [TextBlock, index small] () {\tiny 13}; + \node [TextBlock, index small] () {\tiny 14}; + \node [TextBlock, index small] () {\tiny 15}; + \node [TextBlock, index small] () {\tiny 16}; + \node [TextBlock, index small] () {\tiny 17}; + \node [TextBlock, index small] () {\tiny 18}; + \node [TextBlock, index small] () {\tiny 19}; + \node [TextBlock, index small] () {\tiny 20}; + \node [TextBlock, index small] () {\tiny 21}; + \node [TextBlock, index small] () {\tiny 22}; + \node [TextBlock, index small] () {\tiny 23}; + \node [TextBlock, index small] () {\tiny 24}; + \node [TextBlock, index small] () {\tiny 25}; + \node [TextBlock, index small] () {\tiny 26}; + } + + { [continue chain = going right] + \chainin (00); + + \node[TextBlock, xshift=-1.5em, yshift=-1.5em, miss] (1_00) {B}; + \node [TextBlock] (1_01) {A}; + \node [TextBlock] (1_02) {N}; + \node [TextBlock] (1_03) {A}; + \node [TextBlock] (1_04) {N}; + \node [TextBlock] (1_05) {A}; + \node [TextBlock] (1_06) {S}; + } + + { [continue chain = going right] + \chainin (08); + + \node [TextBlock, xshift=-3em, yshift=-3em, dashed, blue] (2_left) {}; + \node [TextBlock, miss] (2_00) {B}; + \node [TextBlock] (2_01) {A}; + \node [TextBlock] (2_02) {N}; + \node [TextBlock] (2_03) {A}; + \node [TextBlock] (2_04) {N}; + \node [TextBlock] (2_05) {A}; + \node [TextBlock] (2_06) {S}; + } + + { [continue chain = going right] + \chainin (16); + + \node [TextBlock, xshift=-3em, yshift=-4.5em, dashed, blue] (3_left) {}; + \node [TextBlock, miss] (3_00) {B}; + \node [TextBlock] (3_01) {A}; + \node [TextBlock] (3_02) {N}; + \node [TextBlock] (3_03) {A}; + \node [TextBlock] (3_04) {N}; + \node [TextBlock] (3_05) {A}; + \node [TextBlock] (3_06) {S}; + } + + { [continue chain = going right] + \chainin (18); + + \node [TextBlock, xshift=-1.5em, yshift=-6em, miss] (4_00) {B}; + \node [TextBlock] (4_01) {A}; + \node [TextBlock] (4_02) {N}; + \node [TextBlock] (4_03) {A}; + \node [TextBlock] (4_04) {N}; + \node [TextBlock, next] (4_05) {A}; + \node [TextBlock] (4_06) {S}; + } + + { [continue chain = going right] + \chainin (20); + + \node [TextBlock, xshift=-1.5em, yshift=-7.5em, hit] (5_00) {B}; + \node [TextBlock, hit] (5_01) {A}; + \node [TextBlock, hit] (5_02) {N}; + \node [TextBlock, hit] (5_03) {A}; + \node [TextBlock, hit] (5_04) {N}; + \node [TextBlock, next] (5_05) {A}; + \node [TextBlock, hit] (5_06) {S}; + } + } + \draw[->] (07) to node [midway, right] () {\small \color{blue} \texttt{v = 8}} (2_left); + \draw[->] (15) to node [midway, right] () {\small \color{blue} \texttt{v = 8}} (3_left); + \draw[->] (23) to node [midway, right] () {\small \color{blue} \texttt{v = 2}} (4_05); + \draw[->] (25) to node [midway, right] () {\small \color{blue} \texttt{v = 2}} (5_05); + \end{tikzpicture} +\end{example} + +\begin{algo}{Rabin-Karp-Algorithmus} + Der \emph{Rabin-Karp-Algorithmus} funktioniert sehr ähnlich zur naiver Textsuche. + Im Gegensatz wird hier aber der Hashwert des jeweiligen Textfensters mit dem Hashwert des Musters verglichen. + + Nur wenn beide Hashwerte gleich sind, werden die beiden zeichenweise verglichen. + + Sind die Hashwerte verschieden, rückt das Textfenster einen Schritt weiter nach rechts. +\end{algo} + +\begin{example}{Rabin-Karp-Algorithmus} + \textbf{Aufgabe:} Finde das Muster \texttt{ANE} im Text \texttt{BENANE} mithilfe des Rabin-Karp-Algorithmus. + + Die Hashfunktion $h(x)$ sei gegeben durch die jeweile Position des Buchstaben $x$ im Alphabet. + + \vspace{1em} + + \centering + + \begin{tabular}{|c|cccccc|c|c|c|} + \hline + \rowcolor{gray!25} \texttt{i} & \multicolumn{6}{c|}{Textfenster} & Hashwerte & Überprüfung? & Ergebnis \\ + \hline + \multirow{2}{*}{0} & \textbf{B} & \textbf{E} & \textbf{N} & A & N & E & $h(BEN) = 21$ & \multirow{2}{*}{$\lightning$} & \multirow{2}{*}{} \\ + & \textbf{A} & \textbf{N} & \textbf{E} & & & & $h(ANE) = 20$ & & \\ + \hline + \multirow{2}{*}{1} & B & \textbf{E} & \textbf{N} & \textbf{A} & N & E & $h(ENA) = 20$ & \multirow{2}{*}{$\checkmark$} & \multirow{2}{*}{Mismatch} \\ + & & \textbf{A} & \textbf{N} & \textbf{E} & & & $h(ANE) = 20$ & & \\ + \hline + \multirow{2}{*}{2} & B & E & \textbf{N} & \textbf{A} & \textbf{N} & E & $h(NAN) = 29$ & \multirow{2}{*}{$\lightning$} & \multirow{2}{*}{} \\ + & & & \textbf{A} & \textbf{N} & \textbf{E} & & $h(ANE) = 20$ & & \\ + \hline + \multirow{2}{*}{3} & B & E & N & \textbf{A} & \textbf{N} & \textbf{E} & $h(ANE) = 20$ & \multirow{2}{*}{$\checkmark$} & \multirow{2}{*}{Match} \\ + & & & & \textbf{A} & \textbf{N} & \textbf{E} & $h(ANE) = 20$ & & \\ + \hline + \end{tabular} +\end{example} + +% Reguläre Ausdrücke + +\subsection{Reguläre Ausdrücke} + +\begin{bonus}{Regulärer Ausdruck (Begriffe)} + \begin{itemize} + \item Zeichen + \begin{itemize} + \item z.B. Buchstabe, Ziffer + \end{itemize} + \item Alphabet + \begin{itemize} + \item endliche Menge von Zeichen + \item z.B. $\Sigma = \{a, b, c\}$ + \end{itemize} + \item Wort über Alphabet $\Sigma$ + \begin{itemize} + \item endliche Folge von Zeichen aus $\Sigma$ + \item z.B. $abcb$ + \item Spezialfall: leeres Wort $\varepsilon$ + \end{itemize} + \item $\Sigma^*$ + \begin{itemize} + \item Menge aller Wörter über $\Sigma^*$ + \item z.B. $\Sigma = \{a, b\} \implies \Sigma^* = \{\varepsilon, a, b, aa, ab, ba, bb, aaa, \ldots\}$ + \end{itemize} + \item Sprache $L$ über Alphabet $\Sigma$ + \begin{itemize} + \item Teilmenge $L \subseteq \Sigma^*$ + \end{itemize} + \end{itemize} +\end{bonus} + +\begin{defi}{Regulärer Ausdruck} + Ein \emph{regulärer Ausdruck} ist eine Formel, die eine Sprache beschreibt, d.h. eine Teilmenge aller möglichen Worte definiert. +\end{defi} + +\begin{defi}{Verkettung} + Bei der \emph{Verkettung} (Concatenation) werden zwei oder mehrere Buchstaben durch diese Operation aneinandergehängt, z.B. $ab$. + + Der Operator wird nicht mitgeschrieben. +\end{defi} + +\begin{defi}{Alternative} + Die \emph{Alternative} erlaubt die Angabe alternativer Zeichen im Muster. + + Schreibweise: + \begin{itemize} + \item $L((A \mid B)(A \mid B)) = \{AA, AB, BA, BB\}$ + \item $L((A \mid C)((B \mid C)D)) = \{ABD, CBD, ACD, CCD\}$ + \item $L(C(AC\mid B)D) = \{CACD, CBD\}$ + \end{itemize} +\end{defi} + +\begin{defi}{Hüllenbildung} + Die \emph{Hüllenbildung} (Closure) erlaubt es, Teile des Musters beliebig oft zu wiederholen. + + Schreibweise: Hinter den zu wiederholenden Buchstaben wird ein Stern $^*$ gesetzt. + Sind mehrere Buchstaben zu wiederholen, müssen sie in Klammern gesetzt werden. + \begin{itemize} + \item $L(A^*) = \{\varepsilon, A, AA, AAA, \ldots\}$ + \item $L((ABC)^*) = \{\varepsilon, ABC, ABCABC, ABCABCABC, \ldots\}$ + \item $L(DA^*B) = \{DB, DAB, DAAB, DAAAB, \ldots\}$ + \end{itemize} +\end{defi} + +\begin{defi}{Perl Compatible Regular Expressions} + \emph{Perl Compatible Regular Expressions} (PCRE) ist eine Bibliothek zur Auswertung und Anwendung von regulären Ausdrücken. + + Sie beinhaltet standardisierte Regeln zur Erzeugung regulärer Ausdrückt für die Textsuche. + + Wichtige Regeln in PCRE sind: + + \centering + + \begin{tabular}{|>{\ttfamily}c|l|} + \hline + \rowcolor{gray!25} \multicolumn{2}{|c|}{Verknüpfungen} \\ + \hline + AB & Zeichenfolge $AB$ \\ + A|B & $A$ oder $B$ \\ + {[}AB{]} & Zeichenklasse $A$ oder $B$ \\ + \hline + \rowcolor{gray!25} \multicolumn{2}{|c|}{Quantoren} \\ + \hline + A\{n\} & $A$ kommt genau $n$-mal vor \\ + A\{min,\} & $A$ kommt mindestent $\min$-mal vor \\ + A\{min,max\} & $A$ kommt mindestens $\min$ und höchstens $\max$-mal vor \\ + \hline + \rowcolor{gray!25} \multicolumn{2}{|c|}{Abkürzungen für Quantoren} \\ + \hline + A? & entspricht \texttt{A\{0,1\}} \\ + A* & entspricht \texttt{A\{0,\}} \\ + A+ & entspricht \texttt{A\{1,\}} \\ + A & entspricht \texttt{A\{1\}} \\ + \hline + \rowcolor{gray!25} \multicolumn{2}{|c|}{Zeichenklassen} \\ + \hline + \textbackslash w & Buchstaben (word) \\ + \textbackslash d & Zahlen (digit) \\ + . & Alles außer Zeilenvorschub \\ + \hline + \rowcolor{gray!25} \multicolumn{2}{|c|}{Referenzen} \\ + \hline + () & Gruppierung \\ + \textbackslash x \text{oder} \$x & $x$-te Rückwärtsreferenz \\ + \hline + \rowcolor{gray!25} \multicolumn{2}{|c|}{Greedy} \\ + \hline + (default) & Greedy \\ + ? & Reluctant, non-greedy \\ + \hline + \end{tabular} +\end{defi} + +\begin{defi}{Endlicher Automat} + Ein \emph{endlicher Automat} ist ein abstraktes Maschinenmodell. + + Seine Aufgabe ist zu entscheiden, ob ein Wort zu einer Sprache gehört, die durch einen regulären Ausdruck beschrieben ist (Akzeptoren). + + Am Anfang ist der Automat im \emph{Anfangszustand}. + + In jedem Schritt wird eine \emph{Eingabesymbol} $\sigma$ gelesen und abhängig von $\sigma$ geht die Maschine von einem \emph{Zustand} in einen bestimmten anderen über. + + Wenn nach Leses des letzten Zeichens ein \emph{Endzustand} erreicht ist, ist das Muster \emph{erkannt} und gehört damit zur Sprache. +\end{defi} + +\begin{defi}{Konstruktionsverfahren nach Kleene} + Das \emph{Konstruktionsverfahren nach Kleene} erzeugt aus einer gegeben regulären Sprache einen \emph{nichtdeterministischen endlichen Automaten} (NEA).\footnote{Es existiert zu jedem NEA ein DEA.} + + Die Grundlage ist das Zustands-Übergangs-Diagramm mit folgenden Elementen: + + \begin{center} + \begin{tikzpicture}[node distance=4em, auto, label distance=1em] + \node[initial,state,label=right:Anfangszustand] (start) {}; + \node[state,label=right:(Zwischen-)Zustand] (middle) [below of=start] {}; + \node[state,accepting,label=right:Endzustand] (end) [below of=middle] {}; + + \node[state, draw=none,label=right:{Zustandsübergang bei einem gegebenen Symbol}] (transition_right) [below of=end] {}; + \node[state, draw=none] (transition_left) [left of=transition_right] {}; + + \node[state, draw=none,label=right:{$\varepsilon$-Übergang}] (eps_right) [below of=transition_right] {}; + \node[state, draw=none] (eps_left) [left of=eps_right] {}; + + \path[->] + (transition_left) edge node {$a$} (transition_right) + (eps_left) edge node {$\varepsilon$} (eps_right) ; + \end{tikzpicture} + \end{center} +\end{defi} + +\begin{algo}{Konstruktion eines Automaten nach Kleene} + Einzelnes Symbol: Regulärer Ausdruck \texttt{a} + + \begin{center} + \begin{tikzpicture}[node distance=4em, auto] + \node[initial, state] (start) {}; + \node[state, accepting] (end) [right of=start] {}; + + \path[->] + (start) edge node {$a$} (end) ; + \end{tikzpicture} + \end{center} + + Verkettung: Regulärer Ausdruck \texttt{ab} + + \begin{center} + \begin{tikzpicture}[node distance=4em, auto] + \node[initial, state] (start) {}; + \node[state] (q1) [right of=start] {}; + \node[state, accepting] (end) [right of=q1] {}; + + \path[->] + (start) edge node {$a$} (q1) + (q1) edge node {$b$} (end) ; + \end{tikzpicture} + \end{center} + + Alternative: Regulärer Ausdruck \texttt{a|b} + + \begin{center} + \begin{tikzpicture}[node distance=4em, auto] + \node[initial, state] (start) {}; + \node[state] (q1) [above right of=start] {}; + \node[state] (q2) [below right of=start] {}; + \node[state] (q3) [right of=q1] {}; + \node[state] (q4) [right of=q2] {}; + \node[state, accepting] (end) [below right of=q3] {}; + + \path[->] + (start) edge node {$\varepsilon$} (q1) + (start) edge node {$\varepsilon$} (q2) + (q1) edge node {$a$} (q3) + (q2) edge node {$b$} (q4) + (q3) edge node {$\varepsilon$} (end) + (q4) edge node {$\varepsilon$} (end) ; + \end{tikzpicture} + \end{center} + + Hüllenbildung: Regulärer Ausdruck \texttt{a*} + + \begin{center} + \begin{tikzpicture}[node distance=4em, auto] + \node[initial, state] (start) {}; + \node[state] (q1) [right of=start] {}; + \node[state] (q2) [right of=q1] {}; + \node[state, accepting] (end) [right of=q2] {}; + + \path[->] + (start) edge node {$\varepsilon$} (q1) + (q1) edge node {$a$} (q2) + (q2) edge [bend right=90] node[above] {$\varepsilon$} (q1) + (q2) edge node {$\varepsilon$} (end) + (start) edge [bend right=45] node {$\varepsilon$} (end) ; + \end{tikzpicture} + \end{center} +\end{algo} + +\begin{example}{Konstruktion eines Automaten nach Kleene} + Aufbau des Automaten für den regulären Ausdruck \texttt{a|a(a|b)*a} + + 1. Schritt: \texttt{\textcolor{red}{a|b}} + + \begin{center} + \begin{tikzpicture}[node distance=4em, auto, red] + \node[state] (start) {}; + \node[state] (q1) [above right of=start] {}; + \node[state] (q2) [below right of=start] {}; + \node[state] (q3) [right of=q1] {}; + \node[state] (q4) [right of=q2] {}; + \node[state, accepting] (end) [below right of=q3] {}; + + \path[->] + (start) edge node {$\varepsilon$} (q1) + (start) edge node {$\varepsilon$} (q2) + (q1) edge node {$a$} (q3) + (q2) edge node {$b$} (q4) + (q3) edge node {$\varepsilon$} (end) + (q4) edge node {$\varepsilon$} (end) ; + \end{tikzpicture} + \end{center} + + 2. Schritt: \texttt{\textcolor{red}{(}a|b\textcolor{red}{)*}} + + \begin{center} + \begin{tikzpicture}[node distance=2em,auto] + + \node[state, new] (q3) {}; + \node[state] (q4) [right=of q3] {}; + \node[state] (q5) [above right=of q4] {}; + \node[state] (q6) [below right=of q4] {}; + \node[state] (q7) [right=of q5] {}; + \node[state] (q8) [right=of q6] {}; + \node[state] (q9) [below right=of q7] {}; + \node[state, new] (q10) [right=of q9] {}; + + \path[->] + (q3) edge [new] node [new] {$\varepsilon$} (q4) + (q4) edge node {$\varepsilon$} (q5) + (q4) edge node {$\varepsilon$} (q6) + (q5) edge node {$a$} (q7) + (q6) edge node {$b$} (q8) + (q7) edge node {$\varepsilon$} (q9) + (q8) edge node {$\varepsilon$} (q9) + (q9) edge [new] node [new] {$\varepsilon$} (q10) + + (q9) edge [new, bend left=90,min distance=6em] node [new, above] {$\varepsilon$} (q4) + (q3) edge [new, bend right=90,min distance=8em] node [new] {$\varepsilon$} (q10) + ; + \end{tikzpicture} + \end{center} + + 3. Schritt: \texttt{\textcolor{red}{a}(a|b)*\textcolor{red}{a}} + + \begin{center} + \begin{tikzpicture}[node distance=2em, auto] + \node[state, new] (q2) [below right=of start] {}; + + \node[state] (q3) [right=of q2] {}; + \node[state] (q4) [right=of q3] {}; + \node[state] (q5) [above right=of q4] {}; + \node[state] (q6) [below right=of q4] {}; + \node[state] (q7) [right=of q5] {}; + \node[state] (q8) [right=of q6] {}; + \node[state] (q9) [below right=of q7] {}; + \node[state] (q10) [right=of q9] {}; + \node[state, new] (q11) [right=of q10] {}; + + \path[->] + (q2) edge [new] node [new] {$a$} (q3) + (q3) edge node {$\varepsilon$} (q4) + (q4) edge node {$\varepsilon$} (q5) + (q4) edge node {$\varepsilon$} (q6) + (q5) edge node {$a$} (q7) + (q6) edge node {$b$} (q8) + (q7) edge node {$\varepsilon$} (q9) + (q8) edge node {$\varepsilon$} (q9) + (q9) edge node {$\varepsilon$} (q10) + (q10) edge [new] node [new] {$a$} (q11) + + (q9) edge [bend left=90,min distance=6em] node [above] {$\varepsilon$} (q4) + (q3) edge [bend right=90,min distance=8em] node {$\varepsilon$} (q10) + ; + \end{tikzpicture} + \end{center} + + 4. Schritt: \texttt{\textcolor{red}{a|}(a|b)*a} + + \begin{center} + \begin{tikzpicture}[node distance=2em, auto, every initial by arrow/.style={red}] + \node[initial, state, new] (start) {}; + \node[state, new] (q1) [above right=of start] {}; + \node[state] (q2) [below right=of start] {}; + + \node[state] (q3) [right=of q2] {}; + \node[state] (q4) [right=of q3] {}; + \node[state] (q5) [above right=of q4] {}; + \node[state] (q6) [below right=of q4] {}; + \node[state] (q7) [right=of q5] {}; + \node[state] (q8) [right=of q6] {}; + \node[state] (q9) [below right=of q7] {}; + \node[state] (q10) [right=of q9] {}; + \node[state] (q11) [right=of q10] {}; + \node[state, accepting, new] (end) [above right=of q11] {}; + \node[state, new] (q12) [above left=of end] {}; + + \path[->] + (start) edge [new] node [new] {$\varepsilon$} (q1) + (start) edge [new] node [new] {$\varepsilon$} (q2) + (q2) edge node {$a$} (q3) + (q3) edge node {$\varepsilon$} (q4) + (q4) edge node {$\varepsilon$} (q5) + (q4) edge node {$\varepsilon$} (q6) + (q5) edge node {$a$} (q7) + (q6) edge node {$b$} (q8) + (q7) edge node {$\varepsilon$} (q9) + (q8) edge node {$\varepsilon$} (q9) + (q9) edge node {$\varepsilon$} (q10) + (q10) edge node {$a$} (q11) + (q11) edge [new] node [new] {$\varepsilon$} (end) + (q12) edge [new] node [new] {$\varepsilon$} (end) + (q1) edge [new] node [new] {$a$} (q12) + + (q9) edge [bend left=90,min distance=6em] node [above] {$\varepsilon$} (q4) + (q3) edge [bend right=90,min distance=8em] node {$\varepsilon$} (q10) + ; + \end{tikzpicture} + \end{center} +\end{example} + +\begin{algo}{Ablaufregeln der Simulation nach Kleene} + \begin{enumerate} + \item Initialisierung + \begin{enumerate} + \item Markiere den Anfangszustand + \item Markiere alle Zustande, die durch $\varepsilon$-Übergänge erreichbar sind. + \end{enumerate} + \item Für jedes gelesene Eingabesymbol + \begin{enumerate} + \item Markiere alle Zustände, die durch dieses Eingabeymbol erreichbar sind. + \item Lösche alle anderen Zustände. + \item Markiere alle Zustände, die jetzt durch $\varepsilon$-Übergänge erreichbar sind. + \end{enumerate} + \end{enumerate} +\end{algo} + +\begin{example}{Ablauf der Simulation nach Kleene} + \textbf{Aufgabe:} Prüfen Sie, ob das Wort \texttt{abba} von dem Automaten der regulären Sprache \texttt{a|a(a|b)*a} akzeptiert wird. + + Anfangszustand: + + \begin{center} + \begin{tikzpicture}[node distance=2em, auto, every initial by arrow/.style={teal}] + \node[initial, state, current] (start) {}; + \node[state, marked] (q1) [above right=of start] {}; + \node[state, marked] (q2) [below right=of start] {}; + + \node[state] (q3) [right=of q2] {}; + \node[state] (q4) [right=of q3] {}; + \node[state] (q5) [above right=of q4] {}; + \node[state] (q6) [below right=of q4] {}; + \node[state] (q7) [right=of q5] {}; + \node[state] (q8) [right=of q6] {}; + \node[state] (q9) [below right=of q7] {}; + \node[state] (q10) [right=of q9] {}; + \node[state] (q11) [right=of q10] {}; + \node[state, accepting] (end) [above right=of q11] {}; + \node[state] (q12) [above left=of end] {}; + + \path[->] + (start) edge [teal] node [teal] {$\varepsilon$} (q1) + (start) edge [teal] node [teal] {$\varepsilon$} (q2) + (q2) edge node {$a$} (q3) + (q3) edge node {$\varepsilon$} (q4) + (q4) edge node {$\varepsilon$} (q5) + (q4) edge node {$\varepsilon$} (q6) + (q5) edge node {$a$} (q7) + (q6) edge node {$b$} (q8) + (q7) edge node {$\varepsilon$} (q9) + (q8) edge node {$\varepsilon$} (q9) + (q9) edge node {$\varepsilon$} (q10) + (q10) edge node {$a$} (q11) + (q11) edge node {$\varepsilon$} (end) + (q12) edge node {$\varepsilon$} (end) + (q1) edge node {$a$} (q12) + + (q9) edge [bend left=90,min distance=6em] node [above] {$\varepsilon$} (q4) + (q3) edge [bend right=90,min distance=8em] node {$\varepsilon$} (q10) + ; + \end{tikzpicture} + \end{center} + + 1. Buchstabe: \texttt{a} + + \begin{center} + \begin{tikzpicture}[node distance=2em, auto] + \node[initial, state] (start) {}; + \node[state] (q1) [above right=of start] {}; + \node[state] (q2) [below right=of start] {}; + + \node[state, current] (q3) [right=of q2] {}; + \node[state, marked] (q4) [right=of q3] {}; + \node[state, marked] (q5) [above right=of q4] {}; + \node[state, marked] (q6) [below right=of q4] {}; + \node[state] (q7) [right=of q5] {}; + \node[state] (q8) [right=of q6] {}; + \node[state] (q9) [below right=of q7] {}; + \node[state, marked] (q10) [right=of q9] {}; + \node[state] (q11) [right=of q10] {}; + \node[state, accepting, marked] (end) [above right=of q11] {}; + \node[state, current] (q12) [above left=of end] {}; + + \path[->] + (start) edge node {$\varepsilon$} (q1) + (start) edge node {$\varepsilon$} (q2) + (q2) edge [blue] node [blue] {$a$} (q3) + (q3) edge [teal] node [teal] {$\varepsilon$} (q4) + (q4) edge [teal] node [teal] {$\varepsilon$} (q5) + (q4) edge [teal] node [teal] {$\varepsilon$} (q6) + (q5) edge node {$a$} (q7) + (q6) edge node {$b$} (q8) + (q7) edge node {$\varepsilon$} (q9) + (q8) edge node {$\varepsilon$} (q9) + (q9) edge node {$\varepsilon$} (q10) + (q10) edge node {$a$} (q11) + (q11) edge node {$\varepsilon$} (end) + (q12) edge node {$\varepsilon$} (end) + (q1) edge [blue] node [blue] {$a$} (q12) + + (q9) edge [bend left=90,min distance=6em] node [above] {$\varepsilon$} (q4) + (q3) edge [teal] [bend right=90,min distance=8em] node [teal] {$\varepsilon$} (q10) + ; + \end{tikzpicture} + \end{center} +\end{example} + +\begin{example}{Ablauf der Simulation nach Kleene (Fortsetzung)} + + 2. Buchstabe: \texttt{b} + + \begin{center} + \begin{tikzpicture}[node distance=2em, auto] + \node[initial, state] (start) {}; + \node[state] (q1) [above right=of start] {}; + \node[state] (q2) [below right=of start] {}; + + \node[state] (q3) [right=of q2] {}; + \node[state, marked] (q4) [right=of q3] {}; + \node[state, marked] (q5) [above right=of q4] {}; + \node[state, marked] (q6) [below right=of q4] {}; + \node[state] (q7) [right=of q5] {}; + \node[state, current] (q8) [right=of q6] {}; + \node[state, marked] (q9) [below right=of q7] {}; + \node[state, marked] (q10) [right=of q9] {}; + \node[state] (q11) [right=of q10] {}; + \node[state, accepting] (end) [above right=of q11] {}; + \node[state] (q12) [above left=of end] {}; + + \path[->] + (start) edge node {$\varepsilon$} (q1) + (start) edge node {$\varepsilon$} (q2) + (q2) edge node {$a$} (q3) + (q3) edge node {$\varepsilon$} (q4) + (q4) edge [teal] node [teal] {$\varepsilon$} (q5) + (q4) edge [teal] node [teal] {$\varepsilon$} (q6) + (q5) edge node {$a$} (q7) + (q6) edge [blue] node [blue] {$b$} (q8) + (q7) edge node {$\varepsilon$} (q9) + (q8) edge [teal] node [teal] {$\varepsilon$} (q9) + (q9) edge [teal] node [teal] {$\varepsilon$} (q10) + (q10) edge node {$a$} (q11) + (q11) edge node {$\varepsilon$} (end) + (q12) edge node {$\varepsilon$} (end) + (q1) edge node {$a$} (q12) + + (q9) edge [teal] [bend left=90,min distance=6em] node [teal] [above] {$\varepsilon$} (q4) + (q3) edge [bend right=90,min distance=8em] node {$\varepsilon$} (q10) + ; + \end{tikzpicture} + \end{center} + + 3. Buchstabe: \texttt{b} + + \begin{center} + \begin{tikzpicture}[node distance=2em, auto] + \node[initial, state] (start) {}; + \node[state] (q1) [above right=of start] {}; + \node[state] (q2) [below right=of start] {}; + + \node[state] (q3) [right=of q2] {}; + \node[state, marked] (q4) [right=of q3] {}; + \node[state, marked] (q5) [above right=of q4] {}; + \node[state, marked] (q6) [below right=of q4] {}; + \node[state] (q7) [right=of q5] {}; + \node[state, current] (q8) [right=of q6] {}; + \node[state, marked] (q9) [below right=of q7] {}; + \node[state, marked] (q10) [right=of q9] {}; + \node[state] (q11) [right=of q10] {}; + \node[state, accepting] (end) [above right=of q11] {}; + \node[state] (q12) [above left=of end] {}; + + \path[->] + (start) edge node {$\varepsilon$} (q1) + (start) edge node {$\varepsilon$} (q2) + (q2) edge node {$a$} (q3) + (q3) edge node {$\varepsilon$} (q4) + (q4) edge [teal] node [teal] {$\varepsilon$} (q5) + (q4) edge [teal] node [teal] {$\varepsilon$} (q6) + (q5) edge node {$a$} (q7) + (q6) edge [blue] node [blue] {$b$} (q8) + (q7) edge node {$\varepsilon$} (q9) + (q8) edge [teal] node [teal] {$\varepsilon$} (q9) + (q9) edge [teal] node [teal] {$\varepsilon$} (q10) + (q10) edge node {$a$} (q11) + (q11) edge node {$\varepsilon$} (end) + (q12) edge node {$\varepsilon$} (end) + (q1) edge node {$a$} (q12) + + (q9) edge [teal] [bend left=90,min distance=6em] node [teal] [above] {$\varepsilon$} (q4) + (q3) edge [bend right=90,min distance=8em] node {$\varepsilon$} (q10) + ; + \end{tikzpicture} + \end{center} + + 4. Buchstabe: \texttt{a} + + \begin{center} + \begin{tikzpicture}[node distance=2em, auto] + \node[initial, state] (start) {}; + \node[state] (q1) [above right=of start] {}; + \node[state] (q2) [below right=of start] {}; + + \node[state] (q3) [right=of q2] {}; + \node[state, marked] (q4) [right=of q3] {}; + \node[state, marked] (q5) [above right=of q4] {}; + \node[state, marked] (q6) [below right=of q4] {}; + \node[state, current] (q7) [right=of q5] {}; + \node[state] (q8) [right=of q6] {}; + \node[state, marked] (q9) [below right=of q7] {}; + \node[state, marked] (q10) [right=of q9] {}; + \node[state, current] (q11) [right=of q10] {}; + \node[state, accepting, marked] (end) [above right=of q11] {}; + \node[state] (q12) [above left=of end] {}; + + \path[->] + (start) edge node {$\varepsilon$} (q1) + (start) edge node {$\varepsilon$} (q2) + (q2) edge node {$a$} (q3) + (q3) edge node {$\varepsilon$} (q4) + (q4) edge [teal] node [teal] {$\varepsilon$} (q5) + (q4) edge [teal] node [teal] {$\varepsilon$} (q6) + (q5) edge [blue] node [blue] {$a$} (q7) + (q6) edge node {$b$} (q8) + (q7) edge [teal] node [teal] {$\varepsilon$} (q9) + (q8) edge node {$\varepsilon$} (q9) + (q9) edge [teal] node [teal] {$\varepsilon$} (q10) + (q10) edge [blue] node [blue] {$a$} (q11) + (q11) edge [teal] node [teal] {$\varepsilon$} (end) + (q12) edge node {$\varepsilon$} (end) + (q1) edge node {$a$} (q12) + + (q9) edge [teal] [bend left=90,min distance=6em] node [teal] [above] {$\varepsilon$} (q4) + (q3) edge [bend right=90,min distance=8em] node {$\varepsilon$} (q10) + ; + \end{tikzpicture} + \end{center} + + Damit wird \texttt{abba} durch den regulären Ausdruck \texttt{a|a(a|b)*a} beschrieben. +\end{example} \ No newline at end of file diff --git a/algo/graphen.tex b/algo/graphen.tex index 5296087..5728867 100644 --- a/algo/graphen.tex +++ b/algo/graphen.tex @@ -1,1525 +1,1640 @@ -\section{Graphen} - -\begin{defi}{Gerichteter Graph} - Ein \emph{gerichteter Graph} $G = (V, E)$ besteht aus - \begin{itemize} - \item einer endlichen, nicht leeren Menge $V = \{v_1, \ldots, v_n\}$ von \emph{Knoten (vertices)} und - \item einer Relation $E \subseteq V \times V$ von geordneten Paaren $e = (u, v)$ den \emph{Kanten (edges)}. - \end{itemize} - - Jede Kante $(u,v) \in E$ hat einen Anfangsknoten $u$ und einen Enknoten $v$ und damit eine Richtung von $u$ nach $v$ ($u=v$ ist möglich). - - \begin{center} - \begin{tikzpicture}[->] - \node[draw, circle] (1) {1}; - \node[draw, circle, below=of 1] (2) {2}; - \node[draw, circle, right=of 2] (3) {3}; - \node[draw, circle, above=of 3] (4) {4}; - \node[draw, circle, right=of 4] (5) {5}; - - %\draw[->] (1) to[bend left=15] (4); - %\draw[->] (4) to[bend left=15] (1); - %\draw[->] (1) to (2); - %\draw[->] (2) to (3); - %\draw[->] (3) to (4); - %\draw[->] (4) to (5); - - \path (1) edge[bend left=15] (4); - \path (4) edge[bend left=15] (1); - \path (1) edge (2); - \path (2) edge (3); - \path (3) edge (4); - \path (4) edge (5); - \path (5) edge[loop above] (5); - \end{tikzpicture} - \end{center} -\end{defi} - -\begin{defi}{Ungerichteter Graph} - Ein \emph{ungerichteter Graph} $G = (V, E)$ besteht aus - \begin{itemize} - \item einer endlichen, nicht leeren Menge $V = \{v_1, \ldots, v_n\}$ von \emph{Knoten (vertices)} und - \item einer symmetrischen Relation $E \subseteq V \times V$ von geordneten Paaren $e = (u, v) \iff (v, u)$ den \emph{Kanten (edges)}. - \end{itemize} - - Jede Kante $(u,v) \in E$ hat einen Anfangsknoten $u$ und einen Enknoten $v$ und damit eine Richtung von $u$ nach $v$ ($u=v$ ist möglich). - - \vspace{1em} - \begin{center} - \begin{tikzpicture} - \node[draw, circle] (1) {1}; - \node[draw, circle, below=of 1] (2) {2}; - \node[draw, circle, right=of 2] (3) {3}; - \node[draw, circle, above=of 3] (4) {4}; - \node[draw, circle, right=of 4] (5) {5}; - - %\draw[->] (1) to[bend left=15] (4); - %\draw[->] (4) to[bend left=15] (1); - %\draw[->] (1) to (2); - %\draw[->] (2) to (3); - %\draw[->] (3) to (4); - %\draw[->] (4) to (5); - - \path (1) edge (4); - \path (1) edge (2); - \path (2) edge (3); - \path (3) edge (4); - \path (4) edge (5); - \end{tikzpicture} - \end{center} -\end{defi} - -\begin{defi}{Gewichteter Graph} - Ein Graph heißt \emph{gewichtet}, wenn jeder Kante ein Wert als \emph{Gewicht} zugeordnet ist (z.B. Transportkosten, Entfernung). - - \begin{center} - \begin{tikzpicture}[->] - \node[draw, circle] (1) {1}; - \node[draw, circle, below=of 1] (2) {2}; - \node[draw, circle, right=of 2] (3) {3}; - \node[draw, circle, above=of 3] (4) {4}; - \node[draw, circle, right=of 4] (5) {5}; - - %\draw[->] (1) to[bend left=15] (4); - %\draw[->] (4) to[bend left=15] (1); - %\draw[->] (1) to (2); - %\draw[->] (2) to (3); - %\draw[->] (3) to (4); - %\draw[->] (4) to (5); - - \path (1) edge[bend left=15] node[above,scale=0.7] {2} (4); - \path (4) edge[bend left=15] node[below,scale=0.7] {1} (1); - \path (1) edge node[left,scale=0.7] {2} (2); - \path (2) edge node[above,scale=0.7] {1} (3); - \path (3) edge node[right,scale=0.7] {8} (4); - \path (4) edge node[above,scale=0.7] {1} (5); - \path (5) edge[loop above] node[above,scale=0.7] {2} (5); - \end{tikzpicture} - \end{center} -\end{defi} - -\begin{defi}{Teilgraph} - $G' = (V', E')$ heißt \emph{Teilgraph} von $G=(V, E)$, wenn gilt: - $$ - V' \subseteq V \quad \text{und} \quad E' \subseteq E - $$ -\end{defi} - -\begin{defi}{Weg} - Sei $G = (V, E)$ ein Graph. - - Eine Folge von Knoten - $$ - W := (v_1, v_2, \ldots, v_n) - $$ - heißt \emph{Weg} oder \emph{Pfad} in $G$, falls gilt: - $$ - \forall 1 \leq i \leq n-1 : (v_i, v_{i+1}) \in E - $$ - (also eine Folge von zusammenhängenden Kanten) - - $\alpha(W) := v_1$ heißt \emph{Anfangsknoten} des Weges $W$. - - $\omega(W) := v_n$ heißt \emph{Endknoten} des Weges $W$. - - $\forall v_i \in V : (v_i)$ heißt \emph{trivialer Weg} und ist stets ein Weg in $G$. - - Die \emph{Länge eines Weges} ist $l(W) := n-1$, falls $n$ Knoten auf diesem Weg besucht werden. - - Ein Weg heißt \emph{einfacher Weg}, wenn kein Knoten (ausgenommen Start- und Endknoten) mehr als einmal vorkommt. - - Ein \emph{Zykel} oder \emph{Kreis} ist ein nicht-trivialer einfacher Weg mit der Bedingung $\alpha(W) = \omega(W)$. -\end{defi} - -\begin{defi}{Adjazenz} - Zwei Knoten heißen \emph{adjazent (benachbart)}, wenn sie eine Kante verbindet. -\end{defi} - -\begin{bonus}{Speicherung von Graphen} - \begin{itemize} - \item Kantenorientiert - \begin{itemize} - \item Index für Kanten - \item für jede Kante speichern: Vorgänger-, Nachfolgerknoten (Markierung, Gewicht) - \item meist statische Darstellung, z.B. Kantenliste - \end{itemize} - \item Knotenorientiert - \begin{itemize} - \item gebräuchlicher als kantenorientiert - \item in vielen Ausprägungen, z.B. Knotenliste, Adjazenzmatrix, Adjazenzliste - \item für Adjazenzmatrix gilt: - $$ - A_{ij} = \begin{cases} - 1 & \text{, falls} \ (i, j) \in E \\ - 0 & \text{, sonst} - \end{cases} - $$ - \end{itemize} - \end{itemize} -\end{bonus} - -\begin{example}{Adjazenzmatrix} - \begin{center} - \begin{tikzpicture}[->] - \node[draw, circle] (1) {1}; - \node[draw, circle, below left=of 1] (3) {3}; - \node[draw, circle, below right=of 1] (4) {4}; - \node[draw, circle, above right=of 4] (2) {2}; - \node[draw, circle, below=of 3] (5) {5}; - \node[draw, circle, below=of 4] (6) {6}; - - \path (5) edge[loop below] (5); - \path (1) edge[bend left=15] (3); - \path (3) edge[bend left=15] (1); - \path (4) edge (1); - \path (1) edge (2); - \path (3) edge (4); - \path (5) edge (3); - \path (3) edge (6); - \path (6) edge (4); - \path (6) edge (5); - \path (6) edge (2); - \end{tikzpicture} - \end{center} - - Für den Graphen $G$ oben gilt die Adjazenzmatrix: - $$ - A(G) = \vektor{ - 0 & 1 & 1 & 0 & 0 & 0 \\ - 0 & 0 & 0 & 0 & 0 & 0 \\ - 1 & 0 & 0 & 1 & 0 & 1 \\ - 1 & 0 & 0 & 0 & 0 & 0 \\ - 0 & 0 & 1 & 0 & 1 & 0 \\ - 0 & 1 & 0 & 1 & 1 & 0 - } - $$ -\end{example} - -\begin{example}{Adjazenzliste} - \begin{center} - \begin{tikzpicture}[->] - \node[draw, circle] (1) {1}; - \node[draw, circle, below left=of 1] (3) {3}; - \node[draw, circle, below right=of 1] (4) {4}; - \node[draw, circle, above right=of 4] (2) {2}; - \node[draw, circle, below=of 3] (5) {5}; - \node[draw, circle, below=of 4] (6) {6}; - - \path (5) edge[loop below] (5); - \path (1) edge[bend left=15] (3); - \path (3) edge[bend left=15] (1); - \path (4) edge (1); - \path (1) edge (2); - \path (3) edge (4); - \path (5) edge (3); - \path (3) edge (6); - \path (6) edge (4); - \path (6) edge (5); - \path (6) edge (2); - \end{tikzpicture} - \end{center} - - Für den Graphen $G$ oben gilt die Adjazenzliste: - - \vspace{1em} - - \begin{center} - \begin{tikzpicture}[ - start chain = going below, - StackBlock/.style={minimum width=2em, minimum height=2em, outer sep=0pt, on chain}, - every node/.style={draw, label distance=0.5em}, - node distance=0em - ] - { - \node [StackBlock] (k1) {$1$}; - \node [StackBlock,yshift=-0.5em] (k2) {$2$}; - \node [StackBlock,yshift=-0.5em] (k3) {$3$}; - \node [StackBlock,yshift=-0.5em] (k4) {$4$}; - \node [StackBlock,yshift=-0.5em] (k5) {$5$}; - \node [StackBlock,yshift=-0.5em] (k6) {$6$}; - - % Chain 1 - { [continue chain = going right] - \chainin (k1); - - \node [StackBlock, xshift=2em] (12) {$2$}; - \node [StackBlock] (12p) {}; - \node [StackBlock, xshift=2em] (13) {$3$}; - \node [StackBlock] (13p) {}; - } - - % Chain 3 - { [continue chain = going right] - \chainin (k3); - - \node [StackBlock, xshift=2em] (31) {$1$}; - \node [StackBlock] (31p) {}; - \node [StackBlock, xshift=2em] (34) {$4$}; - \node [StackBlock] (34p) {}; - \node [StackBlock, xshift=2em] (36) {$6$}; - \node [StackBlock] (36p) {}; - } - - % Chain 4 - { [continue chain = going right] - \chainin (k4); - - \node [StackBlock, xshift=2em] (41) {$1$}; - \node [StackBlock] (41p) {}; - } - - % Chain 5 - { [continue chain = going right] - \chainin (k5); - - \node [StackBlock, xshift=2em] (53) {$3$}; - \node [StackBlock] (53p) {}; - \node [StackBlock, xshift=2em] (55) {$5$}; - \node [StackBlock] (55p) {}; - } - - % Chain 6 - { [continue chain = going right] - \chainin (k6); - - \node [StackBlock, xshift=2em] (62) {$2$}; - \node [StackBlock] (62p) {}; - \node [StackBlock, xshift=2em] (64) {$4$}; - \node [StackBlock] (64p) {}; - \node [StackBlock, xshift=2em] (65) {$5$}; - \node [StackBlock] (65p) {}; - } - - \draw[->] (k1.east) [out=0, in=180] to (12.west); - \draw[->] (k3.east) [out=0, in=180] to (31.west); - \draw[->] (k4.east) [out=0, in=180] to (41.west); - \draw[->] (k5.east) [out=0, in=180] to (53.west); - \draw[->] (k6.east) [out=0, in=180] to (62.west); - - \draw[->] (12p.center) [out=0, in=180] to (13.west); - - \draw[->] (31p.center) [out=0, in=180] to (34.west); - \draw[->] (34p.center) [out=0, in=180] to (36.west); - - \draw[->] (53p.center) [out=0, in=180] to (55.west); - - \draw[->] (62p.center) [out=0, in=180] to (64.west); - \draw[->] (64p.center) [out=0, in=180] to (65.west); - } - \end{tikzpicture} - \end{center} -\end{example} - -\subsection{Suche} - -\begin{algo}{Breitensuche} - \begin{enumerate} - \item Zunächst werden alle Knoten als \glqq noch nicht besucht\grqq markiert. - \item Startpunkt $v$ wählen und als \glqq besucht\grqq markieren. - \item Jetzt: - \begin{enumerate} - \item alle von $v$ aus direkt erreichbaren (nicht besuchten) Knoten \glqq besuchen\grqq - \item alle von $v$ über zwei Kanten erreichbaren (nicht besuchten) Knoten \glqq besuchen\grqq - \item $\ldots$ - \end{enumerate} - \item Wenn noch nicht alle Knoten besucht worden sind, wähle einen neuen unbesuchten Startpunkt $v$ und beginne bei Schritt 3 - \end{enumerate} - - Start bei Knoten 1. - - \begin{center} - \begin{tikzpicture}[->] - \node[draw, circle, current] (1) {1}; - \node[draw, circle, below left=of 1] (3) {3}; - \node[draw, circle, below right=of 1] (4) {4}; - \node[draw, circle, above right=of 4] (2) {2}; - \node[draw, circle, below=of 3] (5) {5}; - \node[draw, circle, below=of 4] (6) {6}; - - \path (5) edge[loop below] (5); - \path (1) edge[bend left=15] (3); - \path (3) edge[bend left=15] (1); - \path (4) edge (1); - \path (1) edge (2); - \path (3) edge (4); - \path (5) edge (3); - \path (3) edge (6); - \path (6) edge (4); - \path (6) edge (5); - \path (6) edge (2); - \end{tikzpicture} - % - \hspace{5em} - % - \begin{tikzpicture}[->] - \node[draw, circle, visited] (1) {1}; - \node[draw, circle, below left=of 1, current] (3) {3}; - \node[draw, circle, below right=of 1] (4) {4}; - \node[draw, circle, above right=of 4, current] (2) {2}; - \node[draw, circle, below=of 3] (5) {5}; - \node[draw, circle, below=of 4] (6) {6}; - - \path (5) edge[loop below] (5); - \path (1) edge[bend left=15] (3); - \path (3) edge[bend left=15] (1); - \path (4) edge (1); - \path (1) edge (2); - \path (3) edge (4); - \path (5) edge (3); - \path (3) edge (6); - \path (6) edge (4); - \path (6) edge (5); - \path (6) edge (2); - \end{tikzpicture} - % - %\hspace{5em} - % - \begin{tikzpicture}[->] - \node[draw, circle, visited] (1) {1}; - \node[draw, circle, below left=of 1, visited] (3) {3}; - \node[draw, circle, below right=of 1, current] (4) {4}; - \node[draw, circle, above right=of 4, visited] (2) {2}; - \node[draw, circle, below=of 3] (5) {5}; - \node[draw, circle, below=of 4, current] (6) {6}; - - \path (5) edge[loop below] (5); - \path (1) edge[bend left=15] (3); - \path (3) edge[bend left=15] (1); - \path (4) edge (1); - \path (1) edge (2); - \path (3) edge (4); - \path (5) edge (3); - \path (3) edge (6); - \path (6) edge (4); - \path (6) edge (5); - \path (6) edge (2); - \end{tikzpicture} - % - \hspace{5em} - % - \begin{tikzpicture}[->] - \node[draw, circle, visited] (1) {1}; - \node[draw, circle, below left=of 1, visited] (3) {3}; - \node[draw, circle, below right=of 1, visited] (4) {4}; - \node[draw, circle, above right=of 4, visited] (2) {2}; - \node[draw, circle, below=of 3, current] (5) {5}; - \node[draw, circle, below=of 4, visited] (6) {6}; - - \path (5) edge[loop below] (5); - \path (1) edge[bend left=15] (3); - \path (3) edge[bend left=15] (1); - \path (4) edge (1); - \path (1) edge (2); - \path (3) edge (4); - \path (5) edge (3); - \path (3) edge (6); - \path (6) edge (4); - \path (6) edge (5); - \path (6) edge (2); - \end{tikzpicture} - % - %\hspace{5em} - % - \begin{tikzpicture}[->] - \node[draw, circle, visited] (1) {1}; - \node[draw, circle, below left=of 1, visited] (3) {3}; - \node[draw, circle, below right=of 1, visited] (4) {4}; - \node[draw, circle, above right=of 4, visited] (2) {2}; - \node[draw, circle, below=of 3, visited] (5) {5}; - \node[draw, circle, below=of 4, visited] (6) {6}; - - \path (5) edge[loop below] (5); - \path (1) edge[bend left=15] (3); - \path (3) edge[bend left=15] (1); - \path (4) edge (1); - \path (1) edge (2); - \path (3) edge (4); - \path (5) edge (3); - \path (3) edge (6); - \path (6) edge (4); - \path (6) edge (5); - \path (6) edge (2); - \end{tikzpicture} - \end{center} -\end{algo} - -\begin{algo}{Tiefensuche} - \begin{enumerate} - \item Zunächst alle Knoten als \glqq noch nicht besucht\grqq markieren. - \item Startpunkt $v$ wählen und als \glqq besucht\grqq markieren. - \item Von dort aus möglichst langen Pfad entlang gehen; dabei nur bisher nicht besuchte Knoten \glqq besuchen\grqq - \item Wenn dann noch nicht alle Knoten besucht worden sind, wähle einen neuen unbesuchten Startpunkt $v$ und beginne bei Schritt 3 - \end{enumerate} - - Start bei Knoten 1. - - \begin{center} - \begin{tikzpicture}[->] - \node[draw, circle, current] (1) {1}; - \node[draw, circle, below left=of 1] (3) {3}; - \node[draw, circle, below right=of 1] (4) {4}; - \node[draw, circle, above right=of 4] (2) {2}; - \node[draw, circle, below=of 3] (5) {5}; - \node[draw, circle, below=of 4] (6) {6}; - - \path (5) edge[loop below] (5); - \path (1) edge[bend left=15] (3); - \path (3) edge[bend left=15] (1); - \path (4) edge (1); - \path (1) edge (2); - \path (3) edge (4); - \path (5) edge (3); - \path (3) edge (6); - \path (6) edge (4); - \path (6) edge (5); - \path (6) edge (2); - \end{tikzpicture} - % - \hspace{5em} - % - \begin{tikzpicture}[->] - \node[draw, circle, visited] (1) {1}; - \node[draw, circle, below left=of 1] (3) {3}; - \node[draw, circle, below right=of 1] (4) {4}; - \node[draw, circle, above right=of 4, current] (2) {2}; - \node[draw, circle, below=of 3] (5) {5}; - \node[draw, circle, below=of 4] (6) {6}; - - \path (5) edge[loop below] (5); - \path (1) edge[bend left=15] (3); - \path (3) edge[bend left=15] (1); - \path (4) edge (1); - \path (1) edge (2); - \path (3) edge (4); - \path (5) edge (3); - \path (3) edge (6); - \path (6) edge (4); - \path (6) edge (5); - \path (6) edge (2); - \end{tikzpicture} - % - %\hspace{5em} - % - \begin{tikzpicture}[->] - \node[draw, circle, visited] (1) {1}; - \node[draw, circle, below left=of 1, current] (3) {3}; - \node[draw, circle, below right=of 1] (4) {4}; - \node[draw, circle, above right=of 4, visited] (2) {2}; - \node[draw, circle, below=of 3] (5) {5}; - \node[draw, circle, below=of 4] (6) {6}; - - \path (5) edge[loop below] (5); - \path (1) edge[bend left=15] (3); - \path (3) edge[bend left=15] (1); - \path (4) edge (1); - \path (1) edge (2); - \path (3) edge (4); - \path (5) edge (3); - \path (3) edge (6); - \path (6) edge (4); - \path (6) edge (5); - \path (6) edge (2); - \end{tikzpicture} - % - \hspace{5em} - % - \begin{tikzpicture}[->] - \node[draw, circle, visited] (1) {1}; - \node[draw, circle, below left=of 1, visited] (3) {3}; - \node[draw, circle, below right=of 1, current] (4) {4}; - \node[draw, circle, above right=of 4, visited] (2) {2}; - \node[draw, circle, below=of 3] (5) {5}; - \node[draw, circle, below=of 4] (6) {6}; - - \path (5) edge[loop below] (5); - \path (1) edge[bend left=15] (3); - \path (3) edge[bend left=15] (1); - \path (4) edge (1); - \path (1) edge (2); - \path (3) edge (4); - \path (5) edge (3); - \path (3) edge (6); - \path (6) edge (4); - \path (6) edge (5); - \path (6) edge (2); - \end{tikzpicture} - % - %\hspace{5em} - % - \begin{tikzpicture}[->] - \node[draw, circle, visited] (1) {1}; - \node[draw, circle, below left=of 1, visited] (3) {3}; - \node[draw, circle, below right=of 1, visited] (4) {4}; - \node[draw, circle, above right=of 4, visited] (2) {2}; - \node[draw, circle, below=of 3] (5) {5}; - \node[draw, circle, below=of 4, current] (6) {6}; - - \path (5) edge[loop below] (5); - \path (1) edge[bend left=15] (3); - \path (3) edge[bend left=15] (1); - \path (4) edge (1); - \path (1) edge (2); - \path (3) edge (4); - \path (5) edge (3); - \path (3) edge (6); - \path (6) edge (4); - \path (6) edge (5); - \path (6) edge (2); - \end{tikzpicture} - % - \hspace{5em} - % - \begin{tikzpicture}[->] - \node[draw, circle, visited] (1) {1}; - \node[draw, circle, below left=of 1, visited] (3) {3}; - \node[draw, circle, below right=of 1, visited] (4) {4}; - \node[draw, circle, above right=of 4, visited] (2) {2}; - \node[draw, circle, below=of 3, current] (5) {5}; - \node[draw, circle, below=of 4, visited] (6) {6}; - - \path (5) edge[loop below] (5); - \path (1) edge[bend left=15] (3); - \path (3) edge[bend left=15] (1); - \path (4) edge (1); - \path (1) edge (2); - \path (3) edge (4); - \path (5) edge (3); - \path (3) edge (6); - \path (6) edge (4); - \path (6) edge (5); - \path (6) edge (2); - \end{tikzpicture} - % - %\hspace{5em} - % - \begin{tikzpicture}[->] - \node[draw, circle, visited] (1) {1}; - \node[draw, circle, below left=of 1, visited] (3) {3}; - \node[draw, circle, below right=of 1, visited] (4) {4}; - \node[draw, circle, above right=of 4, visited] (2) {2}; - \node[draw, circle, below=of 3, visited] (5) {5}; - \node[draw, circle, below=of 4, visited] (6) {6}; - - \path (5) edge[loop below] (5); - \path (1) edge[bend left=15] (3); - \path (3) edge[bend left=15] (1); - \path (4) edge (1); - \path (1) edge (2); - \path (3) edge (4); - \path (5) edge (3); - \path (3) edge (6); - \path (6) edge (4); - \path (6) edge (5); - \path (6) edge (2); - \end{tikzpicture} - \end{center} -\end{algo} - -\begin{defi}{Level-Order-Baumdurchlauf} - Führt man eine Breitensuche bei Bäumen aus, stellt man fest: - \begin{itemize} - \item Es ist nicht nötig, die Knoten zu markieren. - \item Der Baum wird Ebene für Ebene durchlaufen, - \end{itemize} - - Diesen Durchlauf nennt man \emph{Level-Order-Durchlauf}. -\end{defi} - -\begin{defi}{Pre-Order-Baumdurchlauf} - Führt man eine Tiefensuche bei Bäumen aus, nennt man diesen Durchlauf \emph{Pre-Order-Durchlauf}. - - Dabei wird stets der linke Teilbaum zuerst durchlaufen. -\end{defi} - -\begin{defi}{Post-Order-Baumdurchlauf} - \begin{enumerate} - \item Durchlaufe linken Teilbaum - \item Durchlaufe rechten Teilbaum - \item Betrachte die Wurzel - \end{enumerate} -\end{defi} - -\begin{defi}{In-Order-Baumdurchlauf} - \begin{enumerate} - \item Durchlaufe linken Teilbaum - \item Betrachte die Wurzel - \item Durchlaufe rechten Teilbaum - \end{enumerate} -\end{defi} - -\begin{example}{Baumdurchläufe} - \begin{center} - \begin{forest} - baseline,anchor=north, - for tree={circle, draw, - minimum size=2em, % <-- added - inner sep=1pt} - [ - 45 - [ - 36 - [ - 25 - [ - 2 - ] - [ - 3 - ] - ] - [ - 26 - [ - 19 - ] - ] - ] - [ - 17 - [ - 7 - ] - [ - 1 - ] - ] - ] - \end{forest} - \end{center} - - Für den gegebenen Baum gelten folgende Baumdurchläufe: - - \centering - \begin{tabular}{|l|cccccccccc|} - \hline - Pre-Order & 45 & 36 & 25 & 2 & 3 & 26 & 19 & 17 & 7 & 1 \\ - \hline - In-Order & 2 & 25 & 3 & 19 & 26 & 36 & 45 & 7 & 17 & 1 \\ - \hline - Post-Order & 2 & 3 & 25 & 19 & 26 & 36 & 7 & 1 & 17 & 45 \\ - \hline - Level-Order & 45 & 36 & 17 & 25 & 26 & 7 & 1 & 2 & 3 & 19 \\ - \hline - \end{tabular} -\end{example} - - -\subsection{Entwurfsprinzipien} - -\begin{defi}{Traveling-Salesman-Problem} - Das \emph{Traveling-Salesman-Problem} ist ein Optimierungsproblem. - Die Aufgabe besteht darin, eine Reihenfolge für den Besuch mehrerer Orte so zu wählen, dass: - \begin{itemize} - \item kein Ort doppelt besucht wird und - \item die Reisestrecke minimal ist. - \end{itemize} -\end{defi} - -\begin{defi}{Greedy} - Wähle immer den Schritt, desse unmittelbarer Folgezustand das beste Ergebnis liefert. - Denke nicht an die weiteren Schritte (greedy = gierig). - - Ob ein Greedy-Algorithmus die optimale Lösung liefert oder nicht, ist vom konkreten Problem abhängig. - - Für das Traveling-Salesman-Problem ist eine Greedy-Lösung z.B. die \emph{Nearest-Neighbour-Lösung}: - \begin{itemize} - \item Gehe in jedem Schritt zur nächstliegenden Stadt, die noch nicht besucht ist. - \item $\bigo(n^2)$ - \item liefert nicht die optimale Lösung (kann sogar beliebig schlecht werden) - \item arbeitet meistens einigermaßen gut - \end{itemize} -\end{defi} - -\begin{bonus}{Random Insertion} - Wähle immer einen zufälligen Knoten. - - \begin{itemize} - \item $\bigo(n^2)$ - \item keine Garantie, dass die Lösung irgendeinem Gütekriterium genügt - \item im Allgmeinen ist Lösung ziemlich gut - \item Vorteil: Durch den Zufallsfaktor kann man das Verfahren beliebig oft wiederholen und sich die beste Lösung heraussuchen. - \end{itemize} -\end{bonus} - -\begin{bonus}{Lösung mit minimalem Spannbaum} - \begin{enumerate} - \item Konstruktion eines minimalen Spannbaums nach Prim - \item Durchlaufen mit Tiefensuche - \item jede Kante wird zweimal durchlaufen - \item summierte Gewichte des minimalen Spannbaums müssen kleiner sein als das optimale TSP-Ergebnis - \item Optimierung: - \begin{itemize} - \item Knoten schon einmal besucht: beim nächsten Mal überspringen - \item bei einem Schritt mehrere Möglichkeiten: zuerst kürzeren Weg wählen (greedy) - \end{itemize} - \end{enumerate} -\end{bonus} - -\begin{defi}{Backtracking} - Durchlauf eines Lösungsbaum in Pre-Order-Reihenfolge. - - Situation: Mehrere Alternativen sind in bestimmten Schritten des Algorithmus möglich. - - Lösung mit \emph{Backtracking}: - \begin{enumerate} - \item Wähle eine Alternative und verfolge dieses Weg weiter. - \item Falls man so eine Lösung des Problems findet, ist man fertig. - \item Ansonsten gehe einen Schritt zurück und verfolge rekursiv eine andere (nicht versuchte) Alternative in diesem Schritt. - \item Falls alle Alternativen erfolglos probiert wurden, einen Schritt zurückgehen $\ldots$ - \end{enumerate} - - Backtracking-Algorithmen können exponentiellen Aufwand haben. - - Tipps: - \begin{itemize} - \item Durch Einführung von Zusatzbedingungen möglichst viele Sackgassen ausschließen. - \item Symmetriebedingungen ausnutzen. - \end{itemize} -\end{defi} - -\begin{defi}{Branch and Bound} - \begin{enumerate} - \item Ermitteln einer oberen Schranke (greedy) - \item Falls dieser Wert überschritten wird, kann man die Suche auf diesem Pfad abbrechen. - \item Bessere Lösungen nutzen, um die Schranke zu verbessern. - \end{enumerate} -\end{defi} - - -\subsection{Graphalgorithmen} - -\begin{defi}{Bipartiter Graph} - Ein Graph $G=(V, E)$ heißt \emph{bipartit}, wenn man $V$ in disjunkte Mengen $U$ und $W$ zerlegen kann, so dass alle Kanten zwischen $U$ und $W$ verlaufen. - - Die Knoten eines bipartiten Graphen lassen sich mit zwei Farben so einfärben, dass zwei Nachbarknoten immer unterschiedlich eingefärbt sind. -\end{defi} - -\begin{algo}{Prüfung ob ein Graph bipartit ist} - \begin{enumerate} - \item Einfärben des 1. Knotens - \item Durchlauf mit Breitensuche - \item Abwechselndes Färben - \end{enumerate} - - Start bei Knoten 1. - - \vspace{1em} - - \begin{center} - \begin{tikzpicture} - \node[draw, circle, text=white, fill = blue!50] (1) {1}; - \node[draw, circle, right=of 1] (2) {2}; - \node[draw, circle, right=of 2] (3) {3}; - \node[draw, circle, below=of 1] (4) {4}; - \node[draw, circle, right=of 4] (5) {5}; - \node[draw, circle, below=of 4] (6) {6}; - \node[draw, circle, right=of 6] (7) {7}; - - \path (1) edge (2); - \path (2) edge (3); - \path (1) edge (4); - \path (4) edge (5); - \path (2) edge (5); - \path (4) edge (6); - \path (6) edge (7); - \path (3) edge[bend left=30] (7); - \end{tikzpicture} - % - \hspace{5em} - % - \begin{tikzpicture} - \node[draw, circle, text=white, fill = blue!50] (1) {1}; - \node[draw, circle, text=white, right=of 1, fill = red!50] (2) {2}; - \node[draw, circle, right=of 2] (3) {3}; - \node[draw, circle, text=white, below=of 1, fill = red!50] (4) {4}; - \node[draw, circle, right=of 4] (5) {5}; - \node[draw, circle, below=of 4] (6) {6}; - \node[draw, circle, right=of 6] (7) {7}; - - \path (1) edge (2); - \path (2) edge (3); - \path (1) edge (4); - \path (4) edge (5); - \path (2) edge (5); - \path (4) edge (6); - \path (6) edge (7); - \path (3) edge[bend left=30] (7); - \end{tikzpicture} - - \vspace{1em} - - \begin{tikzpicture} - \node[draw, circle, text=white, fill = blue!50] (1) {1}; - \node[draw, circle, text=white, right=of 1, fill = red!50] (2) {2}; - \node[draw, circle, text=white, right=of 2, fill = blue!50] (3) {3}; - \node[draw, circle, text=white, below=of 1, fill = red!50] (4) {4}; - \node[draw, circle, text=white, right=of 4, fill = blue!50] (5) {5}; - \node[draw, circle, text=white, below=of 4, fill = blue!50] (6) {6}; - \node[draw, circle, right=of 6] (7) {7}; - - \path (1) edge (2); - \path (2) edge (3); - \path (1) edge (4); - \path (4) edge (5); - \path (2) edge (5); - \path (4) edge (6); - \path (6) edge (7); - \path (3) edge[bend left=30] (7); - \end{tikzpicture} - % - \hspace{5em} - % - \begin{tikzpicture} - \node[draw, circle, text=white, fill = blue!50] (1) {1}; - \node[draw, circle, text=white, right=of 1, fill = red!50] (2) {2}; - \node[draw, circle, text=white, right=of 2, fill = blue!50] (3) {3}; - \node[draw, circle, text=white, below=of 1, fill = red!50] (4) {4}; - \node[draw, circle, text=white, right=of 4, fill = blue!50] (5) {5}; - \node[draw, circle, text=white, below=of 4, fill = blue!50] (6) {6}; - \node[draw, circle, text=white, right=of 6, fill = red!50] (7) {7}; - - \path (1) edge (2); - \path (2) edge (3); - \path (1) edge (4); - \path (4) edge (5); - \path (2) edge (5); - \path (4) edge (6); - \path (6) edge (7); - \path (3) edge[bend left=30] (7); - \end{tikzpicture} - \end{center} -\end{algo} - -\begin{defi}{Spannbaum} - Ein \emph{Spannbaum} verbindet alle Knoten eines ungerichteten Graphen miteinander, hat jedoch keine Kreise. - - Der \emph{minimale Spannbaum} ist der Spannbaum, dessen Kanten das kleinste summierte Gewicht haben. -\end{defi} - -\begin{algo}{Prim-Algorithmus} - \begin{enumerate} - \item Wähle einen beliebigen Startknoten für den minimalen Spannbaum $T$ - \item Solange $T$ noch nicht alle Knoten enthält: - \begin{itemize} - \item Wähle eine Kante $e$ mit minimalem Gewicht aus, die einen noch nicht in $T$ enthaltenen Knoten $v$ mit $T$ verbindet. - \item Füge $e$ und $v$ dem Graphen $T$ hinzu. - \end{itemize} - \end{enumerate} - - Start bei Knoten $A$. - - \vspace{1em} - \begin{center} - \begin{tikzpicture} - \node[draw, circle, prim node] (A) {$A$}; - \node[draw, circle, below right=of A] (B) {$B$}; - \node[draw, circle, above right=of B] (C) {$C$}; - \node[draw, circle, below left=of B] (D) {$D$}; - \node[draw, circle, below right=of B] (E) {$E$}; - \node[draw, circle, below=of D] (F) {$F$}; - \node[draw, circle, below=of E] (G) {$G$}; - - \path (A) edge node[weight,above right] {7} (B); - \path (B) edge node[weight,above left] {8} (C); - \path (D) edge node[weight,right] {5} (A); - \path (D) edge node[weight,above left] {9} (B); - \path (E) edge node[weight,above right] {7} (B); - \path (C) edge node[weight,right] {5} (E); - \path (D) edge node[weight,above] {15} (E); - \path (D) edge node[weight,right] {6} (F); - \path (E) edge node[weight,above left] {8} (F); - \path (E) edge node[weight,right] {11} (G); - \path (F) edge node[weight,above] {9} (G); - \end{tikzpicture} - % - \hspace{3em} - % - \begin{tikzpicture} - \node[draw, circle, prim node] (A) {$A$}; - \node[draw, circle, below right=of A] (B) {$B$}; - \node[draw, circle, above right=of B] (C) {$C$}; - \node[draw, circle, below left=of B, prim node] (D) {$D$}; - \node[draw, circle, below right=of B] (E) {$E$}; - \node[draw, circle, below=of D] (F) {$F$}; - \node[draw, circle, below=of E] (G) {$G$}; - - \path (A) edge node[weight,above right] {7} (B); - \path (B) edge node[weight,above left] {8} (C); - \path (D) edge[prim edge] node[weight,right] {5} (A); - \path (D) edge node[weight,above left] {9} (B); - \path (E) edge node[weight,above right] {7} (B); - \path (C) edge node[weight,right] {5} (E); - \path (D) edge node[weight,above] {15} (E); - \path (D) edge node[weight,right] {6} (F); - \path (E) edge node[weight,above left] {8} (F); - \path (E) edge node[weight,right] {11} (G); - \path (F) edge node[weight,above] {9} (G); - \end{tikzpicture} - % - \hspace{3em} - % - \begin{tikzpicture} - \node[draw, circle, prim node] (A) {$A$}; - \node[draw, circle, below right=of A] (B) {$B$}; - \node[draw, circle, above right=of B] (C) {$C$}; - \node[draw, circle, below left=of B, prim node] (D) {$D$}; - \node[draw, circle, below right=of B] (E) {$E$}; - \node[draw, circle, below=of D, prim node] (F) {$F$}; - \node[draw, circle, below=of E] (G) {$G$}; - - \path (A) edge node[weight,above right] {7} (B); - \path (B) edge node[weight,above left] {8} (C); - \path (D) edge[prim edge] node[weight,right] {5} (A); - \path (D) edge node[weight,above left] {9} (B); - \path (E) edge node[weight,above right] {7} (B); - \path (C) edge node[weight,right] {5} (E); - \path (D) edge node[weight,above] {15} (E); - \path (D) edge[prim edge] node[weight,right] {6} (F); - \path (E) edge node[weight,above left] {8} (F); - \path (E) edge node[weight,right] {11} (G); - \path (F) edge node[weight,above] {9} (G); - \end{tikzpicture} - % - \vspace{1em} - % - - \begin{tikzpicture} - \node[draw, circle, prim node] (A) {$A$}; - \node[draw, circle, below right=of A, prim node] (B) {$B$}; - \node[draw, circle, above right=of B] (C) {$C$}; - \node[draw, circle, below left=of B, prim node] (D) {$D$}; - \node[draw, circle, below right=of B] (E) {$E$}; - \node[draw, circle, below=of D, prim node] (F) {$F$}; - \node[draw, circle, below=of E] (G) {$G$}; - - \path (A) edge[prim edge] node[weight,above right] {7} (B); - \path (B) edge node[weight,above left] {8} (C); - \path (D) edge[prim edge] node[weight,right] {5} (A); - \path (D) edge node[weight,above left] {9} (B); - \path (E) edge node[weight,above right] {7} (B); - \path (C) edge node[weight,right] {5} (E); - \path (D) edge node[weight,above] {15} (E); - \path (D) edge[prim edge] node[weight,right] {6} (F); - \path (E) edge node[weight,above left] {8} (F); - \path (E) edge node[weight,right] {11} (G); - \path (F) edge node[weight,above] {9} (G); - \end{tikzpicture} - % - \hspace{3em} - % - \begin{tikzpicture} - \node[draw, circle, prim node] (A) {$A$}; - \node[draw, circle, below right=of A, prim node] (B) {$B$}; - \node[draw, circle, above right=of B] (C) {$C$}; - \node[draw, circle, below left=of B, prim node] (D) {$D$}; - \node[draw, circle, below right=of B, prim node] (E) {$E$}; - \node[draw, circle, below=of D, prim node] (F) {$F$}; - \node[draw, circle, below=of E] (G) {$G$}; - - \path (A) edge[prim edge] node[weight,above right] {7} (B); - \path (B) edge node[weight,above left] {8} (C); - \path (D) edge[prim edge] node[weight,right] {5} (A); - \path (D) edge node[weight,above left] {9} (B); - \path (E) edge[prim edge] node[weight,above right] {7} (B); - \path (C) edge node[weight,right] {5} (E); - \path (D) edge node[weight,above] {15} (E); - \path (D) edge[prim edge] node[weight,right] {6} (F); - \path (E) edge node[weight,above left] {8} (F); - \path (E) edge node[weight,right] {11} (G); - \path (F) edge node[weight,above] {9} (G); - \end{tikzpicture} - % - \hspace{3em} - % - \begin{tikzpicture} - \node[draw, circle, prim node] (A) {$A$}; - \node[draw, circle, below right=of A, prim node] (B) {$B$}; - \node[draw, circle, above right=of B, prim node] (C) {$C$}; - \node[draw, circle, below left=of B, prim node] (D) {$D$}; - \node[draw, circle, below right=of B, prim node] (E) {$E$}; - \node[draw, circle, below=of D, prim node] (F) {$F$}; - \node[draw, circle, below=of E] (G) {$G$}; - - \path (A) edge[prim edge] node[weight,above right] {7} (B); - \path (B) edge node[weight,above left] {8} (C); - \path (D) edge[prim edge] node[weight,right] {5} (A); - \path (D) edge node[weight,above left] {9} (B); - \path (E) edge[prim edge] node[weight,above right] {7} (B); - \path (C) edge[prim edge] node[weight,right] {5} (E); - \path (D) edge node[weight,above] {15} (E); - \path (D) edge[prim edge] node[weight,right] {6} (F); - \path (E) edge node[weight,above left] {8} (F); - \path (E) edge node[weight,right] {11} (G); - \path (F) edge node[weight,above] {9} (G); - \end{tikzpicture} - % - \vspace{1em} - % - - \begin{tikzpicture} - \node[draw, circle, prim node] (A) {$A$}; - \node[draw, circle, below right=of A, prim node] (B) {$B$}; - \node[draw, circle, above right=of B, prim node] (C) {$C$}; - \node[draw, circle, below left=of B, prim node] (D) {$D$}; - \node[draw, circle, below right=of B, prim node] (E) {$E$}; - \node[draw, circle, below=of D, prim node] (F) {$F$}; - \node[draw, circle, below=of E, prim node] (G) {$G$}; - - \path (A) edge[prim edge] node[weight,above right] {7} (B); - \path (B) edge node[weight,above left] {8} (C); - \path (D) edge[prim edge] node[weight,right] {5} (A); - \path (D) edge node[weight,above left] {9} (B); - \path (E) edge[prim edge] node[weight,above right] {7} (B); - \path (C) edge[prim edge] node[weight,right] {5} (E); - \path (D) edge node[weight,above] {15} (E); - \path (D) edge[prim edge] node[weight,right] {6} (F); - \path (E) edge node[weight,above left] {8} (F); - \path (E) edge node[weight,right] {11} (G); - \path (F) edge[prim edge] node[weight,above] {9} (G); - \end{tikzpicture} - \end{center} -\end{algo} - -\begin{defi}{Shortest-Path-Probleme} - Eigentlich: Suche nach \emph{günstigsten Wegen} in gewichteten Graphen: Gewichte $\simeq$ Kosten - - Bei Anwendung auf ungewichtete Graphen ergibt sich: \emph{kürzeste Wege}. - - Beispiele: - \begin{itemize} - \item Single-Source-Shortest-Path - \begin{itemize} - \item Dijkstra-Algorithmus (nicht-negative Kantengewichte) - \item Bellman-Ford-Algorithmus (keine negativen Zykel) - \end{itemize} - \item All-Pairs-Shortest-Path - \begin{itemize} - \item Floyd-Warshall-Algorithmus - \end{itemize} - \end{itemize} -\end{defi} - -\begin{algo}{Dijkstra-Algorithmus} - Gegeben: Graph $G = (V, E)$, dessen Bewertungsfunktion die Eigenschaften hat: - \begin{itemize} - \item Jede Kante von $v_i$ nach $v_j$ hat nicht-negative Kosten: $C(i, j) \geq 0$ - \item Falls keine Kante zwischen $v_i$ und $v_j$: $C(i, j) = \infty$ - \item Diagonalelemente: $C(i, i) = 0$ - \end{itemize} - - Menge $S$: die Knoten, deren günstigste Wegekosten von der vorgegebenen Quelle (Startknoten) bereits bekannt sind. - - \begin{enumerate} - \item Initialisierung: $S = \{ \text{Startknoten} \}$ - \item Beginnend mit Quelle alle ausgehenden Kanten betrachten (analog Breitensuche). Nachfolgerknoten $v$ mit günstigster Kante zu $S$ hinzunehmen. - \item Jetzt: Berechnen, ob die Knoten in $V \setminus S$ günstiger über $v$ als Zwischenweg erreichbar sind, als ohne Umweg über $v$. - \item Danach: Denjenigen Knoten $v'$ zu $S$ hinzunehmen, der nun am günstigsten zu erreichen ist. Bei zwei gleich günstigen Knoten wird ein beliebiger davon ausgewählt. - \item Ab Schritt 3 wiederholen, bis alle Knoten in $S$ sind. - \end{enumerate} - - Zeitkomplexität (bei Speicherung des Graphen mit Adjazenzmatrix): $\bigo(\abs{V}^2)$ -\end{algo} - -\begin{example}{Dijkstra-Algorithmus} - \begin{center} - \begin{tikzpicture}[->] - \node[draw, circle] (A) {$A$}; - \node[draw, circle, below right=of A] (D) {$D$}; - \node[draw, circle, right=of D] (E) {$E$}; - \node[draw, circle, above right=of E] (B) {$B$}; - \node[draw, circle, below right=of B] (H) {$H$}; - \node[draw, circle, below left=of H] (G) {$G$}; - \node[draw, circle, below left=of A] (F) {$F$}; - \node[draw, circle, below right=of F] (C) {$C$}; - - \path (A) edge node[weight, below left] {4} (D); - \path (A) edge node[weight, above right] {2} (E); - \path (A) edge node[weight, above right] {12} (B); - \path (A) edge node[weight, above left] {30} (F); - \path (E) edge node[weight, above] {1} (D); - \path (E) edge node[weight, below right] {8} (C); - \path (E) edge node[weight, above left] {8} (B); - \path (C) edge node[weight, above right] {3} (F); - \path (C) edge node[weight, above right] {3} (F); - \path (C) edge node[weight, above] {12} (G); - \path (G) edge node[weight, right] {4} (B); - \path (G) edge node[weight, below right] {5} (H); - \path (H) edge node[weight, above right] {2} (B); - \end{tikzpicture} - - \vspace{1em} - - \begin{tabular}{|c|ccccccc|ccccccc|} - \hline - \multirow{2}{*}{$v_i$} & $d[2]$ & $d[3]$ & $d[4]$ & $d[5]$ & $d[6]$ & $d[7]$ & $d[8]$ & $p[2]$ & $p[3]$ & $p[4]$ & $p[5]$ & $p[6]$ & $p[7]$ & $p[8]$ \\ \cline{2-15} - & B & C & D & E & F & G & H & B & C & D & E & F & G & H \\ - \hline - A & 12 & & 4 & \textbf{2} & 30 & & & A & & A & A & A & & \\ - E & 10 & 10 & \textbf{3} & \textbf{2} & 30 & & & A & E & E & A & A & & \\ - D & \textbf{10} & 10 & \textbf{3} & \textbf{2} & 30 & & & A & E & E & A & A & & \\ - B & \textbf{10} & \textbf{10} & \textbf{3} & \textbf{2} & 30 & & & A & E & E & A & A & & \\ - C & \textbf{10} & \textbf{10} & \textbf{3} & \textbf{2} & \textbf{13} & 22 & & A & E & E & A & C & C & \\ - F & \textbf{10} & \textbf{10} & \textbf{3} & \textbf{2} & \textbf{13} & \textbf{22} & & A & E & E & A & C & C & \\ - G & \textbf{10} & \textbf{10} & \textbf{3} & \textbf{2} & \textbf{13} & \textbf{22} & \textbf{27} & A & E & E & A & C & C & G \\ - H & \textbf{10} & \textbf{10} & \textbf{3} & \textbf{2} & \textbf{13} & \textbf{22} & \textbf{27} & A & E & E & A & C & C & G \\ - \hline - \end{tabular} - \end{center} - - \vspace{1em} - - \url{https://youtu.be/4pBP2hbnGso} (Herleitung und Erklärung) -\end{example} - -\begin{algo}{Bellman-Ford-Algorithmus} - Gegeben: Graph $G = (V, E)$, dessen Bewertungsfunktion die Eigenschaften hat: - \begin{itemize} - \item Falls keine Kante zwischen $v_i$ und $v_j$: $C(i, j) = \infty$ - \item Diagonalelemente: $C(i, i) = 0$ - \end{itemize} - - \begin{enumerate} - \item Initialisierung: Startknoten $s$, Distanz zu $V \setminus \{s\}$ auf $\infty$ setzen - \item Für jede Kante $(i, j)$: - \begin{itemize} - \item Falls Distanz zu $v_i$ bekannt: - \subitem Falls $d(v_i) + C(i, j) < d(v_j)$, setze $d(v_j)$ auf $d(v_i) + C(i, j)$ - \end{itemize} - \end{enumerate} - - Zeitkomplexität: $\bigo(\abs{V} \cdot \abs{E})$ -\end{algo} - -\begin{example}{Bellman-Ford-Algorithmus} - \begin{center} - \begin{tikzpicture}[->,baseline,anchor=north] - \node[draw, circle] (S) {$S$}; - \node[draw, circle, above right=of S] (A) {$A$}; - \node[draw, circle, right=of A] (B) {$B$}; - \node[draw, circle, below right=of S] (C) {$C$}; - \node[draw, circle, right=of C] (D) {$D$}; - - \path (S) edge node[weight, above left] {2} (A); - \path (S) edge node[weight, below left] {5} (C); - \path (A) edge node[weight, above] {4} (B); - \path (C) edge node[weight, above] {2} (D); - \path (C) edge node[weight, left] {-4} (A); - \path (D) edge node[weight, right] {8} (B); - \path (B) edge[bend left=10] node[weight, below right] {1} (C); - \path (C) edge[bend left=10] node[weight, above left] {6} (B); - \end{tikzpicture} - % - \hspace{5em} - % - \begin{tabular}{|c||c|c|c|c|c|} - \hline - & S & A & B & C & D \\ - \hline - 0 & 0 & $\infty$ & $\infty$ & $\infty$ & $\infty$ \\ - 1 & 0 & 2 & $\infty$ & 5 & $\infty$ \\ - 2 & 0 & 1 & 6 & 5 & 7 \\ - 3 & 0 & 1 & 5 & 5 & 7 \\ - 4 & 0 & 1 & 5 & 5 & 7 \\ - \hline - \end{tabular} - - Keine Änderungen nach Schritt 3 $\implies$ Fertig! - \end{center} -\end{example} - -\begin{algo}{Floyd-Algorithmus} - Gegeben: Graph $G = (V, E)$, dessen Bewertungsfunktion die Eigenschaften hat: - \begin{itemize} - \item Jede Kante von $v_i$ nach $v_j$ hat nicht-negative Kosten: $C(i, j) \geq 0$ - \item Falls keine Kante zwischen $v_i$ und $v_j$: $C(i, j) = \infty$ - \item Diagonalelemente: $C(i, i) = 0$ - \end{itemize} - - Im Kontrast zum Dijkstra-Algorithmus bestimmt der \emph{Floyd-Algorithmus} für alle geordneten Paare $(v, w)$ den kürzesten Weg von $v$ nach $w$. - - $\abs{V}$ Iterationen: - \begin{enumerate} - \item Vergleiche Kosten von - \begin{itemize} - \item direkter Verbindung von Knoten $i$ zu Knoten $j$ - \item Umweg über Knoten $1$ (also: von $i$ nach $1$ + von $1$ nach $j$) - \item Falls Umweg günstiger: alten Weg durch Umweg ersetzen - \end{itemize} - \item Umwege über Knoten $2$ betrachten. - \item[$k$.] Umwege über Knoten $k$ betrachten. - \end{enumerate} - - Der Floyd-Algorithmus nutzt eine $\abs{V} \times \abs{V}$-Matrix, um die Kosten der günstigsten Wege zu speichern: - \begin{center} - $A_k[i][j] :=$ minimale Kosten, um in Schritt $k$ über irgendwelche der Knoten in $V$ vom Knoten $i$ zum Knoten $j$ zu gelangen - \end{center} - - \begin{itemize} - \item Initialisierung: $A_0[i][j]= C(i, j)$ - \item $\abs{V}$ Iterationen mit \glqq dynamischer Programmierung\grqq: - \subitem Iterationsformel zur Aktualisierung von $A[i][j]$: - $$ - A_k[i][j] = \min \{ A_{k-1}[i][j] , A_{k-1}[i][k] + A_{k-1}[k][j] \} - $$ - \end{itemize} -\end{algo} - -\begin{code}{Floyd-Algorithmus} - \lstinputlisting{floyd.java} -\end{code} - -\begin{example}{Floyd-Algorithmus} - \newcolumntype{g}{>{\columncolor{gray!25}}c} - - $A_0$ (direkter Weg): - \begin{center} - \begin{tikzpicture}[baseline,anchor=north] - \node[draw, circle] (1) {$1$}; - \node[draw, circle, right=of 1] (2) {$2$}; - \node[draw, circle, below=of 1] (3) {$3$}; - \node[draw, circle, right=of 3] (4) {$4$}; - - \path (1) edge node[weight, above] {2} (2); - \path (1) edge node[weight, left] {3} (3); - \path (3) edge node[weight, below] {7} (4); - \path (2) edge node[weight, right] {1} (4); - \end{tikzpicture} - % - \hspace{5em} - % - \begin{tabular}[t]{|c|cccc|} - \hline - & 1 & 2 & 3 & 4 \\ - \hline - 1 & \textcolor{gray}{0} & 2 & 3 & $\infty$ \\ - 2 & 2 & \textcolor{gray}{0} & $\infty$ & 1 \\ - 3 & 3 & $\infty$ & \textcolor{gray}{0} & 7 \\ - 4 & $\infty$ & 1 & 7 & \textcolor{gray}{0} \\ - \hline - \end{tabular} - % - \hspace{5em} - % - \begin{tabular}[t]{|c|cccc|} - \hline - & 1 & 2 & 3 & 4 \\ - \hline - 1 & \textcolor{gray}{-} & - & - & - \\ - 2 & - & \textcolor{gray}{-} & - & - \\ - 3 & - & - & \textcolor{gray}{-} & - \\ - 4 & - & - & - & - \\ - \hline - \end{tabular} - \end{center} - - $A_1$ (Umweg über 1): - \begin{center} - \begin{tikzpicture}[baseline,anchor=north] - \node[draw, circle] (1) {$1$}; - \node[draw, circle, right=of 1] (2) {$2$}; - \node[draw, circle, below=of 1] (3) {$3$}; - \node[draw, circle, right=of 3] (4) {$4$}; - - \path (1) edge node[weight, above] {2} (2); - \path (1) edge node[weight, left] {3} (3); - \path (3) edge node[weight, below] {7} (4); - \path (2) edge node[weight, right] {1} (4); - %\path (1) edge[blue, bend left=45] node[weight, above, blue] {2} (2); - %\path (1) edge[blue, bend right=45] node[weight, left, blue] {3} (3); - \path (2) edge[dashed, red, bend right] node[weight, above left, pos=1] {5} (1.north west); - \path (1.north west) edge[dashed, red, bend right] (3); - \end{tikzpicture} - % - \hspace{5em} - % - \begin{tabular}[t]{|c|gccc|} - \hline - & 1 & 2 & 3 & 4 \\ - \hline - \rowcolor{gray!25} - 1 & \textcolor{gray}{0} & 2 & 3 & $\infty$ \\ - 2 & 2 & \textcolor{gray}{0} & \textcolor{red}{5} & 1 \\ - 3 & 3 & \textcolor{red}{5} & \textcolor{gray}{0} & 7 \\ - 4 & $\infty$ & 1 & 7 & \textcolor{gray}{0} \\ - \hline - \end{tabular} - % - \hspace{5em} - % - \begin{tabular}[t]{|c|cccc|} - \hline - & 1 & 2 & 3 & 4 \\ - \hline - 1 & \textcolor{gray}{-} & - & - & - \\ - 2 & - & \textcolor{gray}{-} & 1 & - \\ - 3 & - & 1 & \textcolor{gray}{-} & - \\ - 4 & - & - & - & - \\ - \hline - \end{tabular} - \end{center} - - $$A_0[2][3] > A_0[3][1] + A_0[1][2] \implies A_1[2][3] = A_0[3][1] + A_0[1][2] = 3 + 2 = 5$$ - $$A_0[3][2] > A_0[2][1] + A_0[1][3] \implies A_1[3][2] = A_0[2][1] + A_0[1][3] = 2 + 3 = 5$$ - - - $A_2$ (Umweg über 2): - \begin{center} - \begin{tikzpicture}[baseline,anchor=north] - \node[draw, circle] (1) {$1$}; - \node[draw, circle, right=of 1] (2) {$2$}; - \node[draw, circle, below=of 1] (3) {$3$}; - \node[draw, circle, right=of 3] (4) {$4$}; - - \path (1) edge node[weight, above] {2} (2); - \path (1) edge node[weight, left] {3} (3); - \path (3) edge node[weight, below] {7} (4); - \path (2) edge node[weight, right] {1} (4); - - % old edge 2-1-3 - \path (2) edge[dashed, blue, bend right] node[weight, above left, pos=1] {5} (1.north west); - \path (1.north west) edge[dashed, blue, bend right] (3); - % new edge 1-2-4 - \path (1) edge[dashed, red, bend left] node[weight, above right, pos=1] {3} (2.north east); - \path (2.north east) edge[dashed, red, bend left] (4); - % old edge 3-2-4 - \path (3) edge[dashed, red, bend left] node[weight, below right, pos=0.5] {6} (2.south west); - \path (2.south west) edge[dashed, red, bend right] (4); - \end{tikzpicture} - % - \hspace{5em} - % - \begin{tabular}[t]{|c|cgcc|} - \hline - & 1 & 2 & 3 & 4 \\ - \hline - 1 & \textcolor{gray}{0} & 2 & 3 & \textcolor{red}{3} \\ - \rowcolor{gray!25} - 2 & 2 & \textcolor{gray}{0} & 5 & 1 \\ - 3 & 3 & 5 & \textcolor{gray}{0} & \textcolor{red}{6} \\ - 4 & \textcolor{red}{3} & 1 & \textcolor{red}{6} & \textcolor{gray}{0} \\ - \hline - \end{tabular} - % - \hspace{5em} - % - \begin{tabular}[t]{|c|cccc|} - \hline - & 1 & 2 & 3 & 4 \\ - \hline - 1 & \textcolor{gray}{-} & - & - & 2 \\ - 2 & - & \textcolor{gray}{-} & 1 & - \\ - 3 & - & 1 & \textcolor{gray}{-} & 2 \\ - 4 & 2 & - & 2 & - \\ - \hline - \end{tabular} - \end{center} - - $$A_1[1][4] > A_1[1][2] + A_1[2][4] \implies A_2[2][3] = A_1[1][2] + A_1[2][4] = 2 + 1 = 3$$ - $$A_1[4][1] > A_1[4][2] + A_1[2][1] \implies A_2[3][2] = A_1[4][2] + A_1[2][1] = 1 + 2 = 3$$ - $$A_1[3][4] > A_1[3][2] + A_1[2][4] \implies A_2[3][4] = A_1[3][2] + A_1[2][4] = 5 + 1 = 6$$ - $$A_1[4][3] > A_1[4][2] + A_1[2][3] \implies A_2[4][3] = A_1[4][2] + A_1[2][3] = 1 + 5 = 6$$ - - $A_3$ (Umweg über 3): - \begin{center} - \begin{tikzpicture}[baseline,anchor=north] - \node[draw, circle] (1) {$1$}; - \node[draw, circle, right=of 1] (2) {$2$}; - \node[draw, circle, below=of 1] (3) {$3$}; - \node[draw, circle, right=of 3] (4) {$4$}; - - \path (1) edge node[weight, above] {2} (2); - \path (1) edge node[weight, left] {3} (3); - \path (3) edge node[weight, below] {7} (4); - \path (2) edge node[weight, right] {1} (4); - - % old edge 2-1-3 - \path (2) edge[dashed, blue, bend right] node[weight, above left, pos=1] {5} (1.north west); - \path (1.north west) edge[dashed, blue, bend right] (3); - % old edge 1-2-4 - \path (1) edge[dashed, blue, bend left] node[weight, above right, pos=1] {3} (2.north east); - \path (2.north east) edge[dashed, blue, bend left] (4); - % old edge 3-2-4 - \path (3) edge[dashed, blue, bend left] node[weight, below right, pos=0.5] {6} (2.south west); - \path (2.south west) edge[dashed, blue, bend right] (4); - \end{tikzpicture} - % - \hspace{5em} - % - \begin{tabular}[t]{|c|ccgc|} - \hline - & 1 & 2 & 3 & 4 \\ - \hline - 1 & \textcolor{gray}{0} & 2 & 3 & 3 \\ - 2 & 2 & \textcolor{gray}{0} & 5 & 1 \\ - \rowcolor{gray!25} - 3 & 3 & 5 & \textcolor{gray}{0} & 6 \\ - 4 & 3 & 1 & 6 & \textcolor{gray}{0} \\ - \hline - \end{tabular} - % - \hspace{5em} - % - \begin{tabular}[t]{|c|cccc|} - \hline - & 1 & 2 & 3 & 4 \\ - \hline - 1 & \textcolor{gray}{-} & - & - & 2 \\ - 2 & - & \textcolor{gray}{-} & 1 & - \\ - 3 & - & 1 & \textcolor{gray}{-} & 2 \\ - 4 & 2 & - & 2 & - \\ - \hline - \end{tabular} - \end{center} - - $A_4$ (Umweg über 4): - \begin{center} - \begin{tikzpicture}[baseline,anchor=north] - \node[draw, circle] (1) {$1$}; - \node[draw, circle, right=of 1] (2) {$2$}; - \node[draw, circle, below=of 1] (3) {$3$}; - \node[draw, circle, right=of 3] (4) {$4$}; - - \path (1) edge node[weight, above] {2} (2); - \path (1) edge node[weight, left] {3} (3); - \path (3) edge node[weight, below] {7} (4); - \path (2) edge node[weight, right] {1} (4); - - % old edge 2-1-3 - \path (2) edge[dashed, blue, bend right] node[weight, above left, pos=1] {5} (1.north west); - \path (1.north west) edge[dashed, blue, bend right] (3); - % old edge 1-2-4 - \path (1) edge[dashed, blue, bend left] node[weight, above right, pos=1] {3} (2.north east); - \path (2.north east) edge[dashed, blue, bend left] (4); - % old edge 3-2-4 - \path (3) edge[dashed, blue, bend left] node[weight, below right, pos=0.5] {6} (2.south west); - \path (2.south west) edge[dashed, blue, bend right] (4); - \end{tikzpicture} - % - \hspace{5em} - % - \begin{tabular}[t]{|c|cccg|} - \hline - & 1 & 2 & 3 & 4 \\ - \hline - 1 & \textcolor{gray}{0} & 2 & 3 & 3 \\ - 2 & 2 & \textcolor{gray}{0} & 5 & 1 \\ - 3 & 3 & 5 & \textcolor{gray}{0} & 6 \\ - \rowcolor{gray!25} - 4 & 3 & 1 & 6 & \textcolor{gray}{0} \\ - \hline - \end{tabular} - % - \hspace{5em} - % - \begin{tabular}[t]{|c|cccc|} - \hline - & 1 & 2 & 3 & 4 \\ - \hline - 1 & \textcolor{gray}{-} & - & - & 2 \\ - 2 & - & \textcolor{gray}{-} & 1 & - \\ - 3 & - & 1 & \textcolor{gray}{-} & 2 \\ - 4 & 2 & - & 2 & - \\ - \hline - \end{tabular} - \end{center} -\end{example} \ No newline at end of file +\section{Graphen} + +\begin{defi}{Gerichteter Graph} + Ein \emph{gerichteter Graph} $G = (V, E)$ besteht aus + \begin{itemize} + \item einer endlichen, nicht leeren Menge $V = \{v_1, \ldots, v_n\}$ von \emph{Knoten (vertices)} und + \item einer Relation $E \subseteq V \times V$ von geordneten Paaren $e = (u, v)$ den \emph{Kanten (edges)}. + \end{itemize} + + Jede Kante $(u,v) \in E$ hat einen Anfangsknoten $u$ und einen Enknoten $v$ und damit eine Richtung von $u$ nach $v$ ($u=v$ ist möglich). + + \begin{center} + \begin{tikzpicture}[->] + \node[draw, circle] (1) {1}; + \node[draw, circle, below=of 1] (2) {2}; + \node[draw, circle, right=of 2] (3) {3}; + \node[draw, circle, above=of 3] (4) {4}; + \node[draw, circle, right=of 4] (5) {5}; + + %\draw[->] (1) to[bend left=15] (4); + %\draw[->] (4) to[bend left=15] (1); + %\draw[->] (1) to (2); + %\draw[->] (2) to (3); + %\draw[->] (3) to (4); + %\draw[->] (4) to (5); + + \path (1) edge[bend left=15] (4); + \path (4) edge[bend left=15] (1); + \path (1) edge (2); + \path (2) edge (3); + \path (3) edge (4); + \path (4) edge (5); + \path (5) edge[loop above] (5); + \end{tikzpicture} + \end{center} +\end{defi} + +\begin{defi}{Ungerichteter Graph} + Ein \emph{ungerichteter Graph} $G = (V, E)$ besteht aus + \begin{itemize} + \item einer endlichen, nicht leeren Menge $V = \{v_1, \ldots, v_n\}$ von \emph{Knoten (vertices)} und + \item einer symmetrischen Relation $E \subseteq V \times V$ von geordneten Paaren $e = (u, v) \iff (v, u)$ den \emph{Kanten (edges)}. + \end{itemize} + + Jede Kante $(u,v) \in E$ hat einen Anfangsknoten $u$ und einen Enknoten $v$ und damit eine Richtung von $u$ nach $v$ ($u=v$ ist möglich). + + \vspace{1em} + \begin{center} + \begin{tikzpicture} + \node[draw, circle] (1) {1}; + \node[draw, circle, below=of 1] (2) {2}; + \node[draw, circle, right=of 2] (3) {3}; + \node[draw, circle, above=of 3] (4) {4}; + \node[draw, circle, right=of 4] (5) {5}; + + %\draw[->] (1) to[bend left=15] (4); + %\draw[->] (4) to[bend left=15] (1); + %\draw[->] (1) to (2); + %\draw[->] (2) to (3); + %\draw[->] (3) to (4); + %\draw[->] (4) to (5); + + \path (1) edge (4); + \path (1) edge (2); + \path (2) edge (3); + \path (3) edge (4); + \path (4) edge (5); + \end{tikzpicture} + \end{center} +\end{defi} + +\begin{defi}{Gewichteter Graph} + Ein Graph heißt \emph{gewichtet}, wenn jeder Kante ein Wert als \emph{Gewicht} zugeordnet ist (z.B. Transportkosten, Entfernung). + + \begin{center} + \begin{tikzpicture}[->] + \node[draw, circle] (1) {1}; + \node[draw, circle, below=of 1] (2) {2}; + \node[draw, circle, right=of 2] (3) {3}; + \node[draw, circle, above=of 3] (4) {4}; + \node[draw, circle, right=of 4] (5) {5}; + + %\draw[->] (1) to[bend left=15] (4); + %\draw[->] (4) to[bend left=15] (1); + %\draw[->] (1) to (2); + %\draw[->] (2) to (3); + %\draw[->] (3) to (4); + %\draw[->] (4) to (5); + + \path (1) edge[bend left=15] node[above,scale=0.7] {2} (4); + \path (4) edge[bend left=15] node[below,scale=0.7] {1} (1); + \path (1) edge node[left,scale=0.7] {2} (2); + \path (2) edge node[above,scale=0.7] {1} (3); + \path (3) edge node[right,scale=0.7] {8} (4); + \path (4) edge node[above,scale=0.7] {1} (5); + \path (5) edge[loop above] node[above,scale=0.7] {2} (5); + \end{tikzpicture} + \end{center} +\end{defi} + +\begin{defi}{Teilgraph} + $G' = (V', E')$ heißt \emph{Teilgraph} von $G=(V, E)$, wenn gilt: + $$ + V' \subseteq V \quad \text{und} \quad E' \subseteq E + $$ +\end{defi} + +\begin{defi}{Weg} + Sei $G = (V, E)$ ein Graph. + + Eine Folge von Knoten + $$ + W := (v_1, v_2, \ldots, v_n) + $$ + heißt \emph{Weg} oder \emph{Pfad} in $G$, falls gilt: + $$ + \forall 1 \leq i \leq n-1 : (v_i, v_{i+1}) \in E + $$ + (also eine Folge von zusammenhängenden Kanten) + + $\alpha(W) := v_1$ heißt \emph{Anfangsknoten} des Weges $W$. + + $\omega(W) := v_n$ heißt \emph{Endknoten} des Weges $W$. + + $\forall v_i \in V : (v_i)$ heißt \emph{trivialer Weg} und ist stets ein Weg in $G$. + + Die \emph{Länge eines Weges} ist $l(W) := n-1$, falls $n$ Knoten auf diesem Weg besucht werden. + + Ein Weg heißt \emph{einfacher Weg}, wenn kein Knoten (ausgenommen Start- und Endknoten) mehr als einmal vorkommt. + + Ein \emph{Zykel} oder \emph{Kreis} ist ein nicht-trivialer einfacher Weg mit der Bedingung $\alpha(W) = \omega(W)$. +\end{defi} + +\begin{defi}{Adjazenz} + Zwei Knoten heißen \emph{adjazent (benachbart)}, wenn sie eine Kante verbindet. +\end{defi} + +\begin{defi}{Speicherung von Graphen} + \begin{itemize} + \item Kantenorientiert + \begin{itemize} + \item Index für Kanten + \item für jede Kante speichern: Vorgänger-, Nachfolgerknoten (Markierung, Gewicht) + \item meist statische Darstellung, z.B. Kantenliste + \end{itemize} + \item Knotenorientiert + \begin{itemize} + \item gebräuchlicher als kantenorientiert + \item in vielen Ausprägungen, z.B. Knotenliste, Adjazenzmatrix, Adjazenzliste + \item für Adjazenzmatrix gilt: + $$ + A_{ij} = \begin{cases} + 1 & \text{, falls} \ (i, j) \in E \\ + 0 & \text{, sonst} + \end{cases} + $$ + \end{itemize} + \end{itemize} +\end{defi} + +\begin{example}{Kantenliste} + \begin{center} + \begin{tikzpicture}[->] + \node[draw, circle] (1) {1}; + \node[draw, circle, below left=of 1] (3) {3}; + \node[draw, circle, below right=of 1] (4) {4}; + \node[draw, circle, above right=of 4] (2) {2}; + \node[draw, circle, below=of 3] (5) {5}; + \node[draw, circle, below=of 4] (6) {6}; + + \path (5) edge[loop below] (5); + \path (1) edge[bend left=15] (3); + \path (3) edge[bend left=15] (1); + \path (4) edge (1); + \path (1) edge (2); + \path (3) edge (4); + \path (5) edge (3); + \path (3) edge (6); + \path (6) edge (4); + \path (6) edge (5); + \path (6) edge (2); + \end{tikzpicture} + \end{center} + + Für eine Kantenliste gilt: + \begin{itemize} + \item Position \texttt{0}: Anzahl der Knoten + \item Position \texttt{1}: Anzahl der Kanten + \item Danach für jede Kante \texttt{c = (i, j)}: + \begin{itemize} + \item Startknoten \texttt{i} + \item Endknoten \texttt{j} + \end{itemize} + \end{itemize} + + Für den Graphen $G$ oben gilt die Kantenliste: + + \centering + + \texttt{[6,11,1,2,1,3,3,1,4,1,3,4,3,6,5,3,5,5,6,5,6,2,6,4]} + +\end{example} + +\begin{example}{Knotenliste} + \begin{center} + \begin{tikzpicture}[->] + \node[draw, circle] (1) {1}; + \node[draw, circle, below left=of 1] (3) {3}; + \node[draw, circle, below right=of 1] (4) {4}; + \node[draw, circle, above right=of 4] (2) {2}; + \node[draw, circle, below=of 3] (5) {5}; + \node[draw, circle, below=of 4] (6) {6}; + + \path (5) edge[loop below] (5); + \path (1) edge[bend left=15] (3); + \path (3) edge[bend left=15] (1); + \path (4) edge (1); + \path (1) edge (2); + \path (3) edge (4); + \path (5) edge (3); + \path (3) edge (6); + \path (6) edge (4); + \path (6) edge (5); + \path (6) edge (2); + \end{tikzpicture} + \end{center} + + Für eine Knoten gilt: + \begin{itemize} + \item Position \texttt{0}: Anzahl der Knoten + \item Position \texttt{1}: Anzahl der Kanten + \item Danach für jeden Knoten \texttt{i}: + \begin{itemize} + \item Ausgangsgrad des Knotens \texttt{i} (Anzahl der ausgehenden Kanten) + \item Alle Knoten \texttt{j} für die gilt $(i, j) \in E$ + \end{itemize} + \end{itemize} + + Für den Graphen $G$ oben gilt die Knotenliste: + + \centering + + \texttt{[6,11,2,2,3,0,3,1,4,6,1,1,2,3,5,3,2,4,5]} + +\end{example} + +\begin{example}{Adjazenzmatrix} + \begin{center} + \begin{tikzpicture}[->] + \node[draw, circle] (1) {1}; + \node[draw, circle, below left=of 1] (3) {3}; + \node[draw, circle, below right=of 1] (4) {4}; + \node[draw, circle, above right=of 4] (2) {2}; + \node[draw, circle, below=of 3] (5) {5}; + \node[draw, circle, below=of 4] (6) {6}; + + \path (5) edge[loop below] (5); + \path (1) edge[bend left=15] (3); + \path (3) edge[bend left=15] (1); + \path (4) edge (1); + \path (1) edge (2); + \path (3) edge (4); + \path (5) edge (3); + \path (3) edge (6); + \path (6) edge (4); + \path (6) edge (5); + \path (6) edge (2); + \end{tikzpicture} + \end{center} + + Für den Graphen $G$ oben gilt die Adjazenzmatrix: + $$ + A(G) = \vektor{ + 0 & 1 & 1 & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 0 & 0 \\ + 1 & 0 & 0 & 1 & 0 & 1 \\ + 1 & 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & 1 & 0 & 1 & 0 \\ + 0 & 1 & 0 & 1 & 1 & 0 + } + $$ +\end{example} + +\begin{example}{Adjazenzliste} + \begin{center} + \begin{tikzpicture}[->] + \node[draw, circle] (1) {1}; + \node[draw, circle, below left=of 1] (3) {3}; + \node[draw, circle, below right=of 1] (4) {4}; + \node[draw, circle, above right=of 4] (2) {2}; + \node[draw, circle, below=of 3] (5) {5}; + \node[draw, circle, below=of 4] (6) {6}; + + \path (5) edge[loop below] (5); + \path (1) edge[bend left=15] (3); + \path (3) edge[bend left=15] (1); + \path (4) edge (1); + \path (1) edge (2); + \path (3) edge (4); + \path (5) edge (3); + \path (3) edge (6); + \path (6) edge (4); + \path (6) edge (5); + \path (6) edge (2); + \end{tikzpicture} + \end{center} + + Für den Graphen $G$ oben gilt die Adjazenzliste: + + \vspace{1em} + + \begin{center} + \begin{tikzpicture}[ + start chain = going below, + StackBlock/.style={minimum width=2em, minimum height=2em, outer sep=0pt, on chain}, + every node/.style={draw, label distance=0.5em}, + node distance=0em + ] + { + \node [StackBlock] (k1) {$1$}; + \node [StackBlock,yshift=-0.5em] (k2) {$2$}; + \node [StackBlock,yshift=-0.5em] (k3) {$3$}; + \node [StackBlock,yshift=-0.5em] (k4) {$4$}; + \node [StackBlock,yshift=-0.5em] (k5) {$5$}; + \node [StackBlock,yshift=-0.5em] (k6) {$6$}; + + % Chain 1 + { [continue chain = going right] + \chainin (k1); + + \node [StackBlock, xshift=2em] (12) {$2$}; + \node [StackBlock] (12p) {}; + \node [StackBlock, xshift=2em] (13) {$3$}; + \node [StackBlock] (13p) {}; + } + + % Chain 3 + { [continue chain = going right] + \chainin (k3); + + \node [StackBlock, xshift=2em] (31) {$1$}; + \node [StackBlock] (31p) {}; + \node [StackBlock, xshift=2em] (34) {$4$}; + \node [StackBlock] (34p) {}; + \node [StackBlock, xshift=2em] (36) {$6$}; + \node [StackBlock] (36p) {}; + } + + % Chain 4 + { [continue chain = going right] + \chainin (k4); + + \node [StackBlock, xshift=2em] (41) {$1$}; + \node [StackBlock] (41p) {}; + } + + % Chain 5 + { [continue chain = going right] + \chainin (k5); + + \node [StackBlock, xshift=2em] (53) {$3$}; + \node [StackBlock] (53p) {}; + \node [StackBlock, xshift=2em] (55) {$5$}; + \node [StackBlock] (55p) {}; + } + + % Chain 6 + { [continue chain = going right] + \chainin (k6); + + \node [StackBlock, xshift=2em] (62) {$2$}; + \node [StackBlock] (62p) {}; + \node [StackBlock, xshift=2em] (64) {$4$}; + \node [StackBlock] (64p) {}; + \node [StackBlock, xshift=2em] (65) {$5$}; + \node [StackBlock] (65p) {}; + } + + \draw[->] (k1.east) [out=0, in=180] to (12.west); + \draw[->] (k3.east) [out=0, in=180] to (31.west); + \draw[->] (k4.east) [out=0, in=180] to (41.west); + \draw[->] (k5.east) [out=0, in=180] to (53.west); + \draw[->] (k6.east) [out=0, in=180] to (62.west); + + \draw[->] (12p.center) [out=0, in=180] to (13.west); + + \draw[->] (31p.center) [out=0, in=180] to (34.west); + \draw[->] (34p.center) [out=0, in=180] to (36.west); + + \draw[->] (53p.center) [out=0, in=180] to (55.west); + + \draw[->] (62p.center) [out=0, in=180] to (64.west); + \draw[->] (64p.center) [out=0, in=180] to (65.west); + } + \end{tikzpicture} + \end{center} +\end{example} + +\subsection{Suche} + +\begin{algo}{Breitensuche} + \begin{enumerate} + \item Zunächst werden alle Knoten als \glqq noch nicht besucht\grqq markiert. + \item Startpunkt $v$ wählen und als \glqq besucht\grqq markieren. + \item Jetzt: + \begin{enumerate} + \item alle von $v$ aus direkt erreichbaren (nicht besuchten) Knoten \glqq besuchen\grqq + \item alle von $v$ über zwei Kanten erreichbaren (nicht besuchten) Knoten \glqq besuchen\grqq + \item $\ldots$ + \end{enumerate} + \item Wenn noch nicht alle Knoten besucht worden sind, wähle einen neuen unbesuchten Startpunkt $v$ und beginne bei Schritt 3 + \end{enumerate} + + Start bei Knoten 1. + + \begin{center} + \begin{tikzpicture}[->] + \node[draw, circle, current] (1) {1}; + \node[draw, circle, below left=of 1] (3) {3}; + \node[draw, circle, below right=of 1] (4) {4}; + \node[draw, circle, above right=of 4] (2) {2}; + \node[draw, circle, below=of 3] (5) {5}; + \node[draw, circle, below=of 4] (6) {6}; + + \path (5) edge[loop below] (5); + \path (1) edge[bend left=15] (3); + \path (3) edge[bend left=15] (1); + \path (4) edge (1); + \path (1) edge (2); + \path (3) edge (4); + \path (5) edge (3); + \path (3) edge (6); + \path (6) edge (4); + \path (6) edge (5); + \path (6) edge (2); + \end{tikzpicture} + % + \hspace{5em} + % + \begin{tikzpicture}[->] + \node[draw, circle, visited] (1) {1}; + \node[draw, circle, below left=of 1, current] (3) {3}; + \node[draw, circle, below right=of 1] (4) {4}; + \node[draw, circle, above right=of 4, current] (2) {2}; + \node[draw, circle, below=of 3] (5) {5}; + \node[draw, circle, below=of 4] (6) {6}; + + \path (5) edge[loop below] (5); + \path (1) edge[bend left=15] (3); + \path (3) edge[bend left=15] (1); + \path (4) edge (1); + \path (1) edge (2); + \path (3) edge (4); + \path (5) edge (3); + \path (3) edge (6); + \path (6) edge (4); + \path (6) edge (5); + \path (6) edge (2); + \end{tikzpicture} + % + %\hspace{5em} + % + \begin{tikzpicture}[->] + \node[draw, circle, visited] (1) {1}; + \node[draw, circle, below left=of 1, visited] (3) {3}; + \node[draw, circle, below right=of 1, current] (4) {4}; + \node[draw, circle, above right=of 4, visited] (2) {2}; + \node[draw, circle, below=of 3] (5) {5}; + \node[draw, circle, below=of 4, current] (6) {6}; + + \path (5) edge[loop below] (5); + \path (1) edge[bend left=15] (3); + \path (3) edge[bend left=15] (1); + \path (4) edge (1); + \path (1) edge (2); + \path (3) edge (4); + \path (5) edge (3); + \path (3) edge (6); + \path (6) edge (4); + \path (6) edge (5); + \path (6) edge (2); + \end{tikzpicture} + % + \hspace{5em} + % + \begin{tikzpicture}[->] + \node[draw, circle, visited] (1) {1}; + \node[draw, circle, below left=of 1, visited] (3) {3}; + \node[draw, circle, below right=of 1, visited] (4) {4}; + \node[draw, circle, above right=of 4, visited] (2) {2}; + \node[draw, circle, below=of 3, current] (5) {5}; + \node[draw, circle, below=of 4, visited] (6) {6}; + + \path (5) edge[loop below] (5); + \path (1) edge[bend left=15] (3); + \path (3) edge[bend left=15] (1); + \path (4) edge (1); + \path (1) edge (2); + \path (3) edge (4); + \path (5) edge (3); + \path (3) edge (6); + \path (6) edge (4); + \path (6) edge (5); + \path (6) edge (2); + \end{tikzpicture} + % + %\hspace{5em} + % + \begin{tikzpicture}[->] + \node[draw, circle, visited] (1) {1}; + \node[draw, circle, below left=of 1, visited] (3) {3}; + \node[draw, circle, below right=of 1, visited] (4) {4}; + \node[draw, circle, above right=of 4, visited] (2) {2}; + \node[draw, circle, below=of 3, visited] (5) {5}; + \node[draw, circle, below=of 4, visited] (6) {6}; + + \path (5) edge[loop below] (5); + \path (1) edge[bend left=15] (3); + \path (3) edge[bend left=15] (1); + \path (4) edge (1); + \path (1) edge (2); + \path (3) edge (4); + \path (5) edge (3); + \path (3) edge (6); + \path (6) edge (4); + \path (6) edge (5); + \path (6) edge (2); + \end{tikzpicture} + \end{center} +\end{algo} + +\begin{algo}{Tiefensuche} + \begin{enumerate} + \item Zunächst alle Knoten als \glqq noch nicht besucht\grqq markieren. + \item Startpunkt $v$ wählen und als \glqq besucht\grqq markieren. + \item Von dort aus möglichst langen Pfad entlang gehen; dabei nur bisher nicht besuchte Knoten \glqq besuchen\grqq + \item Wenn dann noch nicht alle Knoten besucht worden sind, wähle einen neuen unbesuchten Startpunkt $v$ und beginne bei Schritt 3 + \end{enumerate} + + Start bei Knoten 1. + + \begin{center} + \begin{tikzpicture}[->] + \node[draw, circle, current] (1) {1}; + \node[draw, circle, below left=of 1] (3) {3}; + \node[draw, circle, below right=of 1] (4) {4}; + \node[draw, circle, above right=of 4] (2) {2}; + \node[draw, circle, below=of 3] (5) {5}; + \node[draw, circle, below=of 4] (6) {6}; + + \path (5) edge[loop below] (5); + \path (1) edge[bend left=15] (3); + \path (3) edge[bend left=15] (1); + \path (4) edge (1); + \path (1) edge (2); + \path (3) edge (4); + \path (5) edge (3); + \path (3) edge (6); + \path (6) edge (4); + \path (6) edge (5); + \path (6) edge (2); + \end{tikzpicture} + % + \hspace{5em} + % + \begin{tikzpicture}[->] + \node[draw, circle, visited] (1) {1}; + \node[draw, circle, below left=of 1] (3) {3}; + \node[draw, circle, below right=of 1] (4) {4}; + \node[draw, circle, above right=of 4, current] (2) {2}; + \node[draw, circle, below=of 3] (5) {5}; + \node[draw, circle, below=of 4] (6) {6}; + + \path (5) edge[loop below] (5); + \path (1) edge[bend left=15] (3); + \path (3) edge[bend left=15] (1); + \path (4) edge (1); + \path (1) edge (2); + \path (3) edge (4); + \path (5) edge (3); + \path (3) edge (6); + \path (6) edge (4); + \path (6) edge (5); + \path (6) edge (2); + \end{tikzpicture} + % + %\hspace{5em} + % + \begin{tikzpicture}[->] + \node[draw, circle, visited] (1) {1}; + \node[draw, circle, below left=of 1, current] (3) {3}; + \node[draw, circle, below right=of 1] (4) {4}; + \node[draw, circle, above right=of 4, visited] (2) {2}; + \node[draw, circle, below=of 3] (5) {5}; + \node[draw, circle, below=of 4] (6) {6}; + + \path (5) edge[loop below] (5); + \path (1) edge[bend left=15] (3); + \path (3) edge[bend left=15] (1); + \path (4) edge (1); + \path (1) edge (2); + \path (3) edge (4); + \path (5) edge (3); + \path (3) edge (6); + \path (6) edge (4); + \path (6) edge (5); + \path (6) edge (2); + \end{tikzpicture} + % + \hspace{5em} + % + \begin{tikzpicture}[->] + \node[draw, circle, visited] (1) {1}; + \node[draw, circle, below left=of 1, visited] (3) {3}; + \node[draw, circle, below right=of 1, current] (4) {4}; + \node[draw, circle, above right=of 4, visited] (2) {2}; + \node[draw, circle, below=of 3] (5) {5}; + \node[draw, circle, below=of 4] (6) {6}; + + \path (5) edge[loop below] (5); + \path (1) edge[bend left=15] (3); + \path (3) edge[bend left=15] (1); + \path (4) edge (1); + \path (1) edge (2); + \path (3) edge (4); + \path (5) edge (3); + \path (3) edge (6); + \path (6) edge (4); + \path (6) edge (5); + \path (6) edge (2); + \end{tikzpicture} + % + %\hspace{5em} + % + \begin{tikzpicture}[->] + \node[draw, circle, visited] (1) {1}; + \node[draw, circle, below left=of 1, visited] (3) {3}; + \node[draw, circle, below right=of 1, visited] (4) {4}; + \node[draw, circle, above right=of 4, visited] (2) {2}; + \node[draw, circle, below=of 3] (5) {5}; + \node[draw, circle, below=of 4, current] (6) {6}; + + \path (5) edge[loop below] (5); + \path (1) edge[bend left=15] (3); + \path (3) edge[bend left=15] (1); + \path (4) edge (1); + \path (1) edge (2); + \path (3) edge (4); + \path (5) edge (3); + \path (3) edge (6); + \path (6) edge (4); + \path (6) edge (5); + \path (6) edge (2); + \end{tikzpicture} + % + \hspace{5em} + % + \begin{tikzpicture}[->] + \node[draw, circle, visited] (1) {1}; + \node[draw, circle, below left=of 1, visited] (3) {3}; + \node[draw, circle, below right=of 1, visited] (4) {4}; + \node[draw, circle, above right=of 4, visited] (2) {2}; + \node[draw, circle, below=of 3, current] (5) {5}; + \node[draw, circle, below=of 4, visited] (6) {6}; + + \path (5) edge[loop below] (5); + \path (1) edge[bend left=15] (3); + \path (3) edge[bend left=15] (1); + \path (4) edge (1); + \path (1) edge (2); + \path (3) edge (4); + \path (5) edge (3); + \path (3) edge (6); + \path (6) edge (4); + \path (6) edge (5); + \path (6) edge (2); + \end{tikzpicture} + % + %\hspace{5em} + % + \begin{tikzpicture}[->] + \node[draw, circle, visited] (1) {1}; + \node[draw, circle, below left=of 1, visited] (3) {3}; + \node[draw, circle, below right=of 1, visited] (4) {4}; + \node[draw, circle, above right=of 4, visited] (2) {2}; + \node[draw, circle, below=of 3, visited] (5) {5}; + \node[draw, circle, below=of 4, visited] (6) {6}; + + \path (5) edge[loop below] (5); + \path (1) edge[bend left=15] (3); + \path (3) edge[bend left=15] (1); + \path (4) edge (1); + \path (1) edge (2); + \path (3) edge (4); + \path (5) edge (3); + \path (3) edge (6); + \path (6) edge (4); + \path (6) edge (5); + \path (6) edge (2); + \end{tikzpicture} + \end{center} +\end{algo} + +\begin{defi}{Level-Order-Baumdurchlauf} + Führt man eine Breitensuche bei Bäumen aus, stellt man fest: + \begin{itemize} + \item Es ist nicht nötig, die Knoten zu markieren. + \item Der Baum wird Ebene für Ebene durchlaufen, + \end{itemize} + + Diesen Durchlauf nennt man \emph{Level-Order-Durchlauf}. +\end{defi} + +\begin{defi}{Pre-Order-Baumdurchlauf} + Führt man eine Tiefensuche bei Bäumen aus, nennt man diesen Durchlauf \emph{Pre-Order-Durchlauf}. + + Dabei wird stets der linke Teilbaum zuerst durchlaufen. +\end{defi} + +\begin{defi}{Post-Order-Baumdurchlauf} + \begin{enumerate} + \item Durchlaufe linken Teilbaum + \item Durchlaufe rechten Teilbaum + \item Betrachte die Wurzel + \end{enumerate} +\end{defi} + +\begin{defi}{In-Order-Baumdurchlauf} + \begin{enumerate} + \item Durchlaufe linken Teilbaum + \item Betrachte die Wurzel + \item Durchlaufe rechten Teilbaum + \end{enumerate} +\end{defi} + +\begin{example}{Baumdurchläufe} + \begin{center} + \begin{forest} + baseline,anchor=north, + for tree={circle, draw, + minimum size=2em, % <-- added + inner sep=1pt} + [ + 45 + [ + 36 + [ + 25 + [ + 2 + ] + [ + 3 + ] + ] + [ + 26 + [ + 19 + ] + [, draw=none, edge={draw=none}] + ] + ] + [ + 17 + [ + 7 + ] + [ + 1 + ] + ] + ] + \end{forest} + \end{center} + + Für den gegebenen Baum gelten folgende Baumdurchläufe: + + \centering + \begin{tabular}{|l|cccccccccc|} + \hline + Pre-Order & 45 & 36 & 25 & 2 & 3 & 26 & 19 & 17 & 7 & 1 \\ + \hline + In-Order & 2 & 25 & 3 & 19 & 26 & 36 & 45 & 7 & 17 & 1 \\ + \hline + Post-Order & 2 & 3 & 25 & 19 & 26 & 36 & 7 & 1 & 17 & 45 \\ + \hline + Level-Order & 45 & 36 & 17 & 25 & 26 & 7 & 1 & 2 & 3 & 19 \\ + \hline + \end{tabular} +\end{example} + + +\subsection{Entwurfsprinzipien} + +\begin{defi}{Traveling-Salesman-Problem} + Das \emph{Traveling-Salesman-Problem} ist ein Optimierungsproblem. + Die Aufgabe besteht darin, eine Reihenfolge für den Besuch mehrerer Orte so zu wählen, dass: + \begin{itemize} + \item kein Ort doppelt besucht wird und + \item die Reisestrecke minimal ist. + \end{itemize} +\end{defi} + +\begin{defi}{Greedy} + Wähle immer den Schritt, desse unmittelbarer Folgezustand das beste Ergebnis liefert. + Denke nicht an die weiteren Schritte (greedy = gierig). + + Ob ein Greedy-Algorithmus die optimale Lösung liefert oder nicht, ist vom konkreten Problem abhängig. + + Für das Traveling-Salesman-Problem ist eine Greedy-Lösung z.B. die \emph{Nearest-Neighbour-Lösung}: + \begin{itemize} + \item Gehe in jedem Schritt zur nächstliegenden Stadt, die noch nicht besucht ist. + \item $\bigo(n^2)$ + \item liefert nicht die optimale Lösung (kann sogar beliebig schlecht werden) + \item arbeitet meistens einigermaßen gut + \end{itemize} +\end{defi} + +\begin{bonus}{Random Insertion} + Wähle immer einen zufälligen Knoten. + + \begin{itemize} + \item $\bigo(n^2)$ + \item keine Garantie, dass die Lösung irgendeinem Gütekriterium genügt + \item im Allgmeinen ist Lösung ziemlich gut + \item Vorteil: Durch den Zufallsfaktor kann man das Verfahren beliebig oft wiederholen und sich die beste Lösung heraussuchen. + \end{itemize} +\end{bonus} + +\begin{bonus}{Lösung mit minimalem Spannbaum} + \begin{enumerate} + \item Konstruktion eines minimalen Spannbaums nach Prim + \item Durchlaufen mit Tiefensuche + \item jede Kante wird zweimal durchlaufen + \item summierte Gewichte des minimalen Spannbaums müssen kleiner sein als das optimale TSP-Ergebnis + \item Optimierung: + \begin{itemize} + \item Knoten schon einmal besucht: beim nächsten Mal überspringen + \item bei einem Schritt mehrere Möglichkeiten: zuerst kürzeren Weg wählen (greedy) + \end{itemize} + \end{enumerate} +\end{bonus} + +\begin{defi}{Backtracking} + Durchlauf eines Lösungsbaum in Pre-Order-Reihenfolge. + + Situation: Mehrere Alternativen sind in bestimmten Schritten des Algorithmus möglich. + + Lösung mit \emph{Backtracking}: + \begin{enumerate} + \item Wähle eine Alternative und verfolge dieses Weg weiter. + \item Falls man so eine Lösung des Problems findet, ist man fertig. + \item Ansonsten gehe einen Schritt zurück und verfolge rekursiv eine andere (nicht versuchte) Alternative in diesem Schritt. + \item Falls alle Alternativen erfolglos probiert wurden, einen Schritt zurückgehen $\ldots$ + \end{enumerate} + + Backtracking-Algorithmen können exponentiellen Aufwand haben. + + Tipps: + \begin{itemize} + \item Durch Einführung von Zusatzbedingungen möglichst viele Sackgassen ausschließen. + \item Symmetriebedingungen ausnutzen. + \end{itemize} +\end{defi} + +\begin{defi}{Branch and Bound} + \begin{enumerate} + \item Ermitteln einer oberen Schranke (greedy) + \item Falls dieser Wert überschritten wird, kann man die Suche auf diesem Pfad abbrechen. + \item Bessere Lösungen nutzen, um die Schranke zu verbessern. + \end{enumerate} +\end{defi} + + +\subsection{Graphalgorithmen} + +\begin{defi}{Bipartiter Graph} + Ein Graph $G=(V, E)$ heißt \emph{bipartit}, wenn man $V$ in disjunkte Mengen $U$ und $W$ zerlegen kann, so dass alle Kanten zwischen $U$ und $W$ verlaufen. + + Die Knoten eines bipartiten Graphen lassen sich mit zwei Farben so einfärben, dass zwei Nachbarknoten immer unterschiedlich eingefärbt sind. +\end{defi} + +\begin{algo}{Prüfung ob ein Graph bipartit ist} + \begin{enumerate} + \item Einfärben des 1. Knotens + \item Durchlauf mit Breitensuche + \item Abwechselndes Färben + \end{enumerate} + + Start bei Knoten 1. + + \vspace{1em} + + \begin{center} + \begin{tikzpicture} + \node[draw, circle, text=white, fill = blue!50] (1) {1}; + \node[draw, circle, right=of 1] (2) {2}; + \node[draw, circle, right=of 2] (3) {3}; + \node[draw, circle, below=of 1] (4) {4}; + \node[draw, circle, right=of 4] (5) {5}; + \node[draw, circle, below=of 4] (6) {6}; + \node[draw, circle, right=of 6] (7) {7}; + + \path (1) edge (2); + \path (2) edge (3); + \path (1) edge (4); + \path (4) edge (5); + \path (2) edge (5); + \path (4) edge (6); + \path (6) edge (7); + \path (3) edge[bend left=30] (7); + \end{tikzpicture} + % + \hspace{5em} + % + \begin{tikzpicture} + \node[draw, circle, text=white, fill = blue!50] (1) {1}; + \node[draw, circle, text=white, right=of 1, fill = red!50] (2) {2}; + \node[draw, circle, right=of 2] (3) {3}; + \node[draw, circle, text=white, below=of 1, fill = red!50] (4) {4}; + \node[draw, circle, right=of 4] (5) {5}; + \node[draw, circle, below=of 4] (6) {6}; + \node[draw, circle, right=of 6] (7) {7}; + + \path (1) edge (2); + \path (2) edge (3); + \path (1) edge (4); + \path (4) edge (5); + \path (2) edge (5); + \path (4) edge (6); + \path (6) edge (7); + \path (3) edge[bend left=30] (7); + \end{tikzpicture} + + \vspace{1em} + + \begin{tikzpicture} + \node[draw, circle, text=white, fill = blue!50] (1) {1}; + \node[draw, circle, text=white, right=of 1, fill = red!50] (2) {2}; + \node[draw, circle, text=white, right=of 2, fill = blue!50] (3) {3}; + \node[draw, circle, text=white, below=of 1, fill = red!50] (4) {4}; + \node[draw, circle, text=white, right=of 4, fill = blue!50] (5) {5}; + \node[draw, circle, text=white, below=of 4, fill = blue!50] (6) {6}; + \node[draw, circle, right=of 6] (7) {7}; + + \path (1) edge (2); + \path (2) edge (3); + \path (1) edge (4); + \path (4) edge (5); + \path (2) edge (5); + \path (4) edge (6); + \path (6) edge (7); + \path (3) edge[bend left=30] (7); + \end{tikzpicture} + % + \hspace{5em} + % + \begin{tikzpicture} + \node[draw, circle, text=white, fill = blue!50] (1) {1}; + \node[draw, circle, text=white, right=of 1, fill = red!50] (2) {2}; + \node[draw, circle, text=white, right=of 2, fill = blue!50] (3) {3}; + \node[draw, circle, text=white, below=of 1, fill = red!50] (4) {4}; + \node[draw, circle, text=white, right=of 4, fill = blue!50] (5) {5}; + \node[draw, circle, text=white, below=of 4, fill = blue!50] (6) {6}; + \node[draw, circle, text=white, right=of 6, fill = red!50] (7) {7}; + + \path (1) edge (2); + \path (2) edge (3); + \path (1) edge (4); + \path (4) edge (5); + \path (2) edge (5); + \path (4) edge (6); + \path (6) edge (7); + \path (3) edge[bend left=30] (7); + \end{tikzpicture} + \end{center} +\end{algo} + +\begin{defi}{Spannbaum} + Ein \emph{Spannbaum} verbindet alle Knoten eines ungerichteten Graphen miteinander, hat jedoch keine Kreise. + + Der \emph{minimale Spannbaum} ist der Spannbaum, dessen Kanten das kleinste summierte Gewicht haben. +\end{defi} + +\begin{algo}{Prim-Algorithmus} + \begin{enumerate} + \item Wähle einen beliebigen Startknoten für den minimalen Spannbaum $T$ + \item Solange $T$ noch nicht alle Knoten enthält: + \begin{itemize} + \item Wähle eine Kante $e$ mit minimalem Gewicht aus, die einen noch nicht in $T$ enthaltenen Knoten $v$ mit $T$ verbindet. + \item Füge $e$ und $v$ dem Graphen $T$ hinzu. + \end{itemize} + \end{enumerate} + + Start bei Knoten $A$. + + \vspace{1em} + \begin{center} + \begin{tikzpicture} + \node[draw, circle, prim node] (A) {$A$}; + \node[draw, circle, below right=of A] (B) {$B$}; + \node[draw, circle, above right=of B] (C) {$C$}; + \node[draw, circle, below left=of B] (D) {$D$}; + \node[draw, circle, below right=of B] (E) {$E$}; + \node[draw, circle, below=of D] (F) {$F$}; + \node[draw, circle, below=of E] (G) {$G$}; + + \path (A) edge node[weight,above right] {7} (B); + \path (B) edge node[weight,above left] {8} (C); + \path (D) edge node[weight,right] {5} (A); + \path (D) edge node[weight,above left] {9} (B); + \path (E) edge node[weight,above right] {7} (B); + \path (C) edge node[weight,right] {5} (E); + \path (D) edge node[weight,above] {15} (E); + \path (D) edge node[weight,right] {6} (F); + \path (E) edge node[weight,above left] {8} (F); + \path (E) edge node[weight,right] {11} (G); + \path (F) edge node[weight,above] {9} (G); + \end{tikzpicture} + % + \hspace{3em} + % + \begin{tikzpicture} + \node[draw, circle, prim node] (A) {$A$}; + \node[draw, circle, below right=of A] (B) {$B$}; + \node[draw, circle, above right=of B] (C) {$C$}; + \node[draw, circle, below left=of B, prim node] (D) {$D$}; + \node[draw, circle, below right=of B] (E) {$E$}; + \node[draw, circle, below=of D] (F) {$F$}; + \node[draw, circle, below=of E] (G) {$G$}; + + \path (A) edge node[weight,above right] {7} (B); + \path (B) edge node[weight,above left] {8} (C); + \path (D) edge[prim edge] node[weight,right] {5} (A); + \path (D) edge node[weight,above left] {9} (B); + \path (E) edge node[weight,above right] {7} (B); + \path (C) edge node[weight,right] {5} (E); + \path (D) edge node[weight,above] {15} (E); + \path (D) edge node[weight,right] {6} (F); + \path (E) edge node[weight,above left] {8} (F); + \path (E) edge node[weight,right] {11} (G); + \path (F) edge node[weight,above] {9} (G); + \end{tikzpicture} + % + \hspace{3em} + % + \begin{tikzpicture} + \node[draw, circle, prim node] (A) {$A$}; + \node[draw, circle, below right=of A] (B) {$B$}; + \node[draw, circle, above right=of B] (C) {$C$}; + \node[draw, circle, below left=of B, prim node] (D) {$D$}; + \node[draw, circle, below right=of B] (E) {$E$}; + \node[draw, circle, below=of D, prim node] (F) {$F$}; + \node[draw, circle, below=of E] (G) {$G$}; + + \path (A) edge node[weight,above right] {7} (B); + \path (B) edge node[weight,above left] {8} (C); + \path (D) edge[prim edge] node[weight,right] {5} (A); + \path (D) edge node[weight,above left] {9} (B); + \path (E) edge node[weight,above right] {7} (B); + \path (C) edge node[weight,right] {5} (E); + \path (D) edge node[weight,above] {15} (E); + \path (D) edge[prim edge] node[weight,right] {6} (F); + \path (E) edge node[weight,above left] {8} (F); + \path (E) edge node[weight,right] {11} (G); + \path (F) edge node[weight,above] {9} (G); + \end{tikzpicture} + % + \vspace{1em} + % + + \begin{tikzpicture} + \node[draw, circle, prim node] (A) {$A$}; + \node[draw, circle, below right=of A, prim node] (B) {$B$}; + \node[draw, circle, above right=of B] (C) {$C$}; + \node[draw, circle, below left=of B, prim node] (D) {$D$}; + \node[draw, circle, below right=of B] (E) {$E$}; + \node[draw, circle, below=of D, prim node] (F) {$F$}; + \node[draw, circle, below=of E] (G) {$G$}; + + \path (A) edge[prim edge] node[weight,above right] {7} (B); + \path (B) edge node[weight,above left] {8} (C); + \path (D) edge[prim edge] node[weight,right] {5} (A); + \path (D) edge node[weight,above left] {9} (B); + \path (E) edge node[weight,above right] {7} (B); + \path (C) edge node[weight,right] {5} (E); + \path (D) edge node[weight,above] {15} (E); + \path (D) edge[prim edge] node[weight,right] {6} (F); + \path (E) edge node[weight,above left] {8} (F); + \path (E) edge node[weight,right] {11} (G); + \path (F) edge node[weight,above] {9} (G); + \end{tikzpicture} + % + \hspace{3em} + % + \begin{tikzpicture} + \node[draw, circle, prim node] (A) {$A$}; + \node[draw, circle, below right=of A, prim node] (B) {$B$}; + \node[draw, circle, above right=of B] (C) {$C$}; + \node[draw, circle, below left=of B, prim node] (D) {$D$}; + \node[draw, circle, below right=of B, prim node] (E) {$E$}; + \node[draw, circle, below=of D, prim node] (F) {$F$}; + \node[draw, circle, below=of E] (G) {$G$}; + + \path (A) edge[prim edge] node[weight,above right] {7} (B); + \path (B) edge node[weight,above left] {8} (C); + \path (D) edge[prim edge] node[weight,right] {5} (A); + \path (D) edge node[weight,above left] {9} (B); + \path (E) edge[prim edge] node[weight,above right] {7} (B); + \path (C) edge node[weight,right] {5} (E); + \path (D) edge node[weight,above] {15} (E); + \path (D) edge[prim edge] node[weight,right] {6} (F); + \path (E) edge node[weight,above left] {8} (F); + \path (E) edge node[weight,right] {11} (G); + \path (F) edge node[weight,above] {9} (G); + \end{tikzpicture} + % + \hspace{3em} + % + \begin{tikzpicture} + \node[draw, circle, prim node] (A) {$A$}; + \node[draw, circle, below right=of A, prim node] (B) {$B$}; + \node[draw, circle, above right=of B, prim node] (C) {$C$}; + \node[draw, circle, below left=of B, prim node] (D) {$D$}; + \node[draw, circle, below right=of B, prim node] (E) {$E$}; + \node[draw, circle, below=of D, prim node] (F) {$F$}; + \node[draw, circle, below=of E] (G) {$G$}; + + \path (A) edge[prim edge] node[weight,above right] {7} (B); + \path (B) edge node[weight,above left] {8} (C); + \path (D) edge[prim edge] node[weight,right] {5} (A); + \path (D) edge node[weight,above left] {9} (B); + \path (E) edge[prim edge] node[weight,above right] {7} (B); + \path (C) edge[prim edge] node[weight,right] {5} (E); + \path (D) edge node[weight,above] {15} (E); + \path (D) edge[prim edge] node[weight,right] {6} (F); + \path (E) edge node[weight,above left] {8} (F); + \path (E) edge node[weight,right] {11} (G); + \path (F) edge node[weight,above] {9} (G); + \end{tikzpicture} + % + \vspace{1em} + % + + \begin{tikzpicture} + \node[draw, circle, prim node] (A) {$A$}; + \node[draw, circle, below right=of A, prim node] (B) {$B$}; + \node[draw, circle, above right=of B, prim node] (C) {$C$}; + \node[draw, circle, below left=of B, prim node] (D) {$D$}; + \node[draw, circle, below right=of B, prim node] (E) {$E$}; + \node[draw, circle, below=of D, prim node] (F) {$F$}; + \node[draw, circle, below=of E, prim node] (G) {$G$}; + + \path (A) edge[prim edge] node[weight,above right] {7} (B); + \path (B) edge node[weight,above left] {8} (C); + \path (D) edge[prim edge] node[weight,right] {5} (A); + \path (D) edge node[weight,above left] {9} (B); + \path (E) edge[prim edge] node[weight,above right] {7} (B); + \path (C) edge[prim edge] node[weight,right] {5} (E); + \path (D) edge node[weight,above] {15} (E); + \path (D) edge[prim edge] node[weight,right] {6} (F); + \path (E) edge node[weight,above left] {8} (F); + \path (E) edge node[weight,right] {11} (G); + \path (F) edge[prim edge] node[weight,above] {9} (G); + \end{tikzpicture} + \end{center} +\end{algo} + +\begin{defi}{Shortest-Path-Probleme} + Eigentlich: Suche nach \emph{günstigsten Wegen} in gewichteten Graphen: Gewichte $\simeq$ Kosten + + Bei Anwendung auf ungewichtete Graphen ergibt sich: \emph{kürzeste Wege}. + + Beispiele: + \begin{itemize} + \item Single-Source-Shortest-Path + \begin{itemize} + \item Dijkstra-Algorithmus (nicht-negative Kantengewichte) + \item Bellman-Ford-Algorithmus (keine negativen Zykel) + \end{itemize} + \item All-Pairs-Shortest-Path + \begin{itemize} + \item Floyd-Warshall-Algorithmus + \end{itemize} + \item One-Pair + \begin{itemize} + \item A*-Algorithmus + \end{itemize} + \end{itemize} +\end{defi} + +\begin{algo}{Dijkstra-Algorithmus} + Gegeben: Graph $G = (V, E)$, dessen Bewertungsfunktion die Eigenschaften hat: + \begin{itemize} + \item Jede Kante von $v_i$ nach $v_j$ hat nicht-negative Kosten: $C(i, j) \geq 0$ + \item Falls keine Kante zwischen $v_i$ und $v_j$: $C(i, j) = \infty$ + \item Diagonalelemente: $C(i, i) = 0$ + \end{itemize} + + Menge $S$: die Knoten, deren günstigste Wegekosten von der vorgegebenen Quelle (Startknoten) bereits bekannt sind. + + \begin{enumerate} + \item Initialisierung: $S = \{ \text{Startknoten} \}$ + \item Beginnend mit Quelle alle ausgehenden Kanten betrachten (analog Breitensuche). Nachfolgerknoten $v$ mit günstigster Kante zu $S$ hinzunehmen. + \item Jetzt: Berechnen, ob die Knoten in $V \setminus S$ günstiger über $v$ als Zwischenweg erreichbar sind, als ohne Umweg über $v$. + \item Danach: Denjenigen Knoten $v'$ zu $S$ hinzunehmen, der nun am günstigsten zu erreichen ist. Bei zwei gleich günstigen Knoten wird ein beliebiger davon ausgewählt. + \item Ab Schritt 3 wiederholen, bis alle Knoten in $S$ sind. + \end{enumerate} + + Zeitkomplexität (bei Speicherung des Graphen mit Adjazenzmatrix): $\bigo(\abs{V}^2)$ +\end{algo} + +\begin{example}{Dijkstra-Algorithmus} + \begin{center} + \begin{tikzpicture}[->] + \node[draw, circle] (A) {$A$}; + \node[draw, circle, below right=of A] (D) {$D$}; + \node[draw, circle, right=of D] (E) {$E$}; + \node[draw, circle, above right=of E] (B) {$B$}; + \node[draw, circle, below right=of B] (H) {$H$}; + \node[draw, circle, below left=of H] (G) {$G$}; + \node[draw, circle, below left=of A] (F) {$F$}; + \node[draw, circle, below right=of F] (C) {$C$}; + + \path (A) edge node[weight, below left] {4} (D); + \path (A) edge node[weight, above right] {2} (E); + \path (A) edge node[weight, above right] {12} (B); + \path (A) edge node[weight, above left] {30} (F); + \path (E) edge node[weight, above] {1} (D); + \path (E) edge node[weight, below right] {8} (C); + \path (E) edge node[weight, above left] {8} (B); + \path (C) edge node[weight, above right] {3} (F); + \path (C) edge node[weight, above right] {3} (F); + \path (C) edge node[weight, above] {12} (G); + \path (G) edge node[weight, right] {4} (B); + \path (G) edge node[weight, below right] {5} (H); + \path (H) edge node[weight, above right] {2} (B); + \end{tikzpicture} + + \vspace{1em} + + \begin{tabular}{|c|ccccccc|ccccccc|} + \hline + \multirow{2}{*}{$v_i$} & $d[2]$ & $d[3]$ & $d[4]$ & $d[5]$ & $d[6]$ & $d[7]$ & $d[8]$ & $p[2]$ & $p[3]$ & $p[4]$ & $p[5]$ & $p[6]$ & $p[7]$ & $p[8]$ \\ \cline{2-15} + & B & C & D & E & F & G & H & B & C & D & E & F & G & H \\ + \hline + A & 12 & & 4 & \textbf{2} & 30 & & & A & & A & A & A & & \\ + E & 10 & 10 & \textbf{3} & \textbf{2} & 30 & & & E & E & E & A & A & & \\ + D & \textbf{10} & 10 & \textbf{3} & \textbf{2} & 30 & & & E & E & E & A & A & & \\ + B & \textbf{10} & \textbf{10} & \textbf{3} & \textbf{2} & 30 & & & E & E & E & A & A & & \\ + C & \textbf{10} & \textbf{10} & \textbf{3} & \textbf{2} & \textbf{13} & 22 & & E & E & E & A & C & C & \\ + F & \textbf{10} & \textbf{10} & \textbf{3} & \textbf{2} & \textbf{13} & \textbf{22} & & E & E & E & A & C & C & \\ + G & \textbf{10} & \textbf{10} & \textbf{3} & \textbf{2} & \textbf{13} & \textbf{22} & \textbf{27} & E & E & E & A & C & C & G \\ + H & \textbf{10} & \textbf{10} & \textbf{3} & \textbf{2} & \textbf{13} & \textbf{22} & \textbf{27} & E & E & E & A & C & C & G \\ + \hline + \end{tabular} + \end{center} + + \vspace{1em} + + \url{https://youtu.be/4pBP2hbnGso} (Herleitung und Erklärung) +\end{example} + +\begin{algo}{Bellman-Ford-Algorithmus} + Gegeben: Graph $G = (V, E)$, dessen Bewertungsfunktion die Eigenschaften hat: + \begin{itemize} + \item Falls keine Kante zwischen $v_i$ und $v_j$: $C(i, j) = \infty$ + \item Diagonalelemente: $C(i, i) = 0$ + \end{itemize} + + \begin{enumerate} + \item Initialisierung: Startknoten $s$, Distanz zu $V \setminus \{s\}$ auf $\infty$ setzen + \item Für jede Kante $(i, j)$: + \begin{itemize} + \item Falls Distanz zu $v_i$ bekannt: + \subitem Falls $d(v_i) + C(i, j) < d(v_j)$, setze $d(v_j)$ auf $d(v_i) + C(i, j)$ + \end{itemize} + \end{enumerate} + + Zeitkomplexität: $\bigo(\abs{V} \cdot \abs{E})$ +\end{algo} + +\begin{example}{Bellman-Ford-Algorithmus} + \begin{center} + \begin{tikzpicture}[->,baseline,anchor=north] + \node[draw, circle] (S) {$S$}; + \node[draw, circle, above right=of S] (A) {$A$}; + \node[draw, circle, right=of A] (B) {$B$}; + \node[draw, circle, below right=of S] (C) {$C$}; + \node[draw, circle, right=of C] (D) {$D$}; + + \path (S) edge node[weight, above left] {2} (A); + \path (S) edge node[weight, below left] {5} (C); + \path (A) edge node[weight, above] {4} (B); + \path (C) edge node[weight, above] {2} (D); + \path (C) edge node[weight, left] {-4} (A); + \path (D) edge node[weight, right] {8} (B); + \path (B) edge[bend left=10] node[weight, below right] {1} (C); + \path (C) edge[bend left=10] node[weight, above left] {6} (B); + \end{tikzpicture} + % + \hspace{5em} + % + \begin{tabular}{|c||c|c|c|c|c|} + \hline + & S & A & B & C & D \\ + \hline + 0 & 0 & $\infty$ & $\infty$ & $\infty$ & $\infty$ \\ + 1 & 0 & 2 & $\infty$ & 5 & $\infty$ \\ + 2 & 0 & 1 & 6 & 5 & 7 \\ + 3 & 0 & 1 & 5 & 5 & 7 \\ + 4 & 0 & 1 & 5 & 5 & 7 \\ + \hline + \end{tabular} + + Keine Änderungen nach Schritt 3 $\implies$ Fertig! + \end{center} +\end{example} + +\begin{algo}{Floyd-Algorithmus} + Gegeben: Graph $G = (V, E)$, dessen Bewertungsfunktion die Eigenschaften hat: + \begin{itemize} + \item Jede Kante von $v_i$ nach $v_j$ hat nicht-negative Kosten: $C(i, j) \geq 0$ + \item Falls keine Kante zwischen $v_i$ und $v_j$: $C(i, j) = \infty$ + \item Diagonalelemente: $C(i, i) = 0$ + \end{itemize} + + Im Kontrast zum Dijkstra-Algorithmus bestimmt der \emph{Floyd-Algorithmus} für alle geordneten Paare $(v, w)$ den kürzesten Weg von $v$ nach $w$. + + $\abs{V}$ Iterationen: + \begin{enumerate} + \item Vergleiche Kosten von + \begin{itemize} + \item direkter Verbindung von Knoten $i$ zu Knoten $j$ + \item Umweg über Knoten $1$ (also: von $i$ nach $1$ + von $1$ nach $j$) + \item Falls Umweg günstiger: alten Weg durch Umweg ersetzen + \end{itemize} + \item Umwege über Knoten $2$ betrachten. + \item[$k$.] Umwege über Knoten $k$ betrachten. + \end{enumerate} + + Der Floyd-Algorithmus nutzt eine $\abs{V} \times \abs{V}$-Matrix, um die Kosten der günstigsten Wege zu speichern: + \begin{center} + $A_k[i][j] :=$ minimale Kosten, um in Schritt $k$ über irgendwelche der Knoten in $V$ vom Knoten $i$ zum Knoten $j$ zu gelangen + \end{center} + + \begin{itemize} + \item Initialisierung: $A_0[i][j]= C(i, j)$ + \item $\abs{V}$ Iterationen mit \glqq dynamischer Programmierung\grqq: + \subitem Iterationsformel zur Aktualisierung von $A[i][j]$: + $$ + A_k[i][j] = \min \{ A_{k-1}[i][j] , A_{k-1}[i][k] + A_{k-1}[k][j] \} + $$ + \end{itemize} + + Der Floyd-Algorithmus ist ein wichtiges Beispiel für dynamische Programmierung. +\end{algo} + +\begin{code}{Floyd-Algorithmus} + \lstinputlisting{floyd.java} +\end{code} + +\begin{example}{Floyd-Algorithmus} + \newcolumntype{g}{>{\columncolor{gray!25}}c} + + $A_0$ (direkter Weg): + \begin{center} + \begin{tikzpicture}[baseline,anchor=north] + \node[draw, circle] (1) {$1$}; + \node[draw, circle, right=of 1] (2) {$2$}; + \node[draw, circle, below=of 1] (3) {$3$}; + \node[draw, circle, right=of 3] (4) {$4$}; + + \path (1) edge node[weight, above] {2} (2); + \path (1) edge node[weight, left] {3} (3); + \path (3) edge node[weight, below] {7} (4); + \path (2) edge node[weight, right] {1} (4); + \end{tikzpicture} + % + \hspace{5em} + % + \begin{tabular}[t]{|c|cccc|} + \hline + & 1 & 2 & 3 & 4 \\ + \hline + 1 & \textcolor{gray}{0} & 2 & 3 & $\infty$ \\ + 2 & 2 & \textcolor{gray}{0} & $\infty$ & 1 \\ + 3 & 3 & $\infty$ & \textcolor{gray}{0} & 7 \\ + 4 & $\infty$ & 1 & 7 & \textcolor{gray}{0} \\ + \hline + \end{tabular} + % + \hspace{5em} + % + \begin{tabular}[t]{|c|cccc|} + \hline + & 1 & 2 & 3 & 4 \\ + \hline + 1 & \textcolor{gray}{-} & - & - & - \\ + 2 & - & \textcolor{gray}{-} & - & - \\ + 3 & - & - & \textcolor{gray}{-} & - \\ + 4 & - & - & - & - \\ + \hline + \end{tabular} + \end{center} + + $A_1$ (Umweg über 1): + \begin{center} + \begin{tikzpicture}[baseline,anchor=north] + \node[draw, circle] (1) {$1$}; + \node[draw, circle, right=of 1] (2) {$2$}; + \node[draw, circle, below=of 1] (3) {$3$}; + \node[draw, circle, right=of 3] (4) {$4$}; + + \path (1) edge node[weight, above] {2} (2); + \path (1) edge node[weight, left] {3} (3); + \path (3) edge node[weight, below] {7} (4); + \path (2) edge node[weight, right] {1} (4); + %\path (1) edge[blue, bend left=45] node[weight, above, blue] {2} (2); + %\path (1) edge[blue, bend right=45] node[weight, left, blue] {3} (3); + \path (2) edge[dashed, red, bend right] node[weight, above left, pos=1] {5} (1.north west); + \path (1.north west) edge[dashed, red, bend right] (3); + \end{tikzpicture} + % + \hspace{5em} + % + \begin{tabular}[t]{|c|gccc|} + \hline + & 1 & 2 & 3 & 4 \\ + \hline + \rowcolor{gray!25} + 1 & \textcolor{gray}{0} & 2 & 3 & $\infty$ \\ + 2 & 2 & \textcolor{gray}{0} & \textcolor{red}{5} & 1 \\ + 3 & 3 & \textcolor{red}{5} & \textcolor{gray}{0} & 7 \\ + 4 & $\infty$ & 1 & 7 & \textcolor{gray}{0} \\ + \hline + \end{tabular} + % + \hspace{5em} + % + \begin{tabular}[t]{|c|cccc|} + \hline + & 1 & 2 & 3 & 4 \\ + \hline + 1 & \textcolor{gray}{-} & - & - & - \\ + 2 & - & \textcolor{gray}{-} & 1 & - \\ + 3 & - & 1 & \textcolor{gray}{-} & - \\ + 4 & - & - & - & - \\ + \hline + \end{tabular} + \end{center} + + $$A_0[2][3] > A_0[3][1] + A_0[1][2] \implies A_1[2][3] = A_0[3][1] + A_0[1][2] = 3 + 2 = 5$$ + $$A_0[3][2] > A_0[2][1] + A_0[1][3] \implies A_1[3][2] = A_0[2][1] + A_0[1][3] = 2 + 3 = 5$$ + + + $A_2$ (Umweg über 2): + \begin{center} + \begin{tikzpicture}[baseline,anchor=north] + \node[draw, circle] (1) {$1$}; + \node[draw, circle, right=of 1] (2) {$2$}; + \node[draw, circle, below=of 1] (3) {$3$}; + \node[draw, circle, right=of 3] (4) {$4$}; + + \path (1) edge node[weight, above] {2} (2); + \path (1) edge node[weight, left] {3} (3); + \path (3) edge node[weight, below] {7} (4); + \path (2) edge node[weight, right] {1} (4); + + % old edge 2-1-3 + \path (2) edge[dashed, blue, bend right] node[weight, above left, pos=1] {5} (1.north west); + \path (1.north west) edge[dashed, blue, bend right] (3); + % new edge 1-2-4 + \path (1) edge[dashed, red, bend left] node[weight, above right, pos=1] {3} (2.north east); + \path (2.north east) edge[dashed, red, bend left] (4); + % old edge 3-2-4 + \path (3) edge[dashed, red, bend left] node[weight, below right, pos=0.5] {6} (2.south west); + \path (2.south west) edge[dashed, red, bend right] (4); + \end{tikzpicture} + % + \hspace{5em} + % + \begin{tabular}[t]{|c|cgcc|} + \hline + & 1 & 2 & 3 & 4 \\ + \hline + 1 & \textcolor{gray}{0} & 2 & 3 & \textcolor{red}{3} \\ + \rowcolor{gray!25} + 2 & 2 & \textcolor{gray}{0} & 5 & 1 \\ + 3 & 3 & 5 & \textcolor{gray}{0} & \textcolor{red}{6} \\ + 4 & \textcolor{red}{3} & 1 & \textcolor{red}{6} & \textcolor{gray}{0} \\ + \hline + \end{tabular} + % + \hspace{5em} + % + \begin{tabular}[t]{|c|cccc|} + \hline + & 1 & 2 & 3 & 4 \\ + \hline + 1 & \textcolor{gray}{-} & - & - & 2 \\ + 2 & - & \textcolor{gray}{-} & 1 & - \\ + 3 & - & 1 & \textcolor{gray}{-} & 2 \\ + 4 & 2 & - & 2 & - \\ + \hline + \end{tabular} + \end{center} + + $$A_1[1][4] > A_1[1][2] + A_1[2][4] \implies A_2[2][3] = A_1[1][2] + A_1[2][4] = 2 + 1 = 3$$ + $$A_1[4][1] > A_1[4][2] + A_1[2][1] \implies A_2[3][2] = A_1[4][2] + A_1[2][1] = 1 + 2 = 3$$ + $$A_1[3][4] > A_1[3][2] + A_1[2][4] \implies A_2[3][4] = A_1[3][2] + A_1[2][4] = 5 + 1 = 6$$ + $$A_1[4][3] > A_1[4][2] + A_1[2][3] \implies A_2[4][3] = A_1[4][2] + A_1[2][3] = 1 + 5 = 6$$ + + $A_3$ (Umweg über 3): + \begin{center} + \begin{tikzpicture}[baseline,anchor=north] + \node[draw, circle] (1) {$1$}; + \node[draw, circle, right=of 1] (2) {$2$}; + \node[draw, circle, below=of 1] (3) {$3$}; + \node[draw, circle, right=of 3] (4) {$4$}; + + \path (1) edge node[weight, above] {2} (2); + \path (1) edge node[weight, left] {3} (3); + \path (3) edge node[weight, below] {7} (4); + \path (2) edge node[weight, right] {1} (4); + + % old edge 2-1-3 + \path (2) edge[dashed, blue, bend right] node[weight, above left, pos=1] {5} (1.north west); + \path (1.north west) edge[dashed, blue, bend right] (3); + % old edge 1-2-4 + \path (1) edge[dashed, blue, bend left] node[weight, above right, pos=1] {3} (2.north east); + \path (2.north east) edge[dashed, blue, bend left] (4); + % old edge 3-2-4 + \path (3) edge[dashed, blue, bend left] node[weight, below right, pos=0.5] {6} (2.south west); + \path (2.south west) edge[dashed, blue, bend right] (4); + \end{tikzpicture} + % + \hspace{5em} + % + \begin{tabular}[t]{|c|ccgc|} + \hline + & 1 & 2 & 3 & 4 \\ + \hline + 1 & \textcolor{gray}{0} & 2 & 3 & 3 \\ + 2 & 2 & \textcolor{gray}{0} & 5 & 1 \\ + \rowcolor{gray!25} + 3 & 3 & 5 & \textcolor{gray}{0} & 6 \\ + 4 & 3 & 1 & 6 & \textcolor{gray}{0} \\ + \hline + \end{tabular} + % + \hspace{5em} + % + \begin{tabular}[t]{|c|cccc|} + \hline + & 1 & 2 & 3 & 4 \\ + \hline + 1 & \textcolor{gray}{-} & - & - & 2 \\ + 2 & - & \textcolor{gray}{-} & 1 & - \\ + 3 & - & 1 & \textcolor{gray}{-} & 2 \\ + 4 & 2 & - & 2 & - \\ + \hline + \end{tabular} + \end{center} + + $A_4$ (Umweg über 4): + \begin{center} + \begin{tikzpicture}[baseline,anchor=north] + \node[draw, circle] (1) {$1$}; + \node[draw, circle, right=of 1] (2) {$2$}; + \node[draw, circle, below=of 1] (3) {$3$}; + \node[draw, circle, right=of 3] (4) {$4$}; + + \path (1) edge node[weight, above] {2} (2); + \path (1) edge node[weight, left] {3} (3); + \path (3) edge node[weight, below] {7} (4); + \path (2) edge node[weight, right] {1} (4); + + % old edge 2-1-3 + \path (2) edge[dashed, blue, bend right] node[weight, above left, pos=1] {5} (1.north west); + \path (1.north west) edge[dashed, blue, bend right] (3); + % old edge 1-2-4 + \path (1) edge[dashed, blue, bend left] node[weight, above right, pos=1] {3} (2.north east); + \path (2.north east) edge[dashed, blue, bend left] (4); + % old edge 3-2-4 + \path (3) edge[dashed, blue, bend left] node[weight, below right, pos=0.5] {6} (2.south west); + \path (2.south west) edge[dashed, blue, bend right] (4); + \end{tikzpicture} + % + \hspace{5em} + % + \begin{tabular}[t]{|c|cccg|} + \hline + & 1 & 2 & 3 & 4 \\ + \hline + 1 & \textcolor{gray}{0} & 2 & 3 & 3 \\ + 2 & 2 & \textcolor{gray}{0} & 5 & 1 \\ + 3 & 3 & 5 & \textcolor{gray}{0} & 6 \\ + \rowcolor{gray!25} + 4 & 3 & 1 & 6 & \textcolor{gray}{0} \\ + \hline + \end{tabular} + % + \hspace{5em} + % + \begin{tabular}[t]{|c|cccc|} + \hline + & 1 & 2 & 3 & 4 \\ + \hline + 1 & \textcolor{gray}{-} & - & - & 2 \\ + 2 & - & \textcolor{gray}{-} & 1 & - \\ + 3 & - & 1 & \textcolor{gray}{-} & 2 \\ + 4 & 2 & - & 2 & - \\ + \hline + \end{tabular} + \end{center} +\end{example} + +\begin{algo}{Warshall-Algorithmus} + Gegeben: Graph $G = (V, E)$, egal ob gerichtet oder nicht. + + Aufgabenstellung: Prüfe für alle geordneten Paare $(v_i, v_j)$, ob ein Weg von $v_i$ nach $v_j$ existiert. + + Ziel: Berechne Adjazenzmatrix $A$ zu \emph{transitivem Abschluss} von $G$: + \begin{center} + $A[i][j] = $ \texttt{true} $\iff$ es existiert ein nicht-trivialer Weg (Länge $>0$) von $v_i$ nach $v_j$ + \end{center} + + Iterationsformel zur Aktualisierung von $A[i][j]$: + $$ + A_k[i][j] = A_{k-1}[i][j] \lor (A_{k-1}[i][k] \land A_{k-1}[k][j]) + $$ + + Der Algorithmus funktioniert also analog zum Floyd-Algorithmus. +\end{algo} + +\begin{code}{Warshall-Algorithmus} + \lstinputlisting{warshall.java} +\end{code} \ No newline at end of file diff --git a/algo/grundbegriffe.tex b/algo/grundbegriffe.tex index d54ea78..6f1ce69 100644 --- a/algo/grundbegriffe.tex +++ b/algo/grundbegriffe.tex @@ -1,101 +1,101 @@ -\section{Grundbegriffe} -\begin{defi}{Eigenschaften eines Algorithmus} - \begin{itemize} - \item \emph{Terminierung:} Der Algorithmus bricht nach \emph{endlichen vielen} Schritten ab. - \item \emph{Determiniertheit:} Bei vorgegebener Eingabe wird ein eindeutiges \emph{Ergebnis} geliefert. - \item \emph{Determinismus:} Eindeutige Vorgabe der \emph{Abfolge} der auszuführenden Schritte - \end{itemize} -\end{defi} - -\begin{defi}{Landau-Notation} - Seien $f, g$ reellwertige Funktionen der reellen Zahlen. - Dann gilt: \cite{wiki:Landau-Symbole} - - \begin{tabular}{l|l|l} - Notation & Definition & Mathematische Definition \\ - \hline - $f \in \bigo(g)$ & obere Schranke & $\exists C > 0 \exists x_0 > 0 \forall x > x_0 : \abs{f(x)} \leq C \cdot \abs{g(x)}$ \\ - $f \in \Omega(g)$ & untere Schranke & $\exists c > 0 \exists x_0 > 0 \forall x > x_0 : c\cdot \abs{g(x)} \leq \abs{f(x)}$ \\ - $f \in \Theta(g)$ & scharfe Schranke & $\exists c > 0 \exists C > 0 \exists x_0 > 0 \forall x > x_0 : c\cdot \abs{g(x)} \leq \abs{f(x)} \leq C \cdot \abs{g(x)}$ \\ - \end{tabular} - - Anschaulicher gilt: - - \begin{tabular}{l|l} - Notation & Anschauliche Bedeutung \\ - \hline - $f \in \bigo(g)$ & $f$ wächst nicht wesentlich schneller als $g$ \\ - $f \in \Omega(g)$ & $f$ wächst nicht wesentlich langsamer als $g$ \\ - $f \in \Theta(g)$ & $f$ wächst genauso schnell wie $g$ - \end{tabular} -\end{defi} - -\begin{example}{Landau-Notation} - Aus \cite{wiki:Landau-Symbole} : - - \begin{tabular}{l|l} - Notation & Beispiel \\ - \hline - $f \in \bigo(1)$ & Feststellen, ob eine Binärzahl gerade ist \\ - $f \in \bigo(\log n)$ & Binäre Suche im sortierten Feld mit $n$ Einträgen \\ - $f \in \bigo(\sqrt{n})$ & Anzahl der Divisionen des naiven Primzahltests \\ - $f \in \bigo(n)$ & Suche im unsortierten Feld mit $n$ Einträgen \\ - $f \in \bigo(n\log n)$ & Mergesort, Heapsort \\ - $f \in \bigo(n^2)$ & Selectionsort \\ - $f \in \bigo(n^m)$ & \\ - $f \in \bigo(2^{cn})$ & (Backtracking) \\ - $f \in \bigo(n!)$ & Traveling Salesman Problem - \end{tabular} -\end{example} - -\begin{bonus}{Visualisierung Komplexitätsklassen} - \begin{center} - \begin{tikzpicture}[scale=1] - \begin{axis}[ - %view={45}{15}, - width=15cm, - unit vector ratio*=1 1, - axis lines = middle, - grid=major, - ymin=0, - ymax=50, - xmin=0, - xmax=50, - %zmin=-1, - %zmax=10, - xlabel = $n$, - ylabel = $N$, - %zlabel = $z$, - %xtick style={draw=none}, - %ytick style={draw=none}, - %ztick style={draw=none}, - xtick distance={5}, - ytick distance={5}, - %ztick distance={1}, - %xticklabels=\empty, - %yticklabels=\empty, - %zticklabels=\empty, - disabledatascaling, - %stack dir=minus, - cycle list name=color list, - samples=250, - solid, - smooth, - line width=1.0pt, - no markers, - legend cell align={left}, - reverse legend, - ] - - \addplot +[domain=0:50]{0}; \addlegendentry{$\bigo(1)$}; - \addplot +[domain=0:50]{ln(x)}; \addlegendentry{$\bigo(\log(n))$}; - \addplot +[domain=0:50]{sqrt(x)}; \addlegendentry{$\bigo(\sqrt{n})$}; - \addplot +[domain=0:50]{x}; \addlegendentry{$\bigo(n)$}; - \addplot +[domain=0:50]{x * ln(x)}; \addlegendentry{$\bigo(n \log(n))$}; - \addplot +[domain=0:50]{x^2}; \addlegendentry{$\bigo(n^2)$}; - \addplot +[domain=0:10]{2^x}; \addlegendentry{$\bigo(2^n)$}; - \addplot +[domain=0:5]{facreal(x)}; \addlegendentry{$\bigo(n!)$}; - \end{axis} - \end{tikzpicture} - \end{center} -\end{bonus} +\section{Grundbegriffe} +\begin{defi}{Eigenschaften eines Algorithmus} + \begin{itemize} + \item \emph{Terminierung:} Der Algorithmus bricht nach \emph{endlichen vielen} Schritten ab. + \item \emph{Determiniertheit:} Bei vorgegebener Eingabe wird ein eindeutiges \emph{Ergebnis} geliefert. + \item \emph{Determinismus:} Eindeutige Vorgabe der \emph{Abfolge} der auszuführenden Schritte + \end{itemize} +\end{defi} + +\begin{defi}{Landau-Notation} + Seien $f, g$ reellwertige Funktionen der reellen Zahlen. + Dann gilt: \cite{wiki:Landau-Symbole} + + \begin{tabular}{l|l|l} + Notation & Definition & Mathematische Definition \\ + \hline + $f \in \bigo(g)$ & obere Schranke & $\exists C > 0 \exists x_0 > 0 \forall x > x_0 : \abs{f(x)} \leq C \cdot \abs{g(x)}$ \\ + $f \in \Omega(g)$ & untere Schranke & $\exists c > 0 \exists x_0 > 0 \forall x > x_0 : c\cdot \abs{g(x)} \leq \abs{f(x)}$ \\ + $f \in \Theta(g)$ & scharfe Schranke & $\exists c > 0 \exists C > 0 \exists x_0 > 0 \forall x > x_0 : c\cdot \abs{g(x)} \leq \abs{f(x)} \leq C \cdot \abs{g(x)}$ \\ + \end{tabular} + + Anschaulicher gilt: + + \begin{tabular}{l|l} + Notation & Anschauliche Bedeutung \\ + \hline + $f \in \bigo(g)$ & $f$ wächst nicht wesentlich schneller als $g$ \\ + $f \in \Omega(g)$ & $f$ wächst nicht wesentlich langsamer als $g$ \\ + $f \in \Theta(g)$ & $f$ wächst genauso schnell wie $g$ + \end{tabular} +\end{defi} + +\begin{example}{Landau-Notation} + Aus \cite{wiki:Landau-Symbole} : + + \begin{tabular}{l|l} + Notation & Beispiel \\ + \hline + $f \in \bigo(1)$ & Feststellen, ob eine Binärzahl gerade ist \\ + $f \in \bigo(\log n)$ & Binäre Suche im sortierten Feld mit $n$ Einträgen \\ + $f \in \bigo(\sqrt{n})$ & Anzahl der Divisionen des naiven Primzahltests \\ + $f \in \bigo(n)$ & Suche im unsortierten Feld mit $n$ Einträgen \\ + $f \in \bigo(n\log n)$ & Mergesort, Heapsort \\ + $f \in \bigo(n^2)$ & Selectionsort \\ + $f \in \bigo(n^m)$ & \\ + $f \in \bigo(2^{cn})$ & (Backtracking) \\ + $f \in \bigo(n!)$ & Traveling Salesman Problem + \end{tabular} +\end{example} + +\begin{bonus}{Visualisierung Komplexitätsklassen} + \begin{center} + \begin{tikzpicture}[scale=1] + \begin{axis}[ + %view={45}{15}, + width=15cm, + unit vector ratio*=1 1, + axis lines = middle, + grid=major, + ymin=0, + ymax=50, + xmin=0, + xmax=50, + %zmin=-1, + %zmax=10, + xlabel = $n$, + ylabel = $N$, + %zlabel = $z$, + %xtick style={draw=none}, + %ytick style={draw=none}, + %ztick style={draw=none}, + xtick distance={5}, + ytick distance={5}, + %ztick distance={1}, + %xticklabels=\empty, + %yticklabels=\empty, + %zticklabels=\empty, + disabledatascaling, + %stack dir=minus, + cycle list name=color list, + samples=250, + solid, + smooth, + line width=1.0pt, + no markers, + legend cell align={left}, + reverse legend, + ] + + \addplot +[domain=0:50]{0}; \addlegendentry{$\bigo(1)$}; + \addplot +[domain=0:50]{ln(x)}; \addlegendentry{$\bigo(\log(n))$}; + \addplot +[domain=0:50]{sqrt(x)}; \addlegendentry{$\bigo(\sqrt{n})$}; + \addplot +[domain=0:50]{x}; \addlegendentry{$\bigo(n)$}; + \addplot +[domain=0:50]{x * ln(x)}; \addlegendentry{$\bigo(n \log(n))$}; + \addplot +[domain=0:50]{x^2}; \addlegendentry{$\bigo(n^2)$}; + \addplot +[domain=0:10]{2^x}; \addlegendentry{$\bigo(2^n)$}; + \addplot +[domain=0:5]{facreal(x)}; \addlegendentry{$\bigo(n!)$}; + \end{axis} + \end{tikzpicture} + \end{center} +\end{bonus} diff --git a/algo/insertionsort.java b/algo/insertionsort.java new file mode 100644 index 0000000..fc3f233 --- /dev/null +++ b/algo/insertionsort.java @@ -0,0 +1,18 @@ +public void insertionSort(int[] a) { + for (int i = 0; i < a.length; i++) { + int m = a[i]; + + // fuer alle Elemente links vom aktuellen Element + for(int j = i; j > 0; j--) { + if (a[j-1] <= m) { + break; + } + + // groessere Elemente nach hinten schieben + a[j] = a[j-1]; + } + + // m an freiem Platz einfuegen + a[j] = m; + } +} \ No newline at end of file diff --git a/algo/selectionsort.java b/algo/selectionsort.java new file mode 100644 index 0000000..17c40a3 --- /dev/null +++ b/algo/selectionsort.java @@ -0,0 +1,11 @@ +public void selectionSort (int[] a) { + for(int i = 0; i < a.length; i++) { + int small = i; + for(int j = i+1; j < a.length; j++) { + if(a[small] > a[j]) { + small = j; + } + } + swap(a, i, small); + } +} \ No newline at end of file diff --git a/algo/simplesort.java b/algo/simplesort.java new file mode 100644 index 0000000..6b01bdb --- /dev/null +++ b/algo/simplesort.java @@ -0,0 +1,9 @@ +public void simpleSort (int[] a) { + for(int i = 0; i < a.length; i++) { + for(int j = i+1; j < a.length; j++) { + if (a[i] > a[j]) { + swap(a, i, j); + } + } + } +} \ No newline at end of file diff --git a/algo/sortierverfahren.tex b/algo/sortierverfahren.tex new file mode 100644 index 0000000..8445bc1 --- /dev/null +++ b/algo/sortierverfahren.tex @@ -0,0 +1,1454 @@ +\section{Sortierverfahren} + +\begin{defi}{Klassifikationskriterien für Sortieralgorithmen} + \begin{itemize} + \item Effizienz + \begin{itemize} + \item Schlechter als $\bigo(n^2)$: nicht ganz ernst gemeinte Verfahren + \item $\bigo(n^2)$: Elementare Sortierverfahren + \begin{itemize} + \item Bubble-Sort + \item Insertion-Sort + \item Selection-Sort + \end{itemize} + \item Zwischen $\bigo(n^2)$ und $\bigo(n \log n)$ + \begin{itemize} + \item Shell-Sort + \end{itemize} + \item $\bigo(n \log n)$: Höhere Sortierverfahren + \begin{itemize} + \item Heap-Sort + \item Merge-Sort + \item Quick-Sort + \end{itemize} + \item Besser als $\bigo(n \log n)$: Spezialisierte Sortierverfahren + \begin{itemize} + \item Radix-Sort + \end{itemize} + \end{itemize} + \item Speicherverbrauch + \item Intern vs. Extern + \item Stabil vs. Instabil + \item allgemein vs. spezialisiert + \end{itemize} +\end{defi} + +\begin{bonus}{Beste Sortierverfahren} + \begin{itemize} + \item normalerweise Quick-Sort + \item Merge-Sort, falls: + \begin{itemize} + \item die Datenmenge zu groß für den Hauptspeicher ist. + \item die Daten als verkettete Liste vorliegen. + \item ein stabiles Verfahren nötig ist. + \end{itemize} + \item Insertion-Sort, falls: + \begin{itemize} + \item wenige Elemente u sortieren sind. + \item die Daten schon vorsortiert sind. + \end{itemize} + \item Radix-Sort, falls: + \begin{itemize} + \item sich ein hoher Programmieraufwand für ein sehr schnelles Verfahren lohnt. + \end{itemize} + \end{itemize} +\end{bonus} + +\subsection{Elementare Sortierverfahren} + +\begin{algo}{Simple-Sort} + Das Suchen und Vertauschen wir bei \emph{Simple-Sort} wie folgt realisiert: + \begin{enumerate} + \item Gehe vom Element \texttt{i} aus nach rechts + \item Jedes Mal, wenn ein kleineres Element als das auf Position \texttt{i} auftaucht, vertausche es mit dem Element \texttt{i} + \item Wiederholen bis das Array sortiert ist + \end{enumerate} + + Simple-Sort ergibt einen besonders einfachen Code, ist aber langsamer als z.B. Selection-Sort. + Dann zu nutzen, wenn: + \begin{itemize} + \item Sie keine Zeit oder Lust zum Nachdenken haben. + \item die Felder so klein sind, dass der Algorithmus nicht effektiv sein muss. + \item niemand sonst Ihren Code zu sehen bekommt. + \end{itemize} +\end{algo} + +\begin{code}{Simple-Sort} + \lstinputlisting{simplesort.java} +\end{code} + +\begin{algo}{Selection-Sort} + \emph{Selection-Sort} funktioniert ähnlich wie Simple-Sort: + \begin{enumerate} + \item Suchen des kleinsten Elements im unsortierten Bereich + \item Vertauschen mit Position \texttt{i} + \item Wiederholen bis das Array sortiert ist + \end{enumerate} + + Selection-Sort ist eines der wichtigeren elementaren Verfahren, ist aber meistens etwas langsamer als Insertion-Sort. + + Selection-Sort ist instabil und bietet keine Vorteile, wenn das Feld schon vorsortiert ist. +\end{algo} + +\begin{code}{Selection-Sort} + \lstinputlisting{selectionsort.java} +\end{code} + +\begin{example}{Selection-Sort} + \centering + + \begin{tikzpicture}[ + start chain, + node distance = 0em, + ArrayBlock/.style={draw, minimum width=2em, minimum height=2em, outer sep=0pt, on chain}, + sorted/.style={fill=blue!25}, + i/.style={fill=teal!25, label=above:\texttt{i}}, + min/.style={fill=red!25, label=above:\texttt{min}}, + i min/.style={fill=teal!25, label=above:\texttt{i,min}}, + ] + { start chain = going right + + \node [ArrayBlock, i] (0_3) {$3$}; + \node [ArrayBlock] (0_8a) {$8_a$}; + \node [ArrayBlock] (0_8b) {$8_b$}; + \node [ArrayBlock] (0_6) {$6$}; + \node [ArrayBlock] (0_4) {$4$}; + \node [ArrayBlock, min] (0_2) {$2$}; + + { [continue chain = going right] + \chainin (0_3); + + \node [ArrayBlock, xshift=-2em, yshift=-4em, sorted] (1_2) {$2$}; + \node [ArrayBlock, i] (1_8a) {$8_a$}; + \node [ArrayBlock] (1_8b) {$8_b$}; + \node [ArrayBlock] (1_6) {$6$}; + \node [ArrayBlock] (1_4) {$4$}; + \node [ArrayBlock, min] (1_3) {$3$}; + } + + { [continue chain = going right] + \chainin (0_3); + + \node [ArrayBlock, xshift=-2em, yshift=-8em, sorted] (2_2) {$2$}; + \node [ArrayBlock, sorted] (2_3) {$3$}; + \node [ArrayBlock, i] (2_8b) {$8_b$}; + \node [ArrayBlock] (2_6) {$6$}; + \node [ArrayBlock, min] (2_4) {$4$}; + \node [ArrayBlock] (2_8a) {$8_a$}; + } + + { [continue chain = going right] + \chainin (0_3); + + \node [ArrayBlock, xshift=-2em, yshift=-12em, sorted] (3_2) {$2$}; + \node [ArrayBlock, sorted] (3_3) {$3$}; + \node [ArrayBlock, sorted] (3_4) {$4$}; + \node [ArrayBlock, i min] (3_6) {$6$}; + \node [ArrayBlock] (3_8b) {$8_b$}; + \node [ArrayBlock] (3_8a) {$8_a$}; + } + + { [continue chain = going right] + \chainin (0_3); + + \node [ArrayBlock, xshift=-2em, yshift=-16em, sorted] (4_2) {$2$}; + \node [ArrayBlock, sorted] (4_3) {$3$}; + \node [ArrayBlock, sorted] (4_4) {$4$}; + \node [ArrayBlock, sorted] (4_6) {$6$}; + \node [ArrayBlock, i min] (4_8b) {$8_b$}; + \node [ArrayBlock] (4_8a) {$8_a$}; + } + + { [continue chain = going right] + \chainin (0_3); + + \node [ArrayBlock, xshift=-2em, yshift=-20em, sorted] (5_2) {$2$}; + \node [ArrayBlock, sorted] (5_3) {$3$}; + \node [ArrayBlock, sorted] (5_4) {$4$}; + \node [ArrayBlock, sorted] (5_6) {$6$}; + \node [ArrayBlock, sorted] (5_8b) {$8_b$}; + \node [ArrayBlock, i min] (5_8a) {$8_a$}; + } + + { [continue chain = going right] + \chainin (0_3); + + \node [ArrayBlock, xshift=-2em, yshift=-24em, sorted] (6_2) {$2$}; + \node [ArrayBlock, sorted] (6_3) {$3$}; + \node [ArrayBlock, sorted] (6_4) {$4$}; + \node [ArrayBlock, sorted] (6_6) {$6$}; + \node [ArrayBlock, sorted] (6_8b) {$8_b$}; + \node [ArrayBlock, sorted] (6_8a) {$8_a$}; + } + } + + \draw[<->] (0_3) -- ++(0,-1.5em) -| (0_2); + \draw[<->] (1_3) -- ++(0,-1.5em) -| (1_8a); + \draw[<->] (2_4) -- ++(0,-1.5em) -| (2_8b); + \draw[<->] (3_6) -- ++(0,-1.5em) -| (3_6); + \draw[<->] (4_8b) -- ++(0,-1.5em) -| (4_8b); + \draw[<->] (5_8a) -- ++(0,-1.5em) -| (5_8a); + \end{tikzpicture} +\end{example} + +\begin{algo}{Insertion-Sort} + Die Grundidee ist: + \begin{enumerate} + \item Starte mit einem Wert im Array (meist Position \texttt{0}) + \item Nimm jeweils den nächsten Eintrag im Array und füge ihn an der richtigen Stelle im sortierten Bereich ein + \item Wiederholen bis das Array sortiert ist + \end{enumerate} + + Insertion-Sort ist in den meisten Fällen der schnellste elementare Suchalgorithmus - auch, weil er potentielle Vorsortierung ausnutzt. + + Insertion-Sort ist stabil. +\end{algo} + +\begin{code}{Insertion-Sort} + \lstinputlisting{insertionsort.java} +\end{code} + +\begin{example}{Insertion-Sort} + \centering + + \begin{tikzpicture}[ + start chain, + node distance = 0em, + ArrayBlock/.style={draw, minimum width=2em, minimum height=2em, outer sep=0pt, on chain}, + sorted/.style={fill=blue!25}, + i/.style={fill=teal!25, label=above:\texttt{i}}, + ] + { start chain = going right + + \node [ArrayBlock, i] (0_3) {$3$}; + \node [ArrayBlock] (0_8a) {$8_a$}; + \node [ArrayBlock] (0_8b) {$8_b$}; + \node [ArrayBlock] (0_6) {$6$}; + \node [ArrayBlock] (0_4) {$4$}; + \node [ArrayBlock] (0_2) {$2$}; + + { [continue chain = going right] + \chainin (0_3); + + \node [ArrayBlock, xshift=-2em, yshift=-4em, sorted] (1_3) {$3$}; + \node [ArrayBlock, i] (1_8a) {$8_a$}; + \node [ArrayBlock] (1_8b) {$8_b$}; + \node [ArrayBlock] (1_6) {$6$}; + \node [ArrayBlock] (1_4) {$4$}; + \node [ArrayBlock] (1_2) {$2$}; + } + + { [continue chain = going right] + \chainin (0_3); + + \node [ArrayBlock, xshift=-2em, yshift=-8em, sorted] (2_3) {$3$}; + \node [ArrayBlock, sorted] (2_8a) {$8_a$}; + \node [ArrayBlock, i] (2_8b) {$8_b$}; + \node [ArrayBlock] (2_6) {$6$}; + \node [ArrayBlock] (2_4) {$4$}; + \node [ArrayBlock] (2_2) {$2$}; + } + + { [continue chain = going right] + \chainin (0_3); + + \node [ArrayBlock, xshift=-2em, yshift=-12em, sorted] (3_3) {$3$}; + \node [ArrayBlock, sorted] (3_8a) {$8_a$}; + \node [ArrayBlock, sorted] (3_8b) {$8_b$}; + \node [ArrayBlock, i] (3_6) {$6$}; + \node [ArrayBlock] (3_4) {$4$}; + \node [ArrayBlock] (3_2) {$2$}; + } + + { [continue chain = going right] + \chainin (0_3); + + \node [ArrayBlock, xshift=-2em, yshift=-16em, sorted] (4_3) {$3$}; + \node [ArrayBlock, sorted] (4_6) {$6$}; + \node [ArrayBlock, sorted] (4_8a) {$8_a$}; + \node [ArrayBlock, sorted] (4_8b) {$8_b$}; + \node [ArrayBlock, i] (4_4) {$4$}; + \node [ArrayBlock] (4_2) {$2$}; + } + + { [continue chain = going right] + \chainin (0_3); + + \node [ArrayBlock, xshift=-2em, yshift=-20em, sorted] (5_3) {$3$}; + \node [ArrayBlock, sorted] (5_4) {$4$}; + \node [ArrayBlock, sorted] (5_6) {$6$}; + \node [ArrayBlock, sorted] (5_8a) {$8_a$}; + \node [ArrayBlock, sorted] (5_8b) {$8_b$}; + \node [ArrayBlock, i] (5_2) {$2$}; + } + + { [continue chain = going right] + \chainin (0_3); + + \node [ArrayBlock, xshift=-2em, yshift=-24em, sorted] (6_2) {$2$}; + \node [ArrayBlock, sorted] (6_3) {$3$}; + \node [ArrayBlock, sorted] (6_4) {$4$}; + \node [ArrayBlock, sorted] (6_6) {$6$}; + \node [ArrayBlock, sorted] (6_8a) {$8_a$}; + \node [ArrayBlock, sorted] (6_8b) {$8_b$}; + } + + \draw[<->] (0_3) -- ++(0,-1.5em) -| (0_3.south west); + \draw[<->] (1_8a) -- ++(0,-1.5em) -| (1_8a.south west); + \draw[<->] (2_8b) -- ++(0,-1.5em) -| (2_8b.south west); + \draw[<->] (3_6) -- ++(0,-1.5em) -| (3_8a.south west); + \draw[<->] (4_4) -- ++(0,-1.5em) -| (4_6.south west); + \draw[<->] (5_2) -- ++(0,-1.5em) -| (5_3.south west); + } + \end{tikzpicture} +\end{example} + +\begin{bonus}{Bewertung elementarer Sortierverfahren} + \begin{itemize} + \item Simple-Sort + \begin{itemize} + \item Einfach zu implementieren + \item Langsam + \end{itemize} + \item Selection-Sort + \begin{itemize} + \item Aufwand unabhängig von Vorsortierung + \item nie mehr als $\bigo(n)$ Vertauschungen nötig + \end{itemize} + \item Bubble-Sort + \begin{itemize} + \item Stabil + \item Vorsortierung wird ausgenutzt + \end{itemize} + \item Insertion-Sort + \begin{itemize} + \item Stabil + \item Vorsortierung wird ausgenutzt + \item schnell für eine elementares Suchverfahren ($\bigo(n^2)$) + \end{itemize} + \end{itemize} +\end{bonus} + +\subsection{Höhere Sortierverfahren} + +\begin{algo}{Heap-Sort} + Der Heap ist Grundlage für das Sortierverfahren \emph{Heap-Sort}. + + \begin{itemize} + \item Zu Beginn: Unsortiertes Feld + \item Phase 1: + \begin{itemize} + \item Alle Elemente werden nacheinander in einen Heap eingefügt + \item Resultat ist ein Heap, der in ein Feld eingebettet ist + \end{itemize} + \item Phase 2: + \begin{itemize} + \item Die Elemente werden in absteigender Reihenfolge entfernt (Wurzel!) + \item Heap schrumpft immer weiter + \end{itemize} + \end{itemize} + + \begin{center} + \begin{tikzpicture} + [ + start chain, + node distance = 0pt, + HeapBlock/.style={draw, minimum width=2em, minimum height=2em, outer sep=0pt, on chain, fill=teal!30}, + SortedBlock/.style={draw, minimum width=2em, minimum height=2em, outer sep=0pt, on chain, fill=blue!30}, + ] + + { start chain = going right + \node [HeapBlock, label=above:\texttt{root}] (1) {$0$}; + \node [HeapBlock] (2) {$1$}; + \node [HeapBlock] (3) {$2$}; + \node [HeapBlock] (dots) {$\ldots$}; + \node [HeapBlock] (n2) {$n-2$}; + \node [HeapBlock] (n1) {$n-1$}; + \node [HeapBlock] (n) {$n$}; + + \draw[->, blue] ([yshift=1em] 1.north east) to[bend left=30] ([yshift=.5em] n.north); + + \draw [decorate,decoration={brace,amplitude=5pt,mirror,raise=.5em}] + (1.south west) -- (n.south east) node[midway,yshift=-2em]{Heap}; + %\draw[->] (val.south) [out=-30, in=-150] to (4.south); + } + \end{tikzpicture} + \hspace{4em} + \begin{tikzpicture} + [ + start chain, + node distance = 0pt, + HeapBlock/.style={draw, minimum width=2em, minimum height=2em, outer sep=0pt, on chain, fill=teal!30}, + SortedBlock/.style={draw, minimum width=2em, minimum height=2em, outer sep=0pt, on chain, fill=blue!30}, + ] + + { start chain = going right + \node [HeapBlock, label=above:\texttt{root}] (1) {$0$}; + \node [HeapBlock] (2) {$1$}; + \node [HeapBlock] (3) {$2$}; + \node [HeapBlock] (dots) {$\ldots$}; + \node [HeapBlock] (n2) {$n-2$}; + \node [HeapBlock] (n1) {$n-1$}; + \node [SortedBlock] (n) {$n$}; + + \draw[->, blue] ([yshift=1em] 1.north east) to[bend left=30] ([yshift=.5em] n1.north); + + \draw [decorate,decoration={brace,amplitude=5pt,mirror,raise=.5em}] + (1.south west) -- (n1.south east) node[midway,yshift=-2em]{Heap}; + + \draw [decorate,decoration={brace,amplitude=5pt,mirror,raise=.5em}] + (n.south west) -- (n.south east) node[midway,yshift=-2em]{sortiertes Array}; + %\draw[->] (val.south) [out=-30, in=-150] to (4.south); + } + \end{tikzpicture} + + \begin{tikzpicture} + [ + start chain, + node distance = 0pt, + HeapBlock/.style={draw, minimum width=2em, minimum height=2em, outer sep=0pt, on chain, fill=teal!30}, + SortedBlock/.style={draw, minimum width=2em, minimum height=2em, outer sep=0pt, on chain, fill=blue!30}, + ] + + { start chain = going right + \node [HeapBlock, label=above:\texttt{root}] (1) {$0$}; + \node [HeapBlock] (2) {$1$}; + \node [HeapBlock] (3) {$2$}; + \node [HeapBlock] (dots) {$\ldots$}; + \node [HeapBlock] (n2) {$n-2$}; + \node [SortedBlock] (n1) {$n-1$}; + \node [SortedBlock] (n) {$n$}; + \node [xshift=2em, on chain] (dots2) {$\ldots$}; + + \draw[->, blue] ([yshift=1em] 1.north east) to[bend left=30] ([yshift=.5em] n2.north); + + \draw [decorate,decoration={brace,amplitude=5pt,mirror,raise=.5em}] + (1.south west) -- (n2.south east) node[midway,yshift=-2em]{Heap}; + + \draw [decorate,decoration={brace,amplitude=5pt,mirror,raise=.5em}] + (n1.south west) -- (n.south east) node[midway,yshift=-2em]{sortiertes Array}; + %\draw[->] (val.south) [out=-30, in=-150] to (4.south); + } + \end{tikzpicture} + \hspace{1em} + \begin{tikzpicture} + [ + start chain, + node distance = 0pt, + HeapBlock/.style={draw, minimum width=2em, minimum height=2em, outer sep=0pt, on chain, fill=teal!30}, + SortedBlock/.style={draw, minimum width=2em, minimum height=2em, outer sep=0pt, on chain, fill=blue!30}, + ] + + { start chain = going right + \node [SortedBlock] (1) {$0$}; + \node [SortedBlock] (2) {$1$}; + \node [SortedBlock] (3) {$2$}; + \node [SortedBlock] (dots) {$\ldots$}; + \node [SortedBlock] (n2) {$n-2$}; + \node [SortedBlock] (n1) {$n-1$}; + \node [SortedBlock] (n) {$n$}; + + %\draw[->, blue] ([yshift=1em] 1.north) to[bend left=30] ([yshift=.5em] n2.north); + + %\draw [decorate,decoration={brace,amplitude=5pt,mirror,raise=.5em}] + %(1.south west) -- (n2.south east) node[midway,yshift=-2em]{Heap}; + + \draw [decorate,decoration={brace,amplitude=5pt,mirror,raise=.5em}] + (1.south west) -- (n.south east) node[midway,yshift=-2em]{sortiertes Array}; + %\draw[->] (val.south) [out=-30, in=-150] to (4.south); + } + \end{tikzpicture} + \end{center} +\end{algo} + +\begin{algo}{Quick-Sort} + \emph{Quick-Sort} ist ein rekursiver Algorithmus, der nach dem Prinzip von \glqq divide-and-conquer\grqq (\glqq teile und herrsche\grqq) arbeitet: + \begin{enumerate} + \item Müssen 0 oder 1 Elemente sortiert werden: Rekursionsabbruch + \item Wähle ein Element als \emph{Pivot-Element} aus + \item Teile das Feld in zwei Teile Teile:\footnote{Beachte: Die Elemente werden \emph{in-place} getauscht. Siehe Beispiel.} + \begin{itemize} + \item Ein Teil mit den Elementen größer als das Pivot. + \item Ein Teil mit den Elementen kleiner als das Pivot. + \end{itemize} + \item Wiederhole rekursiv für beide Teilfelder. + \end{enumerate} + + + Die überwiegende Mehrheit der Programmbibliotheken benutzt Quick-Sort. + In fast allen Fällen sind zwei Optimierungen eingebaut: + \begin{itemize} + \item \glqq Median of three\grqq + \item \glqq Behandlung kleiner Teilfelder\grqq + \end{itemize} +\end{algo} + +\begin{example}{Quick-Sort} + \textcolor{red}{ACHTUNG: Das Beispiel muss in Rücksprache mit Herrn Pflug noch angepasst werden. + Der in der Vorlesung benutzte - und damit klausurrelevante - Quick-Sort nutzt ein \emph{in-place}-Verfahren zum Aufteilen der Elemente. + Das Beispiel unten (noch) nicht.} + + \centering + + \begin{tikzpicture}[ + start chain, + node distance = 0pt, + pivot/.style = {draw, red, on chain, label=above:\texttt{pivot}, xshift=1em}, + array/.style = {draw, minimum width=2em, minimum height=2em, outer sep=0pt, on chain}, + sorted/.style = {array, fill=blue!25}, + ] + { start chain = going right + \node [array] (23) {$23$}; + \node [array] (01) {$1$}; + \node [array] (05) {$5$}; + \node [array] (20) {$20$}; + \node [array] (10) {$10$}; + \node [array] (18) {$18$}; + \node [array] (08) {$8$}; + \node [array] (46) {$46$}; + \node [array] (11) {$11$}; + \node [array] (03) {$3$}; + \node [array] (36) {$36$}; + \node [array] (07) {$7$}; + \node [array] (30) {$30$}; + \node [array] (09) {$9$}; + } + \end{tikzpicture} + + \begin{tikzpicture}[ + start chain, + node distance = 0pt, + pivot/.style = {draw, red, on chain, label=above:\texttt{pivot}, xshift=1em}, + array/.style = {draw, minimum width=2em, minimum height=2em, outer sep=0pt, on chain}, + sorted/.style = {array, fill=blue!25}, + ] + { start chain = going right + \node [array] (23) {$23$}; + \node [array] (01) {$1$}; + \node [array] (05) {$5$}; + \node [array] (20) {$20$}; + \node [array] (10) {$10$}; + \node [array] (18) {$18$}; + \node [array] (08) {$8$}; + \node [array] (46) {$46$}; + \node [array] (11) {$11$}; + \node [array] (03) {$3$}; + \node [array] (36) {$36$}; + \node [array] (07) {$7$}; + \node [array] (30) {$30$}; + \node [array, pivot] (09) {$9$}; + } + \end{tikzpicture} + + \begin{tikzpicture}[ + start chain, + node distance = 0pt, + shifted/.style = {xshift=1em}, + pivot/.style = {draw, red, on chain, label=above:\texttt{pivot}}, + array/.style = {draw, minimum width=2em, minimum height=2em, outer sep=0pt, on chain}, + sorted/.style = {array, fill=blue!25}, + ] + { start chain = going right + \node [array] (01) {$1$}; + \node [array] (05) {$5$}; + \node [array] (08) {$8$}; + \node [array] (03) {$3$}; + \node [array] (07) {$7$}; + % + \node [array, pivot, shifted] (09) {$9$}; + % + \node [array, shifted] (23) {$23$}; + \node [array] (20) {$20$}; + \node [array] (10) {$10$}; + \node [array] (18) {$18$}; + \node [array] (46) {$46$}; + \node [array] (11) {$11$}; + \node [array] (36) {$36$}; + \node [array] (30) {$30$}; + } + + \draw [decorate,decoration={brace,amplitude=5pt,raise=.5em}] + (01.north west) -- (07.north east) node[midway,yshift=1.5em] {\texttt{<= 9}}; + \draw [decorate,decoration={brace,amplitude=5pt,raise=.5em}] + (23.north west) -- (30.north east) node[midway,yshift=1.5em] {\texttt{> 9}}; + \end{tikzpicture} + + + + \begin{tikzpicture}[ + start chain, + node distance = 0pt, + shifted/.style = {xshift=1em}, + pivot/.style = {draw, red, on chain, label=above:\texttt{pivot}}, + array/.style = {draw, minimum width=2em, minimum height=2em, outer sep=0pt, on chain}, + sorted/.style = {array, fill=blue!25}, + ] + { start chain = going right + \node [array] (01) {$1$}; + \node [array] (05) {$5$}; + \node [array] (08) {$8$}; + \node [array] (03) {$3$}; + \node [array] (07) {$7$}; + % + \node [array, sorted, shifted] (09) {$9$}; + % + \node [array, shifted] (23) {$23$}; + \node [array] (20) {$20$}; + \node [array] (10) {$10$}; + \node [array] (18) {$18$}; + \node [array] (46) {$46$}; + \node [array] (11) {$11$}; + \node [array] (36) {$36$}; + \node [array] (30) {$30$}; + } + \end{tikzpicture} + + \begin{tikzpicture}[ + start chain, + node distance = 0pt, + shifted/.style = {xshift=1em}, + pivot/.style = {draw, red, on chain, label=above:\texttt{pivot}}, + array/.style = {draw, minimum width=2em, minimum height=2em, outer sep=0pt, on chain}, + sorted/.style = {array, fill=blue!25}, + ] + { start chain = going right + \node [array] (01) {$1$}; + \node [array] (05) {$5$}; + \node [array] (08) {$8$}; + \node [array] (03) {$3$}; + % + \node [array, pivot, shifted] (07) {$7$}; + % + \node [array, shifted, sorted] (09) {$9$}; + % + \node [array, shifted] (23) {$23$}; + \node [array] (20) {$20$}; + \node [array] (10) {$10$}; + \node [array] (18) {$18$}; + \node [array] (46) {$46$}; + \node [array] (11) {$11$}; + \node [array] (36) {$36$}; + \node [array, pivot, shifted] (30) {$30$}; + } + \end{tikzpicture} + + \begin{tikzpicture}[ + start chain, + node distance = 0pt, + shifted/.style = {xshift=1em}, + pivot/.style = {draw, red, on chain, label=above:\texttt{pivot}}, + array/.style = {draw, minimum width=2em, minimum height=2em, outer sep=0pt, on chain}, + sorted/.style = {array, fill=blue!25}, + ] + { start chain = going right + \node [array] (01) {$1$}; + \node [array] (05) {$5$}; + \node [array] (03) {$3$}; + % + \node [array, pivot, shifted] (07) {$7$}; + % + \node [array, shifted] (08) {$8$}; + % + \node [array, shifted, sorted] (09) {$9$}; + % + \node [array, shifted] (23) {$23$}; + \node [array] (20) {$20$}; + \node [array] (10) {$10$}; + \node [array] (18) {$18$}; + \node [array] (11) {$11$}; + % + \node [array, pivot, shifted] (30) {$30$}; + % + \node [array, shifted] (46) {$46$}; + \node [array] (36) {$36$}; + } + + \draw [decorate,decoration={brace,amplitude=5pt,raise=.5em}] + (01.north west) -- (03.north east) node[midway,yshift=1.5em] {\texttt{<= 7}}; + \draw [decorate,decoration={brace,amplitude=5pt,raise=.5em}] + (08.north west) -- (08.north east) node[midway,yshift=1.5em] {\texttt{> 7}}; + + \draw [decorate,decoration={brace,amplitude=5pt,raise=.5em}] + (23.north west) -- (11.north east) node[midway,yshift=1.5em] {\texttt{<= 30}}; + \draw [decorate,decoration={brace,amplitude=5pt,raise=.5em}] + (46.north west) -- (36.north east) node[midway,yshift=1.5em] {\texttt{> 30}}; + \end{tikzpicture} + + \begin{tikzpicture}[ + start chain, + node distance = 0pt, + shifted/.style = {xshift=1em}, + pivot/.style = {draw, red, on chain, label=above:\texttt{pivot}}, + array/.style = {draw, minimum width=2em, minimum height=2em, outer sep=0pt, on chain}, + sorted pivot/.style = {array, fill=blue!25}, + sorted end/.style = {array, fill=blue!10}, + ] + { start chain = going right + \node [array] (01) {$1$}; + \node [array] (05) {$5$}; + \node [array] (03) {$3$}; + % + \node [array, sorted pivot, shifted] (07) {$7$}; + % + \node [array, shifted, sorted end] (08) {$8$}; + % + \node [array, shifted, sorted pivot] (09) {$9$}; + % + \node [array, shifted] (23) {$23$}; + \node [array] (20) {$20$}; + \node [array] (10) {$10$}; + \node [array] (18) {$18$}; + \node [array] (11) {$11$}; + % + \node [array, sorted pivot, shifted] (30) {$30$}; + % + \node [array, shifted] (46) {$46$}; + \node [array] (36) {$36$}; + } + \end{tikzpicture} + + \begin{tikzpicture}[ + start chain, + node distance = 0pt, + shifted/.style = {xshift=1em}, + pivot/.style = {draw, red, on chain, label=above:\texttt{pivot}}, + array/.style = {draw, minimum width=2em, minimum height=2em, outer sep=0pt, on chain}, + sorted pivot/.style = {array, fill=blue!25}, + sorted end/.style = {array, fill=blue!10}, + ] + { start chain = going right + \node [array] (01) {$1$}; + \node [array] (05) {$5$}; + % + \node [array, pivot, shifted] (03) {$3$}; + % + \node [array, sorted pivot, shifted] (07) {$7$}; + % + \node [array, shifted, sorted end] (08) {$8$}; + % + \node [array, shifted, sorted pivot] (09) {$9$}; + % + \node [array, shifted] (23) {$23$}; + \node [array] (20) {$20$}; + \node [array] (10) {$10$}; + \node [array] (18) {$18$}; + % + \node [array, pivot, shifted] (11) {$11$}; + % + \node [array, sorted pivot, shifted] (30) {$30$}; + % + \node [array, shifted] (46) {$46$}; + % + \node [array, pivot, shifted] (36) {$36$}; + } + \end{tikzpicture} + + \begin{tikzpicture}[ + start chain, + node distance = 0pt, + shifted/.style = {xshift=1em}, + pivot/.style = {draw, red, on chain, label=above:\texttt{pivot}}, + array/.style = {draw, minimum width=2em, minimum height=2em, outer sep=0pt, on chain}, + sorted pivot/.style = {array, fill=blue!25}, + sorted end/.style = {array, fill=blue!10}, + ] + { start chain = going right + \node [array] (01) {$1$}; + % + \node [array, pivot, shifted] (03) {$3$}; + % + \node [array, shifted] (05) {$5$}; + % + \node [array, sorted pivot, shifted] (07) {$7$}; + % + \node [array, shifted, sorted end] (08) {$8$}; + % + \node [array, shifted, sorted pivot] (09) {$9$}; + % + \node [array, shifted] (10) {$10$}; + % + \node [array, pivot, shifted] (11) {$11$}; + % + \node [array, shifted] (23) {$23$}; + \node [array] (20) {$20$}; + \node [array] (18) {$18$}; + % + % + \node [array, sorted pivot, shifted] (30) {$30$}; + % + \node [array, pivot, shifted] (36) {$36$}; + % + \node [array, shifted] (46) {$46$}; + } + + \draw [decorate,decoration={brace,amplitude=5pt,raise=.5em}] + (01.north west) -- (01.north east) node[midway,yshift=1.5em] {\texttt{<= 3}}; + \draw [decorate,decoration={brace,amplitude=5pt,raise=.5em}] + (05.north west) -- (05.north east) node[midway,yshift=1.5em] {\texttt{> 3}}; + + \draw [decorate,decoration={brace,amplitude=5pt,raise=.5em}] + (10.north west) -- (10.north east) node[midway,yshift=1.5em] {\texttt{<= 11}}; + \draw [decorate,decoration={brace,amplitude=5pt,raise=.5em}] + (23.north west) -- (18.north east) node[midway,yshift=1.5em] {\texttt{> 11}}; + + \draw [decorate,decoration={brace,amplitude=5pt,raise=.5em}] + (46.north west) -- (46.north east) node[midway,yshift=1.5em] {\texttt{> 36}}; + \end{tikzpicture} + + \begin{tikzpicture}[ + start chain, + node distance = 0pt, + shifted/.style = {xshift=1em}, + pivot/.style = {draw, red, on chain, label=above:\texttt{pivot}}, + array/.style = {draw, minimum width=2em, minimum height=2em, outer sep=0pt, on chain}, + sorted pivot/.style = {array, fill=blue!25}, + sorted end/.style = {array, fill=blue!10}, + ] + { start chain = going right + \node [array, sorted end] (01) {$1$}; + % + \node [array, sorted pivot, shifted] (03) {$3$}; + % + \node [array, shifted, sorted end] (05) {$5$}; + % + \node [array, sorted pivot, shifted] (07) {$7$}; + % + \node [array, shifted, sorted end] (08) {$8$}; + % + \node [array, shifted, sorted pivot] (09) {$9$}; + % + \node [array, shifted, sorted end] (10) {$10$}; + % + \node [array, sorted pivot, shifted] (11) {$11$}; + % + \node [array, shifted] (23) {$23$}; + \node [array] (20) {$20$}; + \node [array] (18) {$18$}; + % + % + \node [array, sorted pivot, shifted] (30) {$30$}; + % + \node [array, sorted pivot, shifted] (36) {$36$}; + % + \node [array, shifted, sorted end] (46) {$46$}; + } + \end{tikzpicture} + + \begin{tikzpicture}[ + start chain, + node distance = 0pt, + shifted/.style = {xshift=1em}, + pivot/.style = {draw, red, on chain, label=above:\texttt{pivot}}, + array/.style = {draw, minimum width=2em, minimum height=2em, outer sep=0pt, on chain}, + sorted pivot/.style = {array, fill=blue!25}, + sorted end/.style = {array, fill=blue!10}, + ] + { start chain = going right + \node [array, sorted end] (01) {$1$}; + % + \node [array, sorted pivot, shifted] (03) {$3$}; + % + \node [array, shifted, sorted end] (05) {$5$}; + % + \node [array, sorted pivot, shifted] (07) {$7$}; + % + \node [array, shifted, sorted end] (08) {$8$}; + % + \node [array, shifted, sorted pivot] (09) {$9$}; + % + \node [array, shifted, sorted end] (10) {$10$}; + % + \node [array, sorted pivot, shifted] (11) {$11$}; + % + \node [array, shifted] (23) {$23$}; + \node [array] (20) {$20$}; + % + \node [array, pivot, shifted] (18) {$18$}; + % + % + \node [array, sorted pivot, shifted] (30) {$30$}; + % + \node [array, sorted pivot, shifted] (36) {$36$}; + % + \node [array, shifted, sorted end] (46) {$46$}; + } + \end{tikzpicture} + + \begin{tikzpicture}[ + start chain, + node distance = 0pt, + shifted/.style = {xshift=1em}, + pivot/.style = {draw, red, on chain, label=above:\texttt{pivot}}, + array/.style = {draw, minimum width=2em, minimum height=2em, outer sep=0pt, on chain}, + sorted pivot/.style = {array, fill=blue!25}, + sorted end/.style = {array, fill=blue!10}, + ] + { start chain = going right + \node [array, sorted end] (01) {$1$}; + % + \node [array, sorted pivot, shifted] (03) {$3$}; + % + \node [array, shifted, sorted end] (05) {$5$}; + % + \node [array, sorted pivot, shifted] (07) {$7$}; + % + \node [array, shifted, sorted end] (08) {$8$}; + % + \node [array, shifted, sorted pivot] (09) {$9$}; + % + \node [array, shifted, sorted end] (10) {$10$}; + % + \node [array, sorted pivot, shifted] (11) {$11$}; + % + \node [array, pivot, shifted] (18) {$18$}; + % + \node [array, shifted] (23) {$23$}; + \node [array] (20) {$20$}; + % + % + \node [array, sorted pivot, shifted] (30) {$30$}; + % + \node [array, sorted pivot, shifted] (36) {$36$}; + % + \node [array, shifted, sorted end] (46) {$46$}; + } + + \draw [decorate,decoration={brace,amplitude=5pt,raise=.5em}] + (23.north west) -- (20.north east) node[midway,yshift=1.5em] {\texttt{> 18}}; + \end{tikzpicture} + + \begin{tikzpicture}[ + start chain, + node distance = 0pt, + shifted/.style = {xshift=1em}, + pivot/.style = {draw, red, on chain, label=above:\texttt{pivot}}, + array/.style = {draw, minimum width=2em, minimum height=2em, outer sep=0pt, on chain}, + sorted pivot/.style = {array, fill=blue!25}, + sorted end/.style = {array, fill=blue!10}, + ] + { start chain = going right + \node [array, sorted end] (01) {$1$}; + % + \node [array, sorted pivot, shifted] (03) {$3$}; + % + \node [array, shifted, sorted end] (05) {$5$}; + % + \node [array, sorted pivot, shifted] (07) {$7$}; + % + \node [array, shifted, sorted end] (08) {$8$}; + % + \node [array, shifted, sorted pivot] (09) {$9$}; + % + \node [array, shifted, sorted end] (10) {$10$}; + % + \node [array, sorted pivot, shifted] (11) {$11$}; + % + \node [array, sorted pivot, shifted] (18) {$18$}; + % + \node [array, shifted] (23) {$23$}; + \node [array] (20) {$20$}; + % + % + \node [array, sorted pivot, shifted] (30) {$30$}; + % + \node [array, sorted pivot, shifted] (36) {$36$}; + % + \node [array, shifted, sorted end] (46) {$46$}; + } + \end{tikzpicture} + + \begin{tikzpicture}[ + start chain, + node distance = 0pt, + shifted/.style = {xshift=1em}, + pivot/.style = {draw, red, on chain, label=above:\texttt{pivot}}, + array/.style = {draw, minimum width=2em, minimum height=2em, outer sep=0pt, on chain}, + sorted pivot/.style = {array, fill=blue!25}, + sorted end/.style = {array, fill=blue!10}, + ] + { start chain = going right + \node [array, sorted end] (01) {$1$}; + % + \node [array, sorted pivot, shifted] (03) {$3$}; + % + \node [array, shifted, sorted end] (05) {$5$}; + % + \node [array, sorted pivot, shifted] (07) {$7$}; + % + \node [array, shifted, sorted end] (08) {$8$}; + % + \node [array, shifted, sorted pivot] (09) {$9$}; + % + \node [array, shifted, sorted end] (10) {$10$}; + % + \node [array, sorted pivot, shifted] (11) {$11$}; + % + \node [array, sorted pivot, shifted] (18) {$18$}; + % + \node [array, shifted] (23) {$23$}; + % + \node [array, pivot, shifted] (20) {$20$}; + % + \node [array, sorted pivot, shifted] (30) {$30$}; + % + \node [array, sorted pivot, shifted] (36) {$36$}; + % + \node [array, shifted, sorted end] (46) {$46$}; + } + \end{tikzpicture} + + \begin{tikzpicture}[ + start chain, + node distance = 0pt, + shifted/.style = {xshift=1em}, + pivot/.style = {draw, red, on chain, label=above:\texttt{pivot}}, + array/.style = {draw, minimum width=2em, minimum height=2em, outer sep=0pt, on chain}, + sorted pivot/.style = {array, fill=blue!25}, + sorted end/.style = {array, fill=blue!10}, + ] + { start chain = going right + \node [array, sorted end] (01) {$1$}; + % + \node [array, sorted pivot, shifted] (03) {$3$}; + % + \node [array, shifted, sorted end] (05) {$5$}; + % + \node [array, sorted pivot, shifted] (07) {$7$}; + % + \node [array, shifted, sorted end] (08) {$8$}; + % + \node [array, shifted, sorted pivot] (09) {$9$}; + % + \node [array, shifted, sorted end] (10) {$10$}; + % + \node [array, sorted pivot, shifted] (11) {$11$}; + % + \node [array, sorted pivot, shifted] (18) {$18$}; + % + \node [array, pivot, shifted] (20) {$20$}; + % + \node [array, shifted] (23) {$23$}; + % + \node [array, sorted pivot, shifted] (30) {$30$}; + % + \node [array, sorted pivot, shifted] (36) {$36$}; + % + \node [array, shifted, sorted end] (46) {$46$}; + } + + \draw [decorate,decoration={brace,amplitude=5pt,raise=.5em}] + (23.north west) -- (23.north east) node[midway,yshift=1.5em] {\texttt{> 20}}; + \end{tikzpicture} + + \begin{tikzpicture}[ + start chain, + node distance = 0pt, + shifted/.style = {xshift=1em}, + pivot/.style = {draw, red, on chain, label=above:\texttt{pivot}}, + array/.style = {draw, minimum width=2em, minimum height=2em, outer sep=0pt, on chain}, + sorted pivot/.style = {array, fill=blue!25}, + sorted end/.style = {array, fill=blue!10}, + ] + { start chain = going right + \node [array, sorted end] (01) {$1$}; + % + \node [array, sorted pivot, shifted] (03) {$3$}; + % + \node [array, shifted, sorted end] (05) {$5$}; + % + \node [array, sorted pivot, shifted] (07) {$7$}; + % + \node [array, shifted, sorted end] (08) {$8$}; + % + \node [array, shifted, sorted pivot] (09) {$9$}; + % + \node [array, shifted, sorted end] (10) {$10$}; + % + \node [array, sorted pivot, shifted] (11) {$11$}; + % + \node [array, sorted pivot, shifted] (18) {$18$}; + % + \node [array, sorted pivot, shifted] (20) {$20$}; + % + \node [array, shifted, sorted end] (23) {$23$}; + % + \node [array, sorted pivot, shifted] (30) {$30$}; + % + \node [array, sorted pivot, shifted] (36) {$36$}; + % + \node [array, shifted, sorted end] (46) {$46$}; + } + \end{tikzpicture} +\end{example} + +\begin{defi}{Zeitkomplexität von Quick-Sort} + \begin{itemize} + \item Best-Case: + \begin{itemize} + \item Pivot-Wert ist immer Median der Teilliste $\implies$ Teillisten werden stets halbiert + \item $\log n$ Stufen nötig mit $n$ Elementen + \item $\bigo(n \log n)$ + \end{itemize} + \item Worst-Case: + \begin{itemize} + \item Pivot-Wert ist immer größtes oder kleinstes Element der Teilliste + \item $n-1$ Stufen nötig mit $n-i$ Elementen pro Stufe + \item $\bigo(n^2)$ + \end{itemize} + \item Average-Case: + \begin{itemize} + \item Berechnung ziemlich aufwändig + \item $\bigo(n \log n)$ + \end{itemize} + \end{itemize} +\end{defi} + +\begin{bonus}{Standard-Optimierung von Pivot-Elementen} + Wählt man z.B. bei einem vorsortierten Array stets das letzte Element, hat man genau den Worst-Case. + + \emph{Median-of-three-Methode} zum Auswählen des Pivots: + \begin{itemize} + \item Es werden drei Elemente als Referenz-Elemente (Anfang, Mitte, Ende) gewählt, von denen dann der Median als Pivot verwendet wird. + \item Kann auf mehr als drei Elemente ausgebaut werden. + \end{itemize} +\end{bonus} + +\begin{bonus}{Standard-Optimierung des Rekursionsabbruchs} + Beim \glqq einfachen\grqq Rekursionsabbruch (Teilliste enthält 0 oder 1 Elemente) sind die letzten Rekursionsdurchgänge nicht mehr effektiv. + + Daher kann die Rekursion z.B. schon früher abgebrochen werden und die dann vorhandene Teilliste mit Insertion-Sort sortiert werden. + Die Grenze dafür ist nicht klar festgelegt (Empfehlung von Knuth und Sedgewick liegt bei 9, im Internet aber oft zwischen 3 und 32). +\end{bonus} + +\begin{defi}{Dual-Pivot Quick-Sort} + Der \emph{Dual-Pivot Quick-Sort} funktioniert analog zum normalen Quick-Sort. + + Hier werden jedoch zwei Pivot-Elemente verwendet, die dann die entsprechende Teilliste in drei Bereiche aufteilen. +\end{defi} + +\begin{defi}{Internes und externes Sortieren} + Bis jetzt wurde vorausgesetzt, dass schneller Zugriff auf einen beliebigen Datensatz (\emph{wahlfreier Zugriff}) möglich ist. + Das ist zumeist möglich, wenn der Datensatz im Hauptspeicher liegt. + Ist dies der Fall, spricht man von \emph{internem Sortieren}. + + Bei sehr großen Datenbeständen ist das aber oft nicht mehr möglich, da sie z.B. auf Hintergrundspeicher ausgelagert werden müssen. + Hier hat man dann lediglich \emph{sequentiellen Zugriff}\footnote{das Gleiche gilt auch für verkettete Listen} und man spricht von \emph{externem Sortieren}. +\end{defi} + +\begin{algo}{Merge-Sort} + \emph{Merge-Sort} kann sowohl iterativ als auch rekursiv implementiert werden, wobei die rekursive Variante etwas schneller ist. + + Der rekursive Ablauf ist: + \begin{enumerate} + \item Teile die Daten in zwei Hälften + \item Unterteilung wird fortgesetzt, bis nur noch ein Element in einer Menge vorhanden ist + \item Teilstücke werden für sich sortiert + \item sortierte Teilstücke werden zusammengeführt + \end{enumerate} + + Merge-Sort ist stabil. + + Die Komplexität von Merge-Sort liegt in $\bigo(n \log n)$. +\end{algo} + +\begin{example}{Merge-Sort (rekursiv)} + \centering + + \begin{tikzpicture}[ + start chain, + node distance = 0pt, + shifted/.style = {xshift=1em}, + array/.style = {draw, minimum width=2em, minimum height=2em, outer sep=0pt, on chain}, + sorted/.style = {array, fill=blue!25}, + ] + { start chain = going right + \node [array] (38) {$38$}; + \node [array] (27) {$27$}; + \node [array] (43) {$43$}; + \node [array] (03) {$3$}; + \node [array] (09) {$9$}; + \node [array] (82) {$82$}; + \node [array] (10) {$10$}; + } + + %\draw [decorate,decoration={brace,mirror,amplitude=5pt,raise=.5em}] + %(38.south west) -- (03.south east) node[midway,yshift=-1.5em] {}; + %\draw [decorate,decoration={brace,mirror,amplitude=5pt,raise=.5em}] + %(09.south west) -- (10.south east) node[midway,yshift=-1.5em] {}; + \end{tikzpicture} + + \begin{tikzpicture}[ + start chain, + node distance = 0pt, + shifted/.style = {xshift=1em}, + array/.style = {draw, minimum width=2em, minimum height=2em, outer sep=0pt, on chain}, + sorted/.style = {array, fill=blue!25}, + ] + { start chain = going right + \node [array] (38) {$38$}; + \node [array] (27) {$27$}; + \node [array] (43) {$43$}; + \node [array] (03) {$3$}; + % + \node [array, shifted] (09) {$9$}; + \node [array] (82) {$82$}; + \node [array] (10) {$10$}; + } + + %\draw [decorate,decoration={brace,mirror,amplitude=5pt,raise=.5em}] + %(38.south west) -- (27.south east) node[midway,yshift=-1.5em] {}; + %\draw [decorate,decoration={brace,mirror,amplitude=5pt,raise=.5em}] + %(43.south west) -- (03.south east) node[midway,yshift=-1.5em] {}; + % + %\draw [decorate,decoration={brace,mirror,amplitude=5pt,raise=.5em}] + %(09.south west) -- (82.south east) node[midway,yshift=-1.5em] {}; + %\draw [decorate,decoration={brace,mirror,amplitude=5pt,raise=.5em}] + %(10.south west) -- (10.south east) node[midway,yshift=-1.5em] {}; + \end{tikzpicture} + + \begin{tikzpicture}[ + start chain, + node distance = 0pt, + shifted/.style = {xshift=1em}, + array/.style = {draw, minimum width=2em, minimum height=2em, outer sep=0pt, on chain}, + sorted/.style = {array, fill=blue!25}, + ] + { start chain = going right + \node [array] (38) {$38$}; + \node [array] (27) {$27$}; + % + \node [array, shifted] (43) {$43$}; + \node [array] (03) {$3$}; + % + \node [array, shifted] (09) {$9$}; + \node [array] (82) {$82$}; + % + \node [array, shifted] (10) {$10$}; + } + + %\draw [decorate,decoration={brace,mirror,amplitude=5pt,raise=.5em}] + %(38.south west) -- (38.south east) node[midway,yshift=-1.5em] {}; + %\draw [decorate,decoration={brace,mirror,amplitude=5pt,raise=.5em}] + %(27.south west) -- (27.south east) node[midway,yshift=-1.5em] {}; + % + %\draw [decorate,decoration={brace,mirror,amplitude=5pt,raise=.5em}] + %(43.south west) -- (43.south east) node[midway,yshift=-1.5em] {}; + %\draw [decorate,decoration={brace,mirror,amplitude=5pt,raise=.5em}] + %(03.south west) -- (03.south east) node[midway,yshift=-1.5em] {}; + % + %\draw [decorate,decoration={brace,mirror,amplitude=5pt,raise=.5em}] + %(09.south west) -- (09.south east) node[midway,yshift=-1.5em] {}; + %\draw [decorate,decoration={brace,mirror,amplitude=5pt,raise=.5em}] + %(82.south west) -- (82.south east) node[midway,yshift=-1.5em] {}; + \end{tikzpicture} + + \begin{tikzpicture}[ + start chain, + node distance = 0pt, + shifted/.style = {xshift=1em}, + array/.style = {draw, minimum width=2em, minimum height=2em, outer sep=0pt, on chain}, + sorted/.style = {array, fill=blue!25}, + framed/.style = {draw, red, densely dashed, label=below:\texttt{sort}}, + ] + { start chain = going right + \node [array] (38) {$38$}; + % + \node [array, shifted] (27) {$27$}; + % + \node [array, shifted] (43) {$43$}; + % + \node [array, shifted] (03) {$3$}; + % + \node [array, shifted] (09) {$9$}; + % + \node [array, shifted] (82) {$82$}; + % + \node [array, shifted] (10) {$10$}; + } + + \node [framed, fit={(38) (27)}] {}; + \node [framed, fit={(43) (03)}] {}; + \node [framed, fit={(09) (82)}] {}; + \end{tikzpicture} + + \begin{tikzpicture}[ + start chain, + node distance = 0pt, + shifted/.style = {xshift=1em}, + array/.style = {draw, minimum width=2em, minimum height=2em, outer sep=0pt, on chain}, + sorted/.style = {array, fill=blue!25}, + framed/.style = {draw, red, densely dashed, label=below:\texttt{sort}}, + ] + { start chain = going right + \node [array] (27) {$27$}; + \node [array] (38) {$38$}; + % + \node [array, shifted] (03) {$3$}; + \node [array] (43) {$43$}; + % + \node [array, shifted] (09) {$9$}; + \node [array] (82) {$82$}; + % + \node [array, shifted] (10) {$10$}; + } + \end{tikzpicture} + + \begin{tikzpicture}[ + start chain, + node distance = 0pt, + shifted/.style = {xshift=1em}, + array/.style = {draw, minimum width=2em, minimum height=2em, outer sep=0pt, on chain}, + sorted/.style = {array, fill=blue!25}, + framed/.style = {draw, red, densely dashed, label=below:\texttt{sort}}, + ] + { start chain = going right + \node [array] (27) {$27$}; + \node [array] (38) {$38$}; + % + \node [array, shifted] (03) {$3$}; + \node [array] (43) {$43$}; + % + \node [array, shifted] (09) {$9$}; + \node [array] (82) {$82$}; + % + \node [array, shifted] (10) {$10$}; + } + + \node [framed, fit={(27) (43)}] {}; + \node [framed, fit={(09) (10)}] {}; + \end{tikzpicture} + + \begin{tikzpicture}[ + start chain, + node distance = 0pt, + shifted/.style = {xshift=1em}, + array/.style = {draw, minimum width=2em, minimum height=2em, outer sep=0pt, on chain}, + sorted/.style = {array, fill=blue!25}, + framed/.style = {draw, red, densely dashed, label=below:\texttt{sort}}, + ] + { start chain = going right + \node [array] (03) {$3$}; + \node [array] (27) {$27$}; + \node [array] (38) {$38$}; + \node [array] (43) {$43$}; + % + \node [array, shifted] (09) {$9$}; + \node [array] (10) {$10$}; + \node [array] (82) {$82$}; + } + \end{tikzpicture} + + \begin{tikzpicture}[ + start chain, + node distance = 0pt, + shifted/.style = {xshift=1em}, + array/.style = {draw, minimum width=2em, minimum height=2em, outer sep=0pt, on chain}, + sorted/.style = {array, fill=blue!25}, + framed/.style = {draw, red, densely dashed, label=below:\texttt{sort}}, + ] + { start chain = going right + \node [array] (03) {$3$}; + \node [array] (27) {$27$}; + \node [array] (38) {$38$}; + \node [array] (43) {$43$}; + % + \node [array, shifted] (09) {$9$}; + \node [array] (10) {$10$}; + \node [array] (82) {$82$}; + } + + \node [framed, fit={(03) (82)}] {}; + \end{tikzpicture} + + \begin{tikzpicture}[ + start chain, + node distance = 0pt, + shifted/.style = {xshift=1em}, + array/.style = {draw, minimum width=2em, minimum height=2em, outer sep=0pt, on chain}, + sorted/.style = {array, fill=blue!25}, + framed/.style = {draw, red, densely dashed, label=below:\texttt{sort}}, + ] + { start chain = going right + \node [array, sorted] (03) {$3$}; + \node [array, sorted] (09) {$9$}; + \node [array, sorted] (10) {$10$}; + \node [array, sorted] (27) {$27$}; + \node [array, sorted] (38) {$38$}; + \node [array, sorted] (43) {$43$}; + \node [array, sorted] (82) {$82$}; + } + \end{tikzpicture} +\end{example} + +\begin{defi}{Optimierung von Merge-Sort} + \begin{itemize} + \item Felduntergrenze + \begin{itemize} + \item Feld wird nicht in Einzelelemente geteilt, sondern in Gruppen zu $n$ Elementen, die dann mit Insertion-Sort sortiert werden + \item gcj-Java nimmt 6 Elemente als Grenze + \item Python nimmt 64 Elemente als Grenze + \end{itemize} + \item Trivialfall + \begin{itemize} + \item ist das kleinste Element der einen Teilfolge größer als das größte Element der anderen Teilfolge $\implies$ Zusammenfügen beschränkt sich auf Hintereinandersetzen der beiden Teilfolgen + \item genutzt von z.B. Java + \item Vorsortierung wird ausgenutzt + \end{itemize} + \item Natürlicher Merge-Sort + \begin{itemize} + \item weitergehende Ausnutzung der Vorsortierung + \item jede Zahlenfolge besteht aus Teilstücken, die abwechselnd monoton steigend und monoton fallend sind + \item Idee ist, diese bereits sortierten Teilstücke als Ausgangsbasis des Merge-Sorts zu nehmen + \item bei nahezu sortierten Feldern werden die Teilstücke sehr groß und as Verfahren sehr schnell + \item Best-Case in $\bigo(n)$ + \end{itemize} + \end{itemize} +\end{defi} + +\subsection{Spezialisierte Sortierverfahren} + +\begin{defi}{Radix-Sort} + \emph{Radix-Sort} heißt eine Gruppe von Sortierverfahren mit folgenden Eigenschaften: + \begin{itemize} + \item Sortiervorgang erfolgt mehrstufig + \item zunächst wird Grobsortierung vorgenommen, zu der nur ein Teil des Schlüssels (z.B. erstes Zeichen) herangezogen wird + \item grob sortierte Bereiche dann feinsortiert, wobei schrittweise der restliche Teil des Schlüssels verwendet wird + \end{itemize} +\end{defi} + +\begin{bonus}{MSD-Radix-Sort} + \begin{itemize} + \item MSD = most significant digits + \item In der 1. Stufe wird die erste Ziffer betrachtet. + \item Benutzt Bucket-Sort mit Teillisten. + \item Bucket-Sort wird für die einzelnen Buckets weiter genutzt, bis alle Werte sortiert sind + \end{itemize} +\end{bonus} + +\begin{bonus}{LSD-Radix-Sort} + \begin{itemize} + \item LSD = least significant digits + \item In der 1. Stufe wird die letzte Ziffer betrachtet. + \item Benutzt Bucket-Sort mit schlüsselindiziertem Zählen. + \end{itemize} +\end{bonus} + +\begin{algo}{Bucket-Sort} + \emph{Bucket-Sort} sortiert für bestimmte Werte-Verteilungen einen Datensatz in linearer Zeit. + + Der Algorithmus ist in drei Phasen eingeteilt: + \begin{enumerate} + \item Verteilung der Elemente auf die Buckets + \item Jeder Bucket wird mit einem weiteren Sortiertverfahren sortiert . + \item Der Inhalt der sortierten Buckets wird konkateniert. + \end{enumerate} + + Zu viele oder zu wenige Eimer können zu großen Laufzeitproblemen führen. + Empfohlen werden: + \begin{itemize} + \item Sedgewick: Für 64-bit Schlüssel (\texttt{long}) $2^{16}$ Eimer + \item Linux-related: Für 32-bit Schlüssel (\texttt{int}) $2^{11}$ Eimer + \end{itemize} + + Der Einsatz von Bucket-Sort lohnt sich nur, wenn die Anzahl der zu sortierenden Werte deutlich größer ist, als die Anzahl der Eimer. +\end{algo} \ No newline at end of file diff --git a/algo/warshall.java b/algo/warshall.java new file mode 100644 index 0000000..2f29f81 --- /dev/null +++ b/algo/warshall.java @@ -0,0 +1,7 @@ +for(int i = 0; i < a.length; i++) { + for(int j = 0; j < a.length; j++) { + for(int k = 0; k < a.length; k++) { + a[j][k] = a[j][k] || (a[j][i] && a[i][k]); + } + } +} \ No newline at end of file diff --git a/ana1/ana1.tex b/ana1/ana1.tex index d3c8547..ff98701 100644 --- a/ana1/ana1.tex +++ b/ana1/ana1.tex @@ -1,1563 +1,1563 @@ -\documentclass[german]{../spicker} - -\usepackage{amsmath} -\usepackage{polynom} -\usepackage{array} % for \newcolumntype macro -\usepackage{tikz} -\usepackage{pgfplots} -\usepgfplotslibrary{fillbetween} -\pgfplotsset{compat=1.17} -\title{Analysis 1} -\author{Patrick Gustav Blaneck, Felix Racz} -\makeindex[intoc] -\makeindex[intoc, name=Beispiele,title=Beispiele] - -\newcommand{\scalarprod}[1]{\left\langle #1 \right\rangle} -\newcommand{\vektor}[1]{\begin{pmatrix*}[r] #1 \end{pmatrix*}} -\renewcommand{\span}[1]{\operatorname{span}\left(#1\right)} - -\renewcommand{\abs}[1]{\left| #1 \right|} -\newcommand{\cis}[1]{\left( \cos\left( #1 \right) + i \sin\left( #1 \right) \right)} -\newcommand{\sgn}{\text{sgn}} -\newcommand{\diff}{\mathrm{d}} -\newcommand{\dx}{~\mathrm{d}x} -\newcommand{\du}{~\mathrm{d}u} -\newcommand{\dv}{~\mathrm{d}v} -\newcommand{\dw}{~\mathrm{d}w} -\newcommand{\dt}{~\mathrm{d}t} -\newcommand{\dn}{~\mathrm{d}n} -\newcommand{\dudx}{~\frac{\mathrm{d}u}{\mathrm{d}x}} -\newcommand{\dudn}{~\frac{\mathrm{d}u}{\mathrm{d}n}} -\newcommand{\dvdx}{~\frac{\mathrm{d}v}{\mathrm{d}x}} -\newcommand{\dwdx}{~\frac{\mathrm{d}w}{\mathrm{d}x}} -\newcommand{\dtdx}{~\frac{\mathrm{d}t}{\mathrm{d}x}} -\newcommand{\ddx}{\frac{\mathrm{d}}{\mathrm{d}x}} -\newcommand{\dFdx}{\frac{\mathrm{d}F}{\mathrm{d}x}} -\newcommand{\dfdx}{\frac{\mathrm{d}f}{\mathrm{d}x}} -\newcommand{\interval}[1]{\left[ #1 \right]} - -\newcolumntype{L}{>{$}l<{$}} % math-mode version of "l" column type -\newcolumntype{R}{>{$}r<{$}} % math-mode version of "r" column type -\newcolumntype{C}{>{$}c<{$}} % math-mode version of "c" column type -\newcolumntype{P}{>{$}p<{$}} % math-mode version of "l" column type - -\begin{document} -\maketitle -\tableofcontents -\newpage - -%\setcounter{section}{1} - -\section{Grundlagen} - -\subsection{Funktionen} - -\begin{thirdboxl} - \begin{defi}{Injektivität} - $f(x) = f(x')\implies x = x'$ - \end{defi} -\end{thirdboxl}% -\begin{thirdboxm} - \begin{defi}{Surjektivität} - $\forall y, \exists x: y = f(x)$ - \end{defi} -\end{thirdboxm}% -\begin{thirdboxr} - \begin{defi}{Bijektivität} - $\forall y, \exists! x: y = f(x)$ - \end{defi} -\end{thirdboxr}% - -\begin{algo}{Beweisen der Injektivität} - \begin{enumerate} - \item Behauptung: $f(x) = f(x')$ - \item Umformen auf eine Aussage der Form $x = x'$ - \end{enumerate} -\end{algo} - -\begin{algo}{Beweisen der Surjektivität} - \begin{enumerate} - \item Aufstellen der Umkehrfunktion - \item Zeigen, dass diese Umkehrfunktion auf dem gesamten Definitionsbereich definiert ist - \end{enumerate} -\end{algo} - -\begin{algo}{Beweisen der Bijektivität} - \begin{enumerate} - \item Injektivität beweisen - \item Surjektivität beweisen - \end{enumerate} -\end{algo} - -\subsection{Polynome} - -\begin{defi}{Polynom} - Eine Funktion $p(x) = \sum^n_{i=0} a_i x^i$ mit $a_i, x \in \R ~ (\C), a_n \neq 0$ heißt \emph{Polynom vom Grad} $n$. -\end{defi} - -\begin{halfboxl} - \vspace{-\baselineskip} - \begin{bonus}{Abspalten von Linearfaktoren} - Sei $x_0$ eine Nullstelle eines Polynoms $p(x)$, dann ist - $$ p(x) = q(x) \cdot (x-x_0).$$ - Dabei ist $(x-x_0)$ ein abgespaltener Linearfaktor und $q(n)$ das entsprechend reduzierte Polynom mit $q(n) = \frac{p(x)}{x-x_0}$. - \end{bonus} -\end{halfboxl}% -\begin{halfboxr} - \vspace{-\baselineskip} - \begin{bonus}{Faktorisierung} - Sind $x_1, \ldots, x_n$ Nullstellen eines Polynoms $p(x)$, so ist - $$ p(x) = a_n \cdot (x-x_1) \cdot \ldots \cdot (x-x_n)$$ - die Faktorisierung von $p(x)$. - \end{bonus} -\end{halfboxr}% - -\subsubsection*{Polynome vom Grad 2} -\begin{halfboxl} - \vspace{-\baselineskip} - \begin{algo}{$pq$-Formel} - \begin{enumerate} - \item Polynom der Form $x^2 + px + q = 0$ - \item $x_{1,2} = -\frac{p}{2} \pm \sqrt{\left(\frac{p}{2}\right)^2 - q}$ - \end{enumerate} - \end{algo} -\end{halfboxl}% -\begin{halfboxr} - \vspace{-\baselineskip} - \begin{algo}{Mitternachtsformel} - \begin{enumerate} - \item Polynom der Form $ax^2 + bx + c = 0$ - \item $x_{1,2} = \frac{-b \pm \sqrt{b^2 - 4ac}}{2a}$ - \end{enumerate} - \end{algo} -\end{halfboxr} - -\begin{bonus}{Besonderheiten bei $x \in \C$} - \begin{itemize} - \item Ist $x_i$ eine Nullstelle des Polynoms $p(x)$ mit \emph{reellen Koeffizienten}, dann ist auch $\overline{x_i}$ eine Nullstelle von $p(x)$. - \end{itemize} -\end{bonus} - -\subsection{Gebrochen rationale Funktionen} - -\begin{defi}{Gebrochen rationale Funktionen} - Seien $p_m(x)$ und $p_n(x)$ Polynome vom Grad $m$ bzw. $n$, dann heißt - $$ - f(x) = \frac{p_m(x)}{p_n(x)} - $$ - \emph{gebrochen rationale Funktion}.\\ - Im Fall $m<n$ heißt die Funktion \emph{echt gebrochen rational}, sonst \emph{unecht gebrochen rational}. -\end{defi} - -\begin{algo}{Polynomdivision} - Gegeben ist \emph{unecht gebrochen rationale Funktion} $f(x) = \frac{p_m(x)}{p_n(x)}$ - \begin{enumerate} - \item \emph{Dividiere} die größten Exponenten aus beiden Polynomen - \item \emph{Mutipliziere} Ergebnis mit Divisor zurück - \item \emph{Subtrahiere} Ergebnis vom Dividenden - \item Wiederhole, bis: - \subitem Ergebnis 0 ist, oder - \subitem Grad des Ergebnisses kleiner ist als Grad des Divisors (ergibt \emph{Rest}) - \end{enumerate} -\end{algo} - -%\begin{bonus}{Polynomdivision Beispiel} -% \polylongdiv[style=C]{x^3+x^2-1}{x-1} -%\end{bonus} - -\begin{algo}{Hornerschema} - Gegeben ist \emph{Polynom} $p_m(x)$ und ein \emph{Wert} $x_0$ - - Vorbereitung: - \begin{itemize} - \item Erstelle eine Tabelle mit $m + 2$ Spalten und 3 Zeilen - \item Erste Zelle frei lassen und dann Koeffizienten $a_m, a_{m-1}, \ldots, a_0$ in die erste Zeile schreiben - \item In die erste Zelle der zweiten Zeile kommt $x_0$ - \end{itemize} - - Anwendung (beginnend in zweiter Zelle der dritten Zeile): - \begin{enumerate} - \item Erster Koeffizient der ersten Zeile in die dritte Zeile - \item \emph{Multipliziere} Zahl der ersten Spalte mit diesem Koeffizienten - \item Schreibe Ergebnis in zweite Zeile, unterhalb des nächsten Koeffizienten - \item \emph{Addiere} Ergebnis mit diesem Koeffizienten - \item Wiederhole 2-4 bis zum Schluss - \end{enumerate} - - Ergebnis: - \begin{itemize} - \item Wert des Polynoms $p_m(x_0)$ in letzter Zelle der letzten Zeile - \item Bei Wert $p_m(x_0) = 0$ steht in der letzten Zeile das Polynom nach Abspalten des Linearfaktors $(x-x_0)$ - \end{itemize} -\end{algo} - -%\begin{bonus}{Hornerschema Beispiel} -% Gegeben: $p_4(x) = 2x^4-3x^3+4x^2-5x+2$ an der Stelle $x_0 = 1$ -% \polyhornerscheme[x=1]{2x^4-3x^3+4x^2-5x+2} -% Ergebnis: $p_4(1) = 0 \implies (x-1) \text{ ist Linearfaktor von } p_4(x) \text{ und } \frac{p_4(x)}{x-1} = 2x^3 = x^2 + 3x -2$ -%\end{bonus} - -\begin{bonus}{Tipps und Tricks} - \begin{itemize} - \item Polynomdivision und Hornerschema funktionieren auch sehr gut mit komplexen Zahlen - \item Bei mehreren abzuspaltenden Linearfaktoren bietet sich das Hornerschema sehr gut an - \end{itemize} -\end{bonus} - -\begin{algo}{Partialbruchzerlegung} - Gegeben: \emph{Echt gebrochen rationale Funktion} $f(x) = \frac{p_m(x)}{p_n(x)}$ - \begin{enumerate} - \item Berechne Nullstellen des \emph{Nennerpolynoms} $x_0, \ldots, x_k \in \R$ - \item Verschiedene Fälle: - \subitem Relle Nullstellen: - \subsubitem $x_i$ ist einfache Nullstelle $\implies \frac{A}{x-x_1}$ - \subsubitem $x_i$ ist $r$-fache Nullstelle $\implies \frac{A_1}{x-x_1} + \frac{A_2}{(x-x_1)^2} + \ldots + \frac{A_r}{(x-x_1)^r}$ - \subitem Nichtrelle Nullstellen: - \subsubitem Einfacher quadratischer Term $\implies \frac{Ax + B}{x^2+px+q}$ - \subsubitem $r$-facher quadratischer Term $\implies \frac{A_1x + B_1}{x^2+px+q} + \frac{A_2x + B_2}{(x^2+px+q)^2} + \ldots + \frac{A_rx + B_r}{(x^2+px+q)^r}$ - \item Koeffizientenvergleich: - \begin{enumerate} - \item Brüche gleichnamig machen (Multipliziere beide Seiten mit Nennerpolynom) - \item Potenzen von $x$ zusammenfassen - \item Gleichungssystem lösen - \item Lösungen in Ansatz einsetzen - \end{enumerate} - \end{enumerate} -\end{algo} - -\begin{bonus}{Besonderheiten in $\C$} - \begin{itemize} - \item Für Partialbrüche ohne relle Nullstellen können wir in $\C$ stets Nullstellen finden. Das Verfahren erfolgt dann analog mit komplexen Nullstellen. - \end{itemize} -\end{bonus} - -\begin{bonus}{Tipps und Tricks} - \begin{itemize} - \item Partialbruchzerlegung ist erst bei einer \emph{echt gebrochen rationale Funktion} sinnvoll - \item Ist die Funktion unecht gebrochen rational, führe zuerst eine Polynomdivision durch und zerlege dann den Rest in die Partialbrüche - \end{itemize} -\end{bonus} - - -\subsection{Gleichungen und Ungleichungen} - -\begin{algo}{Berechnen einer Lösungsmenge bei Ungleichungen} - Gegeben: Ungleichung mit Bezug auf Variable $x$ - \begin{enumerate} - \item Für jeden Betrag $\left| a(x) \right|$, eine Fallunterscheidung machen für - \subitem $a(x) \geq 0 \implies \left| a(x) \right| = a(x)$ - \subitem $a(x) < 0 \implies \left| a(x) \right| = -a(x)$ - \subitem \emph{Hier haben wir bereits eine Einschränkung für die Lösungsmenge des jeweiligen Falles gegeben!} - \item Ungleichungen nach $x$ auflösen - \item Jeder Fall $i$ erzeugt eine Lösungsmenge $L_i$ bestehend aus\emph{ umgestellter Ungleichung} und Fallbedingungen - \item Lösungsmenge $L = \bigcup^n_{i = 1} L_i$, wobei $n$ die Anzahl der betrachteten Fälle ist - \end{enumerate} -\end{algo} - -\begin{bonus}{Tipps und Tricks} - \begin{itemize} - \item $n$ Beträge in der Gleichung können zu $2^n$ Fällen führen. - \item Es kann vorkommen, dass ein Fall einer Fallunterscheidung unerreichbar ist, z.B. für $x > 5 \land x < 1$. Die Lösungsmenge $L$ ist dann leer ($L = \emptyset$). - \item Radizieren (Wurzelziehen) ist in Ungleichungen nur erlaubt, wenn danach der \emph{Betrag} der Wurzel betrachtet wird - \item Quadrieren einer Ungleichung `erzeugt' potentiell ein falsches Ergebnis. Nach dem Quadrieren sollte man also jedes Ergebnis prüfen. - \item Multiplikation mit negativen Zahlen sollte vermieden werden, da das Umdrehen des Ungleichheitszeichens schnell für Flüchtigkeitsfehler sorgen kann. - \end{itemize} -\end{bonus} - -\subsection{Komplexe Analysis} -\begin{bonus}{Rechenregeln für komplexe Zahlen in kartesischen Koordinaten} - \textbf{Darstellung:} $z = a + i \cdot b$ und $w = c + i \cdot d$ - - \textbf{Addition und Subtraktion:} $z \pm w = (a\pm c) + i \cdot (b \pm d)$ - - \textbf{Multiplikation:} $z \cdot w = (ac -bd) + i \cdot (ad + bc)$ - - \textbf{Division:} $\frac{z}{w} = \frac{z \cdot \overline{w}}{w \cdot \overline{w}}$ - - \textbf{Komplex konjugiert:} Vorzeichen von $\Im$ wechseln: $\overline{z} = a- i \cdot b$ - - \textbf{Betrag:} Abstand vom Ursprung: $\abs{z} = \sqrt{z \cdot \overline{z}} = \sqrt{a^2 + b^2}$ -\end{bonus} - -\begin{bonus}{Rechenregeln für komplexe Zahlen in Polarkoordinaten} - \textbf{Darstellung:} $z = r \cdot (\cos\theta + i \cdot \sin \theta) = r \cdot e^{i \cdot \theta}$ - - \textbf{Multiplikation:} $z \cdot w = r_z \cdot r_w \cdot e^{i \cdot (\theta_z + \theta_w)}$ - - \textbf{Division:} $\frac{z}{w} = \frac{r_z}{r_w} \cdot e^{i \cdot (\theta_z - \theta_w)}$ - - \textbf{Komplex konjugiert:} $\overline{z} = (r, -\theta) = (r, 2\pi - \theta)$ - - \textbf{Betrag:} $\abs{z} = r$ -\end{bonus} - -\begin{algo}{Kartesische Koordinaten $\to$ Polarkoordinaten} - \begin{enumerate} - \item $r = \abs{z} = \sqrt{x^2 + y^2}$ - \item - \subitem $y \geq 0 : \theta = \arctan \frac{x}{r}$ - \subitem $y < 0 : \theta = -\arctan \frac{x}{r}$ - \end{enumerate} -\end{algo} - -\begin{algo}{Polarkoordinaten $\to$ Kartesische Koordinaten} - \begin{enumerate} - \item $x = r \cdot \cos \theta$ - \item $y = r \cdot \sin \theta$ - \end{enumerate} -\end{algo} - -\begin{algo}{Radizieren von komplexen Zahlen} - Gesucht: Lösung von $z^n = r \cdot e^{i\cdot \theta}$ - \begin{enumerate} - \item Ist $z^n$ nicht in Polarkoordinaten gegeben, so ist zunächst die Polarform zu bilden. - \item Bertechne $r_k = \sqrt[n]{r}$. Dieser Radius ist die Länge aller Lösungen. - \item Berechne für alle $k \in [0, n-1]$ - $$ - \theta_k = \frac{\theta + k\cdot 2\pi}{n} = \frac{\theta}{n} + \frac{k}{n} \cdot 2\pi - $$ - \item Die Lösungen sind dann die $n$ Zahlen $z_k = (r_k, \theta_k)$ für $k \in [0, n-1]$. - \end{enumerate} - \qed -\end{algo} - -\section{Folgen und Reihen} - -\subsection{Grundlagen} -\begin{bonus}{Rechenregeln für Summen} - $$ - \begin{aligned} - \sum_{k=m}^n a_k & = \sum_{k=m-l}^{n-l} a_{k+l} \\ - \sum_{k=m}^n a_k & = \sum_{k=m}^c a_k + \sum_{k=c}^n a_k \\ - \sum_{k=m}^n a_k + \sum_{k=m}^n b_k & = \sum_{k=m}^n a_k + b_k \\ - \sum_{k=m}^n c\cdot a_k & = c\cdot\sum_{k=m}^n a_k - \end{aligned} - $$ - Die Regeln gelten auch für unendliche Reihen. -\end{bonus} - -\begin{bonus}{Wichtige Summen} - \begin{itemize} - \item Arithmetische Summe: $$\sum^n_{k=1} k = \frac{n(n+1)}{2}$$ - \item Geometrische Summe: $$\sum^n_{k=1} x^k = \frac{1-x^{n+1}}{1-x} = \frac{x^{n+1} - 1}{x-1}$$ - \item Summe der Quadratzahlen: $$\sum^n_{k=1} k^2 = \frac{n(n+1)(2n+1)}{6}$$ - \item Summe der Kubikzahlen: $$\sum^n_{k=1} k^3 = \left(\frac{n(n+1)}{2}\right)^2$$ - \end{itemize} -\end{bonus} - -\subsection{Binomialkoeffizienten und der binomische Lehrsatz} - -\begin{defi}{Binomialkoeffizient} - Die Anzahl der $k$-elementigen Teilmengen einer $n$-elementigen Menge bezeichnen wir mit $\binom{n}{k}$. - Diese Zahlen heißen \emph{Binomialkoeffizienten} oder Binomialzahlen. -\end{defi} - -\begin{defi}{Rekursionsformel für Binomialkoeffizient} - Für $k, n \in \N$ mit $k \leq n$ gilt: - $$ - \binom{n}{k} = \binom{n-1}{k} + \binom{n-1}{k-1} - $$ -\end{defi} - -\begin{defi}{Kombinatorische Formel für Binomialkoeffizient} - $$ - \binom{n}{k} = \begin{cases} - 0 & , \text{ für } k > n \\ - \frac{n!}{(n-k)! \cdot k!} & , \text{ für } k \leq n - \end{cases} - $$ -\end{defi} - -\begin{defi}{Der binomische Lehrsatz} - Für beliebige $a, b \in \R$ und $n \in \N$ gilt: - $$ - (a+b)^n = \sum^n_{k=0} \binom{n}{k} a^k \cdot b^{n-k} - $$ -\end{defi} - -\section{Konvergenz von Folgen, Reihen und Funktionen} - -\subsection{Grundlagen} -\begin{defi}{Schranken} - Gilt $$\forall x\in A : \abs{x} < K,$$ so heißt die Menge $A$ \emph{beschränkt} und $K$ \emph{Schranke}. - - Gilt nur $x \leq K$, so heißt die Menge \emph{nach oben beschränkt} und $K$ \emph{obere Schranke}. - - Im Falle $x \geq K$ heißt $A$ \emph{nach unten beschränkt} und $K$ \emph{untere Schranke}. -\end{defi} - -\begin{defi}{Beschränktheit} - Eine Menge $M$ heißt genau dann \emph{beschränkt}, wenn sie nach oiben und nach unten beschränkt ist. -\end{defi} - -\begin{defi}{Supremum, Maximum} - Der Wert - $$ - K= \min_{K^* \in \R} \{K \text{ ist obere Schranke}\} - $$ - heißt \emph{kleinste obere Schranke} oder \emph{Supremum von A}. - Notation: $\sup A$ - - Gilt $K \in A$, so heißt $K$ \emph{Maximum von A}. Notation: $\max A$. -\end{defi} - -\begin{defi}{Infimum, Minimum} - Der Wert - $$ - K= \max_{K^* \in \R} \{K \text{ ist untere Schranke}\} - $$ - heißt \emph{größte untere Schranke} oder \emph{Infimum von A}. - Notation: $\inf A$ - - Gilt $K \in A$, so heißt $K$ \emph{Minimum von A}. Notation: $\min A$. -\end{defi} - -\begin{bonus}{Vollständigkeitsaxiom} - Jede nicht-leere nach oben beschränkte Menge $A$ hat ein \emph{Supremum}, jede nicht-leere nach unten beschränkte Menge $A$ hat ein \emph{Infimum}. -\end{bonus} - -\begin{defi}{$\epsilon$-Umgebung von $K$ in $\R$} - $$ - U_\epsilon(K) := \{ x \in \R \mid \abs{x - K} < \epsilon \} - $$ - heißt $\epsilon$\emph{-Umgebung von} $K$ \emph{in} $\R$. -\end{defi} - -\begin{defi}{Innerer Punkt} - $x_0 \in A$ heißt \emph{innerer Punkt von A}, falls eine $\epsilon$-Umgebung existiert, so dass $U_\epsilon (x_0) \in A$, also vollständig in $A$ enthalten ist. - $A$ heißt \emph{offen}, falls jeder Punkt der Menge innerer Punkt ist. -\end{defi} - -\begin{defi}{Häufungspunkt (Mengen)} - $a$ heißt \emph{Häufungspunkt einer Menge A}, wenn $\forall \epsilon > 0$ in der Umgebung $U_\epsilon (a)$ ein Punkt $x \in A$ mit $x \neq a$ existiert. - - Sei $x$ größter Häufungspunkt von $A$, dann heißt - $$ - x = \lim\sup A \text{ (Limes Superior).} - $$ - - Sei $x$ kleinster Häufungspunkt von $A$, dann heißt - $$ - x = \lim\inf A \text{ (Limes Inferior).} - $$ -\end{defi} - -\begin{defi}{Abgeschlossenheit} - $A$ heißt \emph{abgeschlossen}, wenn jeder Häufungspunkt von $A$ in $A$ liegt. -\end{defi} - -\begin{defi}{Bolzano-Weierstrass für Mengen} - Jede unendliche beschränkte Menge $A$ reeller Zahlen besitzt mindestens einen Häufungspunkt. -\end{defi} - -\subsection{Konvergenz von Folgen} - -\begin{defi}{Monotonie} - Eine Folge $a_n$ heißt \emph{monoton wachsend}, falls $\forall n \in \N : a_n \leq a_{n+1}$. - Gilt sogar $a_n < a_{n+1}$, so heißt die Folge \emph{streng monoton wachsend}. - - Eine Folge $a_n$ heißt \emph{monoton fallend}, falls $\forall n \in \N : a_n \geq a_{n+1}$. - Gilt sogar $a_n > a_{n+1}$, so heißt die Folge \emph{streng monoton fallend}. -\end{defi} - -\begin{defi}{Häufungspunkt (Folgen)} - - $a$ heißt \emph{Häufungspunkt einer Folge}, wenn zu jeder $\epsilon$-Umgebung $U_\epsilon (a)$ unendlich viele Folgenglieder $a_n$ in $U_\epsilon (a)$ liegen, also - $$ - \forall \epsilon > 0 , \exists \infty\text{-viele } a_n : \abs{a_n - a} < \epsilon - $$ -\end{defi} - -\begin{defi}{Grenzwert / Limes} - Eine Zahl $a\in \R \text{ oder } \C$ heißt \emph{Grenzwert} oder \emph{Limes} einer Zahlenfolge $a_n$, wenn $\forall \epsilon >0, \exists n_0 (\epsilon)$, so dass für alle $n \geq n_0 (\epsilon)$ (fast immer) gilt - $$ - \abs{a_n - a} < \epsilon - $$ - - Jeder Grenzwert ist auch ein Häufungspunkt. -\end{defi} - -\begin{defi}{Konvergenz / Divergenz} - Eine Folge $a_n$ heißt \emph{konvergent}, falls ein Grenzwert existiert. - - Existiert dieser nicht, so heißt die Folge \emph{divergent}. - - Eine konvergente Folge mit $a=0$ heißt \emph{Nullfolge}. - - Ist $\lim_{n\to\infty}a_n = a$, so ist $\lim_{n\to\infty}(a_n-a) = 0$, d.h. $b_n=\lim_{n\to\infty}(a_n-a)$ ist \emph{Nullfolge}. -\end{defi} - -\begin{defi}{Bolzano-Weierstrass für Folgen} - 1. Jede beschränkte Folge $a_n$ besitzt mindestens eine konvergente Teilfolge. - - 2. Jede beschränkte Folge $a_n$ besitzt einen kleinsten und größten Häufungspunkt mit $b \geq a$ - $$ - \begin{aligned} - a & = \lim\inf a_n, \\ - b & = \lim\sup a_n. - \end{aligned} - $$ - 3. Eine Folge konvergiert genau dann, wenn sie beschränkt ist und nur einen Häufungspunkt besitzt. Dann ist - $$ - a = \lim_{n\to\infty} a_n = \lim\inf a_n = \lim\sup a_n. - $$ -\end{defi} - -\begin{defi}{Sandwich-Lemma oder Einschnürungssatz} - Gilt fast immer, also bis auf endliche viele $n$ (oder auch für $n \geq n_0$) - $$ - a_n \leq c_n \leq b_n - $$ - und $\lim_{n\to\infty}a_n = a = \lim_{n\to\infty}b_n$, so ist - $$ - \lim_{n\to\infty}c_n = a. - $$ -\end{defi} - -\begin{bonus}{Rechenregeln für Grenzwerte} - $$ - \begin{aligned} - \lim_{n\to\infty} (a_n + b_n) & = a+b \\ - \lim_{n\to\infty} c\cdot a_n & = c \cdot a \\ - \lim_{n\to\infty} a_nb_n & = a \cdot b \\ - \lim_{n\to\infty} \frac{a_n}{b_n} & = \frac{a}{b} \text{ für } b_n \neq 0, b\neq 0 \\ - \lim_{n\to\infty} \frac{1}{a_n} & = \frac{1}{a} \text{ für } a_n \neq 0, a\neq 0 - \end{aligned} - $$ -\end{bonus} - -\begin{bonus}{Wichtige Grenzwerte} - $$ - \begin{aligned} - \lim_{n\to\infty} \frac{1}{n^\alpha} & = 0 \text{ für } \alpha >0 \\ - \lim_{n\to\infty} \sqrt[n]{a} & = 1 \text{ für } a > 0 \\ - \lim_{n\to\infty} q^n & = 0 \text{ für } \abs{q} < 1 \\ - \lim_{n\to\infty} n^kq^n & = 0 \text{ für } \abs{q} < 1, k \in \N \\ - \lim_{n\to\infty} \sqrt[n]{n} & = 1 \\ - \lim_{n\to\infty} \frac{n!}{n^n} & = 0 - \end{aligned} - $$ -\end{bonus} - -\begin{defi}{Konvergenz monotoner Folgen} - Jede beschränkte monotone Folge ist konvergent. - - Der Grenzwert ist bei monoton fallenden Folgen $\inf a_n$, bei wachsenden Folgen $\sup a_n$. -\end{defi} - -\begin{defi}{Eulersche Zahl} - Der Grenzert $\lim_{n\to\infty} \left(1 + \frac{1}{n}\right)^n = e$ existiert und heißt \emph{eulersche Zahl}. -\end{defi} - -\begin{defi}{Cauchy-Konvergenz} - Eine Folge $a_n$ heißt \emph{Cauchy-konvergent}, falls - $$ - \forall\epsilon > 0, \exists n_0 (\epsilon) \text{ mit } \abs{a_n-a_m} < \epsilon, \forall n > m \geq n_0. - $$ -\end{defi} - -\subsection{Unendliche Reihen} -\begin{defi}{Unendliche Reihe} - \[ - \sum_{k=m}^{\infty} a_k = \lim_{n\to\infty} \sum_{k=m}^{n} a_k - \] -\end{defi} - -\begin{defi}{Cauchy-Reihe} - \[ - \forall\varepsilon>0 , \exists n_0(\varepsilon) : \left| \sum_{k=m+1}^n a_k \right| < \varepsilon , \forall n>m\geq n_0 - \] - Eine Reihe \emph{konvergiert} genau dann, wenn die zugehörige Cauchy-Reihe konvergiert. -\end{defi} - -\begin{bonus}{Konvergenz durch Nullfolge} - Sei $\sum^n_{k=1}a_k$ konvergent, dann ist $a_k$ Nullfolge. -\end{bonus} - -\begin{defi}{Absolute Konvergenz} - Eine Reihe heißt \emph{absolut konvergent} wenn $\sum_{k=0}^{\infty} |a_k|$ konvergiert. - - Analog heißt eine Folge \emph{absolut konvergent} wenn $|a_n|$ konvergiert. -\end{defi} - -\begin{algo}{Teleskopsumme} - Eine Teleskopsumme hat man dann, wenn sich die Terme einer Summe gegenseitig auflösen. -\end{algo} - -\begin{example}{Teleskopsumme} - \[ - \sum_{k=1}^n \frac{1}{k} - \frac{1}{k+1} = \sum_{k=1}^n \frac{1}{k} - \sum_{k=2}^{n+1} \frac{1}{k} = \frac{1}{1} +\left( \sum_{k=2}^n \frac{1}{k} - \sum_{k=2}^n \frac{1}{k} \right) - \frac{1}{n+1} = 1-\frac{1}{n+1} - \] -\end{example} - -\begin{algo}{Majorantenkriterium} - Man sucht eine zweite Folge $b_k$, sodass diese fast immer größer ist als die vorgegebene Folge ist. - - Konvergiert $\sum_{k=1}^{\infty} b_k$ dann konvergiert auch die ursprüngliche Reihe. -\end{algo} - -\begin{example}{Majorantenkriterium} - Konvergiert $\sum_{k=1}^{\infty} \frac{1}{k^2+1}$? - - Ja, da $\frac{1}{k^2+1} < \frac{1}{k^2}$ und wir wissen, dass $\sum_{k=1}^{\infty} \frac{1}{k^2}$ konvergiert.\\ - Wir haben also eine konvergente Majorante. -\end{example} - -\begin{algo}{Minorantenkriterium} - Man sucht eine zweite Folge $b_k$, sodass diese fast immer kleiner ist als die vorgegebene Folge ist. - Divergiert $\sum_{k=1}^{\infty} b_k$ dann divergiert auch die ursprüngliche Reihe. -\end{algo} - -\begin{example}{Majorantenkriterium} - Konvergiert $\sum_{k=1}^{\infty} \frac{1}{\ln(k)}$? - - Nein, da $\frac{1}{k} < \frac{1}{\ln(k)}$ ($k\geq3$) und wir wissen, dass $\sum_{k=1}^{\infty} \frac{1}{k}$ divergiert.\\ - Wir haben also eine divergente Minorante. -\end{example} - -\begin{algo}{Cauchy-Kondensatioskriterium} - Die Konvergenz von folgenden Reihen ist äquivalent. - $$ - \sum_{k=1}^{\infty} a_k \quad \text{ und } \quad - \sum_{k=1}^{\infty} 2^k \cdot a_{2^k} - $$ -\end{algo} - -\begin{example}{Cauchy-Kondensatioskriterium} - Konvergiert $\sum_{k=1}^{\infty} \frac{1}{k}$? - - Die Frage ist äquivalent dazu, ob - \[ - \sum_{k=1}^{\infty} 2^k \cdot \frac{1}{2^k} = \sum_{k=1}^{\infty} 1 - \] - konvergiert. Das tut sie offensichtlich nicht, also konvergiert auch $\sum_{k=1}^{\infty} \frac{1}{k}$ nicht. -\end{example} - -\begin{algo}{Wurzelkriterium} - Sei $r = \lim_{n\to\infty} \sqrt[n]{|a_n|}$. - Dann konvergiert $\sum_{k=1}^{\infty} a_k$ für $r<1$. - Für $r>1$ divergiert die Reihe. - Für $r=1$ liefert das Kriterium keine Aussage. -\end{algo} - -\begin{example}{Wurzelkriterium} - Konvergiert die Reihe $\sum_{k=1}^{\infty} \frac{1}{7^k}$? - - Es gilt - \[ - r = \lim_{k\to\infty} \sqrt[k]{\frac{1}{7^k}} = \frac{1}{7} < 1 - \] - Also konvergiert die Reihe. -\end{example} - -\begin{algo}{Quotientenkriterium} - Sei $r = \lim_{n\to\infty} \left| \frac{a_{n+1}}{a_n} \right|$. - - Dann konvergiert $\sum_{k=1}^{\infty} a_k$ für $r<1$. - - Für $r>1$ divergiert die Reihe. - - Für $r=1$ liefert das Kriterium keine Aussage. -\end{algo} - -\begin{example}{Quotientenkriterium} - Konvergert die Reihe $\sum_{k=1}^{\infty} \frac{x^k}{k!}$? - - Wir berechnen dann - \[ - r = \lim_{n\to\infty} \left| \frac{\frac{x^{n+1}}{(n+1)!}}{\frac{x^n}{n!}} \right| - = \lim_{n\to\infty} \left| \frac{x}{n+1} \right| = 0 - \] - Die Reihe konvergiert also für alle $x$. -\end{example} - -\begin{algo}{Leibnizkriterium} - Das Leibnizkriterium wird für alternierende Reihen genutzt. - - Sei $\sum_{k=1}^{\infty} (-1)^n \cdot a_n$ und $a_n$ eine beliebige Folge. - - Jetzt muss man nur drei Eigenschaften für $a_n$ zeigen: - \begin{enumerate} - \item $a_n$ muss monoton fallend sein, - \item $a_n$ muss immer größer als Null sein und - \item $\lim_{n\to\infty} a_n =0$. - \end{enumerate} - - Dann konvergiert die Reihe. -\end{algo} - -\begin{example}{Leibnizkriterium} - Konvergiert die Reihe $\sum_{k=2}^{\infty} (-1)^n \cdot \frac{1}{\ln(k)}$. - Wir wissen, dass $\ln(k) > 0$ für $k>1$. - Außerdem wissen wir, dass der natürliche Logarithmus monoton steigend ist, also ist $\frac{1}{\ln(k)}$ monoton fallend. - Es gilt auch $\lim_{n\to\infty} = 0$. Also konvergiert die Reihe. -\end{example} - - -\subsection{Potenzreihen} - -\begin{defi}{Potenzreihe} - Sei $x \in \R, a_n \in \R$, so heißt - $$ - p(x) := \sum_{n=0}^{\infty} a_nx^n - $$ - \emph{reelle Potenzreihe von x}. - - Jede Potenzreihe konvergiert für $x=0$. -\end{defi} - -\begin{defi}{Konvergenz von Potenzreihen (Entwicklungspunkt $x_0 = 0$)} - Jede Potenzreihe konvergiert für $x=0$. - - Jede Potenzreihe konvergiert für - $$ - \abs{x} < R = \lim_{n\to\infty} \abs{\frac{a_n}{a_{n+1}}} \quad \text{ bzw. } \quad \abs{x} < R = \frac{1}{\lim_{n\to\infty} \sqrt[n]{\abs{a_n}}} - $$ - und divergiert für $\abs{x} > R$. - - Der Rand muss oft gesondert betrachtet werden! -\end{defi} - -\begin{defi}{Konvergenz von Potenzreihen (Entwicklungspunkt $x_0 \neq 0$)} - Jede Potenzreihe $p(x) = \sum^\infty_{n=0} a_n (x-x_0)^n$ konvergiert für - $$ - \abs{x-x_0} < R = \lim_{n\to\infty} \abs{\frac{a_n}{a_{n+1}}}\quad \text{ bzw. } \quad \abs{x} < R = \frac{1}{\lim_{n\to\infty} \sqrt[n]{\abs{a_n}}} - $$ - und divergiert für $\abs{x-x_0} > R$. - - Der Rand muss oft gesondert betrachtet werden! -\end{defi} - -\begin{defi}{Konvergenzradius} - $$ - R = \lim_{n\to\infty} \abs{\frac{a_n}{a_{n+1}}}\quad \text{ bzw. } R = \frac{1}{\lim_{n\to\infty} \sqrt[n]{\abs{a_n}}} - $$ - \emph{heißt der Konvergenzradius der Potenzreihe}. -\end{defi} - -\begin{bonus}{Spezielle Potenzreihen} - $$ - \begin{aligned} - f(x) = \frac{1}{1-c(x-x_0)} & \iff \sum^\infty_{n=0} c^n \cdot (x-x_0)^n \text{ für } \abs{x-x_0} < \frac{1}{\abs{c}} - \end{aligned} - $$ -\end{bonus} - -\begin{example}{Potenzreihe um Entwicklungspunkt bestimmen} - Wir wollen die Potenzreihe um $x_0 = 1$ der Reihe $$f(x) = \frac{3}{5+2x}$$ bestimmen. - Zunächst ist: - $$ - \begin{aligned} - f(x) & ={} \frac{3}{5+2x} \\ - & ={} 3\cdot \frac{1}{5+2(x-1) + 2} \\ - & ={} 3\cdot \frac{1}{7- (-2) \cdot (x-1)} \\ - & ={} \frac{3}{7}\cdot \frac{1}{1- (-\frac{2}{7}) \cdot (x-1)} \\ - & ={} \frac{3}{7}\cdot \sum^\infty_{n=0} \left(\frac{-2}{7} \cdot (x-1)\right)^n \text{ für } \abs{\frac{-2}{7} (x-1)} < 1 \\ - & ={} \frac{3}{7}\cdot \sum^\infty_{n=0} \left(\frac{-2}{7}\right)^n \cdot (x-1)^n \text{ für } \abs{x-1} < \frac{7}{2} - \end{aligned} - $$ -\end{example} - -\begin{defi}{Exponentialfunktion} - Die Funktion - $$ - \exp(x) = \sum^\infty_{n=0} \frac{x^n}{n!} - $$ - heißt \emph{Exponentialfunktion} oder \emph{exponentielle Funktion}. - Sie konvergiert für jedes $x\in \R$ und ist damit wohldefiniert. -\end{defi} - -\subsection{Grenzwerte von Funktionen} - -\begin{defi}{Konvergenz von Funktionen} - Gilt $\forall x_n$, dass (falls $\lim_{n\to\infty} x_n=x_0$ gilt): - $$ - \lim_{n\to\infty} f(x_n) = L - $$ - so heißt die Funktion \emph{konvergent für} $x \to x_0$ und wir schreiben - $$ - \lim_{n\to\infty} =: \lim_{x\to x_0} f(x). - $$ -\end{defi} - -\begin{defi}{Stetigkeit von Funktionen} - Gilt $\forall x_n$, dass (falls $\lim_{n\to\infty} x_n=x_0$ gilt): - $$ - \lim_{n\to\infty} f(x_n) = f(x_0) - $$ - so heißt die Funktion \emph{stetig in} $x_0$. - - Jede Potenzreihe ist im Inneren ihres Konvergenzradius (also nicht zwingend für die Randpunkte) stetig. -\end{defi} - -\begin{defi}{Rechtsseitiger und linksseitiger Grenzwert} - Existiert für Folgen $x_n$ mit $x_n > x_0$ ein Grenzwert $L$, also existiert - $$ - \lim_{x \to x_0 \land x > x_0} f(x) = L =: \lim_{x \downarrow x_0} f(x) - $$ - so heißt der Grenzwert \emph{rechtsseitiger Grenzwert}. - Gilt $L=f(x_0)$, so heißt die Funktion \emph{rechtsseitig stetig.} - - Entsprechend für $x < x_0$: - $$ - \lim_{x \to x_0 \land x < x_0} f(x) = L =: \lim_{x \uparrow x_0} f(x). - $$ -\end{defi} - -\begin{defi}{Stetigkeit} - Eine Funktion $f(x)$ ist genau dann \emph{stetig in} $x_0$, wenn - $$ - \lim_{x \downarrow x_0} f(x_0) = \lim_{x \uparrow x_0} f(x_0) = f(x_0). - $$ - - Sei $f : D \to \R$ heißt \emph{stetig auf} $D = [a, b]$, falls $f$ für jedes $x_0 \in D$ stetig ist. -\end{defi} - -\begin{defi}{$\epsilon$-$\delta$-Kriterium} - Eine Funktion $f(x)$ heißt \emph{stetig in} $x_0$, falls - $$ - \forall \epsilon > 0, \exists \delta(x_0, \epsilon) > 0, \forall \abs{x-x_0} < \delta : \abs{f(x)-f(x_0)} < \epsilon - $$ -\end{defi} - -\begin{example}{$\epsilon$-$\delta$-Kriterium} - Untersuche die Stetigkeit von $f(x) = \frac{1}{\sqrt{x}}, \quad x > 0$. - - $f(x)$ ist stetig in $x_0$, wenn - $$\forall \epsilon > 0, \exists \delta (x_0, \epsilon) > 0: \forall \abs{x-x_0} < \delta \Rightarrow \abs{f(x)-f(x_0)} < \epsilon$$ - $$ - \begin{aligned} - & \abs{f(x)-f(x_0)} \\ - = \quad & \abs{\frac{1}{\sqrt{x}}-\frac{1}{\sqrt{x_0}}} \\ - = \quad & \abs{\left(\frac{1}{\sqrt{x}}-\frac{1}{\sqrt{x_0}}\right) \cdot \frac{\frac{1}{\sqrt{x}}+\frac{1}{\sqrt{x_0}}}{\frac{1}{\sqrt{x}}+\frac{1}{\sqrt{x_0}}}} \\ - = \quad & \abs{\frac{\frac{1}{x}-\frac{1}{x_0}}{\frac{1}{\sqrt{x}}+\frac{1}{\sqrt{x_0}}}} \\ - = \quad & \abs{\frac{\frac{x_0-x}{x x_0}}{\frac{\sqrt{x_0} + \sqrt{x}}{ \sqrt{x x_0}}}} \\ - = \quad & \abs{ \frac{(x_0 - x) \sqrt{x x_0} }{ x x_0 \left( \sqrt{x_0} + \sqrt{x} \right) } } \\ - = \quad & \abs{ \frac{x_0 - x }{ \sqrt{x x_0 } \left( \sqrt{x_0} + \sqrt{x} \right) } } \\ - = \quad & \abs{ \frac{x-x_0 }{ \sqrt{x x_0 } \left( \sqrt{x_0} + \sqrt{x} \right) } } \\ - = \quad & \abs{x-x_0} \cdot \frac{1 }{ \sqrt{x x_0 } \left( \sqrt{x_0} + \sqrt{x} \right) } \\ - < \quad & \delta \cdot \frac{1 }{ \sqrt{x x_0 } \left( \sqrt{x_0} + \sqrt{x} \right) } \\ - \leq \quad & \delta \cdot \frac{1 }{ \sqrt{x x_0 } \sqrt{x_0} + \sqrt{x x_0 } \sqrt{x} } \\ - \leq \quad & \delta \cdot \frac{1 }{ \sqrt{x x_0 } \sqrt{x} } \\ - \leq \quad & \delta \cdot \frac{1 }{ x\sqrt{x_0} } \\ - \end{aligned} - $$ - Sei $\abs{x-x_0} < \frac{x_0}{2}$: - - $$\abs{x-x_0} < \frac{x_0}{2} \implies x_0 -\frac{x_0}{2} < x < x_0 + \frac{x_0}{2} \iff \frac{x_0}{2} < x$$ - - Daraus folgt weiterhin: - $$ - \begin{aligned} - & \delta \cdot \frac{1 }{ x\sqrt{x_0} } \\ - < \quad & \frac{2\delta }{ x_0\sqrt{x_0} } < \epsilon \\ - \iff \quad & \delta < \frac{x_0\sqrt{x_0}}{2} \epsilon - \end{aligned} - $$ - - Mit $\delta = \min\{\frac{x_0}{2}, \frac{x_0\sqrt{x_0}}{2}\epsilon\}$ ist $f(x)$ stetig.\qed -\end{example} - -\begin{defi}{Sandwich-Lemma für Funktionen} - Gilt - $$ - \forall \abs{x-x_0} < K, x\neq x_0 : f(x) \leq g(x) \leq h(x) - $$ - und - $$ - \lim_{x\to x_0} f(x) = \lim_{x\to x_0} h(x) = c - $$ - so ist auch - $$ - \lim_{x\to x_0} g(x) = c. - $$ -\end{defi} - -\begin{defi}{Unstetigkeit} - Es gibt verschiedene Typen der Unstetigkeit: - \begin{enumerate} - \item Sprungstellen: - $$ - \lim_{x\uparrow x_0} f(x) \neq\lim_{x\downarrow x_0} f(x) - $$ - \item Unendlichkeitsstellen: $f$ ist in der Umgebung von $x_0$ nicht beschränkt, d.h. - $$ - \lim_{x\to x_0} f(x) > R - $$ - \item Oszillationsstellen: z.B. - $$ - \lim_{x\to 0} \sin \frac{1}{x} \text{ in } x_0 = 0 - $$ - \item Singuläre Definitionen: - $$ - f(x) = \begin{cases} - g(x) & , \text{ für } x \in M \\ - h(x) & , \text{ für } x \notin M - \end{cases} - $$ - \item Definitionslücken: z.B. - $$ - f(x) = \frac{x}{x} \text{ für } x \neq 0 - $$ - \item Kombinationen aus den oben genannten - \end{enumerate} -\end{defi} - -\begin{defi}{Hebbare Lücke} - Sei $f(x)$ stetig für $x\neq x_0, x_0 \notin D$. - Dann erhält man mit $f(x) := \lim_{x\to x_0} f(x)$ eine stetige Funktion, wenn der Grenzwert existiert. - $x_0$ heißt \emph{hebbare Lücke}. -\end{defi} - -\begin{bonus}{Stetigkeit auf Intervallen} - Sei $f : [a, b] \to \R$ stetig, dann: - \begin{itemize} - \item ist $f(x)$ beschränkt. - \item existieren $x_1, x_2 \in [a, b]: f(x_1) \leq f(x) \leq f(x_2), \forall x \in [a, b]$ - \end{itemize} -\end{bonus} - -\begin{defi}{Gleichmäßige Stetigkeit} - Eine Funktion $f : D \to \R$ heißt \emph{gleichmäßig stetig auf D}, falls es ein $\delta > 0$ unabhängig von $x_0$ gibt, so dass - $$ - \abs{f(x) - f(x_0)} < \epsilon, \forall \abs{x-x_0} < \delta. - $$ - - Jede gleichmäßig stetige Funktion ist stetig. - - Eine stetige Funktion $f : [a, b] \to \R$ ist gleichmäßig stetig. -\end{defi} - -\begin{defi}{Lipschitz-Stetigkeit} - Eine Funktion $f$ heißt \emph{lokal Lipschitz-stetig in} $x_0$, wenn es ein $L \geq 0$ und ein $\delta > 0$ gibt, so dass - $$ - \abs{f(x) - f(x_0)} \leq L \cdot \abs{x-x_0}, \forall \abs{x-x_0} < \delta. - $$ - - Eine Funktion $f$ heißt \emph{Lipschitz-stetig}, wenn es ein $L \geq 0$, so dass - $$ - \abs{f(x) - f(y)} \leq L \cdot \abs{x-y}, \forall x, y \in [a, b]. - $$ - $L$ heißt \emph{Lipschitz-Konstante}. - - Ist eine Funktion Lipschitz-stetig, so ist sie auch gleichmäßig stetig. -\end{defi} - -\begin{example}{Lipschitz-Stetigkeit}\ - $$f(x) = \sqrt{2+3x}$$ - - Ist die Funktion lokal Lipschitz-stetig im Punkt $x_0 = 1$? - Berechnen Sie gegebenenfalls die Lipschitz-Konstante $L$ in Abhängigkeit von $\delta$. - Lipschitz-Stetigkeit: $\exists L \geq 0, \forall x,x_0\in D: \abs{f(x)-f(x_0)} \leq L \cdot \abs{x-x_0}$ - - $$ - \begin{aligned} - & \abs{f(x)-f(y)} \\ - = \quad & \abs{\sqrt{2+3x} - \sqrt{2+3y}} \\ - = \quad & \abs{(\sqrt{2+3x} - \sqrt{2+3y}) \cdot \frac{\sqrt{2+3x} + \sqrt{2+3y}}{\sqrt{2+3x} + \sqrt{2+3y}}} \\ - = \quad & \abs{\frac{2+3x-(2+3y)}{\sqrt{2+3x} + \sqrt{2+3y}}} \\ - = \quad & \abs{\frac{3(x-y)}{\sqrt{2+3x} + \sqrt{2+3y}}} \\ - = \quad & \frac{3}{\sqrt{2+3x} + \sqrt{2+3y}} \cdot \abs{x-y} \\ - \overset{x,y\in (x_0-\delta, x_0+\delta)}< \quad & \frac{3}{\sqrt{2+3(x_0-\delta)} + \sqrt{2+3(x_0-\delta)}} \cdot \abs{x-y} \\ - = \quad & \frac{3}{\sqrt{2+3(1-\delta)} + \sqrt{2+3(1-\delta)}} \cdot \abs{x-y} \\ - = \quad & \frac{3}{\sqrt{2+3-3\delta} + \sqrt{2+3-3\delta}} \cdot \abs{x-y} \\ - = \quad & \frac{3}{2\cdot \sqrt{5-3\delta}} \cdot \abs{x-y} \\ - \end{aligned} - $$ - Damit ist $f$ lokal Lipschitz-stetig im Punkt $x_0 = 1$ mit $L = \frac{3}{2\cdot \sqrt{5-3\delta}}$.\qed -\end{example} - -\begin{defi}{Zwischenwertsatz} - Sei $f : [a, b] \to \R$ stetig mit $f(a) = c$ und $f(b) = d$, dann gilt - $$ - \forall y \in [\min(c, d) , \max(c, d)], \exists x \in [a, b] : f(x) = y. - $$ -\end{defi} - -\begin{defi}{Fixpunktsatz} - Ein Wert $x^* \in \R$ heißt \emph{Fixpunkt} einer Funktion $f(x)$, falls $x^* = f(x^*)$. - - Sei $f : [a, b] \to [c, d]$ stetig mit $[c, d] \subset [a, b]$ (\emph{selbstkontrahierend}), dann existiert ein \emph{Fixpunkt} $u = f(u)$. -\end{defi} - -\begin{example}{Fixpunktberechnung (Teil 1)} - Gegeben ist die Funktion - $$f: [0,\infty) \to [0, \infty), \quad f(x) = \frac{x+\frac{1}{2}}{x+1}$$ - - (a) Zeigen Sie, dass die Funktion die Voraussetzungen des Fixpunktsatzes erfüllt. - - \textbf{Stetigkeit:} - $f$ ist offensichtlich stetig, da $f$ aus stetigen Funktionen zusammengesetzt ist (und insbesondere, da $\forall x\in [0,\infty]: x\neq -1$). - - \textbf{Monotonieverhalten:} - Wir vermuten, dass die Funktion monoton steigend ist: - $$ - \begin{aligned} - & x \geq y \implies f(x) \geq f(y) \\ - \equiv \quad & x \geq y \implies \frac{x+\frac{1}{2}}{x+1} \geq \frac{y+\frac{1}{2}}{y+1} \\ - \equiv \quad & x \geq y \implies \left(x+\frac{1}{2}\right)(y+1) \geq \left(y+\frac{1}{2}\right)(x+1) \\ - \equiv \quad & x \geq y \implies xy+ x + \frac{y}{2}+ \frac{1}{2} \geq xy + y + \frac{x}{2} + \frac{1}{2} \\ - \equiv \quad & x \geq y \implies x + \frac{y}{2}\geq y + \frac{x}{2} \\ - \equiv \quad & x \geq y \implies x - \frac{x}{2}\geq y - \frac{y}{2} \\ - \equiv \quad & x \geq y \implies \frac{x}{2}\geq \frac{y}{2} \\ - \equiv \quad & x \geq y \implies x\geq y \quad \checkmark - \end{aligned} - $$ - Damit ist $f$ monoton steigend. - - \textbf{Kontraktion:} Zu zeigen: $\forall x\in [0,\infty)]: f(x) \in [0,\infty)]$: - - $$f(0) = \frac{0+\frac{1}{2}}{0+1} = \frac{1}{2}\in [0,\infty), \text{ und } \lim_{n\to\infty} f(n) = \lim_{n\to\infty} \frac{n+\frac{1}{2}}{n+1} = 1\in [0,\infty)$$ - - Da beide Werte im gegebenen Definitionsbereich sind und $f$ monoton steigend ist, ist $f$ insgesamt selbstkontrahierend. - - Insgesamt sind also alle Bedingungen für den Fixpunktsatz erfüllt.\qed - -\end{example} - -\begin{example}{Fixpunktberechnung (Teil 2)} - (b) Berechnen Sie den Fixpunkt von $f$. - $$ - \begin{aligned} - & f(x^*) = x^* \\ - \equiv \quad & \frac{x^*+\frac{1}{2}}{x^*+1} = x^* \\ - \equiv \quad & x^*+\frac{1}{2} = x^*(x^*+1) \\ - \equiv \quad & x^*+\frac{1}{2} = (x^*)^2+x^* \\ - \equiv \quad & 0 = (x^*)^2-\frac{1}{2} \\ - \implies \quad & x^* = \sqrt{\frac{1}{2}} \lor x^* = -\sqrt{\frac{1}{2}} - \end{aligned} - $$ - - $x^* \in [0,\infty] \implies x^* = \sqrt{\frac{1}{2}}$\qed -\end{example} - -\section{Differentialrechnung} -\subsection{Tangentengleichung} - -\begin{algo}{Tangentengleichung} - Wollen wir die Gleichung der Tangente einer Funktion $f(x)$ in einem Punkt $x_0$ bestimmen, so verwenden wir den Ansatz - $$ - T(x) = f_1(x) = m \cdot (x-x_0) + b. - $$ - Die Tangente im Punkt $x_0$ hat die Eigenschaften - \begin{itemize} - \item Die Steigung ist $m = f'(x)$, - \item Sie geht durch den Punkt $(x_0, f(x_0))$. - \end{itemize} - - Einsetzen der zweiten Bedingung liefert - $$ - f(x_0) = f_1(x_0) = b - $$ - und damit ist die Tangentengleichung bekannt mit - $$ - f_1(x) = f'(x_0) \cdot (x-x_0) + f(x_0). - $$ -\end{algo} - -\newpage -\subsection{Ableitungsregeln} - -\begin{defi}{Faktorregel} - $$ - f(x) = c \cdot g(x) \implies f'(x) = c \cdot g'(x) - $$ -\end{defi} - -\begin{defi}{Summenregel} - $$ - f(x) = g(x) + h(x) \implies f'(x) = g'(x) + h'(x) - $$ -\end{defi} - -\begin{defi}{Produktregel} - $$ - f(x) = g(x) \cdot h(x) \implies f'(x) = g'(x)\cdot h(x) + g(x) \cdot h'(x) - $$ -\end{defi} - -\begin{defi}{Quotientenregel} - $$ - f(x) = \frac{g(x)}{h(x)} \implies f'(x) = \frac{g'(x)\cdot h(x) - g(x)\cdot h'(x)}{[h(x)]^2} - $$ -\end{defi} - -\begin{defi}{Kettenregel} - $$ - f(x) = g(h(x)) \implies f'(x) = g'(h(x)) \cdot h'(x) - $$ -\end{defi} - -\begin{bonus}{Ableitung der Umkehrfunktion} - $$ - (f^{-1})(y) = \frac{1}{f'(x)} = \frac{1}{f'(f^{-1}(y))} - $$ -\end{bonus} - -\begin{bonus}{Elementare Ableitungsfunktionen} - \begin{center} - \begin{tabular}{C | C} - f(x) & f'(x) \\ - \hline - x^n & n \cdot x^{n-1} \\ - \sin x & \cos x \\ - \cos x & -\sin x \\ - \tan x & \frac{1}{\cos^2 x} = \tan^2 x + 1 \\ - \cot x & \frac{-1}{\sin^2 x} \\ - e^x & e^x \\ - a^x & a^x \cdot \ln a \\ - \ln x & \frac{1}{x} - \end{tabular} - \end{center} -\end{bonus} - -\subsection{Lokale Extrema} - -\begin{defi}{Lokale Extrema} - Existiert eine Stelle $x_0$ einer Funktion $f(x)$ und eine $\epsilon$-Umgebung $U_\epsilon (x_0)$ von $x_0$, so dass $\forall x \in U_\epsilon (x_0)$ gilt: - \begin{itemize} - \item $f(x) \geq f(x_0)$, so heißt $x_0$ \emph{lokales Minimum}, - \item $f(x) \leq f(x_0)$, so heißt $x_0$ \emph{lokales Maximum}. - \end{itemize} - - Ist $f$ differenzierbar in $x_0$ und $x_0$ lokales Extremum, sei gilt - $$ - f'(x_0) = 0. - $$ -\end{defi} - -\subsection{Mittelwertsatz} - -\begin{bonus}{Satz von Rolle} - Ist $f$ auf $[a, b]$ stetig mit $f(a) = f(b)$ und auf $(a, b)$ differenzierbar, so existiert ein $x^* \in (a, b) : f'(x^*) = 0$. -\end{bonus} - -\begin{defi}{Mittelwertsatz} - Sei $f \in C[a, b]$ und in $(a, b)$ differenzierbar. - Dann existiert ein $x^* \in (a, b)$ mit - $$ - f'(x^*) = \frac{f(b) -f(a)}{b-a}. - $$ -\end{defi} - -\subsection{Stetigkeit und Differenzierbarkeit von Potenzreihen} - -\begin{defi}{Stetigkeit / Differenzierbarkeit von Potenzreihen} - Jede Potenzreihe ist stetig im Inneren des Konvergenzbereiches. - Die Potenzreihe $p(x) = \sum^\infty_{n=0} a_n(x-x_0)^n$ ist differenzierbar im Inneren des Konvergenzbereiches und die Ableitung $p'(x)$ kann summandenweise berechnet werden mit: - $$ - \begin{aligned} - p'(x) & = \sum^\infty_{n=1} a_n \cdot n \cdot (x-x_0)^{n-1} \\ - & = \sum^\infty_{n=0} a_{n+1} \cdot (n+1) \cdot (x-x_0)^{n} - \end{aligned} - $$ -\end{defi} - -\subsection{Monotonie} - -\begin{defi}{Monotonie für Funktionen} - Eine Funktion heißt \emph{monoton wachsend auf} $[a, b]$, falls - $$ - \forall x_1, x_2 \in (a, b), x_1 < x_2 : f(x_1) \leq f(x_2) \iff \forall x \in (a, b): f'(x) \geq 0. - $$ - Eine Funktion heißt \emph{streng monoton wachsend auf} $[a, b]$, falls - $$ - \forall x_1, x_2 \in (a, b), x_1 < x_2 : f(x_1) < f(x_2) \iff \forall x \in (a, b): f'(x) > 0. - $$ - Eine Funktion heißt \emph{monoton fallend auf} $[a, b]$, falls - $$ - \forall x_1, x_2 \in (a, b), x_1 < x_2 : f(x_1) \geq f(x_2) \iff \forall x \in (a, b): f'(x) \leq 0. - $$ - Eine Funktion heißt \emph{streng monoton fallend auf} $[a, b]$, falls - $$ - \forall x_1, x_2 \in (a, b), x_1 < x_2 : f(x_1) > f(x_2) \iff \forall x \in (a, b): f'(x) < 0. - $$ -\end{defi} - -\subsection{Die Grenzwerte von de L'Hospital} - -\begin{defi}{Regeln von de L'Hospital} - Seien $f, g \in C[a, b]$ und in $(a, b)$ differenzierbar mit $f(a) = g(a) = 0$. - - Weiterhin gelte $\forall x \in (a, b): g'(x) \neq 0$ und es existiert - $$ - \lim_{x\to a} \frac{f'(x)}{g'(x)} - $$ - dann existiert auch - $$ - \lim_{x\to a } \frac{f(x)}{g(x)} - $$ - und es ist - $$ - \lim_{x\to a } \frac{f(x)}{g(x)} = \lim_{x\to a} \frac{f'(x)}{g'(x)}. - $$ -\end{defi} - -\subsection{Krümmungseigenschaften} - -\begin{defi}{Krümmung} - Sei $f\in C^2(a, b)$ und ist $\forall x \in (a, b) : f''(x) > 0$, so heißt $f(x)$ \emph{konvex} oder \emph{linksgekrümmt}. - - Ist $\forall x \in (a, b) : f''(x) < 0$ so heißt $f(x)$ \emph{konkav} oder \emph{rechtsgekrümmt} -\end{defi} - -\begin{defi}{Wendepunkt} - Sei $f \in C^2(a, b)$ und wechselt die Funktion für $x^* \in (a, b)$ von einer links- zu einer rechtsgekrümmten Funktion (oder umgekehrt), so heißt $x^*$ \emph{Wendepunkt der Funktion}. - - Ist $x^*$ Wendepunkt und $f \in C^2(a, b)$, so ist $f''(x) = 0$. -\end{defi} - -\subsection{Die Taylorreihe} - -\begin{defi}{Taylorreihe} - $$ - \begin{aligned} - f(x) & = \sum^\infty_{n=0} \frac{f^{(n)}(x_0)}{n!} (x-x_0)^n \\ - & = f(x_0) + f'(x_0)(x-x_0) + \frac{f''(x_0)}{2}(x-x_0)^2 + \frac{f'''(x_0)}{6}(x-x_0)^3 + \ldots - \end{aligned} - $$ - Dabei heißt $x_0$ Entwicklungspunkt der Potenzreihe und die Reihe konvergiert für $\abs{x-x_0} < r$ mit $r = \lim_{n\to\infty}\abs{\frac{a_n}{a_{n+1}}}$. -\end{defi} - -\begin{example}{Taylorreihe} - \textbf{Bestimmen Sie das Taylorpolynom dritten Grades für die Funktion $g(x) = \ln(x\cdot e^{-2x})$ an der Stelle $x_0 = 1$.} - - Taylorpolynom $k$-ten Grades einer Funktion $f$: - $$T_k(x) := \sum_{n=0}^k \frac{\mathrm{d}^n f}{\mathrm{d}x^n} (x_0)\cdot\frac{(x-x_0)^n}{n!} $$ - - Das Taylorpolynom dritten Grades von $g(x) = \ln(x\cdot e^{-2x})$ an der Stelle $x_0 = 1$ ist dann gegeben durch: - $$ - \begin{aligned} - T_3(x) ={} & \sum_{n=0}^3 \frac{\mathrm{d}^n g}{\mathrm{d}x^n} (1)\cdot\frac{(x-1)^n}{n!} \\ - ={} & g(1) + \frac{\mathrm{d} g}{\mathrm{d} x}(1)\cdot\frac{x-1}{1!} + \frac{\mathrm{d^2} g}{\mathrm{d} x^2}(1)\cdot\frac{(x-1)^2}{2!} + \frac{\mathrm{d^3} g}{\mathrm{d} x^3}(1)\cdot\frac{(x-1)^3}{3!} \\ - \stackrel{*}={} & \ln(e^{-2}) + \left( \frac{1}{1}- 2 \right)\cdot(x-1) + \frac{-1}{1}\cdot\frac{(x-1)^2}{2} + \frac{2}{1}\cdot\frac{(x-1)^3}{6} \\ - ={} & -2 -(x-1) - \frac{1}{2}\cdot (x-1)^2 +\frac{1}{3}\cdot (x-1)^3 \\ - ={} & -2 -x+1 - \frac{1}{2}\cdot (x^2-2x+1) +\frac{1}{3}\cdot (x^3 -3x^2+3x-1) \\ - ={} & -1 -x - \frac{x^2}{2} + x -\frac{1}{2} +\frac{x^3}{3} - x^2 + x -\frac{1}{3} \\ - ={} & \frac{x^3}{3}- \frac{3x^2}{2} + x - \frac{11}{6} - \end{aligned} - $$ - \qed - - \vspace{2em} - - \textbf{Nebenrechnungen:} - $$ - \frac{\mathrm{d} g}{\mathrm{d} x} = \frac{1}{x} - 2, \quad - \frac{\mathrm{d}^2 g}{\mathrm{d} x^2} = \frac{-1}{x^2}, \quad - \frac{\mathrm{d}^3 g}{\mathrm{d} x^3} = \frac{2}{x^3} - $$ -\end{example} - -\newpage -\section{Integration} -\subsection{Flächenberechnung} - -\begin{defi}{Stammfunktion} - Sei $f\in C[a, b]$. Eine differenzierbare Funktion $F(x)$ mit $\forall x\in [a, b] : F'(x) = f(x)$ heißt eine \emph{Stammfunktion von f}. -\end{defi} - -\begin{defi}{Unbestimmtes Integral} - $F(x) = \int f(x) \dx$ heißt das \emph{unbestimmte Integral von f}. -\end{defi} - -\begin{defi}{Hauptsatz der Differential- und Integralrechnung} - Sei $f\in C[a, b]$, dann ist - $$ - F_a(x) = \int^x_a f(t)\dt \text{ differenzierbar} - $$ - und es gilt - $$ - F'_a(x) = f(x). - $$ - Damit ist also: - $$ - \left(\int^x_a f(t)\dt\right)' = F'_a(x) = f(x). - $$ -\end{defi} - -\begin{defi}{Fläche einer Funktion} - Sei $f \in C[a, b]$, dann ist die Fläche der Funktion im Intervall $[a, b]$ gegeben mit - $$ - \int_a^b f(x) \dx = F(b) - F(a) =: \left.F(x)\right|^b_{x=1} - $$ -\end{defi} - -\begin{bonus}{Potenzregel} - $$ - \int x^n \dx = \frac{1}{n+1}x^{n+1} + C - $$ -\end{bonus} - -\begin{bonus}{Faktorregel} - $$ - \int c\cdot f(x) \dx = c\cdot \int f(x) \dx - $$ -\end{bonus} - -\begin{bonus}{Summenregel} - $$ - \int (f(x) + g(x))\dx = \int f(x) \dx + \int g(x) \dx - $$ -\end{bonus} - -\begin{bonus}{Partielle Integration} - $$ - \int f'(x)g(x) \dx = f(x)g(x) - \int f(x) g'(x) \dx - $$ - - Entscheidend bei partieller Integration ist die Wahl von $f(x)$ und $g'(x)$. - Eine falsche Wahl kann unter Umständen dazu führen, dass das Integral noch komplizierter wird. - - \textbf{Faustregel:} - \begin{enumerate} - \item L - logarithmische Funktionen ($\ln$, $\log_a$, $\ldots$) - \item I - inverse Winkelfunktionen ($\arcsin$, $\arccos$, $\arctan$, $\ldots$) - \item A - algebraische Funktionen ($x^2$, $5x^3$, $\ldots$) - \item T - trigonometrische Funktionen ($\sin$, $\cos$, $\tan$, $\csc$, $\ldots$) - \item E - Exponentialfunktionen ($e^x$, $5a^x$, $\ldots$) - \end{enumerate} - Entsprechend des Rangs wird $f(x)$ ausgewählt. Will man beispielsweise $x^2\cos x$ integrieren, so würde man $x^2$ für $f(x)$ wählen und $\cos x$ für $g'(x)$, da algebraische Funktionen höher in der Liste stehen als trigonometrische Funktionen. -\end{bonus} - -\begin{bonus}{Integration durch Substitution} - $$ - \int f(x)\dx = \int f(\phi(u)) \cdot \phi'(u) \du - $$ -\end{bonus} - -\subsection{Integration zur Berechnung von Flächen zwischen mehreren Funktionen} - -\begin{algo}{Berechnung der Fläche zwischen zwei Funktionen} - Wir betrachten die Fläche zwischen zwei Funktionen $f(x)$ und $g(x)$. - - \begin{enumerate} - \item Schnittpunkte $a, b$ von $f(x)$ und $g(x)$ berechnen. - \item Integriere $\abs{f(x) - g(x)}$ zwischen den Schnittpunkten: - $$ - \abs{\int^b_a\abs{f(x) -g(x)} \dx} - $$ - \end{enumerate} - - Beachte: Bei mehr als zwei Schnittpunkten müssen mehrere Integrale mit den jeweiligen Grenzen addiert werden. - - Das Verfahren lässt sich sehr einfach auf mehrere Funktionen erweitern. -\end{algo} - -\begin{bonus}{Beispiel: Fläche zwischen drei Funktionen} - Wie groß ist der Flächeninhalt, der von den Funktionen - $$ - f(x) = -0.25x^4 + 4, \quad g(x) = -2x-4, \quad h(x) = 2x-4 - $$ - eingeschlossen wird? - \begin{center} - \begin{tikzpicture} - \begin{axis}[ - axis lines=middle, - xmin=-4.5,xmax=4.5,ymin=-4.5,ymax=4.5 - ] - \addplot[blue, samples=1000, domain=-2.4:2.4, name path=A] {-0.25*x*x*x*x + 4} node[right] {$f$}; % f(x) - \addplot[yellow!70!red, samples=300, domain=-4:4, name path=B] {-2*x - 4} node[pos=0, left] {$g$}; % g(x) - \addplot[red!90!teal, samples=300, domain=-4:4, name path=C] {2*x-4} node[right] {$h$}; % h(x) - \addplot[gray!30, opacity=0.5] fill between[of=A and C,soft clip={domain=0:2}]; - \addplot[gray!30, opacity=0.5] fill between[of=A and B,soft clip={domain=-2:0}]; - \end{axis} - \end{tikzpicture} - \end{center} - - Wir sehen in der Zeichnung, dass für die Fläche $A$ zwischen den Graphen gilt: - $$ - \begin{aligned} - A ={} & \abs{ \int_{-2}^{0} \left(f(x) - g(x)\right) \dx} + \abs{ \int_{0}^{2} \left(f(x) - h(x)\right) \dx} \\ - ={} & \abs{ \int_{-2}^{0} \left(-\frac{1}{4}x^4 + 2x + 8\right) \dx} + \abs{ \int_{0}^{2} \left(-\frac{1}{4}x^4 - 2x + 8\right) \dx} \\ - ={} & \abs{ \left[ -\frac{1}{20}x^5 + x^2 + 8x \right]_{-2}^{0} } + \abs{ \left[ -\frac{1}{20}x^5 - x^2 + 8x \right]_0^2 } \\ - ={} & \abs{ 0 - \left( -\frac{1}{20}\cdot(-2)^5 + (-2)^2 + 8\cdot(-2) \right) } + \abs{ -\frac{1}{20}\cdot 2^5 + 2^2 + 8\cdot 2 - 0 } \\ - ={} & \abs{-\frac{8}{5} - 4 + 16 } + \abs{-\frac{8}{5} - 4 + 16} \\ - ={} & \frac{52}{5} + \frac{52}{5} \\ - ={} & \frac{104}{5} - \end{aligned} - $$ - Damit beträgt der Flächeninhalt $\frac{104}{5}$ Flächeneinheiten. \qed -\end{bonus} - -\newpage -\subsection{Längenberechnung} - -\begin{algo}{Längenberechnung eines Graphen} - Gegeben sind eine Funktion $f\in C[a, b]$ und die Punkte $a, b$. - - Die Länge $L_a^b$ des Graphen der Funktion $f$ ist dann gegeben mit - $$ - L^b_a(f) = \int_a^b \sqrt{1+(f'(x))^2} \dx - $$ -\end{algo} - -\subsection{Mantelflächenberechnung} - -\begin{algo}{Mantelflächenberechnung} - Gegeben sind eine Funktion $f\in C[a, b]$ und die Punkte $a, b$. - - Die Mantelfläche $M_a^b$ des Rotationskörpers der Funktion $f$ ist dann gegeben mit - $$ - M^b_a(f) = \int_a^b 2\pi \cdot f(x) \cdot \sqrt{1+(f'(x))^2} \dx - $$ -\end{algo} - -\subsection{Rotationsvolumenberechnung} - -\begin{algo}{Rotationsvolumenberechnung} - Gegeben sind eine Funktion $f\in C[a, b]$ und die Punkte $a, b$. - - Das Volumen $M_a^b$ des Rotationskörpers der Funktion $f$ ist dann gegeben mit - $$ - V^b_a(f) = \int_a^b \pi \cdot f(x)^2 \dx - $$ -\end{algo} - -\subsection{Differentiation von Integralen mit variablen Grenzen} - -\begin{algo}{Differentiation von Integralen mit variablen Grenzen} - Gegeben sei das Integral - $$ - \int^{h(x)}_{g(x)} f(t)\dt. - $$ - Dann gilt: - $$ - \left(\int^{h(x)}_{g(x)} f(t)\dt\right)' = f(h(x)) \cdot h'(x) - f(g(x))\cdot g'(x). - $$ -\end{algo} - -\subsection{Parameterintegrale} - -\begin{defi}{Parameterintegral} - Sei $f(x, t)$ eine von zwei rellen Parametern abhängige Funktion. - Die Funktionen $g_1(x)$ und $g_2(x)$ seien stetig auf $[a, b]$ und differenzierbar auf $(a, b)$ sowie $f(x, t)$ integrierbar bez. $t$. - - Dann heißt - $$ - F(x) = \int^{g_2(x)}_{g_1(x)} f(x, t) \dt - $$ - das \emph{Parameterintegral}. -\end{defi} - -\begin{example}{Parameterintegral} - $$ - \begin{aligned} - \lim_{x\to\infty} \left( \frac{1}{x} \cdot \int_0^x \frac{t+1}{t^2 + 2} \dt\right) - & \overset{\text{de L'Hospital}}={} \lim_{x\to\infty} \left( \frac{1}{1} \cdot \left( \frac{x+1}{x^2 + 2} \cdot 1 - \frac{0+1}{0+2} \cdot 0 \right)\right) \\ - & ={} \lim_{x\to\infty} \left( \frac{x+1}{x^2 + 2} \right) \\ - & ={} 0 - \end{aligned} - $$\qed -\end{example} - -\begin{defi}{Leibniz-Regel} - Das Parameterintegral $F(x) = \int^{g_2(x)}_{g_1(x)} f(x, t) \dt$ ist differenzierbar und es ist - $$ - F'(x) = f(x, g_2(x)) \cdot g'_2(x) - f(x, g_1(x)) \cdot g'_1(x) + \int^{g_2(x)}_{g_1(x)} \frac{\mathrm{d} f(x, t)}{\dx}\dt - $$ -\end{defi} - -\begin{example}{Leibniz-Regel} - $$F(x) = \int_{t=x}^{x^2} \frac{1}{t} \cdot \ln (1 + x\cdot t) \dt \quad (x>0)$$ - $$ - \begin{aligned} - \dFdx - & ={} \int_{t=x}^{x^2} \frac{1}{t} \cdot \ln (1 + x\cdot t) \dt \\ - & ={} \frac{1}{x^2} \cdot \ln (1 + x\cdot x^2) \cdot 2x - \left( \frac{1}{x} \cdot \ln (1 + x\cdot x) \cdot 1 \right) + \int^{x^2}_{t=x} \frac{1}{t} \cdot t \cdot \frac{1}{1 + x \cdot t} \dt \\ - & ={} \frac{2\ln (1 + x^3)}{x} - \frac{\ln(1+x^2)}{x} + \left[ \frac{\ln(1+x\cdot t)}{x} \right]^{x^2}_{t=x} \\ - & ={} \frac{2\ln (1 + x^3)}{x} - \frac{\ln(1+x^2)}{x} + \frac{\ln(1+x\cdot x^2)}{x} - \frac{\ln(1+x\cdot x)}{x} \\ - & ={} \frac{3\ln (1 + x^3) - 2\ln(1+x^2)}{x} \\ - \end{aligned} - $$\qed -\end{example} - -\subsection{Uneigentliche Integrale} - -\begin{defi}{Uneigentliche Integrale} - Sei $f(x)$ beschränkt auf $\R$, dann definieren wir - $$ - \begin{aligned} - \int^\infty_a f(x) \dx & := \lim_{R\to\infty} \int^R_a f(x)\dx \\ - \int^b_{-\infty} f(x) \dx & := \lim_{R\to\infty} \int^b_{-R} f(x)\dx \\ - \int^\infty_{-\infty} f(x) \dx & := \lim_{R\to\infty} \int^R_{c} f(x)\dx + \lim_{R\to\infty} \int^c_{R} f(x)\dx - \end{aligned} - $$ -\end{defi} - -\begin{defi}{Konvergenz von Integralen} - Die Integrale heißen \emph{konvergent}, wenn die Grenzwerte existieren, sonst heißen sie \emph{divergent}. -\end{defi} - -\subsection{Absolute Konvergenz} - -\begin{defi}{Absolute Konvergenz von Integralen} - Sei $\int^b_a f(x) \dx$ ein eigentliches oder uneigentliches Integral. - - Konvergiert - $$ - \int^b_a \abs{f(x)} \dx, - $$ - so heißt $\int^b_a f(x) \dx$ \emph{absolut konvergent}. -\end{defi} - -\subsection{Weitere Konvergenzkriterien} - -\begin{defi}{Majoranten- und Minorantenkriterium für unbeschränkte Integrationsintervalle} - Sei $\forall x \in [a, \infty) : 0 \leq \abs{f(x)} \leq g(x)$ und konvergiert $\int^\infty_a g(x)$, dann konvergiert $\int^\infty_a f(x) \dx$ und es gilt - $$ - \abs{\int^\infty_a f(x) \dx} \leq \int^\infty_a \abs{f(x)} \dx \leq \int^\infty_a g(x) \dx. - $$ - - Ist $\forall x\in [a, \infty) : 0\leq g(x) \leq f(x)$ und divergiert $\int^\infty_a g(x) \dx$, so divergiert auch $\int^\infty_a f(x) \dx$. -\end{defi} - -\begin{defi}{Majoranten- und Minorantenkriterium für unbeschränkte Integranden} - Sei $\forall x \in [a, b] : 0 \leq \abs{f(x)} \leq g(x)$ und konvergiert $\int^b_a g(x)$, dann konvergiert $\int^b_a f(x) \dx$ und es gilt - $$ - \abs{\int^\infty_a f(x) \dx} \leq \int^b_a \abs{f(x)} \dx \leq \int^b_a g(x) \dx. - $$ - - Ist $\forall x\in [a, b] : 0\leq g(x) \leq f(x)$ und divergiert $\int^b_a g(x) \dx$, so divergiert auch $\int^b_a f(x) \dx$. -\end{defi} - -\subsection{Das Integralkriterium zur Konvergenz von Reihen} - -\begin{defi}{Integralkriterium} - Sei $f$ eine auf $[m-1, \infty]$ monoton fallende Funktion mit $\forall x \in [m, \infty) : f(x) \geq 0$, dann ist die Reihe - $$ - \sum^\infty_{n=m} f(n) - $$ - genau dann \emph{konvergent}, wenn - $$ - \int^\infty_m f(x) \dx - $$ - existiert. Es gilt bei Konvergenz - $$ - \sum^\infty_{n=m+1} f(n) \leq \int^\infty_m f(x) \dx \leq \sum^\infty_{n=m} f(n) \leq \int^\infty_{m-1} f(x) \dx. - $$ -\end{defi} - -\begin{example}{Integralkriterium} - \[ - \sum^\infty_{n=1} \frac{1}{\sqrt[3]{n}} = \sum^\infty_{n=1} f(n) - \] - $f(n)$ ist offensichtlich auf dem Intervall $[1, \infty )$ streng monoton fallend. - - Damit muss nur geprüft werden, dass das Integral $\int^\infty_{n=1} f(n) \dn$ existiert bzw. konvergiert: - - $$ - \begin{aligned} - \int^\infty_{n=1} f(n) \dn - & ={} \int^\infty_{n=1} \frac{1}{\sqrt[3]{n}} \dn \\ - & ={} \lim_{b\to\infty} \left[ \frac{3n^{\frac{2}{3}}}{2} \right]^b_{n=1} \\ - & ={} \lim_{b\to\infty} \left( \frac{3b^{\frac{2}{3}}}{2} - \frac{3}{2}\right) \\ - & ={} \infty - \end{aligned} - $$ - Damit divergiert das Integral und die gegebene Summe divergiert ebenfalls.\qed -\end{example} - -\printindex -\printindex[Beispiele] -\end{document} +\documentclass[german]{../spicker} + +\usepackage{amsmath} +\usepackage{polynom} +\usepackage{array} % for \newcolumntype macro +\usepackage{tikz} +\usepackage{pgfplots} +\usepgfplotslibrary{fillbetween} +\pgfplotsset{compat=1.17} +\title{Analysis 1} +\author{Patrick Gustav Blaneck, Felix Racz} +\makeindex[intoc] +\makeindex[intoc, name=Beispiele,title=Beispiele] + +\newcommand{\scalarprod}[1]{\left\langle #1 \right\rangle} +\newcommand{\vektor}[1]{\begin{pmatrix*}[r] #1 \end{pmatrix*}} +\renewcommand{\span}[1]{\operatorname{span}\left(#1\right)} + +\renewcommand{\abs}[1]{\left| #1 \right|} +\newcommand{\cis}[1]{\left( \cos\left( #1 \right) + i \sin\left( #1 \right) \right)} +\newcommand{\sgn}{\text{sgn}} +\newcommand{\diff}{\mathrm{d}} +\newcommand{\dx}{~\mathrm{d}x} +\newcommand{\du}{~\mathrm{d}u} +\newcommand{\dv}{~\mathrm{d}v} +\newcommand{\dw}{~\mathrm{d}w} +\newcommand{\dt}{~\mathrm{d}t} +\newcommand{\dn}{~\mathrm{d}n} +\newcommand{\dudx}{~\frac{\mathrm{d}u}{\mathrm{d}x}} +\newcommand{\dudn}{~\frac{\mathrm{d}u}{\mathrm{d}n}} +\newcommand{\dvdx}{~\frac{\mathrm{d}v}{\mathrm{d}x}} +\newcommand{\dwdx}{~\frac{\mathrm{d}w}{\mathrm{d}x}} +\newcommand{\dtdx}{~\frac{\mathrm{d}t}{\mathrm{d}x}} +\newcommand{\ddx}{\frac{\mathrm{d}}{\mathrm{d}x}} +\newcommand{\dFdx}{\frac{\mathrm{d}F}{\mathrm{d}x}} +\newcommand{\dfdx}{\frac{\mathrm{d}f}{\mathrm{d}x}} +\newcommand{\interval}[1]{\left[ #1 \right]} + +\newcolumntype{L}{>{$}l<{$}} % math-mode version of "l" column type +\newcolumntype{R}{>{$}r<{$}} % math-mode version of "r" column type +\newcolumntype{C}{>{$}c<{$}} % math-mode version of "c" column type +\newcolumntype{P}{>{$}p<{$}} % math-mode version of "l" column type + +\begin{document} +\maketitle +\tableofcontents +\newpage + +%\setcounter{section}{1} + +\section{Grundlagen} + +\subsection{Funktionen} + +\begin{thirdboxl} + \begin{defi}{Injektivität} + $f(x) = f(x')\implies x = x'$ + \end{defi} +\end{thirdboxl}% +\begin{thirdboxm} + \begin{defi}{Surjektivität} + $\forall y, \exists x: y = f(x)$ + \end{defi} +\end{thirdboxm}% +\begin{thirdboxr} + \begin{defi}{Bijektivität} + $\forall y, \exists! x: y = f(x)$ + \end{defi} +\end{thirdboxr}% + +\begin{algo}{Beweisen der Injektivität} + \begin{enumerate} + \item Behauptung: $f(x) = f(x')$ + \item Umformen auf eine Aussage der Form $x = x'$ + \end{enumerate} +\end{algo} + +\begin{algo}{Beweisen der Surjektivität} + \begin{enumerate} + \item Aufstellen der Umkehrfunktion + \item Zeigen, dass diese Umkehrfunktion auf dem gesamten Definitionsbereich definiert ist + \end{enumerate} +\end{algo} + +\begin{algo}{Beweisen der Bijektivität} + \begin{enumerate} + \item Injektivität beweisen + \item Surjektivität beweisen + \end{enumerate} +\end{algo} + +\subsection{Polynome} + +\begin{defi}{Polynom} + Eine Funktion $p(x) = \sum^n_{i=0} a_i x^i$ mit $a_i, x \in \R ~ (\C), a_n \neq 0$ heißt \emph{Polynom vom Grad} $n$. +\end{defi} + +\begin{halfboxl} + \vspace{-\baselineskip} + \begin{bonus}{Abspalten von Linearfaktoren} + Sei $x_0$ eine Nullstelle eines Polynoms $p(x)$, dann ist + $$ p(x) = q(x) \cdot (x-x_0).$$ + Dabei ist $(x-x_0)$ ein abgespaltener Linearfaktor und $q(n)$ das entsprechend reduzierte Polynom mit $q(n) = \frac{p(x)}{x-x_0}$. + \end{bonus} +\end{halfboxl}% +\begin{halfboxr} + \vspace{-\baselineskip} + \begin{bonus}{Faktorisierung} + Sind $x_1, \ldots, x_n$ Nullstellen eines Polynoms $p(x)$, so ist + $$ p(x) = a_n \cdot (x-x_1) \cdot \ldots \cdot (x-x_n)$$ + die Faktorisierung von $p(x)$. + \end{bonus} +\end{halfboxr}% + +\subsubsection*{Polynome vom Grad 2} +\begin{halfboxl} + \vspace{-\baselineskip} + \begin{algo}{$pq$-Formel} + \begin{enumerate} + \item Polynom der Form $x^2 + px + q = 0$ + \item $x_{1,2} = -\frac{p}{2} \pm \sqrt{\left(\frac{p}{2}\right)^2 - q}$ + \end{enumerate} + \end{algo} +\end{halfboxl}% +\begin{halfboxr} + \vspace{-\baselineskip} + \begin{algo}{Mitternachtsformel} + \begin{enumerate} + \item Polynom der Form $ax^2 + bx + c = 0$ + \item $x_{1,2} = \frac{-b \pm \sqrt{b^2 - 4ac}}{2a}$ + \end{enumerate} + \end{algo} +\end{halfboxr} + +\begin{bonus}{Besonderheiten bei $x \in \C$} + \begin{itemize} + \item Ist $x_i$ eine Nullstelle des Polynoms $p(x)$ mit \emph{reellen Koeffizienten}, dann ist auch $\overline{x_i}$ eine Nullstelle von $p(x)$. + \end{itemize} +\end{bonus} + +\subsection{Gebrochen rationale Funktionen} + +\begin{defi}{Gebrochen rationale Funktionen} + Seien $p_m(x)$ und $p_n(x)$ Polynome vom Grad $m$ bzw. $n$, dann heißt + $$ + f(x) = \frac{p_m(x)}{p_n(x)} + $$ + \emph{gebrochen rationale Funktion}.\\ + Im Fall $m<n$ heißt die Funktion \emph{echt gebrochen rational}, sonst \emph{unecht gebrochen rational}. +\end{defi} + +\begin{algo}{Polynomdivision} + Gegeben ist \emph{unecht gebrochen rationale Funktion} $f(x) = \frac{p_m(x)}{p_n(x)}$ + \begin{enumerate} + \item \emph{Dividiere} die größten Exponenten aus beiden Polynomen + \item \emph{Mutipliziere} Ergebnis mit Divisor zurück + \item \emph{Subtrahiere} Ergebnis vom Dividenden + \item Wiederhole, bis: + \subitem Ergebnis 0 ist, oder + \subitem Grad des Ergebnisses kleiner ist als Grad des Divisors (ergibt \emph{Rest}) + \end{enumerate} +\end{algo} + +%\begin{bonus}{Polynomdivision Beispiel} +% \polylongdiv[style=C]{x^3+x^2-1}{x-1} +%\end{bonus} + +\begin{algo}{Hornerschema} + Gegeben ist \emph{Polynom} $p_m(x)$ und ein \emph{Wert} $x_0$ + + Vorbereitung: + \begin{itemize} + \item Erstelle eine Tabelle mit $m + 2$ Spalten und 3 Zeilen + \item Erste Zelle frei lassen und dann Koeffizienten $a_m, a_{m-1}, \ldots, a_0$ in die erste Zeile schreiben + \item In die erste Zelle der zweiten Zeile kommt $x_0$ + \end{itemize} + + Anwendung (beginnend in zweiter Zelle der dritten Zeile): + \begin{enumerate} + \item Erster Koeffizient der ersten Zeile in die dritte Zeile + \item \emph{Multipliziere} Zahl der ersten Spalte mit diesem Koeffizienten + \item Schreibe Ergebnis in zweite Zeile, unterhalb des nächsten Koeffizienten + \item \emph{Addiere} Ergebnis mit diesem Koeffizienten + \item Wiederhole 2-4 bis zum Schluss + \end{enumerate} + + Ergebnis: + \begin{itemize} + \item Wert des Polynoms $p_m(x_0)$ in letzter Zelle der letzten Zeile + \item Bei Wert $p_m(x_0) = 0$ steht in der letzten Zeile das Polynom nach Abspalten des Linearfaktors $(x-x_0)$ + \end{itemize} +\end{algo} + +%\begin{bonus}{Hornerschema Beispiel} +% Gegeben: $p_4(x) = 2x^4-3x^3+4x^2-5x+2$ an der Stelle $x_0 = 1$ +% \polyhornerscheme[x=1]{2x^4-3x^3+4x^2-5x+2} +% Ergebnis: $p_4(1) = 0 \implies (x-1) \text{ ist Linearfaktor von } p_4(x) \text{ und } \frac{p_4(x)}{x-1} = 2x^3 = x^2 + 3x -2$ +%\end{bonus} + +\begin{bonus}{Tipps und Tricks} + \begin{itemize} + \item Polynomdivision und Hornerschema funktionieren auch sehr gut mit komplexen Zahlen + \item Bei mehreren abzuspaltenden Linearfaktoren bietet sich das Hornerschema sehr gut an + \end{itemize} +\end{bonus} + +\begin{algo}{Partialbruchzerlegung} + Gegeben: \emph{Echt gebrochen rationale Funktion} $f(x) = \frac{p_m(x)}{p_n(x)}$ + \begin{enumerate} + \item Berechne Nullstellen des \emph{Nennerpolynoms} $x_0, \ldots, x_k \in \R$ + \item Verschiedene Fälle: + \subitem Relle Nullstellen: + \subsubitem $x_i$ ist einfache Nullstelle $\implies \frac{A}{x-x_1}$ + \subsubitem $x_i$ ist $r$-fache Nullstelle $\implies \frac{A_1}{x-x_1} + \frac{A_2}{(x-x_1)^2} + \ldots + \frac{A_r}{(x-x_1)^r}$ + \subitem Nichtrelle Nullstellen: + \subsubitem Einfacher quadratischer Term $\implies \frac{Ax + B}{x^2+px+q}$ + \subsubitem $r$-facher quadratischer Term $\implies \frac{A_1x + B_1}{x^2+px+q} + \frac{A_2x + B_2}{(x^2+px+q)^2} + \ldots + \frac{A_rx + B_r}{(x^2+px+q)^r}$ + \item Koeffizientenvergleich: + \begin{enumerate} + \item Brüche gleichnamig machen (Multipliziere beide Seiten mit Nennerpolynom) + \item Potenzen von $x$ zusammenfassen + \item Gleichungssystem lösen + \item Lösungen in Ansatz einsetzen + \end{enumerate} + \end{enumerate} +\end{algo} + +\begin{bonus}{Besonderheiten in $\C$} + \begin{itemize} + \item Für Partialbrüche ohne relle Nullstellen können wir in $\C$ stets Nullstellen finden. Das Verfahren erfolgt dann analog mit komplexen Nullstellen. + \end{itemize} +\end{bonus} + +\begin{bonus}{Tipps und Tricks} + \begin{itemize} + \item Partialbruchzerlegung ist erst bei einer \emph{echt gebrochen rationale Funktion} sinnvoll + \item Ist die Funktion unecht gebrochen rational, führe zuerst eine Polynomdivision durch und zerlege dann den Rest in die Partialbrüche + \end{itemize} +\end{bonus} + + +\subsection{Gleichungen und Ungleichungen} + +\begin{algo}{Berechnen einer Lösungsmenge bei Ungleichungen} + Gegeben: Ungleichung mit Bezug auf Variable $x$ + \begin{enumerate} + \item Für jeden Betrag $\left| a(x) \right|$, eine Fallunterscheidung machen für + \subitem $a(x) \geq 0 \implies \left| a(x) \right| = a(x)$ + \subitem $a(x) < 0 \implies \left| a(x) \right| = -a(x)$ + \subitem \emph{Hier haben wir bereits eine Einschränkung für die Lösungsmenge des jeweiligen Falles gegeben!} + \item Ungleichungen nach $x$ auflösen + \item Jeder Fall $i$ erzeugt eine Lösungsmenge $L_i$ bestehend aus\emph{ umgestellter Ungleichung} und Fallbedingungen + \item Lösungsmenge $L = \bigcup^n_{i = 1} L_i$, wobei $n$ die Anzahl der betrachteten Fälle ist + \end{enumerate} +\end{algo} + +\begin{bonus}{Tipps und Tricks} + \begin{itemize} + \item $n$ Beträge in der Gleichung können zu $2^n$ Fällen führen. + \item Es kann vorkommen, dass ein Fall einer Fallunterscheidung unerreichbar ist, z.B. für $x > 5 \land x < 1$. Die Lösungsmenge $L$ ist dann leer ($L = \emptyset$). + \item Radizieren (Wurzelziehen) ist in Ungleichungen nur erlaubt, wenn danach der \emph{Betrag} der Wurzel betrachtet wird + \item Quadrieren einer Ungleichung `erzeugt' potentiell ein falsches Ergebnis. Nach dem Quadrieren sollte man also jedes Ergebnis prüfen. + \item Multiplikation mit negativen Zahlen sollte vermieden werden, da das Umdrehen des Ungleichheitszeichens schnell für Flüchtigkeitsfehler sorgen kann. + \end{itemize} +\end{bonus} + +\subsection{Komplexe Analysis} +\begin{bonus}{Rechenregeln für komplexe Zahlen in kartesischen Koordinaten} + \textbf{Darstellung:} $z = a + i \cdot b$ und $w = c + i \cdot d$ + + \textbf{Addition und Subtraktion:} $z \pm w = (a\pm c) + i \cdot (b \pm d)$ + + \textbf{Multiplikation:} $z \cdot w = (ac -bd) + i \cdot (ad + bc)$ + + \textbf{Division:} $\frac{z}{w} = \frac{z \cdot \overline{w}}{w \cdot \overline{w}}$ + + \textbf{Komplex konjugiert:} Vorzeichen von $\Im$ wechseln: $\overline{z} = a- i \cdot b$ + + \textbf{Betrag:} Abstand vom Ursprung: $\abs{z} = \sqrt{z \cdot \overline{z}} = \sqrt{a^2 + b^2}$ +\end{bonus} + +\begin{bonus}{Rechenregeln für komplexe Zahlen in Polarkoordinaten} + \textbf{Darstellung:} $z = r \cdot (\cos\theta + i \cdot \sin \theta) = r \cdot e^{i \cdot \theta}$ + + \textbf{Multiplikation:} $z \cdot w = r_z \cdot r_w \cdot e^{i \cdot (\theta_z + \theta_w)}$ + + \textbf{Division:} $\frac{z}{w} = \frac{r_z}{r_w} \cdot e^{i \cdot (\theta_z - \theta_w)}$ + + \textbf{Komplex konjugiert:} $\overline{z} = (r, -\theta) = (r, 2\pi - \theta)$ + + \textbf{Betrag:} $\abs{z} = r$ +\end{bonus} + +\begin{algo}{Kartesische Koordinaten $\to$ Polarkoordinaten} + \begin{enumerate} + \item $r = \abs{z} = \sqrt{x^2 + y^2}$ + \item + \subitem $y \geq 0 : \theta = \arctan \frac{x}{r}$ + \subitem $y < 0 : \theta = -\arctan \frac{x}{r}$ + \end{enumerate} +\end{algo} + +\begin{algo}{Polarkoordinaten $\to$ Kartesische Koordinaten} + \begin{enumerate} + \item $x = r \cdot \cos \theta$ + \item $y = r \cdot \sin \theta$ + \end{enumerate} +\end{algo} + +\begin{algo}{Radizieren von komplexen Zahlen} + Gesucht: Lösung von $z^n = r \cdot e^{i\cdot \theta}$ + \begin{enumerate} + \item Ist $z^n$ nicht in Polarkoordinaten gegeben, so ist zunächst die Polarform zu bilden. + \item Bertechne $r_k = \sqrt[n]{r}$. Dieser Radius ist die Länge aller Lösungen. + \item Berechne für alle $k \in [0, n-1]$ + $$ + \theta_k = \frac{\theta + k\cdot 2\pi}{n} = \frac{\theta}{n} + \frac{k}{n} \cdot 2\pi + $$ + \item Die Lösungen sind dann die $n$ Zahlen $z_k = (r_k, \theta_k)$ für $k \in [0, n-1]$. + \end{enumerate} + \qed +\end{algo} + +\section{Folgen und Reihen} + +\subsection{Grundlagen} +\begin{bonus}{Rechenregeln für Summen} + $$ + \begin{aligned} + \sum_{k=m}^n a_k & = \sum_{k=m-l}^{n-l} a_{k+l} \\ + \sum_{k=m}^n a_k & = \sum_{k=m}^c a_k + \sum_{k=c}^n a_k \\ + \sum_{k=m}^n a_k + \sum_{k=m}^n b_k & = \sum_{k=m}^n a_k + b_k \\ + \sum_{k=m}^n c\cdot a_k & = c\cdot\sum_{k=m}^n a_k + \end{aligned} + $$ + Die Regeln gelten auch für unendliche Reihen. +\end{bonus} + +\begin{bonus}{Wichtige Summen} + \begin{itemize} + \item Arithmetische Summe: $$\sum^n_{k=1} k = \frac{n(n+1)}{2}$$ + \item Geometrische Summe: $$\sum^n_{k=1} x^k = \frac{1-x^{n+1}}{1-x} = \frac{x^{n+1} - 1}{x-1}$$ + \item Summe der Quadratzahlen: $$\sum^n_{k=1} k^2 = \frac{n(n+1)(2n+1)}{6}$$ + \item Summe der Kubikzahlen: $$\sum^n_{k=1} k^3 = \left(\frac{n(n+1)}{2}\right)^2$$ + \end{itemize} +\end{bonus} + +\subsection{Binomialkoeffizienten und der binomische Lehrsatz} + +\begin{defi}{Binomialkoeffizient} + Die Anzahl der $k$-elementigen Teilmengen einer $n$-elementigen Menge bezeichnen wir mit $\binom{n}{k}$. + Diese Zahlen heißen \emph{Binomialkoeffizienten} oder Binomialzahlen. +\end{defi} + +\begin{defi}{Rekursionsformel für Binomialkoeffizient} + Für $k, n \in \N$ mit $k \leq n$ gilt: + $$ + \binom{n}{k} = \binom{n-1}{k} + \binom{n-1}{k-1} + $$ +\end{defi} + +\begin{defi}{Kombinatorische Formel für Binomialkoeffizient} + $$ + \binom{n}{k} = \begin{cases} + 0 & , \text{ für } k > n \\ + \frac{n!}{(n-k)! \cdot k!} & , \text{ für } k \leq n + \end{cases} + $$ +\end{defi} + +\begin{defi}{Der binomische Lehrsatz} + Für beliebige $a, b \in \R$ und $n \in \N$ gilt: + $$ + (a+b)^n = \sum^n_{k=0} \binom{n}{k} a^k \cdot b^{n-k} + $$ +\end{defi} + +\section{Konvergenz von Folgen, Reihen und Funktionen} + +\subsection{Grundlagen} +\begin{defi}{Schranken} + Gilt $$\forall x\in A : \abs{x} < K,$$ so heißt die Menge $A$ \emph{beschränkt} und $K$ \emph{Schranke}. + + Gilt nur $x \leq K$, so heißt die Menge \emph{nach oben beschränkt} und $K$ \emph{obere Schranke}. + + Im Falle $x \geq K$ heißt $A$ \emph{nach unten beschränkt} und $K$ \emph{untere Schranke}. +\end{defi} + +\begin{defi}{Beschränktheit} + Eine Menge $M$ heißt genau dann \emph{beschränkt}, wenn sie nach oiben und nach unten beschränkt ist. +\end{defi} + +\begin{defi}{Supremum, Maximum} + Der Wert + $$ + K= \min_{K^* \in \R} \{K \text{ ist obere Schranke}\} + $$ + heißt \emph{kleinste obere Schranke} oder \emph{Supremum von A}. + Notation: $\sup A$ + + Gilt $K \in A$, so heißt $K$ \emph{Maximum von A}. Notation: $\max A$. +\end{defi} + +\begin{defi}{Infimum, Minimum} + Der Wert + $$ + K= \max_{K^* \in \R} \{K \text{ ist untere Schranke}\} + $$ + heißt \emph{größte untere Schranke} oder \emph{Infimum von A}. + Notation: $\inf A$ + + Gilt $K \in A$, so heißt $K$ \emph{Minimum von A}. Notation: $\min A$. +\end{defi} + +\begin{bonus}{Vollständigkeitsaxiom} + Jede nicht-leere nach oben beschränkte Menge $A$ hat ein \emph{Supremum}, jede nicht-leere nach unten beschränkte Menge $A$ hat ein \emph{Infimum}. +\end{bonus} + +\begin{defi}{$\epsilon$-Umgebung von $K$ in $\R$} + $$ + U_\epsilon(K) := \{ x \in \R \mid \abs{x - K} < \epsilon \} + $$ + heißt $\epsilon$\emph{-Umgebung von} $K$ \emph{in} $\R$. +\end{defi} + +\begin{defi}{Innerer Punkt} + $x_0 \in A$ heißt \emph{innerer Punkt von A}, falls eine $\epsilon$-Umgebung existiert, so dass $U_\epsilon (x_0) \in A$, also vollständig in $A$ enthalten ist. + $A$ heißt \emph{offen}, falls jeder Punkt der Menge innerer Punkt ist. +\end{defi} + +\begin{defi}{Häufungspunkt (Mengen)} + $a$ heißt \emph{Häufungspunkt einer Menge A}, wenn $\forall \epsilon > 0$ in der Umgebung $U_\epsilon (a)$ ein Punkt $x \in A$ mit $x \neq a$ existiert. + + Sei $x$ größter Häufungspunkt von $A$, dann heißt + $$ + x = \lim\sup A \text{ (Limes Superior).} + $$ + + Sei $x$ kleinster Häufungspunkt von $A$, dann heißt + $$ + x = \lim\inf A \text{ (Limes Inferior).} + $$ +\end{defi} + +\begin{defi}{Abgeschlossenheit} + $A$ heißt \emph{abgeschlossen}, wenn jeder Häufungspunkt von $A$ in $A$ liegt. +\end{defi} + +\begin{defi}{Bolzano-Weierstrass für Mengen} + Jede unendliche beschränkte Menge $A$ reeller Zahlen besitzt mindestens einen Häufungspunkt. +\end{defi} + +\subsection{Konvergenz von Folgen} + +\begin{defi}{Monotonie} + Eine Folge $a_n$ heißt \emph{monoton wachsend}, falls $\forall n \in \N : a_n \leq a_{n+1}$. + Gilt sogar $a_n < a_{n+1}$, so heißt die Folge \emph{streng monoton wachsend}. + + Eine Folge $a_n$ heißt \emph{monoton fallend}, falls $\forall n \in \N : a_n \geq a_{n+1}$. + Gilt sogar $a_n > a_{n+1}$, so heißt die Folge \emph{streng monoton fallend}. +\end{defi} + +\begin{defi}{Häufungspunkt (Folgen)} + + $a$ heißt \emph{Häufungspunkt einer Folge}, wenn zu jeder $\epsilon$-Umgebung $U_\epsilon (a)$ unendlich viele Folgenglieder $a_n$ in $U_\epsilon (a)$ liegen, also + $$ + \forall \epsilon > 0 , \exists \infty\text{-viele } a_n : \abs{a_n - a} < \epsilon + $$ +\end{defi} + +\begin{defi}{Grenzwert / Limes} + Eine Zahl $a\in \R \text{ oder } \C$ heißt \emph{Grenzwert} oder \emph{Limes} einer Zahlenfolge $a_n$, wenn $\forall \epsilon >0, \exists n_0 (\epsilon)$, so dass für alle $n \geq n_0 (\epsilon)$ (fast immer) gilt + $$ + \abs{a_n - a} < \epsilon + $$ + + Jeder Grenzwert ist auch ein Häufungspunkt. +\end{defi} + +\begin{defi}{Konvergenz / Divergenz} + Eine Folge $a_n$ heißt \emph{konvergent}, falls ein Grenzwert existiert. + + Existiert dieser nicht, so heißt die Folge \emph{divergent}. + + Eine konvergente Folge mit $a=0$ heißt \emph{Nullfolge}. + + Ist $\lim_{n\to\infty}a_n = a$, so ist $\lim_{n\to\infty}(a_n-a) = 0$, d.h. $b_n=\lim_{n\to\infty}(a_n-a)$ ist \emph{Nullfolge}. +\end{defi} + +\begin{defi}{Bolzano-Weierstrass für Folgen} + 1. Jede beschränkte Folge $a_n$ besitzt mindestens eine konvergente Teilfolge. + + 2. Jede beschränkte Folge $a_n$ besitzt einen kleinsten und größten Häufungspunkt mit $b \geq a$ + $$ + \begin{aligned} + a & = \lim\inf a_n, \\ + b & = \lim\sup a_n. + \end{aligned} + $$ + 3. Eine Folge konvergiert genau dann, wenn sie beschränkt ist und nur einen Häufungspunkt besitzt. Dann ist + $$ + a = \lim_{n\to\infty} a_n = \lim\inf a_n = \lim\sup a_n. + $$ +\end{defi} + +\begin{defi}{Sandwich-Lemma oder Einschnürungssatz} + Gilt fast immer, also bis auf endliche viele $n$ (oder auch für $n \geq n_0$) + $$ + a_n \leq c_n \leq b_n + $$ + und $\lim_{n\to\infty}a_n = a = \lim_{n\to\infty}b_n$, so ist + $$ + \lim_{n\to\infty}c_n = a. + $$ +\end{defi} + +\begin{bonus}{Rechenregeln für Grenzwerte} + $$ + \begin{aligned} + \lim_{n\to\infty} (a_n + b_n) & = a+b \\ + \lim_{n\to\infty} c\cdot a_n & = c \cdot a \\ + \lim_{n\to\infty} a_nb_n & = a \cdot b \\ + \lim_{n\to\infty} \frac{a_n}{b_n} & = \frac{a}{b} \text{ für } b_n \neq 0, b\neq 0 \\ + \lim_{n\to\infty} \frac{1}{a_n} & = \frac{1}{a} \text{ für } a_n \neq 0, a\neq 0 + \end{aligned} + $$ +\end{bonus} + +\begin{bonus}{Wichtige Grenzwerte} + $$ + \begin{aligned} + \lim_{n\to\infty} \frac{1}{n^\alpha} & = 0 \text{ für } \alpha >0 \\ + \lim_{n\to\infty} \sqrt[n]{a} & = 1 \text{ für } a > 0 \\ + \lim_{n\to\infty} q^n & = 0 \text{ für } \abs{q} < 1 \\ + \lim_{n\to\infty} n^kq^n & = 0 \text{ für } \abs{q} < 1, k \in \N \\ + \lim_{n\to\infty} \sqrt[n]{n} & = 1 \\ + \lim_{n\to\infty} \frac{n!}{n^n} & = 0 + \end{aligned} + $$ +\end{bonus} + +\begin{defi}{Konvergenz monotoner Folgen} + Jede beschränkte monotone Folge ist konvergent. + + Der Grenzwert ist bei monoton fallenden Folgen $\inf a_n$, bei wachsenden Folgen $\sup a_n$. +\end{defi} + +\begin{defi}{Eulersche Zahl} + Der Grenzert $\lim_{n\to\infty} \left(1 + \frac{1}{n}\right)^n = e$ existiert und heißt \emph{eulersche Zahl}. +\end{defi} + +\begin{defi}{Cauchy-Konvergenz} + Eine Folge $a_n$ heißt \emph{Cauchy-konvergent}, falls + $$ + \forall\epsilon > 0, \exists n_0 (\epsilon) \text{ mit } \abs{a_n-a_m} < \epsilon, \forall n > m \geq n_0. + $$ +\end{defi} + +\subsection{Unendliche Reihen} +\begin{defi}{Unendliche Reihe} + \[ + \sum_{k=m}^{\infty} a_k = \lim_{n\to\infty} \sum_{k=m}^{n} a_k + \] +\end{defi} + +\begin{defi}{Cauchy-Reihe} + \[ + \forall\varepsilon>0 , \exists n_0(\varepsilon) : \left| \sum_{k=m+1}^n a_k \right| < \varepsilon , \forall n>m\geq n_0 + \] + Eine Reihe \emph{konvergiert} genau dann, wenn die zugehörige Cauchy-Reihe konvergiert. +\end{defi} + +\begin{bonus}{Konvergenz durch Nullfolge} + Sei $\sum^n_{k=1}a_k$ konvergent, dann ist $a_k$ Nullfolge. +\end{bonus} + +\begin{defi}{Absolute Konvergenz} + Eine Reihe heißt \emph{absolut konvergent} wenn $\sum_{k=0}^{\infty} |a_k|$ konvergiert. + + Analog heißt eine Folge \emph{absolut konvergent} wenn $|a_n|$ konvergiert. +\end{defi} + +\begin{algo}{Teleskopsumme} + Eine Teleskopsumme hat man dann, wenn sich die Terme einer Summe gegenseitig auflösen. +\end{algo} + +\begin{example}{Teleskopsumme} + \[ + \sum_{k=1}^n \frac{1}{k} - \frac{1}{k+1} = \sum_{k=1}^n \frac{1}{k} - \sum_{k=2}^{n+1} \frac{1}{k} = \frac{1}{1} +\left( \sum_{k=2}^n \frac{1}{k} - \sum_{k=2}^n \frac{1}{k} \right) - \frac{1}{n+1} = 1-\frac{1}{n+1} + \] +\end{example} + +\begin{algo}{Majorantenkriterium} + Man sucht eine zweite Folge $b_k$, sodass diese fast immer größer ist als die vorgegebene Folge ist. + + Konvergiert $\sum_{k=1}^{\infty} b_k$ dann konvergiert auch die ursprüngliche Reihe. +\end{algo} + +\begin{example}{Majorantenkriterium} + Konvergiert $\sum_{k=1}^{\infty} \frac{1}{k^2+1}$? + + Ja, da $\frac{1}{k^2+1} < \frac{1}{k^2}$ und wir wissen, dass $\sum_{k=1}^{\infty} \frac{1}{k^2}$ konvergiert.\\ + Wir haben also eine konvergente Majorante. +\end{example} + +\begin{algo}{Minorantenkriterium} + Man sucht eine zweite Folge $b_k$, sodass diese fast immer kleiner ist als die vorgegebene Folge ist. + Divergiert $\sum_{k=1}^{\infty} b_k$ dann divergiert auch die ursprüngliche Reihe. +\end{algo} + +\begin{example}{Majorantenkriterium} + Konvergiert $\sum_{k=1}^{\infty} \frac{1}{\ln(k)}$? + + Nein, da $\frac{1}{k} < \frac{1}{\ln(k)}$ ($k\geq3$) und wir wissen, dass $\sum_{k=1}^{\infty} \frac{1}{k}$ divergiert.\\ + Wir haben also eine divergente Minorante. +\end{example} + +\begin{algo}{Cauchy-Kondensatioskriterium} + Die Konvergenz von folgenden Reihen ist äquivalent. + $$ + \sum_{k=1}^{\infty} a_k \quad \text{ und } \quad + \sum_{k=1}^{\infty} 2^k \cdot a_{2^k} + $$ +\end{algo} + +\begin{example}{Cauchy-Kondensatioskriterium} + Konvergiert $\sum_{k=1}^{\infty} \frac{1}{k}$? + + Die Frage ist äquivalent dazu, ob + \[ + \sum_{k=1}^{\infty} 2^k \cdot \frac{1}{2^k} = \sum_{k=1}^{\infty} 1 + \] + konvergiert. Das tut sie offensichtlich nicht, also konvergiert auch $\sum_{k=1}^{\infty} \frac{1}{k}$ nicht. +\end{example} + +\begin{algo}{Wurzelkriterium} + Sei $r = \lim_{n\to\infty} \sqrt[n]{|a_n|}$. + Dann konvergiert $\sum_{k=1}^{\infty} a_k$ für $r<1$. + Für $r>1$ divergiert die Reihe. + Für $r=1$ liefert das Kriterium keine Aussage. +\end{algo} + +\begin{example}{Wurzelkriterium} + Konvergiert die Reihe $\sum_{k=1}^{\infty} \frac{1}{7^k}$? + + Es gilt + \[ + r = \lim_{k\to\infty} \sqrt[k]{\frac{1}{7^k}} = \frac{1}{7} < 1 + \] + Also konvergiert die Reihe. +\end{example} + +\begin{algo}{Quotientenkriterium} + Sei $r = \lim_{n\to\infty} \left| \frac{a_{n+1}}{a_n} \right|$. + + Dann konvergiert $\sum_{k=1}^{\infty} a_k$ für $r<1$. + + Für $r>1$ divergiert die Reihe. + + Für $r=1$ liefert das Kriterium keine Aussage. +\end{algo} + +\begin{example}{Quotientenkriterium} + Konvergert die Reihe $\sum_{k=1}^{\infty} \frac{x^k}{k!}$? + + Wir berechnen dann + \[ + r = \lim_{n\to\infty} \left| \frac{\frac{x^{n+1}}{(n+1)!}}{\frac{x^n}{n!}} \right| + = \lim_{n\to\infty} \left| \frac{x}{n+1} \right| = 0 + \] + Die Reihe konvergiert also für alle $x$. +\end{example} + +\begin{algo}{Leibnizkriterium} + Das Leibnizkriterium wird für alternierende Reihen genutzt. + + Sei $\sum_{k=1}^{\infty} (-1)^n \cdot a_n$ und $a_n$ eine beliebige Folge. + + Jetzt muss man nur drei Eigenschaften für $a_n$ zeigen: + \begin{enumerate} + \item $a_n$ muss monoton fallend sein, + \item $a_n$ muss immer größer als Null sein und + \item $\lim_{n\to\infty} a_n =0$. + \end{enumerate} + + Dann konvergiert die Reihe. +\end{algo} + +\begin{example}{Leibnizkriterium} + Konvergiert die Reihe $\sum_{k=2}^{\infty} (-1)^n \cdot \frac{1}{\ln(k)}$. + Wir wissen, dass $\ln(k) > 0$ für $k>1$. + Außerdem wissen wir, dass der natürliche Logarithmus monoton steigend ist, also ist $\frac{1}{\ln(k)}$ monoton fallend. + Es gilt auch $\lim_{n\to\infty} = 0$. Also konvergiert die Reihe. +\end{example} + + +\subsection{Potenzreihen} + +\begin{defi}{Potenzreihe} + Sei $x \in \R, a_n \in \R$, so heißt + $$ + p(x) := \sum_{n=0}^{\infty} a_nx^n + $$ + \emph{reelle Potenzreihe von x}. + + Jede Potenzreihe konvergiert für $x=0$. +\end{defi} + +\begin{defi}{Konvergenz von Potenzreihen (Entwicklungspunkt $x_0 = 0$)} + Jede Potenzreihe konvergiert für $x=0$. + + Jede Potenzreihe konvergiert für + $$ + \abs{x} < R = \lim_{n\to\infty} \abs{\frac{a_n}{a_{n+1}}} \quad \text{ bzw. } \quad \abs{x} < R = \frac{1}{\lim_{n\to\infty} \sqrt[n]{\abs{a_n}}} + $$ + und divergiert für $\abs{x} > R$. + + Der Rand muss oft gesondert betrachtet werden! +\end{defi} + +\begin{defi}{Konvergenz von Potenzreihen (Entwicklungspunkt $x_0 \neq 0$)} + Jede Potenzreihe $p(x) = \sum^\infty_{n=0} a_n (x-x_0)^n$ konvergiert für + $$ + \abs{x-x_0} < R = \lim_{n\to\infty} \abs{\frac{a_n}{a_{n+1}}}\quad \text{ bzw. } \quad \abs{x} < R = \frac{1}{\lim_{n\to\infty} \sqrt[n]{\abs{a_n}}} + $$ + und divergiert für $\abs{x-x_0} > R$. + + Der Rand muss oft gesondert betrachtet werden! +\end{defi} + +\begin{defi}{Konvergenzradius} + $$ + R = \lim_{n\to\infty} \abs{\frac{a_n}{a_{n+1}}}\quad \text{ bzw. } R = \frac{1}{\lim_{n\to\infty} \sqrt[n]{\abs{a_n}}} + $$ + \emph{heißt der Konvergenzradius der Potenzreihe}. +\end{defi} + +\begin{bonus}{Spezielle Potenzreihen} + $$ + \begin{aligned} + f(x) = \frac{1}{1-c(x-x_0)} & \iff \sum^\infty_{n=0} c^n \cdot (x-x_0)^n \text{ für } \abs{x-x_0} < \frac{1}{\abs{c}} + \end{aligned} + $$ +\end{bonus} + +\begin{example}{Potenzreihe um Entwicklungspunkt bestimmen} + Wir wollen die Potenzreihe um $x_0 = 1$ der Reihe $$f(x) = \frac{3}{5+2x}$$ bestimmen. + Zunächst ist: + $$ + \begin{aligned} + f(x) & ={} \frac{3}{5+2x} \\ + & ={} 3\cdot \frac{1}{5+2(x-1) + 2} \\ + & ={} 3\cdot \frac{1}{7- (-2) \cdot (x-1)} \\ + & ={} \frac{3}{7}\cdot \frac{1}{1- (-\frac{2}{7}) \cdot (x-1)} \\ + & ={} \frac{3}{7}\cdot \sum^\infty_{n=0} \left(\frac{-2}{7} \cdot (x-1)\right)^n \text{ für } \abs{\frac{-2}{7} (x-1)} < 1 \\ + & ={} \frac{3}{7}\cdot \sum^\infty_{n=0} \left(\frac{-2}{7}\right)^n \cdot (x-1)^n \text{ für } \abs{x-1} < \frac{7}{2} + \end{aligned} + $$ +\end{example} + +\begin{defi}{Exponentialfunktion} + Die Funktion + $$ + \exp(x) = \sum^\infty_{n=0} \frac{x^n}{n!} + $$ + heißt \emph{Exponentialfunktion} oder \emph{exponentielle Funktion}. + Sie konvergiert für jedes $x\in \R$ und ist damit wohldefiniert. +\end{defi} + +\subsection{Grenzwerte von Funktionen} + +\begin{defi}{Konvergenz von Funktionen} + Gilt $\forall x_n$, dass (falls $\lim_{n\to\infty} x_n=x_0$ gilt): + $$ + \lim_{n\to\infty} f(x_n) = L + $$ + so heißt die Funktion \emph{konvergent für} $x \to x_0$ und wir schreiben + $$ + \lim_{n\to\infty} =: \lim_{x\to x_0} f(x). + $$ +\end{defi} + +\begin{defi}{Stetigkeit von Funktionen} + Gilt $\forall x_n$, dass (falls $\lim_{n\to\infty} x_n=x_0$ gilt): + $$ + \lim_{n\to\infty} f(x_n) = f(x_0) + $$ + so heißt die Funktion \emph{stetig in} $x_0$. + + Jede Potenzreihe ist im Inneren ihres Konvergenzradius (also nicht zwingend für die Randpunkte) stetig. +\end{defi} + +\begin{defi}{Rechtsseitiger und linksseitiger Grenzwert} + Existiert für Folgen $x_n$ mit $x_n > x_0$ ein Grenzwert $L$, also existiert + $$ + \lim_{x \to x_0 \land x > x_0} f(x) = L =: \lim_{x \downarrow x_0} f(x) + $$ + so heißt der Grenzwert \emph{rechtsseitiger Grenzwert}. + Gilt $L=f(x_0)$, so heißt die Funktion \emph{rechtsseitig stetig.} + + Entsprechend für $x < x_0$: + $$ + \lim_{x \to x_0 \land x < x_0} f(x) = L =: \lim_{x \uparrow x_0} f(x). + $$ +\end{defi} + +\begin{defi}{Stetigkeit} + Eine Funktion $f(x)$ ist genau dann \emph{stetig in} $x_0$, wenn + $$ + \lim_{x \downarrow x_0} f(x_0) = \lim_{x \uparrow x_0} f(x_0) = f(x_0). + $$ + + Sei $f : D \to \R$ heißt \emph{stetig auf} $D = [a, b]$, falls $f$ für jedes $x_0 \in D$ stetig ist. +\end{defi} + +\begin{defi}{$\epsilon$-$\delta$-Kriterium} + Eine Funktion $f(x)$ heißt \emph{stetig in} $x_0$, falls + $$ + \forall \epsilon > 0, \exists \delta(x_0, \epsilon) > 0, \forall \abs{x-x_0} < \delta : \abs{f(x)-f(x_0)} < \epsilon + $$ +\end{defi} + +\begin{example}{$\epsilon$-$\delta$-Kriterium} + Untersuche die Stetigkeit von $f(x) = \frac{1}{\sqrt{x}}, \quad x > 0$. + + $f(x)$ ist stetig in $x_0$, wenn + $$\forall \epsilon > 0, \exists \delta (x_0, \epsilon) > 0: \forall \abs{x-x_0} < \delta \Rightarrow \abs{f(x)-f(x_0)} < \epsilon$$ + $$ + \begin{aligned} + & \abs{f(x)-f(x_0)} \\ + = \quad & \abs{\frac{1}{\sqrt{x}}-\frac{1}{\sqrt{x_0}}} \\ + = \quad & \abs{\left(\frac{1}{\sqrt{x}}-\frac{1}{\sqrt{x_0}}\right) \cdot \frac{\frac{1}{\sqrt{x}}+\frac{1}{\sqrt{x_0}}}{\frac{1}{\sqrt{x}}+\frac{1}{\sqrt{x_0}}}} \\ + = \quad & \abs{\frac{\frac{1}{x}-\frac{1}{x_0}}{\frac{1}{\sqrt{x}}+\frac{1}{\sqrt{x_0}}}} \\ + = \quad & \abs{\frac{\frac{x_0-x}{x x_0}}{\frac{\sqrt{x_0} + \sqrt{x}}{ \sqrt{x x_0}}}} \\ + = \quad & \abs{ \frac{(x_0 - x) \sqrt{x x_0} }{ x x_0 \left( \sqrt{x_0} + \sqrt{x} \right) } } \\ + = \quad & \abs{ \frac{x_0 - x }{ \sqrt{x x_0 } \left( \sqrt{x_0} + \sqrt{x} \right) } } \\ + = \quad & \abs{ \frac{x-x_0 }{ \sqrt{x x_0 } \left( \sqrt{x_0} + \sqrt{x} \right) } } \\ + = \quad & \abs{x-x_0} \cdot \frac{1 }{ \sqrt{x x_0 } \left( \sqrt{x_0} + \sqrt{x} \right) } \\ + < \quad & \delta \cdot \frac{1 }{ \sqrt{x x_0 } \left( \sqrt{x_0} + \sqrt{x} \right) } \\ + \leq \quad & \delta \cdot \frac{1 }{ \sqrt{x x_0 } \sqrt{x_0} + \sqrt{x x_0 } \sqrt{x} } \\ + \leq \quad & \delta \cdot \frac{1 }{ \sqrt{x x_0 } \sqrt{x} } \\ + \leq \quad & \delta \cdot \frac{1 }{ x\sqrt{x_0} } \\ + \end{aligned} + $$ + Sei $\abs{x-x_0} < \frac{x_0}{2}$: + + $$\abs{x-x_0} < \frac{x_0}{2} \implies x_0 -\frac{x_0}{2} < x < x_0 + \frac{x_0}{2} \iff \frac{x_0}{2} < x$$ + + Daraus folgt weiterhin: + $$ + \begin{aligned} + & \delta \cdot \frac{1 }{ x\sqrt{x_0} } \\ + < \quad & \frac{2\delta }{ x_0\sqrt{x_0} } < \epsilon \\ + \iff \quad & \delta < \frac{x_0\sqrt{x_0}}{2} \epsilon + \end{aligned} + $$ + + Mit $\delta = \min\{\frac{x_0}{2}, \frac{x_0\sqrt{x_0}}{2}\epsilon\}$ ist $f(x)$ stetig.\qed +\end{example} + +\begin{defi}{Sandwich-Lemma für Funktionen} + Gilt + $$ + \forall \abs{x-x_0} < K, x\neq x_0 : f(x) \leq g(x) \leq h(x) + $$ + und + $$ + \lim_{x\to x_0} f(x) = \lim_{x\to x_0} h(x) = c + $$ + so ist auch + $$ + \lim_{x\to x_0} g(x) = c. + $$ +\end{defi} + +\begin{defi}{Unstetigkeit} + Es gibt verschiedene Typen der Unstetigkeit: + \begin{enumerate} + \item Sprungstellen: + $$ + \lim_{x\uparrow x_0} f(x) \neq\lim_{x\downarrow x_0} f(x) + $$ + \item Unendlichkeitsstellen: $f$ ist in der Umgebung von $x_0$ nicht beschränkt, d.h. + $$ + \lim_{x\to x_0} f(x) > R + $$ + \item Oszillationsstellen: z.B. + $$ + \lim_{x\to 0} \sin \frac{1}{x} \text{ in } x_0 = 0 + $$ + \item Singuläre Definitionen: + $$ + f(x) = \begin{cases} + g(x) & , \text{ für } x \in M \\ + h(x) & , \text{ für } x \notin M + \end{cases} + $$ + \item Definitionslücken: z.B. + $$ + f(x) = \frac{x}{x} \text{ für } x \neq 0 + $$ + \item Kombinationen aus den oben genannten + \end{enumerate} +\end{defi} + +\begin{defi}{Hebbare Lücke} + Sei $f(x)$ stetig für $x\neq x_0, x_0 \notin D$. + Dann erhält man mit $f(x) := \lim_{x\to x_0} f(x)$ eine stetige Funktion, wenn der Grenzwert existiert. + $x_0$ heißt \emph{hebbare Lücke}. +\end{defi} + +\begin{bonus}{Stetigkeit auf Intervallen} + Sei $f : [a, b] \to \R$ stetig, dann: + \begin{itemize} + \item ist $f(x)$ beschränkt. + \item existieren $x_1, x_2 \in [a, b]: f(x_1) \leq f(x) \leq f(x_2), \forall x \in [a, b]$ + \end{itemize} +\end{bonus} + +\begin{defi}{Gleichmäßige Stetigkeit} + Eine Funktion $f : D \to \R$ heißt \emph{gleichmäßig stetig auf D}, falls es ein $\delta > 0$ unabhängig von $x_0$ gibt, so dass + $$ + \abs{f(x) - f(x_0)} < \epsilon, \forall \abs{x-x_0} < \delta. + $$ + + Jede gleichmäßig stetige Funktion ist stetig. + + Eine stetige Funktion $f : [a, b] \to \R$ ist gleichmäßig stetig. +\end{defi} + +\begin{defi}{Lipschitz-Stetigkeit} + Eine Funktion $f$ heißt \emph{lokal Lipschitz-stetig in} $x_0$, wenn es ein $L \geq 0$ und ein $\delta > 0$ gibt, so dass + $$ + \abs{f(x) - f(x_0)} \leq L \cdot \abs{x-x_0}, \forall \abs{x-x_0} < \delta. + $$ + + Eine Funktion $f$ heißt \emph{Lipschitz-stetig}, wenn es ein $L \geq 0$, so dass + $$ + \abs{f(x) - f(y)} \leq L \cdot \abs{x-y}, \forall x, y \in [a, b]. + $$ + $L$ heißt \emph{Lipschitz-Konstante}. + + Ist eine Funktion Lipschitz-stetig, so ist sie auch gleichmäßig stetig. +\end{defi} + +\begin{example}{Lipschitz-Stetigkeit}\ + $$f(x) = \sqrt{2+3x}$$ + + Ist die Funktion lokal Lipschitz-stetig im Punkt $x_0 = 1$? + Berechnen Sie gegebenenfalls die Lipschitz-Konstante $L$ in Abhängigkeit von $\delta$. + Lipschitz-Stetigkeit: $\exists L \geq 0, \forall x,x_0\in D: \abs{f(x)-f(x_0)} \leq L \cdot \abs{x-x_0}$ + + $$ + \begin{aligned} + & \abs{f(x)-f(y)} \\ + = \quad & \abs{\sqrt{2+3x} - \sqrt{2+3y}} \\ + = \quad & \abs{(\sqrt{2+3x} - \sqrt{2+3y}) \cdot \frac{\sqrt{2+3x} + \sqrt{2+3y}}{\sqrt{2+3x} + \sqrt{2+3y}}} \\ + = \quad & \abs{\frac{2+3x-(2+3y)}{\sqrt{2+3x} + \sqrt{2+3y}}} \\ + = \quad & \abs{\frac{3(x-y)}{\sqrt{2+3x} + \sqrt{2+3y}}} \\ + = \quad & \frac{3}{\sqrt{2+3x} + \sqrt{2+3y}} \cdot \abs{x-y} \\ + \overset{x,y\in (x_0-\delta, x_0+\delta)}< \quad & \frac{3}{\sqrt{2+3(x_0-\delta)} + \sqrt{2+3(x_0-\delta)}} \cdot \abs{x-y} \\ + = \quad & \frac{3}{\sqrt{2+3(1-\delta)} + \sqrt{2+3(1-\delta)}} \cdot \abs{x-y} \\ + = \quad & \frac{3}{\sqrt{2+3-3\delta} + \sqrt{2+3-3\delta}} \cdot \abs{x-y} \\ + = \quad & \frac{3}{2\cdot \sqrt{5-3\delta}} \cdot \abs{x-y} \\ + \end{aligned} + $$ + Damit ist $f$ lokal Lipschitz-stetig im Punkt $x_0 = 1$ mit $L = \frac{3}{2\cdot \sqrt{5-3\delta}}$.\qed +\end{example} + +\begin{defi}{Zwischenwertsatz} + Sei $f : [a, b] \to \R$ stetig mit $f(a) = c$ und $f(b) = d$, dann gilt + $$ + \forall y \in [\min(c, d) , \max(c, d)], \exists x \in [a, b] : f(x) = y. + $$ +\end{defi} + +\begin{defi}{Fixpunktsatz} + Ein Wert $x^* \in \R$ heißt \emph{Fixpunkt} einer Funktion $f(x)$, falls $x^* = f(x^*)$. + + Sei $f : [a, b] \to [c, d]$ stetig mit $[c, d] \subset [a, b]$ (\emph{selbstkontrahierend}), dann existiert ein \emph{Fixpunkt} $u = f(u)$. +\end{defi} + +\begin{example}{Fixpunktberechnung (Teil 1)} + Gegeben ist die Funktion + $$f: [0,\infty) \to [0, \infty), \quad f(x) = \frac{x+\frac{1}{2}}{x+1}$$ + + (a) Zeigen Sie, dass die Funktion die Voraussetzungen des Fixpunktsatzes erfüllt. + + \textbf{Stetigkeit:} + $f$ ist offensichtlich stetig, da $f$ aus stetigen Funktionen zusammengesetzt ist (und insbesondere, da $\forall x\in [0,\infty]: x\neq -1$). + + \textbf{Monotonieverhalten:} + Wir vermuten, dass die Funktion monoton steigend ist: + $$ + \begin{aligned} + & x \geq y \implies f(x) \geq f(y) \\ + \equiv \quad & x \geq y \implies \frac{x+\frac{1}{2}}{x+1} \geq \frac{y+\frac{1}{2}}{y+1} \\ + \equiv \quad & x \geq y \implies \left(x+\frac{1}{2}\right)(y+1) \geq \left(y+\frac{1}{2}\right)(x+1) \\ + \equiv \quad & x \geq y \implies xy+ x + \frac{y}{2}+ \frac{1}{2} \geq xy + y + \frac{x}{2} + \frac{1}{2} \\ + \equiv \quad & x \geq y \implies x + \frac{y}{2}\geq y + \frac{x}{2} \\ + \equiv \quad & x \geq y \implies x - \frac{x}{2}\geq y - \frac{y}{2} \\ + \equiv \quad & x \geq y \implies \frac{x}{2}\geq \frac{y}{2} \\ + \equiv \quad & x \geq y \implies x\geq y \quad \checkmark + \end{aligned} + $$ + Damit ist $f$ monoton steigend. + + \textbf{Kontraktion:} Zu zeigen: $\forall x\in [0,\infty)]: f(x) \in [0,\infty)]$: + + $$f(0) = \frac{0+\frac{1}{2}}{0+1} = \frac{1}{2}\in [0,\infty), \text{ und } \lim_{n\to\infty} f(n) = \lim_{n\to\infty} \frac{n+\frac{1}{2}}{n+1} = 1\in [0,\infty)$$ + + Da beide Werte im gegebenen Definitionsbereich sind und $f$ monoton steigend ist, ist $f$ insgesamt selbstkontrahierend. + + Insgesamt sind also alle Bedingungen für den Fixpunktsatz erfüllt.\qed + +\end{example} + +\begin{example}{Fixpunktberechnung (Teil 2)} + (b) Berechnen Sie den Fixpunkt von $f$. + $$ + \begin{aligned} + & f(x^*) = x^* \\ + \equiv \quad & \frac{x^*+\frac{1}{2}}{x^*+1} = x^* \\ + \equiv \quad & x^*+\frac{1}{2} = x^*(x^*+1) \\ + \equiv \quad & x^*+\frac{1}{2} = (x^*)^2+x^* \\ + \equiv \quad & 0 = (x^*)^2-\frac{1}{2} \\ + \implies \quad & x^* = \sqrt{\frac{1}{2}} \lor x^* = -\sqrt{\frac{1}{2}} + \end{aligned} + $$ + + $x^* \in [0,\infty] \implies x^* = \sqrt{\frac{1}{2}}$\qed +\end{example} + +\section{Differentialrechnung} +\subsection{Tangentengleichung} + +\begin{algo}{Tangentengleichung} + Wollen wir die Gleichung der Tangente einer Funktion $f(x)$ in einem Punkt $x_0$ bestimmen, so verwenden wir den Ansatz + $$ + T(x) = f_1(x) = m \cdot (x-x_0) + b. + $$ + Die Tangente im Punkt $x_0$ hat die Eigenschaften + \begin{itemize} + \item Die Steigung ist $m = f'(x)$, + \item Sie geht durch den Punkt $(x_0, f(x_0))$. + \end{itemize} + + Einsetzen der zweiten Bedingung liefert + $$ + f(x_0) = f_1(x_0) = b + $$ + und damit ist die Tangentengleichung bekannt mit + $$ + f_1(x) = f'(x_0) \cdot (x-x_0) + f(x_0). + $$ +\end{algo} + +\newpage +\subsection{Ableitungsregeln} + +\begin{defi}{Faktorregel} + $$ + f(x) = c \cdot g(x) \implies f'(x) = c \cdot g'(x) + $$ +\end{defi} + +\begin{defi}{Summenregel} + $$ + f(x) = g(x) + h(x) \implies f'(x) = g'(x) + h'(x) + $$ +\end{defi} + +\begin{defi}{Produktregel} + $$ + f(x) = g(x) \cdot h(x) \implies f'(x) = g'(x)\cdot h(x) + g(x) \cdot h'(x) + $$ +\end{defi} + +\begin{defi}{Quotientenregel} + $$ + f(x) = \frac{g(x)}{h(x)} \implies f'(x) = \frac{g'(x)\cdot h(x) - g(x)\cdot h'(x)}{[h(x)]^2} + $$ +\end{defi} + +\begin{defi}{Kettenregel} + $$ + f(x) = g(h(x)) \implies f'(x) = g'(h(x)) \cdot h'(x) + $$ +\end{defi} + +\begin{bonus}{Ableitung der Umkehrfunktion} + $$ + (f^{-1})(y) = \frac{1}{f'(x)} = \frac{1}{f'(f^{-1}(y))} + $$ +\end{bonus} + +\begin{bonus}{Elementare Ableitungsfunktionen} + \begin{center} + \begin{tabular}{C | C} + f(x) & f'(x) \\ + \hline + x^n & n \cdot x^{n-1} \\ + \sin x & \cos x \\ + \cos x & -\sin x \\ + \tan x & \frac{1}{\cos^2 x} = \tan^2 x + 1 \\ + \cot x & \frac{-1}{\sin^2 x} \\ + e^x & e^x \\ + a^x & a^x \cdot \ln a \\ + \ln x & \frac{1}{x} + \end{tabular} + \end{center} +\end{bonus} + +\subsection{Lokale Extrema} + +\begin{defi}{Lokale Extrema} + Existiert eine Stelle $x_0$ einer Funktion $f(x)$ und eine $\epsilon$-Umgebung $U_\epsilon (x_0)$ von $x_0$, so dass $\forall x \in U_\epsilon (x_0)$ gilt: + \begin{itemize} + \item $f(x) \geq f(x_0)$, so heißt $x_0$ \emph{lokales Minimum}, + \item $f(x) \leq f(x_0)$, so heißt $x_0$ \emph{lokales Maximum}. + \end{itemize} + + Ist $f$ differenzierbar in $x_0$ und $x_0$ lokales Extremum, sei gilt + $$ + f'(x_0) = 0. + $$ +\end{defi} + +\subsection{Mittelwertsatz} + +\begin{bonus}{Satz von Rolle} + Ist $f$ auf $[a, b]$ stetig mit $f(a) = f(b)$ und auf $(a, b)$ differenzierbar, so existiert ein $x^* \in (a, b) : f'(x^*) = 0$. +\end{bonus} + +\begin{defi}{Mittelwertsatz} + Sei $f \in C[a, b]$ und in $(a, b)$ differenzierbar. + Dann existiert ein $x^* \in (a, b)$ mit + $$ + f'(x^*) = \frac{f(b) -f(a)}{b-a}. + $$ +\end{defi} + +\subsection{Stetigkeit und Differenzierbarkeit von Potenzreihen} + +\begin{defi}{Stetigkeit / Differenzierbarkeit von Potenzreihen} + Jede Potenzreihe ist stetig im Inneren des Konvergenzbereiches. + Die Potenzreihe $p(x) = \sum^\infty_{n=0} a_n(x-x_0)^n$ ist differenzierbar im Inneren des Konvergenzbereiches und die Ableitung $p'(x)$ kann summandenweise berechnet werden mit: + $$ + \begin{aligned} + p'(x) & = \sum^\infty_{n=1} a_n \cdot n \cdot (x-x_0)^{n-1} \\ + & = \sum^\infty_{n=0} a_{n+1} \cdot (n+1) \cdot (x-x_0)^{n} + \end{aligned} + $$ +\end{defi} + +\subsection{Monotonie} + +\begin{defi}{Monotonie für Funktionen} + Eine Funktion heißt \emph{monoton wachsend auf} $[a, b]$, falls + $$ + \forall x_1, x_2 \in (a, b), x_1 < x_2 : f(x_1) \leq f(x_2) \iff \forall x \in (a, b): f'(x) \geq 0. + $$ + Eine Funktion heißt \emph{streng monoton wachsend auf} $[a, b]$, falls + $$ + \forall x_1, x_2 \in (a, b), x_1 < x_2 : f(x_1) < f(x_2) \iff \forall x \in (a, b): f'(x) > 0. + $$ + Eine Funktion heißt \emph{monoton fallend auf} $[a, b]$, falls + $$ + \forall x_1, x_2 \in (a, b), x_1 < x_2 : f(x_1) \geq f(x_2) \iff \forall x \in (a, b): f'(x) \leq 0. + $$ + Eine Funktion heißt \emph{streng monoton fallend auf} $[a, b]$, falls + $$ + \forall x_1, x_2 \in (a, b), x_1 < x_2 : f(x_1) > f(x_2) \iff \forall x \in (a, b): f'(x) < 0. + $$ +\end{defi} + +\subsection{Die Grenzwerte von de L'Hospital} + +\begin{defi}{Regeln von de L'Hospital} + Seien $f, g \in C[a, b]$ und in $(a, b)$ differenzierbar mit $f(a) = g(a) = 0$. + + Weiterhin gelte $\forall x \in (a, b): g'(x) \neq 0$ und es existiert + $$ + \lim_{x\to a} \frac{f'(x)}{g'(x)} + $$ + dann existiert auch + $$ + \lim_{x\to a } \frac{f(x)}{g(x)} + $$ + und es ist + $$ + \lim_{x\to a } \frac{f(x)}{g(x)} = \lim_{x\to a} \frac{f'(x)}{g'(x)}. + $$ +\end{defi} + +\subsection{Krümmungseigenschaften} + +\begin{defi}{Krümmung} + Sei $f\in C^2(a, b)$ und ist $\forall x \in (a, b) : f''(x) > 0$, so heißt $f(x)$ \emph{konvex} oder \emph{linksgekrümmt}. + + Ist $\forall x \in (a, b) : f''(x) < 0$ so heißt $f(x)$ \emph{konkav} oder \emph{rechtsgekrümmt} +\end{defi} + +\begin{defi}{Wendepunkt} + Sei $f \in C^2(a, b)$ und wechselt die Funktion für $x^* \in (a, b)$ von einer links- zu einer rechtsgekrümmten Funktion (oder umgekehrt), so heißt $x^*$ \emph{Wendepunkt der Funktion}. + + Ist $x^*$ Wendepunkt und $f \in C^2(a, b)$, so ist $f''(x) = 0$. +\end{defi} + +\subsection{Die Taylorreihe} + +\begin{defi}{Taylorreihe} + $$ + \begin{aligned} + f(x) & = \sum^\infty_{n=0} \frac{f^{(n)}(x_0)}{n!} (x-x_0)^n \\ + & = f(x_0) + f'(x_0)(x-x_0) + \frac{f''(x_0)}{2}(x-x_0)^2 + \frac{f'''(x_0)}{6}(x-x_0)^3 + \ldots + \end{aligned} + $$ + Dabei heißt $x_0$ Entwicklungspunkt der Potenzreihe und die Reihe konvergiert für $\abs{x-x_0} < r$ mit $r = \lim_{n\to\infty}\abs{\frac{a_n}{a_{n+1}}}$. +\end{defi} + +\begin{example}{Taylorreihe} + \textbf{Bestimmen Sie das Taylorpolynom dritten Grades für die Funktion $g(x) = \ln(x\cdot e^{-2x})$ an der Stelle $x_0 = 1$.} + + Taylorpolynom $k$-ten Grades einer Funktion $f$: + $$T_k(x) := \sum_{n=0}^k \frac{\mathrm{d}^n f}{\mathrm{d}x^n} (x_0)\cdot\frac{(x-x_0)^n}{n!} $$ + + Das Taylorpolynom dritten Grades von $g(x) = \ln(x\cdot e^{-2x})$ an der Stelle $x_0 = 1$ ist dann gegeben durch: + $$ + \begin{aligned} + T_3(x) ={} & \sum_{n=0}^3 \frac{\mathrm{d}^n g}{\mathrm{d}x^n} (1)\cdot\frac{(x-1)^n}{n!} \\ + ={} & g(1) + \frac{\mathrm{d} g}{\mathrm{d} x}(1)\cdot\frac{x-1}{1!} + \frac{\mathrm{d^2} g}{\mathrm{d} x^2}(1)\cdot\frac{(x-1)^2}{2!} + \frac{\mathrm{d^3} g}{\mathrm{d} x^3}(1)\cdot\frac{(x-1)^3}{3!} \\ + \stackrel{*}={} & \ln(e^{-2}) + \left( \frac{1}{1}- 2 \right)\cdot(x-1) + \frac{-1}{1}\cdot\frac{(x-1)^2}{2} + \frac{2}{1}\cdot\frac{(x-1)^3}{6} \\ + ={} & -2 -(x-1) - \frac{1}{2}\cdot (x-1)^2 +\frac{1}{3}\cdot (x-1)^3 \\ + ={} & -2 -x+1 - \frac{1}{2}\cdot (x^2-2x+1) +\frac{1}{3}\cdot (x^3 -3x^2+3x-1) \\ + ={} & -1 -x - \frac{x^2}{2} + x -\frac{1}{2} +\frac{x^3}{3} - x^2 + x -\frac{1}{3} \\ + ={} & \frac{x^3}{3}- \frac{3x^2}{2} + x - \frac{11}{6} + \end{aligned} + $$ + \qed + + \vspace{2em} + + \textbf{Nebenrechnungen:} + $$ + \frac{\mathrm{d} g}{\mathrm{d} x} = \frac{1}{x} - 2, \quad + \frac{\mathrm{d}^2 g}{\mathrm{d} x^2} = \frac{-1}{x^2}, \quad + \frac{\mathrm{d}^3 g}{\mathrm{d} x^3} = \frac{2}{x^3} + $$ +\end{example} + +\newpage +\section{Integration} +\subsection{Flächenberechnung} + +\begin{defi}{Stammfunktion} + Sei $f\in C[a, b]$. Eine differenzierbare Funktion $F(x)$ mit $\forall x\in [a, b] : F'(x) = f(x)$ heißt eine \emph{Stammfunktion von f}. +\end{defi} + +\begin{defi}{Unbestimmtes Integral} + $F(x) = \int f(x) \dx$ heißt das \emph{unbestimmte Integral von f}. +\end{defi} + +\begin{defi}{Hauptsatz der Differential- und Integralrechnung} + Sei $f\in C[a, b]$, dann ist + $$ + F_a(x) = \int^x_a f(t)\dt \text{ differenzierbar} + $$ + und es gilt + $$ + F'_a(x) = f(x). + $$ + Damit ist also: + $$ + \left(\int^x_a f(t)\dt\right)' = F'_a(x) = f(x). + $$ +\end{defi} + +\begin{defi}{Fläche einer Funktion} + Sei $f \in C[a, b]$, dann ist die Fläche der Funktion im Intervall $[a, b]$ gegeben mit + $$ + \int_a^b f(x) \dx = F(b) - F(a) =: \left.F(x)\right|^b_{x=1} + $$ +\end{defi} + +\begin{bonus}{Potenzregel} + $$ + \int x^n \dx = \frac{1}{n+1}x^{n+1} + C + $$ +\end{bonus} + +\begin{bonus}{Faktorregel} + $$ + \int c\cdot f(x) \dx = c\cdot \int f(x) \dx + $$ +\end{bonus} + +\begin{bonus}{Summenregel} + $$ + \int (f(x) + g(x))\dx = \int f(x) \dx + \int g(x) \dx + $$ +\end{bonus} + +\begin{bonus}{Partielle Integration} + $$ + \int f'(x)g(x) \dx = f(x)g(x) - \int f(x) g'(x) \dx + $$ + + Entscheidend bei partieller Integration ist die Wahl von $f(x)$ und $g'(x)$. + Eine falsche Wahl kann unter Umständen dazu führen, dass das Integral noch komplizierter wird. + + \textbf{Faustregel:} + \begin{enumerate} + \item L - logarithmische Funktionen ($\ln$, $\log_a$, $\ldots$) + \item I - inverse Winkelfunktionen ($\arcsin$, $\arccos$, $\arctan$, $\ldots$) + \item A - algebraische Funktionen ($x^2$, $5x^3$, $\ldots$) + \item T - trigonometrische Funktionen ($\sin$, $\cos$, $\tan$, $\csc$, $\ldots$) + \item E - Exponentialfunktionen ($e^x$, $5a^x$, $\ldots$) + \end{enumerate} + Entsprechend des Rangs wird $f(x)$ ausgewählt. Will man beispielsweise $x^2\cos x$ integrieren, so würde man $x^2$ für $f(x)$ wählen und $\cos x$ für $g'(x)$, da algebraische Funktionen höher in der Liste stehen als trigonometrische Funktionen. +\end{bonus} + +\begin{bonus}{Integration durch Substitution} + $$ + \int f(x)\dx = \int f(\phi(u)) \cdot \phi'(u) \du + $$ +\end{bonus} + +\subsection{Integration zur Berechnung von Flächen zwischen mehreren Funktionen} + +\begin{algo}{Berechnung der Fläche zwischen zwei Funktionen} + Wir betrachten die Fläche zwischen zwei Funktionen $f(x)$ und $g(x)$. + + \begin{enumerate} + \item Schnittpunkte $a, b$ von $f(x)$ und $g(x)$ berechnen. + \item Integriere $\abs{f(x) - g(x)}$ zwischen den Schnittpunkten: + $$ + \abs{\int^b_a\abs{f(x) -g(x)} \dx} + $$ + \end{enumerate} + + Beachte: Bei mehr als zwei Schnittpunkten müssen mehrere Integrale mit den jeweiligen Grenzen addiert werden. + + Das Verfahren lässt sich sehr einfach auf mehrere Funktionen erweitern. +\end{algo} + +\begin{bonus}{Beispiel: Fläche zwischen drei Funktionen} + Wie groß ist der Flächeninhalt, der von den Funktionen + $$ + f(x) = -0.25x^4 + 4, \quad g(x) = -2x-4, \quad h(x) = 2x-4 + $$ + eingeschlossen wird? + \begin{center} + \begin{tikzpicture} + \begin{axis}[ + axis lines=middle, + xmin=-4.5,xmax=4.5,ymin=-4.5,ymax=4.5 + ] + \addplot[blue, samples=1000, domain=-2.4:2.4, name path=A] {-0.25*x*x*x*x + 4} node[right] {$f$}; % f(x) + \addplot[yellow!70!red, samples=300, domain=-4:4, name path=B] {-2*x - 4} node[pos=0, left] {$g$}; % g(x) + \addplot[red!90!teal, samples=300, domain=-4:4, name path=C] {2*x-4} node[right] {$h$}; % h(x) + \addplot[gray!30, opacity=0.5] fill between[of=A and C,soft clip={domain=0:2}]; + \addplot[gray!30, opacity=0.5] fill between[of=A and B,soft clip={domain=-2:0}]; + \end{axis} + \end{tikzpicture} + \end{center} + + Wir sehen in der Zeichnung, dass für die Fläche $A$ zwischen den Graphen gilt: + $$ + \begin{aligned} + A ={} & \abs{ \int_{-2}^{0} \left(f(x) - g(x)\right) \dx} + \abs{ \int_{0}^{2} \left(f(x) - h(x)\right) \dx} \\ + ={} & \abs{ \int_{-2}^{0} \left(-\frac{1}{4}x^4 + 2x + 8\right) \dx} + \abs{ \int_{0}^{2} \left(-\frac{1}{4}x^4 - 2x + 8\right) \dx} \\ + ={} & \abs{ \left[ -\frac{1}{20}x^5 + x^2 + 8x \right]_{-2}^{0} } + \abs{ \left[ -\frac{1}{20}x^5 - x^2 + 8x \right]_0^2 } \\ + ={} & \abs{ 0 - \left( -\frac{1}{20}\cdot(-2)^5 + (-2)^2 + 8\cdot(-2) \right) } + \abs{ -\frac{1}{20}\cdot 2^5 + 2^2 + 8\cdot 2 - 0 } \\ + ={} & \abs{-\frac{8}{5} - 4 + 16 } + \abs{-\frac{8}{5} - 4 + 16} \\ + ={} & \frac{52}{5} + \frac{52}{5} \\ + ={} & \frac{104}{5} + \end{aligned} + $$ + Damit beträgt der Flächeninhalt $\frac{104}{5}$ Flächeneinheiten. \qed +\end{bonus} + +\newpage +\subsection{Längenberechnung} + +\begin{algo}{Längenberechnung eines Graphen} + Gegeben sind eine Funktion $f\in C[a, b]$ und die Punkte $a, b$. + + Die Länge $L_a^b$ des Graphen der Funktion $f$ ist dann gegeben mit + $$ + L^b_a(f) = \int_a^b \sqrt{1+(f'(x))^2} \dx + $$ +\end{algo} + +\subsection{Mantelflächenberechnung} + +\begin{algo}{Mantelflächenberechnung} + Gegeben sind eine Funktion $f\in C[a, b]$ und die Punkte $a, b$. + + Die Mantelfläche $M_a^b$ des Rotationskörpers der Funktion $f$ ist dann gegeben mit + $$ + M^b_a(f) = \int_a^b 2\pi \cdot f(x) \cdot \sqrt{1+(f'(x))^2} \dx + $$ +\end{algo} + +\subsection{Rotationsvolumenberechnung} + +\begin{algo}{Rotationsvolumenberechnung} + Gegeben sind eine Funktion $f\in C[a, b]$ und die Punkte $a, b$. + + Das Volumen $M_a^b$ des Rotationskörpers der Funktion $f$ ist dann gegeben mit + $$ + V^b_a(f) = \int_a^b \pi \cdot f(x)^2 \dx + $$ +\end{algo} + +\subsection{Differentiation von Integralen mit variablen Grenzen} + +\begin{algo}{Differentiation von Integralen mit variablen Grenzen} + Gegeben sei das Integral + $$ + \int^{h(x)}_{g(x)} f(t)\dt. + $$ + Dann gilt: + $$ + \left(\int^{h(x)}_{g(x)} f(t)\dt\right)' = f(h(x)) \cdot h'(x) - f(g(x))\cdot g'(x). + $$ +\end{algo} + +\subsection{Parameterintegrale} + +\begin{defi}{Parameterintegral} + Sei $f(x, t)$ eine von zwei rellen Parametern abhängige Funktion. + Die Funktionen $g_1(x)$ und $g_2(x)$ seien stetig auf $[a, b]$ und differenzierbar auf $(a, b)$ sowie $f(x, t)$ integrierbar bez. $t$. + + Dann heißt + $$ + F(x) = \int^{g_2(x)}_{g_1(x)} f(x, t) \dt + $$ + das \emph{Parameterintegral}. +\end{defi} + +\begin{example}{Parameterintegral} + $$ + \begin{aligned} + \lim_{x\to\infty} \left( \frac{1}{x} \cdot \int_0^x \frac{t+1}{t^2 + 2} \dt\right) + & \overset{\text{de L'Hospital}}={} \lim_{x\to\infty} \left( \frac{1}{1} \cdot \left( \frac{x+1}{x^2 + 2} \cdot 1 - \frac{0+1}{0+2} \cdot 0 \right)\right) \\ + & ={} \lim_{x\to\infty} \left( \frac{x+1}{x^2 + 2} \right) \\ + & ={} 0 + \end{aligned} + $$\qed +\end{example} + +\begin{defi}{Leibniz-Regel} + Das Parameterintegral $F(x) = \int^{g_2(x)}_{g_1(x)} f(x, t) \dt$ ist differenzierbar und es ist + $$ + F'(x) = f(x, g_2(x)) \cdot g'_2(x) - f(x, g_1(x)) \cdot g'_1(x) + \int^{g_2(x)}_{g_1(x)} \frac{\mathrm{d} f(x, t)}{\dx}\dt + $$ +\end{defi} + +\begin{example}{Leibniz-Regel} + $$F(x) = \int_{t=x}^{x^2} \frac{1}{t} \cdot \ln (1 + x\cdot t) \dt \quad (x>0)$$ + $$ + \begin{aligned} + \dFdx + & ={} \int_{t=x}^{x^2} \frac{1}{t} \cdot \ln (1 + x\cdot t) \dt \\ + & ={} \frac{1}{x^2} \cdot \ln (1 + x\cdot x^2) \cdot 2x - \left( \frac{1}{x} \cdot \ln (1 + x\cdot x) \cdot 1 \right) + \int^{x^2}_{t=x} \frac{1}{t} \cdot t \cdot \frac{1}{1 + x \cdot t} \dt \\ + & ={} \frac{2\ln (1 + x^3)}{x} - \frac{\ln(1+x^2)}{x} + \left[ \frac{\ln(1+x\cdot t)}{x} \right]^{x^2}_{t=x} \\ + & ={} \frac{2\ln (1 + x^3)}{x} - \frac{\ln(1+x^2)}{x} + \frac{\ln(1+x\cdot x^2)}{x} - \frac{\ln(1+x\cdot x)}{x} \\ + & ={} \frac{3\ln (1 + x^3) - 2\ln(1+x^2)}{x} \\ + \end{aligned} + $$\qed +\end{example} + +\subsection{Uneigentliche Integrale} + +\begin{defi}{Uneigentliche Integrale} + Sei $f(x)$ beschränkt auf $\R$, dann definieren wir + $$ + \begin{aligned} + \int^\infty_a f(x) \dx & := \lim_{R\to\infty} \int^R_a f(x)\dx \\ + \int^b_{-\infty} f(x) \dx & := \lim_{R\to\infty} \int^b_{-R} f(x)\dx \\ + \int^\infty_{-\infty} f(x) \dx & := \lim_{R\to\infty} \int^R_{c} f(x)\dx + \lim_{R\to\infty} \int^c_{R} f(x)\dx + \end{aligned} + $$ +\end{defi} + +\begin{defi}{Konvergenz von Integralen} + Die Integrale heißen \emph{konvergent}, wenn die Grenzwerte existieren, sonst heißen sie \emph{divergent}. +\end{defi} + +\subsection{Absolute Konvergenz} + +\begin{defi}{Absolute Konvergenz von Integralen} + Sei $\int^b_a f(x) \dx$ ein eigentliches oder uneigentliches Integral. + + Konvergiert + $$ + \int^b_a \abs{f(x)} \dx, + $$ + so heißt $\int^b_a f(x) \dx$ \emph{absolut konvergent}. +\end{defi} + +\subsection{Weitere Konvergenzkriterien} + +\begin{defi}{Majoranten- und Minorantenkriterium für unbeschränkte Integrationsintervalle} + Sei $\forall x \in [a, \infty) : 0 \leq \abs{f(x)} \leq g(x)$ und konvergiert $\int^\infty_a g(x)$, dann konvergiert $\int^\infty_a f(x) \dx$ und es gilt + $$ + \abs{\int^\infty_a f(x) \dx} \leq \int^\infty_a \abs{f(x)} \dx \leq \int^\infty_a g(x) \dx. + $$ + + Ist $\forall x\in [a, \infty) : 0\leq g(x) \leq f(x)$ und divergiert $\int^\infty_a g(x) \dx$, so divergiert auch $\int^\infty_a f(x) \dx$. +\end{defi} + +\begin{defi}{Majoranten- und Minorantenkriterium für unbeschränkte Integranden} + Sei $\forall x \in [a, b] : 0 \leq \abs{f(x)} \leq g(x)$ und konvergiert $\int^b_a g(x)$, dann konvergiert $\int^b_a f(x) \dx$ und es gilt + $$ + \abs{\int^\infty_a f(x) \dx} \leq \int^b_a \abs{f(x)} \dx \leq \int^b_a g(x) \dx. + $$ + + Ist $\forall x\in [a, b] : 0\leq g(x) \leq f(x)$ und divergiert $\int^b_a g(x) \dx$, so divergiert auch $\int^b_a f(x) \dx$. +\end{defi} + +\subsection{Das Integralkriterium zur Konvergenz von Reihen} + +\begin{defi}{Integralkriterium} + Sei $f$ eine auf $[m-1, \infty]$ monoton fallende Funktion mit $\forall x \in [m, \infty) : f(x) \geq 0$, dann ist die Reihe + $$ + \sum^\infty_{n=m} f(n) + $$ + genau dann \emph{konvergent}, wenn + $$ + \int^\infty_m f(x) \dx + $$ + existiert. Es gilt bei Konvergenz + $$ + \sum^\infty_{n=m+1} f(n) \leq \int^\infty_m f(x) \dx \leq \sum^\infty_{n=m} f(n) \leq \int^\infty_{m-1} f(x) \dx. + $$ +\end{defi} + +\begin{example}{Integralkriterium} + \[ + \sum^\infty_{n=1} \frac{1}{\sqrt[3]{n}} = \sum^\infty_{n=1} f(n) + \] + $f(n)$ ist offensichtlich auf dem Intervall $[1, \infty )$ streng monoton fallend. + + Damit muss nur geprüft werden, dass das Integral $\int^\infty_{n=1} f(n) \dn$ existiert bzw. konvergiert: + + $$ + \begin{aligned} + \int^\infty_{n=1} f(n) \dn + & ={} \int^\infty_{n=1} \frac{1}{\sqrt[3]{n}} \dn \\ + & ={} \lim_{b\to\infty} \left[ \frac{3n^{\frac{2}{3}}}{2} \right]^b_{n=1} \\ + & ={} \lim_{b\to\infty} \left( \frac{3b^{\frac{2}{3}}}{2} - \frac{3}{2}\right) \\ + & ={} \infty + \end{aligned} + $$ + Damit divergiert das Integral und die gegebene Summe divergiert ebenfalls.\qed +\end{example} + +\printindex +\printindex[Beispiele] +\end{document} diff --git a/ana2/ana2.pdf b/ana2/ana2.pdf index 68d018ea2853b4c6a32a4a86fb6b954f4370915b..8c444a85b250f5aafc555eafe3323c0d8d062289 100644 GIT binary patch delta 22091 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 ZwBi81_F($$$t=R0h8A3^s;>TSTmZORnF;^^ delta 22102 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 F3jnhJ<J<rM diff --git a/ana2/ana2.tex b/ana2/ana2.tex index 838d5e5..d0396b9 100644 --- a/ana2/ana2.tex +++ b/ana2/ana2.tex @@ -1,1742 +1,1742 @@ -\documentclass[german]{../spicker} - -\usepackage{amsmath} -\usepackage{polynom} -\usepackage{array} % for \newcolumntype macro -\usepackage{tikz} -\usepackage{pgfplots} -\usepackage{multirow,bigdelim} -\usepgfplotslibrary{fillbetween} - -\title{Analysis 2} -\author{Patrick Gustav Blaneck} -\makeindex[intoc] -\makeindex[intoc, name=Beispiele,title=Beispiele] - -\newcommand{\scalarprod}[1]{\left\langle #1 \right\rangle} -\newcommand{\vektor}[1]{\begin{pmatrix*}[c] #1 \end{pmatrix*}} -\renewcommand{\span}[1]{\operatorname{span}\left(#1\right)} - -\renewcommand{\d}{\,\mathrm{d}} - -\renewcommand{\abs}[1]{\left| #1 \right|} -\newcommand{\cis}[1]{\left( \cos\left( #1 \right) + i \sin\left( #1 \right) \right)} -\newcommand{\sgn}{\text{sgn}} -\newcommand{\diff}{\mathrm{d}} -\newcommand{\dx}{~\mathrm{d}x} -\newcommand{\du}{~\mathrm{d}u} -\newcommand{\dv}{~\mathrm{d}v} -\newcommand{\dw}{~\mathrm{d}w} -\newcommand{\dt}{~\mathrm{d}t} -\newcommand{\dn}{~\mathrm{d}n} -\newcommand{\dudx}{~\frac{\mathrm{d}u}{\mathrm{d}x}} -\newcommand{\dudn}{~\frac{\mathrm{d}u}{\mathrm{d}n}} -\newcommand{\dvdx}{~\frac{\mathrm{d}v}{\mathrm{d}x}} -\newcommand{\dwdx}{~\frac{\mathrm{d}w}{\mathrm{d}x}} -\newcommand{\dtdx}{~\frac{\mathrm{d}t}{\mathrm{d}x}} -\newcommand{\ddx}{\frac{\mathrm{d}}{\mathrm{d}x}} -\newcommand{\dFdx}{\frac{\mathrm{d}F}{\mathrm{d}x}} -\newcommand{\dfdx}{\frac{\mathrm{d}f}{\mathrm{d}x}} -\newcommand{\interval}[1]{\left[ #1 \right]} - -\newcolumntype{L}{>{$}l<{$}} % math-mode version of "l" column type -\newcolumntype{R}{>{$}r<{$}} % math-mode version of "r" column type -\newcolumntype{C}{>{$}c<{$}} % math-mode version of "c" column type -\newcolumntype{P}{>{$}p<{$}} % math-mode version of "l" column type - -\begin{document} -\maketitle -\tableofcontents -\newpage - -%\setcounter{section}{1} - -\section{Funktionen mehrerer Veränderlicher} - -\begin{defi}{Metrik} - Metriken definieren Abstände im $\R^n$. - - Eine Funktion $d$ auf einem Vektorraum $V$ mit - $$ - d : V \times V \to \R, d(\vec{x}, \vec{y}) - $$ - heißt \emph{Metrik}, falls gilt - \begin{itemize} - \item $d(\vec{x}, \vec{y}) = 0 \iff \vec{x} = \vec{y}$ - \item $d(\vec{x}, \vec{y}) \leq d(\vec{x}, \vec{z}) + d(\vec{y}, \vec{z}), \forall \vec{x}, \vec{y}, \vec{z} \in V$ - (Dreiecksungleichung) - \end{itemize} -\end{defi} - -\begin{example}{Metriken} - \begin{itemize} - \item Summen-Metrik: $$\sum_{k=1}^n \abs{x_k - y_k}$$ - \item euklid. Metrik: $$\sqrt{\sum_{k=1}^n \left( x_k - y_k \right)^2}$$ - \item Maximum-Metrik: $$\max_{k \in \interval{1,n}} \abs{x_k - y_k}$$ - \end{itemize} -\end{example} - -\begin{defi}{Metrischer Raum} - Ein Vektorraum und eine Metrik heißen zusammen \emph{metrischer Raum}. -\end{defi} - -\begin{bonus}{Zusammenhang Metrik \& Norm} - Jeder Vektorraum mit einer Metrik $d$ ist normierbar (d.h. dort gibt es eine Norm), falls - $$ - d(a\vec{x}, 0) = \abs{a} d(\vec{x}, 0) \quad \text{und} \quad d(\vec{x}, \vec{y}) = d(\vec{x} -\vec{y}, 0) - $$ - - Eine Norm wird dann definiert gemäß - $$ - \norm{\vec{x}} := d(\vec{x}, 0) - $$ -\end{bonus} - -\subsection{Mengen im $\R^n$} - -\begin{defi}{$\varepsilon$-Umgebung im $\R^n$} - Sei $\norm{\cdot}$ eine Norm im $\R^n$, dann heißt - $$ - U_\varepsilon(\vec{x_0}) := \left\{ \vec{x} \mid \norm{\vec{x} - \vec{x_0}} < \varepsilon \right\} - $$ - die $\varepsilon$-Umgebung von $\vec{x_0}$ bzgl. der Norm $\norm{\cdot}$. - - Sei $D$ eine Menge und $\norm{\cdot}$ eine Norm. - Dann - \begin{itemize} - \item \ldots heißt $\vec{x_0}$ \emph{innerer Punkt} von $D$, falls $\forall \varepsilon > 0 : U_\varepsilon(\vec{x_0}) \in D$. - \item \ldots heißt $D$ \emph{offene Menge}, falls alle Punkte von $D$ innere Punkte sind. - \end{itemize} -\end{defi} - -\begin{defi}{Abgeschlossene Mengen} - Sei $D$ eine Menge und $\norm{\cdot}$ eine Norm. - Dann - \begin{itemize} - \item \ldots heißt $\vec{x_0}$ \emph{Häufungspunkt} von $D$, falls $\forall \varepsilon > 0$ $U_\varepsilon(\vec{x_0})$ einen Punkt $\vec{x} \neq \vec{x_0}$ enthält. - \item \ldots heißt $D$ \emph{abgeschlossene Menge}, falls sie alle Häufungspunkte von $D$ enthält. - \end{itemize} -\end{defi} - -\begin{defi}{Beschränktheit von Mengen} - Eine Menge $D \subset \R^n$ heißt \emph{beschränkt}, falls es ein $M \in \R$ gibt mit - $$ - \norm{\vec{x}} < M \quad \forall\vec{x} \in D - $$ - - Existiert eine solche Schranke nicht, so heißt die Menge \emph{unbeschränkt}. -\end{defi} - -\subsection{Folgen im $\R^n$} - -\begin{defi}{Folge} - Seien $\vec{x_1}, \vec{x_2}, \ldots, \vec{x_m} \in \R^n$, dann heißt $(\vec{x_n})$ \emph{Folge} im $\R^n$. -\end{defi} - -\begin{defi}{Konvergenz} - $(\vec{x_n})$ heißt \emph{konvergent} gegen den \emph{Grenzwert} $\vec{x}$, falls $\forall \varepsilon >0, \exists n_0(\varepsilon)$, so dass $\forall n > n_0(\varepsilon)$ gilt: - $$ - \norm{\vec{x_n} - \vec{x}} < \varepsilon - $$ -\end{defi} - -\begin{defi}{Cauchy-Folge} - $(\vec{x_n})$ heißt \emph{Cauchy-Folge} gegen $\vec{x}$, falls $\forall \varepsilon >0, \exists n_0(\varepsilon)$, so dass $\forall n,m > n_0(\varepsilon)$ gilt: - $$ - \norm{\vec{x_m} - \vec{x_n}} < \varepsilon - $$ - - Jede Cauchy-Folge ist konvergent. -\end{defi} - -\begin{defi}{Beschränktheit von Folgen} - Eine Folge heißt \emph{beschränkt}, wenn die Menge aller Folgenglieder in jeder Komponente beschränkt ist. -\end{defi} - -\begin{defi}{Häufungspunkt} - $\vec{x} \in \R^n$ heißt \emph{Häufungspunkt} von $(\vec{x_n})$, falls $\forall \varepsilon > 0$ unendlich viele $\vec{x_i}$ in der $\varepsilon$-Umgebung von $\vec{x}$ liegen. - - Jede unendliche beschränkte Folge ist genau dann konvergent, wenn sie genau einen Häufungs\- punkt besitzt. -\end{defi} - -\begin{defi}{Bolzano-Weierstrass für Folgen} - Jede unendliche beschränkte Folge besitzt mindestens einen Häufungspunkt. - - Jede unendliche beschränkte Folge besitzt mindestens eine konvergente Teilfolge. -\end{defi} - -\subsection{Differenzierbarkeit im $\R^n$} - -\begin{defi}{Grenzwert im $\R^n$} - Wir bezeichnen mit dem Grenzwert - $$ - g = \lim_{\vec{x} \to \vec{x_n}} f(\vec{x}) - $$ - den \emph{Grenzwert} jeder gegen $\vec{x_0}$ konvergenten Folge $(\vec{x_n})$, falls dieser existiert und damit insbesondere eindeutig ist. -\end{defi} - -\begin{defi}{Stetigkeit} - Sei $U \subset \R^n$ offene Menge, $f : U \to \R, \ \vec{x_0} = \vektor{x_1 & \ldots & x_n}^T \in U$, - $f$ heißt in $\vec{x_0}$ \emph{stetig}, wenn - $$ - \lim_{\vec{x} \to \vec{x_0}} f(\vec{x}) = f(\vec{x_0}) = f\left(\lim_{\vec{x} \to \vec{x_0}} \vec{x}\right), - $$ - wobei $\lim_{\vec{x} \to \vec{x_0}} f(\vec{x_0})$ Grenzwert jeder gegen $\vec{x_0}$ konvergenten Folge $(\vec{x_n})$ ist. - - Formal: - $$ - \lim_{\vec{x} \to \vec{x_0}} f(\vec{x}) := \lim_{n \to \infty} f(\vec{x_n}) - $$ - - $f$ heißt \emph{stetig in U}, wenn die Funktion für jedes $\vec{x_0} = \vektor{x_1 & \ldots & x_n}^T \in U$ stetig ist. - - Stetigkeit bedeutet somit insbesondere Stetigkeit in allen Komponenten. -\end{defi} - -\begin{example}{Stetigkeit} - Lassen sich folgende Funktionen im Nullpunkt stetig ergänzen und, wenn ja, wie? - \begin{enumerate}[a)] - \item $f(x,y) = \frac{xy^2}{x^2 + y^8}$ - \item $f(x,y) = \frac{x^3 + x^2 - y^4 + y^2}{x^2 + y^2}$ - \end{enumerate} - - \exampleseparator - - \begin{enumerate}[a)] - \item - Sei die Kurve $x = y^4$ gegeben. - Dann gilt: - $$ - \lim_{y\to 0} f(y) = \lim_{y\to 0} \frac{y^4y^2}{y^8+y^8} = \lim_{y\to 0} \frac{1}{2y^2} = \infty - $$ - Damit ist $f$ im Nullpunkt nicht stetig.\qed - \item - $f$ ist genau dann \emph{stetig ergänzbar} im Nullpunkt, wenn $\lim_{(x,y) \to (0,0)} f(x,y)$ existiert. - $$ - \begin{aligned} - \lim_{(x,y) \to (0,0)} f(x,y) & = \lim_{(x,y) \to (0,0)} \frac{x^3 + x^2 - y^4 + y^2}{x^2 + y^2} \\ \\ - & = \lim_{r \to 0} \frac{r^3\cos^3(\varphi) + r^2\cos^2(\varphi) - r^4\sin^4(\varphi) + r^2\sin^2(\varphi)}{r^2\cos^2(\varphi) + r^2\sin^2(\varphi)} \\ - & = \lim_{r \to 0} \frac{r\cos^3(\varphi) + \cos^2(\varphi) - r^2\sin^4(\varphi) + \sin^2(\varphi)}{\cos^2(\varphi) + \sin^2(\varphi)} \\ - & = \lim_{r \to 0} r\cos^3(\varphi) + \cos^2(\varphi) - r^2\sin^4(\varphi) + \sin^2(\varphi) \\ - & = 0 + 1 - 0 + 0 = 1 - \end{aligned} - $$ - - Damit ist $f$ im Nullpunkt stetig ergänzbar mit $f(0, 0) = 1$.\qed - \end{enumerate} -\end{example} - -\begin{defi}{Gleichmäßige Stetigkeit} - Eine Funktion $f: D \subset \R^n \to \R$ heißt \emph{gleichmäßig stetig}, wenn es zu jedem $\varepsilon > 0$ ein $\delta = \delta(\varepsilon)$ (unabhängig von $\vec{x_0}$) gibt, so dass - $$ - \abs{f(\vec{x}) - f(\vec{x_0})} < \epsilon, \ \forall \norm{\vec{x} - \vec{x_0}} < \delta - $$ - - Gleichmäßige Stetigkeit ist wegen der Unabhängigkeit von $\vec{x_0}$ insbesondere Stetigkeit im gesamten Definitionsbereich $D$. - - Ist $f$ beschränkt und abgeschlossen, so ist $f$ gleichmäßig stetig. -\end{defi} - -\begin{defi}{Lipschitz-Stetigkeit} - Eine Funktion $f : D \subset \R^n \to \R$ heißt \emph{Lipschitz-stetig}, wenn es eine Konstante $L$ gibt (unabhängig von $\vec{x_0}$), so dass - $$ - \abs{f(\vec{x}) - f(\vec{x_0})} \leq L \norm{\vec{x} - \vec{x_0}} - $$ - - Ist in einer Norm $L < 1$, so heißt die Abbildung \emph{Kontraktion}. - - Ist eine Funktion $f$ Lipschitz-stetige, so ist $f$ auf ihrem Definitionsbereich $D$ gleichmäßig stetig und in jedem Punkt stetig. -\end{defi} - -\begin{bonus}{Nullstelle} - Ein Punkt $\vec{x_0} \in D$ heißt \emph{Nullstelle} einer Funktion $f$, falls $f(\vec{x_0}) = \vec{0}$. -\end{bonus} - -\begin{defi}{Fixpunkt} - Ein Punkt $\vec{x^*}\in D$ heißt \emph{Fixpunkt} einer Funktion $\varphi$, falls $\varphi(\vec{x^*}) = \vec{x^*}$. -\end{defi} - -\begin{defi}{Fixpunktsatz von Banach} - Sei $\varphi : D \subset \R^n \to \R^n$ mit - $$ - \abs{\varphi(\vec{x}) - \varphi(\vec{y})} \leq L \norm{\vec{x} - \vec{y}} \quad \text{und} \quad L < 1, - $$ - dann hat $\varphi$ \emph{genau einen Fixpunkt}. -\end{defi} - -\subsubsection{Partielle Ableitungen} - -\begin{defi}{Partielle Ableitung} - Sei $U \subset \R^n$ offene Menge, $f : U \to \R, \ \vec{x_0} = \vektor{x_1 & \ldots & x_n}^T \in U$, - $f$ heißt in $\vec{x_0}$ \emph{partiell differenzierbar} nach $x_i$, wenn - $$ - \frac{\partial f}{\partial x_i} = \lim_{h \to 0} \frac{f(x_1, \ldots, x_i + h, \ldots, x_n) - f(x_1, \ldots, x_n)}{h} - $$ - existiert. - Der Wert $\frac{\partial f}{\partial x}$ heißt dann die \emph{partielle Ableitung} von $f$ nach $x_i$. - - Eine Funktion heißt \emph{(partiell) differenzierbar}, wenn alle partiellen Ableitungen existieren. -\end{defi} - -\begin{bonus}{Zusammenhang Differenzierbarkeit und Stetigkeit} - $f$ heißt \emph{stetig partiell differenzierbar}, wenn alle partiellen Ableitungen in $\vec{x_i}$ stetige Funktionen (und insbesondere beschränkt) sind. - - Ist $f$ in $U$ partiell differenzierbar und in $\vec{x_0} \in U$ \emph{stetig partiell differenzierbar}, so ist $f$ in $\vec{x_0}$ stetig. -\end{bonus} - -\begin{defi}{Gradient} - Sei $U \subset \R^n$ offene Menge, $F : U \to \R$ partiell differenzierbar, $\vec{x_0} = \vektor{x_1 & \ldots & x_n}^T \in U$, dann heißt - $$ - \nabla f(x_1, \ldots, x_n) = \vektor{\frac{\partial f}{\partial x_1}(x_1, \ldots, x_n) \\ \vdots \\ \frac{\partial f}{\partial x_n}(x_1, \ldots, x_n)} - $$ - der \emph{Gradient von f in} $\vec{x_0}$. -\end{defi} - -\begin{bonus}{Rechenregeln für Gradienten} - Sei $U \subset \R^n$ offene Menge, $f, g : U \to \R$ differenzierbar. - Dann gilt: - $$ - \begin{aligned} - & \nabla (f + g) & & = \nabla (f) + \nabla (g) \\ - & \nabla (\alpha f) & & = \alpha \cdot \nabla (f) \\ - & \nabla (fg) & & = g \cdot \nabla (f) + f \cdot \nabla (g) - \end{aligned} - $$ -\end{bonus} - -\begin{example}{Gradient} - Berechnen Sie den Gradienten für $f(x, y, z) = x^3 + y^2 + z$ an der Stelle $(1, 2, 3)$. - - \exampleseparator - - Zuerst berechnen wie die partiellen Ableitungen $f_x$, $f_y$ und $f_z$: - $$ - \begin{aligned} - f_x & = 3x^2 \\ - f_y & = 2y \\ - f_z & = 1 - \end{aligned} - $$ - - Damit erhalten wir dann den Gradienten $\nabla f$ an der Stelle $(1, 2, 3)$ mit: - $$ - \nabla f(1, 2, 3) = \vektor{f_x(1, 2, 3) \\ f_y(1, 2, 3) \\ f_z(1, 2, 3)} - = \vektor{3 \\ 4 \\ 1} - $$\qed -\end{example} - -\begin{defi}{Tangentialebene im $\R^3$} - Sei $z = f(x, y)$ eine stetig partiell differenzierbare Funktion in zwei Unbekannten und $z_0 = f(x_0, y_0)$ ein fester Punkt. - - Dann ist die Tangentialebene im Punkt $(x_0, y_0, z_0)$ gegeben mit: - $$ - T = \vektor{x_0 \\ y_0 \\ z_0} + \lambda \cdot \vec{v_1} + \mu \cdot \vec{v_2}, - $$ - wobei $\vec{v_1}$ und $\vec{v_2}$ verschiedene Tangentenvektoren sind. -\end{defi} - -\begin{algo}{Tangentialebene im $\R^3$} - Betrachten wir die Tangenten entlang der Koordinatenachsen, so erhalten wir - $$ - T = \vektor{x_0 \\ y_0 \\ z_0} + \lambda \vektor{1 \\ 0 \\ f_x(x_0, y_0)} + \mu \vektor{0 \\ 1 \\ f_y(x_0, y_0)} - $$ - oder äquivalent - $$ - T(x, y) = f(x_0, y_0) + f_x(x_0, y_0) (x-x_0) + f_y(x_0, y_0) (y-y_0) - $$ -\end{algo} - -\begin{bonus}{Tangentialebene im $\R^n$} - Die Tangentialebene im $\R^n$ einer Funktion $f$ in $\vec{x} \in \R^n$ an der Stelle $\vec{x_0} = \vektor{x_1 & \ldots & x_n}^T$ analog definiert durch - $$ - T(\vec{x}) = f(\vec{x_0}) + \nabla f (\vec{x} - \vec{x_0}) - $$ -\end{bonus} - -\begin{example}{Tangentialebene} - Gegeben sei die Funktion - $$ - f(x, y) = (x^2 + y^2 -2)^2 - $$ - Geben Sie die Tangentialebene im Punkt $(x_0, y_0) = (0,2)$ an. - - \exampleseparator - - Zuerst berechnen wie die partiellen Ableitungen $f_x$ und $f_y$: - $$ - \begin{aligned} - f_x & = 4x(x^2 + y^2 -2) \\ - f_y & = 4y(x^2 + y^2 -2) - \end{aligned} - $$ - $$ - z_0 = f(x_0, y_0) = f(0, 2) = 4 - $$ - Damit ergibt sich dann die Tangentialebene von $f$ am Punkt $(0, 2)$ mit: - $$ - \begin{aligned} - E & = \vektor{x_0 \\ y_0 \\ z_0} + \lambda \vektor{1 \\ 0 \\ f_x(x_0, y_0)} + \mu \vektor{0 \\ 1 \\ f_y(x_0, y_0)} \\ - \quad & = \vektor{0 \\ 2 \\ 4} + \lambda \vektor{1 \\ 0 \\ 0} + \mu \vektor{0 \\ 1 \\ 16} \quad \lambda, \mu \in \R - \end{aligned} - $$\qed -\end{example} - -\begin{defi}{Richtungsableitung} - Die Ableitung in Richtung des Vektors $\vec{v} = \vektor{v_1, \ldots, v_n}^T$ mit $\norm{\vec{v}} = 1$ heißt \emph{Richtungsableitung} $D_{\vec{v}}(f)$ von $f$ in Richtung von $\vec{v}$. - Es ist - $$ - \begin{aligned} - \frac{\partial f}{\partial v} := D_{\vec{v}}(f) = & \lim_{h\to 0} \frac{f(\vec{x} + h\vec{v}) - f(\vec{x})}{h} \\ - = & \lim_{h\to 0} \frac{f(x_1 + hv_1, \ldots, x_n + hv_n) - f(x_1, \ldots, x_n)}{h} - \end{aligned} - $$ -\end{defi} - -\begin{algo}{Richtungsableitung} - Sei $\vec{v} \in \R^n$ mit $\norm{\vec{v}} = 1$. Dann ist die Richtungsableitung von $f$ im Punkt $\vec{x_0}$ in Richtung $\vec{v}$ gegeben mit - $$ - \frac{\partial f}{\partial v} = D_{\vec{v}}(f) = \scalarprod{\nabla (f(\vec{x_0})) , \vec{v}} - $$ -\end{algo} - -\begin{example}{Richtungsableitung} - Berechnen Sie die Richtungsableitung der Funktion - $$ - f(x, y) = x^2y - y^3x + 1 - $$ - im Punkt $(x_0, y_0) = (1, 2)$ - in Richtung des Vektors $\vec{w} = \vektor{3 \\ 2}$. - - \exampleseparator - - Die Richtungsableitung von $f$ im Punkt $(x_0, y_0)$ in Richtung $\vec{v}$ ($\norm{\vec{v}} = 1$) ist gegeben mit - $$ - \begin{aligned} - D_{\vec{v}}(f) & = \scalarprod{\nabla f(x_0, y_0), \vec{v}} - \end{aligned} - $$ - - Zuerst berechnen wir die partiellen Ableitungen $f_x$ und $f_y$: - $$ - \begin{aligned} - f_x = 2xy - y^3 & \implies f_x(x_0, y_0) = f_x(1, 2) = -4 \\ - f_y = x^2 - 3y^2x & \implies f_y(x_0, y_0) = f_y(1, 2) = -11 - \end{aligned} - $$ - - Sei nun $\vec{v} = \frac{\vec{w}}{\norm{\vec{w}}}$: - $$ - \vec{v} = \frac{\vec{w}}{\norm{\vec{w}}} = \frac{1}{\sqrt{13}} \vektor{3 \\ 2} - $$ - Damit können wir nun die Richtungsableitung wie folgt bilden: - $$ - D_{\vec{v}}(f) = \scalarprod{\nabla f(x_0, y_0), \vec{v}} = \scalarprod{\vektor{-4 \\ -11}, \frac{1}{\sqrt{13}} \vektor{3 \\ 2}}= -\frac{34}{\sqrt{13}} - $$\qed -\end{example} - -\begin{algo}{Extremster Anstieg} - Insgesamt gilt, falls wir nur die Richtung (ohne Normierung) betrachten: - $$ - \vec{v} = \frac{\nabla f}{\norm{ \nabla f }} \quad \text{ist die Richtung des steilsten Anstiegs von} \ f - $$ - $$ - \vec{v} = -\frac{\nabla f}{\norm{ \nabla f }} \quad \text{ist die Richtung des steilsten Abstiegs von} \ f - $$ -\end{algo} - - -\subsubsection{Das vollständige Differential} - -\begin{defi}{Vollständiges Differential} - Unter dem \emph{vollständigen Differential} der Funktion $z = f(x, y)$ im Punkt $(x_0, y_0)$ versteht man den Ausdruck - $$ - \d z = f_x(x_0, y_0) \d x + f_y(x_0, y_0) \d y - $$ -\end{defi} - -\begin{algo}{Absoluter Fehler} - Es gilt für $z = f(x_1, \ldots, x_n)$ der \emph{absolute Fehler}: - $$ - \Delta z_{\max} \leq \sum_{i=1}^n \abs{f_{x_i}} \cdot \abs{\Delta x_i} - $$ -\end{algo} - -\begin{algo}{Relativer Fehler} - Es gilt für $z = f(x, y) = c \cdot x^a \cdot y^b$ anhand der möglichen relativen Eingabefehler $\frac{\Delta x}{x}$ und $\frac{\Delta y}{y}$ der \emph{relative Fehler}: - $$ - \frac{\Delta z}{z} \leq a \cdot \abs{\frac{\Delta x}{x}} + b \cdot \abs{\frac{\Delta y}{y}} - $$ -\end{algo} - -\begin{example}{Relativer Fehler} - Bei der Berechnung einer Fläche $f(x, y) = 5x^2 \cdot y$ werde ein relativer Messfehler von $10\%$ in $x$ und $3\%$ in $y$ gemacht. - Wie ist der relative Fehler des Ergebnisses? - - \exampleseparator - - $z := f(x, y) = 5x^2 \cdot y \qquad \left( c \cdot x^a \cdot y^b\right)$ - - Es ist der relative Fehler gegeben mit - $$ - \frac{\Delta z}{z} \leq a \cdot \abs{\frac{\Delta x}{x}} + b \cdot \abs{\frac{\Delta y}{y}} = 2 \cdot 10\% + 1\cdot 3\% = 23\% - $$\qed -\end{example} - -\begin{defi}{Kurve} - Seien $x(t)$ und $y(t)$ in $t$ stetige Funktionen. - Die Menge - $$ - \left\{ (x, y) \mid x = x(t), \ y=y(t), \ t\in \R \right\} - $$ - heißt \emph{Kurve}. - Die Darstellung $t\to \R^2$ - $$ - \vec{x}(t) = \vektor{x(t) \\ y(t)} - $$ - heißt \emph{Parameterdarstellung der Kurve}. -\end{defi} - -\begin{defi}{Kettenregel für Funktionen mit einem Parameter} - Sei $z = f(\vec{x}) = f(\vec{x}(t))$ und $\vec{x}(t)$ stetig in jeder Komponente $x_i$. Dann gilt: - $$ - \frac{\d z}{\d t} = \sum_{i=1}^n \frac{\partial z}{\partial x_i} \cdot \frac{\d x_i}{\d t} - $$ -\end{defi} - -\begin{defi}{Kettenregel für Funktionen mit zwei Parametern} - Sei $z = f(\vec{x}) = f(\vec{x}(u,v))$ und $\vec{x}(u,v)$ stetig in jeder Komponente $x_i$. Dann gilt: - $$ - \frac{\partial z}{\partial u} = \sum_{i=1}^n \frac{\partial z}{\partial x_i} \cdot \frac{\d x_i}{\d u} - $$ - $$ - \frac{\partial z}{\partial v} = \sum_{i=1}^n \frac{\partial z}{\partial x_i} \cdot \frac{\d x_i}{\d v} - $$ -\end{defi} - -\begin{defi}{Implizite Differentiation} - Seien $F(x, f(x)) = F(x, y)$ und $f(x) = y$ differenzierbar. - Gilt $F(x_0, y_0) = 0$, dann wird $y$ \emph{implizit differenziert} mit - $$ - y' = -\frac{F_x(x_0, y_0)}{F_y(x_0, y_0)} - $$ - - Es gilt: - \begin{itemize} - \item Die implizite Differentiation kann insbesondere angewendet werden, wenn sich eine Funktion $F(x, y)=0$ nicht oder nicht einfach nach $y$ umstellen lässt. - \item Die Funktion muss ggf. auf die Form $F(x, y) = 0$ gebracht werden. - \item Es ist immer zu testen, ob der vorgegebene Punkt die Bedingung $F(x_0, y_0) = 0$ erfüllt. - \item Die Rechnung kann an einem beliebigen Punkt $(x_0, y_0)$ durchgeführt werden und somit auch eine Ableitungsfunktion berechnen. - \end{itemize} -\end{defi} - -\subsubsection{Partielle Ableitungen höherer Ordnung} - -\begin{defi}{Satz von Schwarz} - Sind die partiellen Ableitungen $k$-ter Ordnung einer Funktion stetige Funktionen, so darf die Reihenfolge der Differentiation beliebig vertauscht werden. -\end{defi} - -\begin{defi}{Divergenz} - Wir bezeichnen die \emph{Divergenz} einer Funktion $f$ mit - $$ - \operatorname{div} f := \nabla \cdot f = \vektor{\frac{\partial}{\partial x_1} \\ \vdots \\ \frac{\partial}{\partial x_n}} \vektor{f_1(x_1, \ldots, x_n) \\ \vdots \\ f_n(x_1, \ldots, x_n)} = \sum_{i=1}^n \frac{\partial f_i(x_1, \ldots, x_n)}{\partial x_i} - $$ -\end{defi} - -\begin{defi}{Rotation} - Wir bezeichnen die \emph{Rotation} einer Funktion $f$ mit - $$ - \operatorname{rot} f := \nabla \times f = \vektor{\frac{\partial}{\partial x_1} \\ \vdots \\ \frac{\partial}{\partial x_n}} \times \vektor{f_1(x_1, \ldots, x_n) \\ \vdots \\ f_n(x_1, \ldots, x_n)} - $$ -\end{defi} - -\begin{bonus}{Quellen und Senken} - Die Punkte mit $\operatorname{div} f > 0$ heißen \emph{Quellen} des Vektorfeldes, die mit $\operatorname{div} f < 0$ heißen \emph{Senken}. - - Gilt stets $\operatorname{div} f = 0$, so heißt die Funktion \emph{quellenfrei}. - - Gilt $\operatorname{rot} f = 0$, so heißt die Funktion \emph{wirbelfrei}. -\end{bonus} - -\begin{defi}{Jacobi-Matrix} - Die Matrix - $$ - J = \vektor{\frac{\partial f_1}{x_1} & \ldots & \frac{\partial f_1}{x_n} \\ \vdots & \ddots & \vdots \\ \frac{\partial f_n}{x_1} & \ldots & \frac{\partial f_n}{x_n}} - $$ - heißt \emph{Jacobi-Matrix} von $f$. -\end{defi} - -\subsubsection{Taylorentwicklung für $f(x, y)$} - -\begin{defi}{Quadratische Approximation} - Für $f(x, y)$ ist die \emph{quadratische Approximation} gegeben mit - $$ - \begin{aligned} - f(x, y) \quad = \quad & f(x_0, y_0) + f_x(x_0, y_0) (x-x_0) + f_y(x_0, y_0) (y-y_0) \\ - + \quad & \frac{f_{xx}(x_0, y_0) (x-x_0)^2}{2} + f_{xy}(x_0, y_0) (x-x_0) (y-y_0) + \frac{f_{yy}(x_0, y_0) (y-y_0)^2}{2} - \end{aligned} - $$ -\end{defi} - -\subsubsection{Extremwerte ohne Nebenbedingungen} - -\begin{algo}{Lokale Extrema ohne Nebenbedingungen im $\R^2$} - \begin{enumerate} - \item Berechne $f_x(x,y)$ und $f_y(x, y)$ und suche diejenigen Stellen $(x_0, y_0)$ mit - $$ - f_x(x_0, y_0) = f_y(x_0, y_0) = 0 - $$ - Diese Stellen sind die \emph{Kandidaten} für lokale Extrema. - \item Berechne für jeden Kandidaten $(x_0, y_0)$ die Werte $f_{xx}(x_0, y_0)$, $f_{xy}(x_0, y_0)$ und $f_{yy}(x_0, y_0)$ und daraus den Wert - $$ - d := f_{xx}(x_0, y_0) \cdot f_{yy}(x_0, y_0) - \left(f_{xy}(x_0, y_0)\right)^2 - $$ - \item Dann gilt: - \subitem $f_{xx}(x_0, y_0) > 0 \ \land \ d > 0 \implies$ \emph{lokales Minimum} - \subitem $f_{xx}(x_0, y_0) < 0 \ \land \ d > 0 \implies$ \emph{lokales Maximum} - \subitem $d < 0 \implies$ \emph{Sattelpunkt} - \subitem $d = 0 \implies$ höhere Ableitung entscheidet - \end{enumerate} -\end{algo} - -\begin{defi}{Hesse-Matrix im $\R^2$} - Die \emph{Hesse-Matrix} im $\R^2$ ist definiert mit - $$ - H = \vektor{f_{xx}(x_0, y_0) & f_{xy}(x_0, y_0) \\ f_{xy}(x_0, y_0) & f_{yy}(x_0, y_0)} - $$ - - Ist $H$ \emph{positiv definit}, so liegt ein Minimum vor, ist $H$ \emph{negativ definit} ein Maximum und bei \emph{indefinitem} $H$ ein Sattelpunkt. - - Es gilt: - \begin{itemize} - \item $H$ ist positiv definit $\iff f_{xx}(x_0, y_0) < 0 \ \land \det H > 0$ - \item $H$ ist negativ definit $\iff f_{xx}(x_0, y_0) > 0 \ \land \det H > 0$ - \item $H$ indefinit $\iff \det H < 0$ - \end{itemize} -\end{defi} - -\begin{defi}{Hesse-Matrix im $\R^n$} - Die \emph{Hesse-Matrix} im $\R^n$ ist definiert mit - $$ - H = \vektor{\frac{\partial^2 f}{\partial x_1^2} & \ldots & \frac{\partial^2 f}{\partial x_1 \partial x_n} \\ \vdots & \ddots & \vdots \\ \frac{\partial^2 f}{\partial x_n \partial x_1} & \ldots & \frac{\partial^2 f}{\partial x_n^2}} - $$ - - Ist $H$ \emph{positiv definit}, so liegt ein Minimum vor, ist $H$ \emph{negativ definit} ein Maximum und bei \emph{indefinitem} $H$ ein Sattelpunkt. - - Es gilt: - \begin{itemize} - \item $H$ ist positiv definit $\iff$ alle \emph{Unterdeterminanten} (links oben beginnend) sind positiv - \item $H$ ist negativ definit $\iff$ alle \emph{Unterdeterminanten} (links oben beginnend) haben wechselndes Vorzeichen (beginnend mit negativem Vorzeichen) - \item $H$ indefinit $\iff$ sonst - \end{itemize} -\end{defi} - -\begin{example}{Lokale Extrema ohne Nebenbedingungen} - Untersuchen Sie die Funktion - $$ - v(x, y, z) = xy - z^4 -2(x^2 + y^2 -z^2) - $$ auf lokale Extrema und Sattelpunkte. - - \exampleseparator - - $v(x, y, z) = xy - z^4 -2(x^2 + y^2 -z^2) = xy - z^4 -2x^2 -2y^2 + 2z^2$ - - Wir berechnen zuerst die potentiellen Kandidaten. - Für diese muss gelten - $$ - \nabla v(x, y, z) = \vektor{v_x(x, y, z) \\ v_y(x, y, z)\\ v_z(x, y, z)} = \vec{0} - $$ - $$ - \iff \vektor{ y -4x \\ x -4y \\ -4z^3 +4z} = \vektor{0 \\ 0 \\ 0} \iff \vektor{y \\ x \\ -z(z^2 +1)} = \vektor{4x \\ 4y \\ 0} - $$ - Wir haben offensichtlich drei Gleichungen gegeben. - - Wir erkennen aus \Rnum{3} direkt, dass $z \in \{-1, 0, 1\}$ gelten muss und aus \Rnum{2} und \Rnum{1}, dass $x = y = 0$. - - Damit erhalten wir die drei Kandidatentupel: - \begin{itemize} - \item $(x_1, y_1, z_1) = (0, 0, -1)$, - \item $(x_2, y_2, z_2) = (0, 0, 0)$, - \item $(x_3, y_3, z_3) = (0, 0, 1)$. - \end{itemize} - - Wir bilden nun die Hesse-Matrix: - $$ - \begin{aligned} - f_{xx} = -4 \qquad & f_{xy} = 1 & & f_{xz} = 0 \\ - f_{yx} = f_{xy} = 1 \qquad & f_{yy} = -4 & & f_{yz} = 0 \\ - f_{zx} = f_{xz} = 0 \qquad & f_{zy} = f_{yz} = 0 & & f_{zz} = 12z^2 + 4 - \end{aligned} - $$ - - $$ - H = \vektor{f_{xx} & f_{xy} & f_{xz} \\ f_{yx} & f_{yy} & f_{yz} \\ f_{zx} & f_{zy} & f_{zz}} = \vektor{-4 & 1 & 0 \\ 1 & -4 & 0 \\ 0 & 0 & -12z^2 + 4} - $$ - - Es gilt für die Unterdeterminanten: - $$ - \begin{aligned} - \det H_1 & = -4 \\ - \det H_2 & = 15 \\ - \det H & = (-12z^2 + 4) \cdot \det H_2 = (-12z^2 + 4) \cdot 15 = -180z^2 + 60 - \end{aligned} - $$ - - Es gilt weiterhin - $$ - \det H \leq 0 \iff -180z^2 + 60 \leq 0 \iff z^2 \leq \frac{1}{3} - $$ - - Damit ist die Hesse-Matrix für alle $\abs{z} \leq \frac{1}{9}$ indefinit und sonst negativ definit. - - Damit sind die Kandidatentupel $(x_1, y_1, z_1) = (0, 0, -1)$ und $(x_3, y_3, z_3) = (0, 0, 1)$ Maxima und $(x_2, y_2, z_2) = (0, 0, 0)$ ein Sattelpunkt. \qed -\end{example} - -\subsubsection{Extremwerte mit Nebenbedingungen} - -\begin{defi}{Lagrange-Funktion} - Gegeben seien eine Funktion $f(x, y)$ und eine Nebenbedingung $g(x, y) = 0$. - Dann ist die \emph{Lagrange-Funktion} gegeben mit - $$ - L(x, y, \lambda) = f(x, y) + \lambda g(x, y) - $$ - - Es gilt damit: - $$ - L_\lambda = g(x, y) \quad \land \quad g(x, y) = 0 \implies L(x,y,\lambda) = f(x, y) - $$ -\end{defi} - -\begin{algo}{Lokale Extrema mit Nebenbedingung im $\R^2$} - \begin{enumerate} - \item Berechne die Kandidaten wie in freien Optimierungen mit - $$ - \nabla (L) = \vec{0} - $$ - \item Aufstellen der geränderten Hesse-Matrix für die drei Unbekannten mit - $$ - H = \vektor{L_{xx} & L_{xy} & g_x \\ L_{xy} & L_{yy} & g_y \\ g_x & g_y & 0} - $$ - \item Dann gilt: - \subitem $\det H > 0 \implies$ \emph{Maximum} - \subitem $\det H < 0 \implies$ \emph{Minimum} - \subitem $\det H = 0 \implies$ keine Entscheidung möglich - \end{enumerate} -\end{algo} - -\subsubsection{Parametrische Funktionen und Kurvenintegrale} - -\begin{defi}{Tangentenvektor} - Der \emph{Tangentenvektor} einer Kurve $\vec{x}(t)$ ist gegeben mit - $$ - \vec{x'}(t) = \vektor{x_1'(t) \\ \vdots \\ x_n'(t)} - $$ -\end{defi} - -\begin{defi}{Tangente} - Die \emph{Tangente} einer Kurve $\vec{x}(t)$ ist gegeben mit - $$ - T(t) = \vec{x}(t) + \lambda\vec{x'}(t) - $$ -\end{defi} - -\begin{defi}{Arbeitsintegral} - Seien die Kraft $F(\vec{x}(t))$ und ein Zeitintervall $t \in \interval{a,b}$, oder analog Start- und Endpunkte $\vec{A} = \vec{x}a)$ bzw. $\vec{B} = \vec{x}(b)$, gegeben. - - Dann ist die \emph{Arbeit} gegeben mit - $$ - W = \int^b_a F(\vec{x}(t)) \cdot \vec{x'}(t) \d t - $$ -\end{defi} - -\begin{example}{Arbeitsintegral} - Gegeben sei die Kurve $\vec{X}(t) = \vektor{t \\ t^2 \\ t^3}$. - Berechnen Sie die Arbeit im Vektorfeld - $$ - \vec{F}(x, y, z) = \vektor{x+yz \\ y + xz \\ z + xy} - $$ - entlang der Kurve. - - \exampleseparator - - Die Arbeit von Zeitpunkt $t=a$ bis Zeitpunkt $t=b$ ist gegeben mit - $$ - W = \int^b_a \vec{F} (\vec{X}(t)) \cdot \vec{X}'(t) \dt - $$ - Wir berechnen: - $$ - \begin{aligned} - W =\quad & \int^b_a \vec{F} (\vec{X}(t)) \cdot \vec{X}'(t) \dt \\ - =\quad & \int^b_a \vektor{t + t^5 \\ t^2 + t^4 \\ 2t^3} \cdot \vektor{1 \\ 2t \\ 3t^2} \dt \\ - =\quad & \int^b_a \left( t + t^5 + 2t(t^4 + t^2) + 3t^2 \cdot 2t^3\right) \dt \\ - =\quad & \int^b_a \left(9t^5 + 2t^3 + t\right) \dt \\ - =\quad & \left[ \frac{3t^6}{2} + \frac{t^4}{2} + \frac{t^2}{2} \right]^b_a = \frac{3(b^6 - a^6) + b^4 + b^2 - a^4 - a^2}{2} - \end{aligned} - $$\qed -\end{example} - -\begin{defi}{Potentialfunktion} - Sei $f : \R^n \to \R^n$ stetig differenzierbar. - $f$ heißt \emph{Gradientenfeld}, wenn es eine skalare Funktion $V$ gibt, mit - $$ - \nabla (V) = f - $$ - - Die Funktion $V$ heißt dann \emph{Potentialfunktion} von $f$ mit - $$ - V = \int f - $$ - - Es gilt: - \begin{itemize} - \item Im $\R^2$: - $$ - \frac{\partial f_1}{\partial y} = \frac{\partial f_2}{x} - $$ - \item Im $\R^3$: - $$ - \operatorname{rot} f = 0 - $$ - \item Im $\R^n$ für die Jacobimatrix $J$ - $$ - J = J^T - $$ - \end{itemize} -\end{defi} - -\section{Mehrdimensionale Integration} - -\subsection{Doppelintegrale} - -\begin{defi}{Integral im $\R^2$} - Bezeichnet $A$ das Rechteck $\interval{x_0, x_1} \times \interval{y_0, y_1}$, so ist das \emph{Integral} von $f$ über das Gebiet $A$ gegeben mit - $$ - \int^{x_1}_{x_0}\int^{y_1}_{y_0} f(x, y) \d y\d x = \int_A f \d A = \int\int_A f \d A - $$ -\end{defi} - -\begin{algo}{Integration über kartesische krummlinige Bereiche} - Seien eine \emph{obere} und eine \emph{untere Funktion} $f_u(x)$ und $f_v(x)$ gegeben und in der zweiten Dimension das Intervall $\interval{a,b}$, dann gilt für das Integral im entsprechenden Integrationsbereich - $$ - \int_{x = a}^{b}\int_{y = f_u(x)}^{f_o(x)} f(x, y) \d y\d x - $$ -\end{algo} - -\begin{algo}{Flächeninhalt einer Grundfläche eines kartesischen krummlinigen Bereiches} - Der Flächeninhalt $F$ einer Grundfläche $A$ ergibt sich durch Integration mit $f(x, y) = 1$, also - $$ - F = \int_A 1 \d A - $$ -\end{algo} - -\begin{example}{Integration über kartesische krummlinige Bereiche} - Berechnen Sie das Volumen der Funktion $f(x, y) = x+y$ über die Fläche - $$ - A = \{(x, y) \in \R^2 \mid 1 \leq x^2 + 4y^2, x^2 + y^2 \leq 1, x \geq 0, y\geq 0\} - $$ - Skizzieren Sie zunächst die Fläche. - - \exampleseparator - - \begin{center} - \begin{tikzpicture}[scale=1] - \begin{axis}[ - width=15cm, - xmin=-1.5,xmax=1.5, - xtick distance=1, - xlabel = $x$, - ymin=-1.5,ymax=1.5, - ytick distance=1, - ylabel = $y$, - axis equal, - grid=both, - axis lines = middle, - disabledatascaling - ] - %\draw [name path=A] (axis cs:0,-2) arc[start angle=-90, end angle=90, radius={transformdirectionx(2)}]; - %\draw [name path=B] (axis cs:0,-3) arc[start angle=-90, end angle=90, radius={transformdirectionx(3)}]; - - \draw [name path=A1] (axis cs:1,0) arc[start angle=0, end angle=180, radius={transformdirectionx(1)}]; - \draw [name path=A2] (axis cs:-1,0) arc[start angle=180, end angle=360, radius={transformdirectionx(1)}]; - %\draw [name path=B] (axis cs:0,0) circle [x radius=1, y radius=1/4]; - - \draw [name path=B1] (axis cs:1,0) arc(0:180:1 and 1/2); - \draw [name path=B2] (axis cs:-1,0) arc(180:360:1 and 1/2); - - \tikzfillbetween[of=A1 and B1, soft clip={domain=0:1}]{red, opacity=0.75}; - %\tikzfillbetween[of=A2 and B2]{red, opacity=0.5}; - \end{axis} - \end{tikzpicture} - \end{center} - - Wir sehen, dass die Ellipsengleichung die untere und die Kreisgleichung die obere Schranke bilden. - Damit formen wir unser Integrationsgebiet wie folgt um: - $$ - A = \left\{(x, y) \in \R^2 \mid 0 \leq x \leq 1, \frac{\sqrt{1-x^2}}{2} \leq y \leq \sqrt{1-x^2} \right\} - $$ -\end{example} - -\begin{example}{Integration über kartesische krummlinige Bereiche (Fortsetzung)} - Dann können wir wie folgt die Fläche berechnen: - $$ - \begin{aligned} - \int\int_A (x+y) \d x \d y & = \int^1_0\int^{\sqrt{1-x^2}}_{\frac{\sqrt{1-x^2}}{2}} (x+y) \d y \d x \\ - & = \int^1_0 \left[xy + \frac{y^2}{2}\right]^{\sqrt{1-x^2}}_{\frac{\sqrt{1-x^2}}{2}} \d x \\ - & = \int^1_0 \left(x\sqrt{1-x^2} + \frac{1-x^2}{2} - \left( \frac{x\sqrt{1-x^2}}{2} - \frac{1-x^2}{8}\right)\right) \d x \\ - & = \int^1_0 \left(\frac{x\sqrt{1-x^2}}{2} + \frac{3(1-x^2)}{8}\right) \d x \\ - & = \frac{1}{2}\int^1_0 x\sqrt{1-x^2} \d x + \frac{3}{8} \int^1_0 (1-x^2) \d x \\ - & \overset{\footnote{$u = 1-x^2 \implies \frac{\d u}{\d x} = -2x \iff \d x = -\frac{\d u}{2x}$}}{=} -\frac{1}{4}\int^1_{x=0} \sqrt{u} \d u + \frac{3}{8} \int^1_0 (1-x^2) \d x \\ - & = -\frac{1}{4} \left[ \frac{2\sqrt{1-x^2}}{3} \right]^1_{0} + \frac{3}{8} \int^1_0 (1-x^2) \d x \\ - & = \frac{1}{6} + \frac{3}{8} \int^1_0 (1-x^2) \d x \\ - & = \frac{1}{6} + \frac{3}{8} \left[ x-\frac{x^3}{3} \right]^1_0 \\ - & = \frac{1}{6} + \frac{3}{8} \left( 1-\frac{1}{3} \right) \\ - & = \frac{5}{12} \\ - \end{aligned} - $$\qed -\end{example} - -\begin{algo}{Schwerpunkt einer Grundfläche eines homogenen Gebietes} - Der Schwerpunkt mit den Schwerpunktskoordinaten $(x_s, y_s)$ einer Fläche mit homogener Dichte ergibt sich mit der Flächenmaßzahl $F$ aus - $$ - x_s = \frac{1}{F}\int_A x \d A \quad \land \quad y_s = \frac{1}{F}\int_A y \d A - $$ -\end{algo} - -\begin{algo}{Masse einer Grundfläche eines inhomogenen Gebietes} - Wird die spezifische Dichte eines Stoffes in der Koordinate $(x, y)$ gegeben durch $\rho(x, y)$, so lässt sich die Masse einer Fläche $A$ berechnen mit - $$ - M = \int_A \rho(x, y) \d A - $$ -\end{algo} - -\begin{algo}{Integration in Polarkoordinaten} - Bei der Umwandlung der kartesischen Koordinaten $(x, y)$ in \emph{Polarkoordinaten} umwandeln, gilt - $$ - f(x, y) = f(r\cos\phi, r\sin\phi)\quad \land \quad \d y \d x = r \d r \d \phi - $$ - - Und dann insgesamt für die Integration: - $$ - \int_A f(x, y) \d y \d x = \int_A f(r \cos\phi, r\sin\phi)r\d r\d\phi - $$ -\end{algo} - -\begin{algo}{Uneigentliche Integrale mithilfe von Polarkoordinaten} - Der Übergang zu Polarkoordinaten kann bei der Berechnung von uneigentlichen zweidimensionalen Integralen behilflich sein. - Dabei gilt: - $$ - \int_{x=-\infty}^\infty\int_{y=-\infty}^\infty f(x, y) \d y \d x = \int_{\phi = 0}^{2\pi} \int_{r = 0}^\infty f(r\cos\phi, r\sin\phi)r\d r\d\phi - $$ -\end{algo} - -\begin{example}{Uneigentliche Integrale mithilfe von Polarkoordinaten} - Berechnen Sie das folgende Integral - $$ - \int_A x\cdot y \d A - $$ - über dem Integrationsgebiet $A$ gegeben durch die Ungleichungen - $$ - -2 \leq y \leq 2, \quad x \geq 0, \quad x^2 + y^2 \leq 4 - $$ - \begin{enumerate}[a)] - \item in kartesischen Koordinaten, - \item in Polarkoordinaten. - \end{enumerate} - - \exampleseparator - - \begin{enumerate}[a)] - \item - Es gilt: - $$ - \begin{aligned} - \int_A x\cdot y \d A & = \int_{-2}^2 \int^{\sqrt{4-y^2}}_0 x\cdot y \d x \d y \\ - & = \int_{-2}^2 y \left[ \frac{x^2}{2} \right]^{\sqrt{4-y^2}}_0 \d y \\ - & = \int_{-2}^2 \frac{y(4-y^2)}{2} \d y \\ - & = \frac{1}{2}\int_{-2}^2 (4y-y^3) \d y \\ - & = \frac{1}{2}\int_{-2}^2 (4y-y^3) \d y \\ - & = \frac{1}{2}\left[2y^2-\frac{y^4}{4}\right]_{0}^2 \\ - & = 0 - \end{aligned} - $$\qed - \end{enumerate} -\end{example} - - -\begin{example}{Uneigentliche Integrale mithilfe von Polarkoordinaten (Fortsetzung)} - \begin{enumerate}[a)] - \setcounter{enumi}{1} - \item - Es gilt: - $$ - \begin{aligned} - \int_A x\cdot y \d A & = \int^\frac{\pi}{2}_{-\frac{\pi}{2}} \int^2_0 r^3\cos\phi\sin\phi \d r \d \phi \\ - & = \int^\frac{\pi}{2}_{-\frac{\pi}{2}} \cos\phi\sin\phi \int^2_0 r^3 \d r \d \phi \\ - & = \int^\frac{\pi}{2}_{-\frac{\pi}{2}} \cos\phi\sin\phi \left[\frac{r^4}{4}\right]^2_0 \d \phi \\ - & = 4\int^\frac{\pi}{2}_{-\frac{\pi}{2}} \cos\phi\sin\phi \d \phi \\ - & \overset{\footnote{$u = \cos\phi \implies \frac{\d u}{\d \phi} = -\sin\phi \iff \d \phi = -\frac{\d u}{\sin \phi}$}}{=} -4\int^\frac{\pi}{2}_{\phi = -\frac{\pi}{2}} u \d u \\ - & = -4 \left[ \frac{\cos^2\phi}{2} \right]^\frac{\pi}{2}_{-\frac{\pi}{2}} \\ - & = 0 - \end{aligned} - $$\qed - \end{enumerate} -\end{example} -\subsection{Dreifachintegrale} - -\begin{defi}{Dreifachintegral} - Bezeichnet $V$ den Quader $\interval{x_0, x_1} \times \interval{y_0, y_1} \times \interval{z_0, z_1}$, so ist das \emph{Dreifachintegral} von $f$ über das Gebiet $V$ gegeben mit - $$ - \int^{x_1}_{x_0}\int^{y_1}_{y_0}\int^{z_1}_{z_0} f(x, y, z) \d z\d y\d x = \int_A f \d A = \int\int\int_A f \d A - $$ -\end{defi} - -\begin{bonus}{Volumenberechnung im $\R^3$} - Die Berechnung eines Volumen $V$ über den Bereich $V'$ im $\R^3$ geschieht völlig analog zum $\R^2$: - $$ - V = \int_{V'} 1 \d V' - $$ -\end{bonus} - -\begin{bonus}{Schwerpunktberechnung im $\R^3$} - Die Berechnung des Schwerpunktes $(x_s, y_s, z_s)$ mit Volumen $V$ über den Bereich $V'$ im $\R^3$ geschieht völlig analog zum $\R^2$: - $$ - x_s = \frac{1}{V}\int_{V'} x \d V' \quad \land \quad y_s = \frac{1}{V}\int_{V'} y \d V' \quad \land \quad z_s = \frac{1}{V}\int_{V'} z \d V' - $$ -\end{bonus} - -\begin{bonus}{Rechnen mit Kugelkoordinaten} - Der Übergang zu Kugelkoordinaten kann bei der Berechnung von dreidimensionalen Integralen behilflich sein. - Dabei gilt: - $$ - \int\int\int f(x,y,z) \d z\d y\d x = \int\int\int f(r\cos\phi\sin\theta, r\sin\phi\sin\theta, r\cos\theta) \abs{r^2\sin\theta} \d\theta\d\phi\d r - $$ -\end{bonus} - -\section{(*) Wachstums- und Zerfallsprozesse} - -\subsection{Ungebremstes Wachstum} - -\begin{defi}{Diskretes ungebremstes Wachstum} - Gegeben sei ein Wachstum $k$ innerhalb einer (beliebigen) Zeiteinheit $\Delta t_0$, eine Startpopulation $y_0$ und eine Änderungsrate - $$ - \Delta y = k\cdot y - $$ - dann ist die Lösungsfunktion - $$ - \boxed{y_n = y_0\cdot (1+k)^n} - $$ - wobei $y_n = y(n\cdot \Delta t_0)$ den Zustand nach $n$ Zeitschritten der Länge $\Delta t_0$ angibt. -\end{defi} - -\begin{bonus}{Diskretes ungebremstes Wachstum für Zeitteile}s - Gegeben sei ein Wachstum $k$ innerhalb einer (beliebigen) Zeiteinheit $\Delta t_0 = 1$, eine Startpopulation $y_0$ und eine Änderungsrate - $$ - \Delta y = k_{\Delta t_0}\cdot y - $$ - - Betrachten wir nun einen \emph{Zeitteil} $\Delta t$, dann ist das modifizierte Modell - $$ - \Delta y = y_n - y_{n-1} = k_{\Delta t}\cdot y_{n-1}\cdot \Delta t - $$ - mit der Lösung - $$ - \boxed{y_n = y_0\cdot (1 + k_{\Delta t} \cdot \Delta t)^n} - $$ - wobei $y_n = y(n\cdot \Delta t)$ den Zustand nach $n$ Zeitschritten der Länge $\Delta t$ angibt. - - Die Lösung dieses Modells wird auch als \emph{diskrete Evolutionsgleichung des ungebremsten Wachstums} bezeichnet. -\end{bonus} - -\begin{defi}{Kontinuierliches Modell der Evolutionsgleichung} - Zur Lösung der Modellgleichung - $$ - \lim_{\Delta t \to 0} \frac{\Delta y}{\Delta t} = k\cdot y - $$ - mit $y(0) = y_0$ und $k$ (kontinuierliches) Wachstum, so ist die \emph{kontinuierliche} Lösungsfunktion - $$ - \boxed{y(t) = y_o \cdot e^{kt}} - $$ - und wegen $\Delta t \to 0$ ist dies gleichbedeutend zu - $$ - y'(t) = k \cdot y(t) \ \text{mit} \ y(0) = 0 - $$ - - Ein solches Problem heißt \emph{Differentialgleichung mit Anfangswert} oder \emph{Anfangswertproblem}. -\end{defi} - -\subsection{Gebremstes Wachstum - Störung erster Ordnung} - -\begin{defi}{Diskretes Modell des Wachstums mit Störung erster Ordnung} - Gegeben sei ein Wachstum $k$ innerhalb einer (beliebigen) Zeiteinheit $\Delta t_0$, eine Startpopulation $y(0) = y_0$, $\Delta t$ ein Zeitteil, $a$ die \emph{Abnahme pro Zeiteinheit} und eine Änderungsrate - $$ - \Delta y = (k\cdot y - a) \cdot \Delta t - $$ - dann ist die Lösungsfunktion - $$ - \boxed{y_n = \left( y(0) - \frac{a}{k} \right) \cdot \left( 1 + k \cdot \Delta t \right)^n + \frac{a}{k}} - $$ -\end{defi} - -\begin{defi}{Kontinuierliches Modell des Wachstums mit Störung erster Ordnung} - Zur Lösung der Modellgleichung - $$ - \lim_{\Delta t \to 0} \frac{\Delta y}{\Delta t} = k\cdot y - a - $$ - mit $y(0) = y_0$, $k$ (kontinuierliches) Wachstum und $a$ \emph{kontinuierliche Abnahme} pro Zeiteinheit, ist die \emph{kontinuierliche} Lösungsfunktion - $$ - \boxed{y(t) = \left( y(0) - \frac{a}{k} \right) \cdot e^{kt} + \frac{a}{k}} - $$ - und wegen $\Delta t \to 0$ ist dies gleichbedeutend zu - $$ - y'(t) = k \cdot y(t) - a - $$ -\end{defi} - -\begin{defi}{Stationäre Lösung} - Die konstanten Werte, ermittelt durch $\Delta y = 0$, heißen \emph{stationäre Lösungen} $y_s$. - - Für Wachstumsmodelle mit Störung erster Ordnung gilt: - $$ - y_s = \frac{a}{k} - $$ -\end{defi} - -\subsection{Logistisches Wachstum - Störung zweiter Ordnung} - -\begin{defi}{Diskretes Modell des Wachstums mit Störung zweiter Ordnung} - Gegeben sei ein Wachstum $k$ innerhalb einer (beliebigen) Zeiteinheit $\Delta t_0$, eine Startpopulation $y(0) = y_0$, $\Delta t$ ein Zeitteil, $R$ \emph{Oberschranke der verfügbaren Ressourcen} und eine Änderungsrate - $$ - \Delta y = (k\cdot y \cdot (R-y)) \cdot \Delta t - $$ - dann ist die Lösungsfunktion - $$ - \boxed{y_n = \frac{R}{\frac{R-y_0}{y_0} \cdot (1 + R \cdot k \cdot \Delta t)^{-n} + 1}} - $$ -\end{defi} - -\begin{defi}{Kontinuierliches Modell des Wachstums mit Störung zweiter Ordnung} - Zur Lösung der Modellgleichung - $$ - \lim_{\Delta t \to 0} \frac{\Delta y}{\Delta t} = k\cdot y \cdot (R-y) - $$ - mit $y(0) = y_0$, $k$ (kontinuierliches) Wachstum und $R$ \emph{Oberschranke der verfügbaren Ressourcen}, ist die \emph{kontinuierliche} Lösungsfunktion - $$ - \boxed{y(t) = \frac{R}{\frac{R-y_0}{y_0} \cdot e^{-Rkt} + 1}} - $$ - und wegen $\Delta t \to 0$ ist dies gleichbedeutend zu - $$ - y'(t) = k \cdot y(t) \cdot (R-y(t)) - $$ -\end{defi} - -\section{Gewöhnliche Differentialgleichungen} - -\begin{defi}{Gewöhnliche Differentialgleichung $n$-ter Ordnung} - Eine Gleichung der Form - $$ - y^{(n)} = f(x, y, y', y'', \ldots, y^{(n-1)}) - $$ - heißt \emph{(explizite) gewöhnliche Differentialgleichung n-ter Ordnung}. - - Ist die Gleichung in der Form - $$ - f(x, y, y', y'', \ldots, y^{(n)}) = 0 - $$ - gegeben, so heißt die Differentialgleichung \emph{implizit}. - - Erfüllt $y(x)$ die Differentialgleichung, so heißt $y$ \emph{allgemeine Lösung der Differentialgleichung}. -\end{defi} - -\begin{defi}{Anfangswertproblem} - Die Vorgabe einer expliziten Differentialgleichung und der Werte - $$ - x_0, \quad y(x_0) = y_0, \quad y'(x_0) = y_1, \quad \ldots, \quad y^{(n-1)}(x_0) = y_{n-1} - $$ - heißt \emph{Anfangswertproblem}. - - Erfüllt $y(x)$ das Anfangswertproblem, so heißt $y$ \emph{spezielle Lösung des Anfangswertproblems}. -\end{defi} - -\subsection{Lösungsverfahren für Differentialgleichungen erster Ordnung} - -\begin{algo}{Trennung der Variablen} - Gegeben: Differentialgleichung der Form - $$ - \boxed{y' = f(x) \cdot g(y)} \quad \iff \quad \frac{\d y}{\d x} = f(x) \cdot g(y) - $$ - \begin{enumerate} - \item $x$ und $y$ wie folgt trennen: - $$ - \frac{1}{g(y)} \d y = f(x) \d x - $$ - \item Integration liefert: - $$ - \int \frac{1}{g(y)} \d y = \int f(x) \d x - $$ - \item Umstellen nach $y$ liefert die Lösung der Differentialgleichung - \end{enumerate} -\end{algo} - -\begin{example}{Trennung der Variablen} - Berechnen Sie die allgemeine Lösung der Differentialgleichung - $$ - y' + (1+x)\cdot y = 0\quad \iff \quad y' = -y\cdot (1+x) - $$ - \exampleseparator - - $$ - \begin{aligned} - & \frac{\d y}{\d x} & & = -y \cdot (1+x) \\ - \iff \quad & -\frac{1}{y} \d y & & = (1+x) \d x \\ - \iff \quad & \int -\frac{1}{y} \d y & & = \int (1+x) \d \\ - \iff \quad & - \ln\abs{y} - c_2 & & = x + \frac{x^2}{2} + c_1 \\ - \iff \quad & y & & = e^{-(c_1 + c_2)}e^{-\frac{x}{2}(x+2)} \\ - \iff \quad & y & & = ce^{-\frac{x}{2}(x+2)} \\ - \end{aligned} - $$\qed -\end{example} - -\begin{algo}{Substitution} - \begin{itemize} - \item Differentialgleichung vom Typ - $$ - \boxed{y' = f(ax + by + c)} - $$ - \begin{enumerate} - \item Substituiere $z = ax + by + c$ - \item Es ergibt sich - $$ - y = \frac{z -ax - c}{b} \quad \implies \quad y' = \frac{z' - a}{b} - $$ - bzw. - $$ - z' = a + bf(z) - $$ - \item Lösen mithile von \emph{Trennung der Variablen} (\emph{Tipp:} Dividieren durch rechte Seite) - \item Rücksubstitution in $y = \frac{z -ax - c}{b}$ ergibt die Lösung - \end{enumerate} - \item Differentialgleichung vom Typ - $$ - \boxed{y' = f\left(\frac{x}{y}\right)} - $$ - \begin{enumerate} - \item Substituiere $z = \frac{x}{y}$ - \item Es ergibt sich (Produktregel!) - $$ - y = z \cdot x \quad \implies \quad y' = z + z' \cdot x - $$ - bzw. - $$ - z' = \frac{f(z) - z}{x} \quad \iff \quad z + z' \cdot x = f(z) - $$ - \item Lösen mithile von \emph{Trennung der Variablen} - \item Rücksubstitution in $y = z \cdot x$ ergibt die allgemeine Lösung - \end{enumerate} - \end{itemize} -\end{algo} - -\begin{example}{Substitution} - Lösen Sie die folgende Differentialgleichung mit Hilfe einer geeigneten Substitution ($x \neq 0$): - $$ - y' = \frac{1}{\sin\left(\frac{y}{x}\right)} + \frac{y}{x} - $$ - \exampleseparator - - Sei $u = \frac{y}{x}$ ($\implies u' = \frac{xy' - y}{x^2} \iff y' = u + xu'$). Dann gilt: - - $$ - \begin{aligned} - & y' & & = \frac{1}{\sin\left(\frac{y}{x}\right)} + \frac{y}{x} \\ - \iff \quad & u + xu' & & = \frac{1}{\sin u} + u \\ - \iff \quad & xu' & & = \frac{1}{\sin u} \\ - \iff \quad & \frac{x \d u}{\d x} & & = \frac{1}{\sin u} \\ - \iff \quad & \sin u \d u & & = \frac{1}{x} \d x \\ - \iff \quad & \int \sin u \d u & & = \int \frac{1}{x} \d x \\ - \iff \quad & -\cos (u) + c_2 & & = \ln\abs{x} + c_1 \\ - \iff \quad & \cos (u) & & = -\ln\abs{x} - c_1 + c_2 \\ - \iff \quad & u & & = \arccos(-\ln\abs{x} - c_1 + c_2) \\ - \iff \quad & \frac{y}{x} & & = \arccos(-\ln\abs{x} - c_1 + c_2) \\ - \iff \quad & y & & = x\arccos(c - \ln\abs{x}) \\ - \end{aligned} - $$\qed -\end{example} - -\begin{defi}{Lineare Differentialgleichung} - Die Gleichung - $$ - y' + f(x) \cdot y = 0 - $$ - heißt \emph{linear homogene Differentialgleichung} 1. Ordung. - - Die Gleichung - $$ - y' + f(x) \cdot y = g(x) - $$ - heißt \emph{linear inhomogene Differentialgleichung} 1. Ordung und - $g(x)$ heißt \emph{Störfunktion}. - - Das zugehörige Anfangswertproblem heißt \emph{lineares Anfangswertproblem}. -\end{defi} - -\begin{algo}{Lösen von linearen homogenen Differentialgleichungen 1. Ordnung} - Für eine Gleichung - $$ - \boxed{y' + f(x)\cdot y = 0} - $$ - ist die allgemeine Lösung - $$ - y = ce^{\int -f(x) \d x} - $$ - - $c$ wird dann durch Einsetzen eines Anfangswertes berechnet. -\end{algo} - -\begin{algo}{Variation der Konstanten} - Gegeben: Differentialgleichung der Form - $$ - \boxed{y' + f(x)\cdot y = g(x)} - $$ - \begin{enumerate} - \item Löse homogene Differentialgleichung mit - $$ - y = ce^{\int - f(x) \d x} - $$ - \item Ersetze $c$ durch $c(x)$ - \item Berechne $y'$ - \item Vergleiche $y'$ mit ursprünglicher Störfunktion - \item Bestimme aus der Differentialgleichung die Lösung für $c(x)$ (enthält neue Konstante!) - \item Einsetzen in - $$ - y = c(x) \cdot e^{\int - f(x) \d x} - $$ - ergibt die allgemeine Lösung - \end{enumerate} -\end{algo} - -\begin{example}{Variation der Konstanten} - Berechnen Sie die allgemeine Lösung der Differentialgleichung - $$ - (x-2) \cdot y' = y + 2(x-2)^3 - $$ - \exampleseparator - - Umwandeln in allgemeine Darstellung: - $$ - (x-2) \cdot y' = y + 2(x-2)^3 \quad \iff \quad y' = \frac{y}{x-2} + 2(x-2)^2 \quad \iff \quad y' - \frac{1}{x-2}\cdot y = 2(x-2)^2 - $$ - Lösen der homogenen Gleichung: - $$ - \begin{aligned} - & y'_h - \frac{1}{x-2}\cdot y_h & & = 0 \\ - \iff \quad & y'_h & & = \frac{1}{x-2}\cdot y_h \\ - \iff \quad & \frac{1}{y_h} \d y_h & & = \frac{1}{x-2}\d x \\ - \iff \quad & \int \frac{1}{y_h} \d y_h & & = \int \frac{1}{x-2}\d x \\ - \iff \quad & \ln(y_h) + c_2 & & = \ln (x-2) + c_1 \\ - \iff \quad & (y_h) & & = e^{\ln (x-2) + c_1 - c_2} \\ - \iff \quad & y_h & & = c(x-2) \\ - \end{aligned} - $$ - - Lösen der Störfunktion: - $$ - \begin{aligned} - & y & & = c(x) \cdot (x-2) \\ - \implies \quad & y' & & = c'(x)(x-2) + c(x) - \end{aligned} - $$ - $$ - \begin{aligned} - & y' - \frac{1}{x-2}\cdot y & & = 2(x-2)^2 \\ - \iff \quad & \underbrace{c'(x)(x-2) + c(x)}_{y'} - \frac{1}{x-2}\cdot \underbrace{c(x) \cdot (x-2)}_{y} & & = 2(x-2)^2 \\ - \iff \quad & c'(x)(x-2) & & = 2(x-2)^2 \\ - \iff \quad & c'(x) & & = 2(x-2) \\ - \iff \quad & \int 1 \d c & & = 2\int x\d x - 4\int 1 \d x \\ - \iff \quad & c(x) & & = x^2 - 4x + c_1 - \end{aligned} - $$ - - Damit erhalten wir insgesamt: - $$ - y = (x^2 - 4x + c)(x-2) = c(x-2) + (x-4)(x-2)x - $$\qed -\end{example} - -\begin{defi}{Superpositionsprinzip (inhomogene lineare Differentialgleichungen)} - Die Lösung einer \emph{inhomogenen linearen Differentialgleichung} setzt sich zusammen aus der allgemeinen Lösung der homogenen Differentialgleichung $y_h$ und einer partikulären Lösung der \emph{inhomogenen Differentialgleichung} $y_p$ - $$ - y = y_h + y_p - $$ -\end{defi} - -\begin{algo}{Ansatz vom Typ der rechten Seite} - Man rät eine Lösung, indem man einen Ansatz für $y_p$ vom Typ der Störfunktion $g(x)$ wählt: - - \begin{center} - \begin{tabular}{c | c l} - Störfunktion $g(x)$ & Ansatz für $y_p$ \\ - \hline - $c_0$ & $\lambda_0$ & \rdelim\}{3}{3mm}[polynomiell] \\ - $c_0 + c_1x$ & $\lambda_0 + \lambda_1 x$ \\ - $c_0 + c_1x + \ldots + c_nx^n$ & $\lambda_0 + \lambda_1 x + \ldots + \lambda_nx^n$ \\ - \hline - $c_0e^{ax}$ & $\lambda_0 e^{ax}$ & \rdelim\}{4}{3mm}[exponentiell] \\ - $c_0e^{ax}$ & $\lambda_0 xe^{ax}$ \\ - $c_0e^{ax}$ & $\ldots$ \\ - $c_0e^{ax}$ & $\lambda_0 x^ne^{ax}$ \\ - \hline - $c_0\sin(ax) + c_1\cos(ax)$ & $\lambda_0\sin(ax) + \lambda_1\cos(ax)$ & \rdelim\}{3}{3mm}[trigonometrisch] \\ - $c_0e^{ax}\cdot \sin(bx)$ & $x\cdot (\lambda_1 \sin(bx) + \lambda_2 \cos(bx))$ \\ - $c_0e^{ax}\cdot \cos(bx)$ & $x\cdot (\lambda_1 \sin(bx) + \lambda_2 \cos(bx))$ \\ - \end{tabular} - \end{center} - - \emph{Bemerkungen:} - \begin{itemize} - \item Bei einer Summe von mehreren Funktionstypen sollten entsprechend viele partikuläre Teillösungen berechnet werden. Die Summe dieser Teillösungen entspricht dann insgesamt der partikulären Lösung $y_p$. - \item Existiert für eine Störfunktion $g(x) = cx^ne^{ax}$ ein Term $\mu x^ne^{ax}$ bereits in der homogenen Lösung, wählt man als Ansatz für $y_p = \lambda x^{n+1}e^{ax}$ (siehe Beispiel). - \end{itemize} -\end{algo} - -\begin{example}{Ansatz vom Typ der rechten Seite} - Berechnen Sie die allgemeine Lösung der linearen Differentialgleichung - $$ - y'- y = 9e^x - $$ - \exampleseparator - - Lösen der homogenen Gleichung: - $$ - y_h'- y_h = 0 \implies y_h = ce^{x} - $$ - - Mit der partikulären Lösung ($y_p = c_0xe^{x}$) - $$ - y_p = c_0xe^x \implies y'_p = c_0(e^x + xe^x) - $$ - gilt dann: - $$ - \begin{aligned} - & y'- y & & = 9e^x \\ - \iff \quad & c_0(e^x + xe^x) - c_0xe^x & & = 9e^x \\ - \iff \quad & c_0e^x(1 + x - x) & & = 9e^x \\ - \implies \quad & c_0 & & = 9 - \end{aligned} - $$ - - Und schlussendlich: - $$ - y = y_h + y_p \implies y = ce^x + 9e^xx - $$\qed -\end{example} - -\begin{algo}{Bernoulli-Differentialgleichung} - Gegeben: Differentialgleichung der Form - $$ - \boxed{y' + f(x) \cdot y = g(x)\cdot y^\alpha} - $$ - \begin{enumerate} - \item Substituiere - $$ - z = y^{1-\alpha} \quad \iff \quad y = z^{\frac{1}{1-\alpha}} - $$ - \item Einsetzen in die Differentialgleichung ergibt - $$ - z' + (1-\alpha) \cdot f(x)\cdot z = g(x) \cdot (1-\alpha) - $$ - \item Lösen der linearen Differentialgleichung - \item Rücksubstitution in - $$ - y = z^{\frac{1}{1-\alpha}} - $$ - ergibt die allgemeine Lösung - \end{enumerate} -\end{algo} - -\begin{defi}{Exakte Differentialgleichung} - Eine Differentialgleichung der Form - $$ - p(x, y) + q(x, y) \cdot y' = 0 \quad \iff \quad p(x, y) \d x + q(x, y) \d y = 0 - $$ - mit - $$ - p_x = q_y \ \text{\emph{(Integrabilitätsbedingung)}} - $$ - heißt \emph{exakte Differentialgleichung}. -\end{defi} - -\begin{algo}{Lösen von exakten Differentialgleichungen} - Gegeben: Differentialgleichung der Form - $$ - \boxed{p(x, y) + q(x, y) \cdot y' = 0 \quad \iff \quad p(x, y) \d x + q(x, y) \d y = 0} - $$ - \begin{enumerate} - \item Prüfen der Integrabilitätsbedingung - $$ - p_x = q_y - $$ - \item Stammfunktion berechnen mit - $$ - \underbrace{F(x, y) = \int p \d x}_{(*)} \quad \text{oder} \quad \underbrace{F(x, y) = \int q \d y}_{(**)} - $$ - \subitem Konstante $c$ ersetzen mit $c(y)$ $(*)$ bzw. $c(x)$ $(**)$ - \item Differentiation von $F(x, y)$ nach $y$ $(*)$ bzw. nach $x$ $(**)$ - \item Es ergibt sich - $$ - c(y)' = f(y) \quad \implies c(y) = \int f(y) \d y \quad (*) - $$ - bzw. - $$ - c(x)' = f(x) \quad \implies c(x) = \int f(x) \d x \quad (**) - $$ - \item Einsetzen ergibt die allgemeine Lösung - \end{enumerate} -\end{algo} - -\begin{defi}{Integrierender Faktor (Euler-Multiplikator)} - $\mu(x, y)$ ist genau dann ein \emph{integrierender Faktor} oder \emph{Euler-Multiplikator} für eine Funktion - $$ - p(x, y) + q(x, y) \cdot y' = 0 \quad \iff \quad p(x, y) \d x + q(x, y) \d y = 0 - $$ - wenn die Integrabilitätsbedingung - $$ - \frac{\partial \mu p}{\partial y} = \frac{\partial \mu q}{\partial x} - $$ - erfüllt wird. -\end{defi} - -\begin{algo}{Lösen von Differentialgleichungen mithilfe eines integrierenden Faktors} - Gegeben: Differentialgleichung der Form - $$ - \boxed{p(x, y) + q(x, y) \cdot y' = 0 \quad \iff \quad p(x, y) \d x + q(x, y) \d y = 0} - $$ - bei der die \emph{Integrabilitätsbedingung nicht erfüllt} wird. - - Wir betrachten hier nur integrierende Faktoren, die nur von $x$ bzw. nur von $y$ abhängig sind. - - \begin{enumerate} - \item Integrierender Faktor ist gegeben mit - $$ - \underbrace{\mu(x) = e^{\int m(x) \d x}}_{(*)} \quad \text{oder} \quad \underbrace{\mu(y) = e^{\int m(y) \d y}}_{(**)} - $$ - \subitem $(*)$ Untersuchen, ob $\mu$ nur von $x$ abhängt: - $$ - m(x) = \frac{p_y - q_x}{q} - $$ - \subitem $(**)$ Untersuchen, ob $\mu$ nur von $y$ abhängt: - $$ - m(y) = \frac{q_x - p_y}{p} - $$ - \item $m$ in entsprechende Formel für $\mu$ einsetzen - \item Einsetzen in die Differentialgleichung liefert - $$ - \mu p(x, y) + \mu q(x, y) \cdot y' = 0 \quad \iff \quad \mu p(x, y) \d x + \mu q(x, y) \d y = 0 - $$ - \item Prüfen der Integrabilitätsbedingung - \item Lösen der exakten Differentialgleichung - \end{enumerate} -\end{algo} - -\begin{example}{Lösen von Differentialgleichungen mithilfe eines integrierenden Faktors} - Lösen Sie die Differentialgleichung - $$ - (3xy + 2y^2) + (x^2 + 2xy) y' = 0 - $$ - - \exampleseparator - - Es gilt: - $$ - (3xy + 2y^2) + (x^2 + 2xy) y' = 0 \quad \iff \quad \underbrace{(3xy + 2y^2)}_{p(x, y)}\d x + \underbrace{(x^2 + 2xy)}_{q(x, y)}\d y = 0 - $$ - Integrabilitätsbedingung: - $$ - p_y = 3x + 4y \quad \neq \quad 2x + 2y = q_x \quad \lightning - $$ - - Integrierenden Faktor (Euler-Multiplikator) $\mu(x) = e^{\int m(x) \d x}$ bzw. $\mu(y) = e^{\int m(y) \d y}$ bestimmen: - \begin{itemize} - \item Untersuchung, ob $\mu$ nur von $y$ abhängt: - $$ - m = \frac{q_x - p_y}{p} = \frac{2x + 2y - \left(3x + 4y\right)}{3xy + 2y^2} = \frac{-x - 2y}{3xy + 2y^2} \quad \lightning - $$ - \item Untersuchung, ob $\mu$ nur von $x$ abhängt: - $$ - m = \frac{p_y - q_x}{q} = \frac{3x + 4y - (2x + 2y)}{x^2 + 2xy} = \frac{x + 2y}{x^2 + 2xy} = \frac{x+2y}{x(x+2y)} = \frac{1}{x} \quad \checkmark - $$ - \end{itemize} - - Damit erhalten wir den integrierenden Faktor mit: - $$ - \mu(x) = e^{\int \frac{1}{x} \d x} = cx \qquad (\text{sei} \ c = 1) - $$ - Einsetzen in die DGL: - $$ - \underbrace{\left(3x^2y + 2xy^2\right)}_{p(x, y)}\d x + \underbrace{\left(x^3 + 2x^2y\right)}_{q(x, y)}\d y = 0 - $$ - Integrabilitätsbedingung: - $$ - p_y = 3x^2 + 4xy \quad = \quad 3x^2 + 4xy = q_x \quad \checkmark - $$ - Wir wissen: - $$ - \underbrace{F = \int q \d y = x^3y + x^2y^2 + c(x)}_{F_y = q} \implies \underbrace{3x^2y + 2xy^2 + c'(x) = 3x^2y + 2xy^2}_{F_x = p} \implies c(x) = c - $$ - - Und insgesamt gilt damit: - $$ - F = x^3y + x^2y^2 + c - $$\qed -\end{example} - -\subsection{Lösungsverfahren für Differentialgleichungen zweiter Ordnung} - -\begin{defi}{Charakteristische Gleichung} - Die Gleichung - $$ - \alpha^2 + a\alpha + b = 0 - $$ - heißt die zur Differentialgleichung - $$ - y'' + ay' + b = 0 - $$ - gehörende \emph{charakteristische Gleichung}. -\end{defi} - -\begin{bonus}{Superpositionsprinzip (homogene lineare Differentialgleichungen)} - Sind $y_1(x)$ und $y_2(x)$ Lösungen einer \emph{homogenen linearen Differentialgleichung}, so ist auch jede \emph{Linearkombination} - $$ - \lambda\cdot y_1(x) + \mu\cdot y_2(x) - $$ - eine allgemeine Lösung der Differentialgleichung. -\end{bonus} - -\begin{algo}{Lösen von linearen homogenen Differentialgleichungen 2. Ordnung} - Für eine Gleichung - $$ - \boxed{y'' + ay' + by = 0} - $$ - stelle man die charakteristische Gleichung auf, mit - $$ - \alpha^2 + a\alpha + b = 0 \quad \implies \quad \alpha = -\frac{a}{2} \pm \sqrt{\left(\frac{a}{2}\right)^2 - b} - $$ - - Dann gilt mit $D = \left(\frac{a}{2}\right)^2 - b$ (Diskriminante): - \begin{itemize} - \item $D > 0$: - $$ - y_h = \lambda_1 e^{\alpha_1 x} + \lambda_2 e^{\alpha_2 x} - $$ - \item $D = 0$: - $$ - y_h = (\lambda_1 + \lambda_2x)\cdot e^{\alpha x} - $$ - \item $D < 0$: - $$ - y_h = e^{\Re(\alpha)} \cdot \left( \lambda_1 \cos(\Im(\alpha)) + \lambda_2 \sin(\Im(\alpha)) \right) = e^{-\frac{a}{2}} \cdot \left( \lambda_1 \cos(\sqrt{-D}) + \lambda_2 \sin(\sqrt{-D}) \right) - $$ - \end{itemize} - - \emph{Bemerkung:} - \begin{itemize} - \item $\Re(\alpha)$ ist der Realteil der Nullstelle - \item $\Im(\alpha)$ ist der Imaginärteil der Nullstelle - \end{itemize} -\end{algo} - -\begin{algo}{Lösen von linearen Differentialgleichungssystemen} - Gegeben: Differentialgleichungssystem der Form - \begin{equation} - y' = ay + bz - \end{equation} - \begin{equation} - z' = dy + cz - \end{equation} - - \begin{enumerate} - \item Umstellen von (1) nach $z$ ergibt - $$ - z = \frac{y' - ay}{b} - $$ - \item Differentiation von (1) und anschließendes Einsetzen von $z$ ergibt - $$ - y'' - (a + c) \cdot y' + (ac -bd) \cdot y = 0 - $$ - \item Lösen der homogenen Differentialgleichung mit der charakteristischen Gleichung - $$ - \alpha^2 - (a+c)\alpha + (ac-bd) = 0 - $$ - ergibt dann die allgemeine Lösung für $y$ - \item Einsetzen von $y$ (und $y'$) in - $$ - z = \frac{y' - ay}{b} - $$ - ergibt die allgemeine Lösung für $z$ - \end{enumerate} -\end{algo} - -\begin{example}{Lösen von linearen Differentialgleichungssystemen} - Lösen Sie folgendes Differentialgleichungssystem: - $$ - \begin{aligned} - y' & = y + 2z \\ - z' & = 2y + z - 2e^{x} - \end{aligned} - $$ - - \exampleseparator - - Wir leiten $y'$ ab: - $$ - \begin{aligned} - & y' = y + 2z \quad \iff \quad z = \frac{y'- y}{2} \\ - \iff \quad & y'' - y' - 2z' = 0 - \end{aligned} - $$ - Einsetzen von $z'$: - $$ - y'' - y' - 2z' = 0 \quad \iff \quad y'' - y' - 4y -2z + 4e^{x} = 0 - $$ - Einsetzen von $z$: - $$ - \begin{aligned} - & y'' - y' - 4y -2z + 4e^{x} = 0 \\ - \iff \quad & y'' - 2y' - 3y = -4e^{x} - \end{aligned} - $$ - - Lösung der homogenen Gleichung: - $$ - \begin{aligned} - & y'' - 2y' - 3y = 0 \\ - \implies \quad & \alpha^2 - 2\alpha - 3 = 0 \\ - \implies \quad & \alpha = 1 \pm \sqrt{\left( -1 \right)^2 + 3} \\ - \iff \quad & \alpha = 1 \pm 2 \\ - \implies \quad & y_h = \lambda_1e^{-x} + \lambda_2e^{3x} - \end{aligned} - $$ - - Berechnen der partikulären Lösung: - $$ - y_p = ce^x \quad \implies \quad y'_p = ce^x \quad \implies \quad y''_p = ce^x - $$ - $$ - \begin{aligned} - & y''_p - 2y'_p - 3y_p & & = -4e^{x} \\ - \iff \quad & ce^x - 2ce^x - 3ce^x & & = -4e^{x} \\ - \iff \quad & -4ce^x & & = -4e^{x} \\ - \implies \quad & c = 1 - \end{aligned} - $$ - Dann gilt insgesamt: - $$ - y = y_h + y_p = \lambda_1e^{-x} + \lambda_2e^{3x} + e^x - $$ - und - $$ - z = \frac{y'- y}{2} = \frac{\left( -\lambda_1e^{-x} + 3\lambda_2e^{3x} + e^x \right) - \left( \lambda_1e^{-x} + \lambda_2e^{3x} + e^x \right)}{2} = \lambda_2e^{3x} - \lambda_1e^{-x} - $$\qed -\end{example} - -\printindex -\printindex[Beispiele] - -\end{document} +\documentclass[german]{../spicker} + +\usepackage{amsmath} +\usepackage{polynom} +\usepackage{array} % for \newcolumntype macro +\usepackage{tikz} +\usepackage{pgfplots} +\usepackage{multirow,bigdelim} +\usepgfplotslibrary{fillbetween} + +\title{Analysis 2} +\author{Patrick Gustav Blaneck} +\makeindex[intoc] +\makeindex[intoc, name=Beispiele,title=Beispiele] + +\newcommand{\scalarprod}[1]{\left\langle #1 \right\rangle} +\newcommand{\vektor}[1]{\begin{pmatrix*}[c] #1 \end{pmatrix*}} +\renewcommand{\span}[1]{\operatorname{span}\left(#1\right)} + +\renewcommand{\d}{\,\mathrm{d}} + +\renewcommand{\abs}[1]{\left| #1 \right|} +\newcommand{\cis}[1]{\left( \cos\left( #1 \right) + i \sin\left( #1 \right) \right)} +\newcommand{\sgn}{\text{sgn}} +\newcommand{\diff}{\mathrm{d}} +\newcommand{\dx}{~\mathrm{d}x} +\newcommand{\du}{~\mathrm{d}u} +\newcommand{\dv}{~\mathrm{d}v} +\newcommand{\dw}{~\mathrm{d}w} +\newcommand{\dt}{~\mathrm{d}t} +\newcommand{\dn}{~\mathrm{d}n} +\newcommand{\dudx}{~\frac{\mathrm{d}u}{\mathrm{d}x}} +\newcommand{\dudn}{~\frac{\mathrm{d}u}{\mathrm{d}n}} +\newcommand{\dvdx}{~\frac{\mathrm{d}v}{\mathrm{d}x}} +\newcommand{\dwdx}{~\frac{\mathrm{d}w}{\mathrm{d}x}} +\newcommand{\dtdx}{~\frac{\mathrm{d}t}{\mathrm{d}x}} +\newcommand{\ddx}{\frac{\mathrm{d}}{\mathrm{d}x}} +\newcommand{\dFdx}{\frac{\mathrm{d}F}{\mathrm{d}x}} +\newcommand{\dfdx}{\frac{\mathrm{d}f}{\mathrm{d}x}} +\newcommand{\interval}[1]{\left[ #1 \right]} + +\newcolumntype{L}{>{$}l<{$}} % math-mode version of "l" column type +\newcolumntype{R}{>{$}r<{$}} % math-mode version of "r" column type +\newcolumntype{C}{>{$}c<{$}} % math-mode version of "c" column type +\newcolumntype{P}{>{$}p<{$}} % math-mode version of "l" column type + +\begin{document} +\maketitle +\tableofcontents +\newpage + +%\setcounter{section}{1} + +\section{Funktionen mehrerer Veränderlicher} + +\begin{defi}{Metrik} + Metriken definieren Abstände im $\R^n$. + + Eine Funktion $d$ auf einem Vektorraum $V$ mit + $$ + d : V \times V \to \R, d(\vec{x}, \vec{y}) + $$ + heißt \emph{Metrik}, falls gilt + \begin{itemize} + \item $d(\vec{x}, \vec{y}) = 0 \iff \vec{x} = \vec{y}$ + \item $d(\vec{x}, \vec{y}) \leq d(\vec{x}, \vec{z}) + d(\vec{y}, \vec{z}), \forall \vec{x}, \vec{y}, \vec{z} \in V$ + (Dreiecksungleichung) + \end{itemize} +\end{defi} + +\begin{example}{Metriken} + \begin{itemize} + \item Summen-Metrik: $$\sum_{k=1}^n \abs{x_k - y_k}$$ + \item euklid. Metrik: $$\sqrt{\sum_{k=1}^n \left( x_k - y_k \right)^2}$$ + \item Maximum-Metrik: $$\max_{k \in \interval{1,n}} \abs{x_k - y_k}$$ + \end{itemize} +\end{example} + +\begin{defi}{Metrischer Raum} + Ein Vektorraum und eine Metrik heißen zusammen \emph{metrischer Raum}. +\end{defi} + +\begin{bonus}{Zusammenhang Metrik \& Norm} + Jeder Vektorraum mit einer Metrik $d$ ist normierbar (d.h. dort gibt es eine Norm), falls + $$ + d(a\vec{x}, 0) = \abs{a} d(\vec{x}, 0) \quad \text{und} \quad d(\vec{x}, \vec{y}) = d(\vec{x} -\vec{y}, 0) + $$ + + Eine Norm wird dann definiert gemäß + $$ + \norm{\vec{x}} := d(\vec{x}, 0) + $$ +\end{bonus} + +\subsection{Mengen im $\R^n$} + +\begin{defi}{$\varepsilon$-Umgebung im $\R^n$} + Sei $\norm{\cdot}$ eine Norm im $\R^n$, dann heißt + $$ + U_\varepsilon(\vec{x_0}) := \left\{ \vec{x} \mid \norm{\vec{x} - \vec{x_0}} < \varepsilon \right\} + $$ + die $\varepsilon$-Umgebung von $\vec{x_0}$ bzgl. der Norm $\norm{\cdot}$. + + Sei $D$ eine Menge und $\norm{\cdot}$ eine Norm. + Dann + \begin{itemize} + \item \ldots heißt $\vec{x_0}$ \emph{innerer Punkt} von $D$, falls $\forall \varepsilon > 0 : U_\varepsilon(\vec{x_0}) \in D$. + \item \ldots heißt $D$ \emph{offene Menge}, falls alle Punkte von $D$ innere Punkte sind. + \end{itemize} +\end{defi} + +\begin{defi}{Abgeschlossene Mengen} + Sei $D$ eine Menge und $\norm{\cdot}$ eine Norm. + Dann + \begin{itemize} + \item \ldots heißt $\vec{x_0}$ \emph{Häufungspunkt} von $D$, falls $\forall \varepsilon > 0$ $U_\varepsilon(\vec{x_0})$ einen Punkt $\vec{x} \neq \vec{x_0}$ enthält. + \item \ldots heißt $D$ \emph{abgeschlossene Menge}, falls sie alle Häufungspunkte von $D$ enthält. + \end{itemize} +\end{defi} + +\begin{defi}{Beschränktheit von Mengen} + Eine Menge $D \subset \R^n$ heißt \emph{beschränkt}, falls es ein $M \in \R$ gibt mit + $$ + \norm{\vec{x}} < M \quad \forall\vec{x} \in D + $$ + + Existiert eine solche Schranke nicht, so heißt die Menge \emph{unbeschränkt}. +\end{defi} + +\subsection{Folgen im $\R^n$} + +\begin{defi}{Folge} + Seien $\vec{x_1}, \vec{x_2}, \ldots, \vec{x_m} \in \R^n$, dann heißt $(\vec{x_n})$ \emph{Folge} im $\R^n$. +\end{defi} + +\begin{defi}{Konvergenz} + $(\vec{x_n})$ heißt \emph{konvergent} gegen den \emph{Grenzwert} $\vec{x}$, falls $\forall \varepsilon >0, \exists n_0(\varepsilon)$, so dass $\forall n > n_0(\varepsilon)$ gilt: + $$ + \norm{\vec{x_n} - \vec{x}} < \varepsilon + $$ +\end{defi} + +\begin{defi}{Cauchy-Folge} + $(\vec{x_n})$ heißt \emph{Cauchy-Folge} gegen $\vec{x}$, falls $\forall \varepsilon >0, \exists n_0(\varepsilon)$, so dass $\forall n,m > n_0(\varepsilon)$ gilt: + $$ + \norm{\vec{x_m} - \vec{x_n}} < \varepsilon + $$ + + Jede Cauchy-Folge ist konvergent. +\end{defi} + +\begin{defi}{Beschränktheit von Folgen} + Eine Folge heißt \emph{beschränkt}, wenn die Menge aller Folgenglieder in jeder Komponente beschränkt ist. +\end{defi} + +\begin{defi}{Häufungspunkt} + $\vec{x} \in \R^n$ heißt \emph{Häufungspunkt} von $(\vec{x_n})$, falls $\forall \varepsilon > 0$ unendlich viele $\vec{x_i}$ in der $\varepsilon$-Umgebung von $\vec{x}$ liegen. + + Jede unendliche beschränkte Folge ist genau dann konvergent, wenn sie genau einen Häufungs\- punkt besitzt. +\end{defi} + +\begin{defi}{Bolzano-Weierstrass für Folgen} + Jede unendliche beschränkte Folge besitzt mindestens einen Häufungspunkt. + + Jede unendliche beschränkte Folge besitzt mindestens eine konvergente Teilfolge. +\end{defi} + +\subsection{Differenzierbarkeit im $\R^n$} + +\begin{defi}{Grenzwert im $\R^n$} + Wir bezeichnen mit dem Grenzwert + $$ + g = \lim_{\vec{x} \to \vec{x_n}} f(\vec{x}) + $$ + den \emph{Grenzwert} jeder gegen $\vec{x_0}$ konvergenten Folge $(\vec{x_n})$, falls dieser existiert und damit insbesondere eindeutig ist. +\end{defi} + +\begin{defi}{Stetigkeit} + Sei $U \subset \R^n$ offene Menge, $f : U \to \R, \ \vec{x_0} = \vektor{x_1 & \ldots & x_n}^T \in U$, + $f$ heißt in $\vec{x_0}$ \emph{stetig}, wenn + $$ + \lim_{\vec{x} \to \vec{x_0}} f(\vec{x}) = f(\vec{x_0}) = f\left(\lim_{\vec{x} \to \vec{x_0}} \vec{x}\right), + $$ + wobei $\lim_{\vec{x} \to \vec{x_0}} f(\vec{x_0})$ Grenzwert jeder gegen $\vec{x_0}$ konvergenten Folge $(\vec{x_n})$ ist. + + Formal: + $$ + \lim_{\vec{x} \to \vec{x_0}} f(\vec{x}) := \lim_{n \to \infty} f(\vec{x_n}) + $$ + + $f$ heißt \emph{stetig in U}, wenn die Funktion für jedes $\vec{x_0} = \vektor{x_1 & \ldots & x_n}^T \in U$ stetig ist. + + Stetigkeit bedeutet somit insbesondere Stetigkeit in allen Komponenten. +\end{defi} + +\begin{example}{Stetigkeit} + Lassen sich folgende Funktionen im Nullpunkt stetig ergänzen und, wenn ja, wie? + \begin{enumerate}[a)] + \item $f(x,y) = \frac{xy^2}{x^2 + y^8}$ + \item $f(x,y) = \frac{x^3 + x^2 - y^4 + y^2}{x^2 + y^2}$ + \end{enumerate} + + \exampleseparator + + \begin{enumerate}[a)] + \item + Sei die Kurve $x = y^4$ gegeben. + Dann gilt: + $$ + \lim_{y\to 0} f(y) = \lim_{y\to 0} \frac{y^4y^2}{y^8+y^8} = \lim_{y\to 0} \frac{1}{2y^2} = \infty + $$ + Damit ist $f$ im Nullpunkt nicht stetig.\qed + \item + $f$ ist genau dann \emph{stetig ergänzbar} im Nullpunkt, wenn $\lim_{(x,y) \to (0,0)} f(x,y)$ existiert. + $$ + \begin{aligned} + \lim_{(x,y) \to (0,0)} f(x,y) & = \lim_{(x,y) \to (0,0)} \frac{x^3 + x^2 - y^4 + y^2}{x^2 + y^2} \\ \\ + & = \lim_{r \to 0} \frac{r^3\cos^3(\varphi) + r^2\cos^2(\varphi) - r^4\sin^4(\varphi) + r^2\sin^2(\varphi)}{r^2\cos^2(\varphi) + r^2\sin^2(\varphi)} \\ + & = \lim_{r \to 0} \frac{r\cos^3(\varphi) + \cos^2(\varphi) - r^2\sin^4(\varphi) + \sin^2(\varphi)}{\cos^2(\varphi) + \sin^2(\varphi)} \\ + & = \lim_{r \to 0} r\cos^3(\varphi) + \cos^2(\varphi) - r^2\sin^4(\varphi) + \sin^2(\varphi) \\ + & = 0 + 1 - 0 + 0 = 1 + \end{aligned} + $$ + + Damit ist $f$ im Nullpunkt stetig ergänzbar mit $f(0, 0) = 1$.\qed + \end{enumerate} +\end{example} + +\begin{defi}{Gleichmäßige Stetigkeit} + Eine Funktion $f: D \subset \R^n \to \R$ heißt \emph{gleichmäßig stetig}, wenn es zu jedem $\varepsilon > 0$ ein $\delta = \delta(\varepsilon)$ (unabhängig von $\vec{x_0}$) gibt, so dass + $$ + \abs{f(\vec{x}) - f(\vec{x_0})} < \epsilon, \ \forall \norm{\vec{x} - \vec{x_0}} < \delta + $$ + + Gleichmäßige Stetigkeit ist wegen der Unabhängigkeit von $\vec{x_0}$ insbesondere Stetigkeit im gesamten Definitionsbereich $D$. + + Ist $f$ beschränkt und abgeschlossen, so ist $f$ gleichmäßig stetig. +\end{defi} + +\begin{defi}{Lipschitz-Stetigkeit} + Eine Funktion $f : D \subset \R^n \to \R$ heißt \emph{Lipschitz-stetig}, wenn es eine Konstante $L$ gibt (unabhängig von $\vec{x_0}$), so dass + $$ + \abs{f(\vec{x}) - f(\vec{x_0})} \leq L \norm{\vec{x} - \vec{x_0}} + $$ + + Ist in einer Norm $L < 1$, so heißt die Abbildung \emph{Kontraktion}. + + Ist eine Funktion $f$ Lipschitz-stetige, so ist $f$ auf ihrem Definitionsbereich $D$ gleichmäßig stetig und in jedem Punkt stetig. +\end{defi} + +\begin{bonus}{Nullstelle} + Ein Punkt $\vec{x_0} \in D$ heißt \emph{Nullstelle} einer Funktion $f$, falls $f(\vec{x_0}) = \vec{0}$. +\end{bonus} + +\begin{defi}{Fixpunkt} + Ein Punkt $\vec{x^*}\in D$ heißt \emph{Fixpunkt} einer Funktion $\varphi$, falls $\varphi(\vec{x^*}) = \vec{x^*}$. +\end{defi} + +\begin{defi}{Fixpunktsatz von Banach} + Sei $\varphi : D \subset \R^n \to \R^n$ mit + $$ + \abs{\varphi(\vec{x}) - \varphi(\vec{y})} \leq L \norm{\vec{x} - \vec{y}} \quad \text{und} \quad L < 1, + $$ + dann hat $\varphi$ \emph{genau einen Fixpunkt}. +\end{defi} + +\subsubsection{Partielle Ableitungen} + +\begin{defi}{Partielle Ableitung} + Sei $U \subset \R^n$ offene Menge, $f : U \to \R, \ \vec{x_0} = \vektor{x_1 & \ldots & x_n}^T \in U$, + $f$ heißt in $\vec{x_0}$ \emph{partiell differenzierbar} nach $x_i$, wenn + $$ + \frac{\partial f}{\partial x_i} = \lim_{h \to 0} \frac{f(x_1, \ldots, x_i + h, \ldots, x_n) - f(x_1, \ldots, x_n)}{h} + $$ + existiert. + Der Wert $\frac{\partial f}{\partial x}$ heißt dann die \emph{partielle Ableitung} von $f$ nach $x_i$. + + Eine Funktion heißt \emph{(partiell) differenzierbar}, wenn alle partiellen Ableitungen existieren. +\end{defi} + +\begin{bonus}{Zusammenhang Differenzierbarkeit und Stetigkeit} + $f$ heißt \emph{stetig partiell differenzierbar}, wenn alle partiellen Ableitungen in $\vec{x_i}$ stetige Funktionen (und insbesondere beschränkt) sind. + + Ist $f$ in $U$ partiell differenzierbar und in $\vec{x_0} \in U$ \emph{stetig partiell differenzierbar}, so ist $f$ in $\vec{x_0}$ stetig. +\end{bonus} + +\begin{defi}{Gradient} + Sei $U \subset \R^n$ offene Menge, $F : U \to \R$ partiell differenzierbar, $\vec{x_0} = \vektor{x_1 & \ldots & x_n}^T \in U$, dann heißt + $$ + \nabla f(x_1, \ldots, x_n) = \vektor{\frac{\partial f}{\partial x_1}(x_1, \ldots, x_n) \\ \vdots \\ \frac{\partial f}{\partial x_n}(x_1, \ldots, x_n)} + $$ + der \emph{Gradient von f in} $\vec{x_0}$. +\end{defi} + +\begin{bonus}{Rechenregeln für Gradienten} + Sei $U \subset \R^n$ offene Menge, $f, g : U \to \R$ differenzierbar. + Dann gilt: + $$ + \begin{aligned} + & \nabla (f + g) & & = \nabla (f) + \nabla (g) \\ + & \nabla (\alpha f) & & = \alpha \cdot \nabla (f) \\ + & \nabla (fg) & & = g \cdot \nabla (f) + f \cdot \nabla (g) + \end{aligned} + $$ +\end{bonus} + +\begin{example}{Gradient} + Berechnen Sie den Gradienten für $f(x, y, z) = x^3 + y^2 + z$ an der Stelle $(1, 2, 3)$. + + \exampleseparator + + Zuerst berechnen wie die partiellen Ableitungen $f_x$, $f_y$ und $f_z$: + $$ + \begin{aligned} + f_x & = 3x^2 \\ + f_y & = 2y \\ + f_z & = 1 + \end{aligned} + $$ + + Damit erhalten wir dann den Gradienten $\nabla f$ an der Stelle $(1, 2, 3)$ mit: + $$ + \nabla f(1, 2, 3) = \vektor{f_x(1, 2, 3) \\ f_y(1, 2, 3) \\ f_z(1, 2, 3)} + = \vektor{3 \\ 4 \\ 1} + $$\qed +\end{example} + +\begin{defi}{Tangentialebene im $\R^3$} + Sei $z = f(x, y)$ eine stetig partiell differenzierbare Funktion in zwei Unbekannten und $z_0 = f(x_0, y_0)$ ein fester Punkt. + + Dann ist die Tangentialebene im Punkt $(x_0, y_0, z_0)$ gegeben mit: + $$ + T = \vektor{x_0 \\ y_0 \\ z_0} + \lambda \cdot \vec{v_1} + \mu \cdot \vec{v_2}, + $$ + wobei $\vec{v_1}$ und $\vec{v_2}$ verschiedene Tangentenvektoren sind. +\end{defi} + +\begin{algo}{Tangentialebene im $\R^3$} + Betrachten wir die Tangenten entlang der Koordinatenachsen, so erhalten wir + $$ + T = \vektor{x_0 \\ y_0 \\ z_0} + \lambda \vektor{1 \\ 0 \\ f_x(x_0, y_0)} + \mu \vektor{0 \\ 1 \\ f_y(x_0, y_0)} + $$ + oder äquivalent + $$ + T(x, y) = f(x_0, y_0) + f_x(x_0, y_0) (x-x_0) + f_y(x_0, y_0) (y-y_0) + $$ +\end{algo} + +\begin{bonus}{Tangentialebene im $\R^n$} + Die Tangentialebene im $\R^n$ einer Funktion $f$ in $\vec{x} \in \R^n$ an der Stelle $\vec{x_0} = \vektor{x_1 & \ldots & x_n}^T$ analog definiert durch + $$ + T(\vec{x}) = f(\vec{x_0}) + \nabla f (\vec{x} - \vec{x_0}) + $$ +\end{bonus} + +\begin{example}{Tangentialebene} + Gegeben sei die Funktion + $$ + f(x, y) = (x^2 + y^2 -2)^2 + $$ + Geben Sie die Tangentialebene im Punkt $(x_0, y_0) = (0,2)$ an. + + \exampleseparator + + Zuerst berechnen wie die partiellen Ableitungen $f_x$ und $f_y$: + $$ + \begin{aligned} + f_x & = 4x(x^2 + y^2 -2) \\ + f_y & = 4y(x^2 + y^2 -2) + \end{aligned} + $$ + $$ + z_0 = f(x_0, y_0) = f(0, 2) = 4 + $$ + Damit ergibt sich dann die Tangentialebene von $f$ am Punkt $(0, 2)$ mit: + $$ + \begin{aligned} + E & = \vektor{x_0 \\ y_0 \\ z_0} + \lambda \vektor{1 \\ 0 \\ f_x(x_0, y_0)} + \mu \vektor{0 \\ 1 \\ f_y(x_0, y_0)} \\ + \quad & = \vektor{0 \\ 2 \\ 4} + \lambda \vektor{1 \\ 0 \\ 0} + \mu \vektor{0 \\ 1 \\ 16} \quad \lambda, \mu \in \R + \end{aligned} + $$\qed +\end{example} + +\begin{defi}{Richtungsableitung} + Die Ableitung in Richtung des Vektors $\vec{v} = \vektor{v_1, \ldots, v_n}^T$ mit $\norm{\vec{v}} = 1$ heißt \emph{Richtungsableitung} $D_{\vec{v}}(f)$ von $f$ in Richtung von $\vec{v}$. + Es ist + $$ + \begin{aligned} + \frac{\partial f}{\partial v} := D_{\vec{v}}(f) = & \lim_{h\to 0} \frac{f(\vec{x} + h\vec{v}) - f(\vec{x})}{h} \\ + = & \lim_{h\to 0} \frac{f(x_1 + hv_1, \ldots, x_n + hv_n) - f(x_1, \ldots, x_n)}{h} + \end{aligned} + $$ +\end{defi} + +\begin{algo}{Richtungsableitung} + Sei $\vec{v} \in \R^n$ mit $\norm{\vec{v}} = 1$. Dann ist die Richtungsableitung von $f$ im Punkt $\vec{x_0}$ in Richtung $\vec{v}$ gegeben mit + $$ + \frac{\partial f}{\partial v} = D_{\vec{v}}(f) = \scalarprod{\nabla (f(\vec{x_0})) , \vec{v}} + $$ +\end{algo} + +\begin{example}{Richtungsableitung} + Berechnen Sie die Richtungsableitung der Funktion + $$ + f(x, y) = x^2y - y^3x + 1 + $$ + im Punkt $(x_0, y_0) = (1, 2)$ + in Richtung des Vektors $\vec{w} = \vektor{3 \\ 2}$. + + \exampleseparator + + Die Richtungsableitung von $f$ im Punkt $(x_0, y_0)$ in Richtung $\vec{v}$ ($\norm{\vec{v}} = 1$) ist gegeben mit + $$ + \begin{aligned} + D_{\vec{v}}(f) & = \scalarprod{\nabla f(x_0, y_0), \vec{v}} + \end{aligned} + $$ + + Zuerst berechnen wir die partiellen Ableitungen $f_x$ und $f_y$: + $$ + \begin{aligned} + f_x = 2xy - y^3 & \implies f_x(x_0, y_0) = f_x(1, 2) = -4 \\ + f_y = x^2 - 3y^2x & \implies f_y(x_0, y_0) = f_y(1, 2) = -11 + \end{aligned} + $$ + + Sei nun $\vec{v} = \frac{\vec{w}}{\norm{\vec{w}}}$: + $$ + \vec{v} = \frac{\vec{w}}{\norm{\vec{w}}} = \frac{1}{\sqrt{13}} \vektor{3 \\ 2} + $$ + Damit können wir nun die Richtungsableitung wie folgt bilden: + $$ + D_{\vec{v}}(f) = \scalarprod{\nabla f(x_0, y_0), \vec{v}} = \scalarprod{\vektor{-4 \\ -11}, \frac{1}{\sqrt{13}} \vektor{3 \\ 2}}= -\frac{34}{\sqrt{13}} + $$\qed +\end{example} + +\begin{algo}{Extremster Anstieg} + Insgesamt gilt, falls wir nur die Richtung (ohne Normierung) betrachten: + $$ + \vec{v} = \frac{\nabla f}{\norm{ \nabla f }} \quad \text{ist die Richtung des steilsten Anstiegs von} \ f + $$ + $$ + \vec{v} = -\frac{\nabla f}{\norm{ \nabla f }} \quad \text{ist die Richtung des steilsten Abstiegs von} \ f + $$ +\end{algo} + + +\subsubsection{Das vollständige Differential} + +\begin{defi}{Vollständiges Differential} + Unter dem \emph{vollständigen Differential} der Funktion $z = f(x, y)$ im Punkt $(x_0, y_0)$ versteht man den Ausdruck + $$ + \d z = f_x(x_0, y_0) \d x + f_y(x_0, y_0) \d y + $$ +\end{defi} + +\begin{algo}{Absoluter Fehler} + Es gilt für $z = f(x_1, \ldots, x_n)$ der \emph{absolute Fehler}: + $$ + \Delta z_{\max} \leq \sum_{i=1}^n \abs{f_{x_i}} \cdot \abs{\Delta x_i} + $$ +\end{algo} + +\begin{algo}{Relativer Fehler} + Es gilt für $z = f(x, y) = c \cdot x^a \cdot y^b$ anhand der möglichen relativen Eingabefehler $\frac{\Delta x}{x}$ und $\frac{\Delta y}{y}$ der \emph{relative Fehler}: + $$ + \frac{\Delta z}{z} \leq a \cdot \abs{\frac{\Delta x}{x}} + b \cdot \abs{\frac{\Delta y}{y}} + $$ +\end{algo} + +\begin{example}{Relativer Fehler} + Bei der Berechnung einer Fläche $f(x, y) = 5x^2 \cdot y$ werde ein relativer Messfehler von $10\%$ in $x$ und $3\%$ in $y$ gemacht. + Wie ist der relative Fehler des Ergebnisses? + + \exampleseparator + + $z := f(x, y) = 5x^2 \cdot y \qquad \left( c \cdot x^a \cdot y^b\right)$ + + Es ist der relative Fehler gegeben mit + $$ + \frac{\Delta z}{z} \leq a \cdot \abs{\frac{\Delta x}{x}} + b \cdot \abs{\frac{\Delta y}{y}} = 2 \cdot 10\% + 1\cdot 3\% = 23\% + $$\qed +\end{example} + +\begin{defi}{Kurve} + Seien $x(t)$ und $y(t)$ in $t$ stetige Funktionen. + Die Menge + $$ + \left\{ (x, y) \mid x = x(t), \ y=y(t), \ t\in \R \right\} + $$ + heißt \emph{Kurve}. + Die Darstellung $t\to \R^2$ + $$ + \vec{x}(t) = \vektor{x(t) \\ y(t)} + $$ + heißt \emph{Parameterdarstellung der Kurve}. +\end{defi} + +\begin{defi}{Kettenregel für Funktionen mit einem Parameter} + Sei $z = f(\vec{x}) = f(\vec{x}(t))$ und $\vec{x}(t)$ stetig in jeder Komponente $x_i$. Dann gilt: + $$ + \frac{\d z}{\d t} = \sum_{i=1}^n \frac{\partial z}{\partial x_i} \cdot \frac{\d x_i}{\d t} + $$ +\end{defi} + +\begin{defi}{Kettenregel für Funktionen mit zwei Parametern} + Sei $z = f(\vec{x}) = f(\vec{x}(u,v))$ und $\vec{x}(u,v)$ stetig in jeder Komponente $x_i$. Dann gilt: + $$ + \frac{\partial z}{\partial u} = \sum_{i=1}^n \frac{\partial z}{\partial x_i} \cdot \frac{\partial x_i}{\partial u} + $$ + $$ + \frac{\partial z}{\partial v} = \sum_{i=1}^n \frac{\partial z}{\partial x_i} \cdot \frac{\partial x_i}{\partial v} + $$ +\end{defi} + +\begin{defi}{Implizite Differentiation} + Seien $F(x, f(x)) = F(x, y)$ und $f(x) = y$ differenzierbar. + Gilt $F(x_0, y_0) = 0$, dann wird $y$ \emph{implizit differenziert} mit + $$ + y' = -\frac{F_x(x_0, y_0)}{F_y(x_0, y_0)} + $$ + + Es gilt: + \begin{itemize} + \item Die implizite Differentiation kann insbesondere angewendet werden, wenn sich eine Funktion $F(x, y)=0$ nicht oder nicht einfach nach $y$ umstellen lässt. + \item Die Funktion muss ggf. auf die Form $F(x, y) = 0$ gebracht werden. + \item Es ist immer zu testen, ob der vorgegebene Punkt die Bedingung $F(x_0, y_0) = 0$ erfüllt. + \item Die Rechnung kann an einem beliebigen Punkt $(x_0, y_0)$ durchgeführt werden und somit auch eine Ableitungsfunktion berechnen. + \end{itemize} +\end{defi} + +\subsubsection{Partielle Ableitungen höherer Ordnung} + +\begin{defi}{Satz von Schwarz} + Sind die partiellen Ableitungen $k$-ter Ordnung einer Funktion stetige Funktionen, so darf die Reihenfolge der Differentiation beliebig vertauscht werden. +\end{defi} + +\begin{defi}{Divergenz} + Wir bezeichnen die \emph{Divergenz} einer Funktion $f$ mit + $$ + \operatorname{div} f := \nabla \cdot f = \vektor{\frac{\partial}{\partial x_1} \\ \vdots \\ \frac{\partial}{\partial x_n}} \vektor{f_1(x_1, \ldots, x_n) \\ \vdots \\ f_n(x_1, \ldots, x_n)} = \sum_{i=1}^n \frac{\partial f_i(x_1, \ldots, x_n)}{\partial x_i} + $$ +\end{defi} + +\begin{defi}{Rotation} + Wir bezeichnen die \emph{Rotation} einer Funktion $f$ mit + $$ + \operatorname{rot} f := \nabla \times f = \vektor{\frac{\partial}{\partial x_1} \\ \vdots \\ \frac{\partial}{\partial x_n}} \times \vektor{f_1(x_1, \ldots, x_n) \\ \vdots \\ f_n(x_1, \ldots, x_n)} + $$ +\end{defi} + +\begin{bonus}{Quellen und Senken} + Die Punkte mit $\operatorname{div} f > 0$ heißen \emph{Quellen} des Vektorfeldes, die mit $\operatorname{div} f < 0$ heißen \emph{Senken}. + + Gilt stets $\operatorname{div} f = 0$, so heißt die Funktion \emph{quellenfrei}. + + Gilt $\operatorname{rot} f = 0$, so heißt die Funktion \emph{wirbelfrei}. +\end{bonus} + +\begin{defi}{Jacobi-Matrix} + Die Matrix + $$ + J = \vektor{\frac{\partial f_1}{\partial x_1} & \ldots & \frac{\partial f_1}{\partial x_n} \\ \vdots & \ddots & \vdots \\ \frac{\partial f_n}{\partial x_1} & \ldots & \frac{\partial f_n}{\partial x_n}} + $$ + heißt \emph{Jacobi-Matrix} von $f$. +\end{defi} + +\subsubsection{Taylorentwicklung für $f(x, y)$} + +\begin{defi}{Quadratische Approximation} + Für $f(x, y)$ ist die \emph{quadratische Approximation} gegeben mit + $$ + \begin{aligned} + f(x, y) \quad = \quad & f(x_0, y_0) + f_x(x_0, y_0) (x-x_0) + f_y(x_0, y_0) (y-y_0) \\ + + \quad & \frac{f_{xx}(x_0, y_0) (x-x_0)^2}{2} + f_{xy}(x_0, y_0) (x-x_0) (y-y_0) + \frac{f_{yy}(x_0, y_0) (y-y_0)^2}{2} + \end{aligned} + $$ +\end{defi} + +\subsubsection{Extremwerte ohne Nebenbedingungen} + +\begin{algo}{Lokale Extrema ohne Nebenbedingungen im $\R^2$} + \begin{enumerate} + \item Berechne $f_x(x,y)$ und $f_y(x, y)$ und suche diejenigen Stellen $(x_0, y_0)$ mit + $$ + f_x(x_0, y_0) = f_y(x_0, y_0) = 0 + $$ + Diese Stellen sind die \emph{Kandidaten} für lokale Extrema. + \item Berechne für jeden Kandidaten $(x_0, y_0)$ die Werte $f_{xx}(x_0, y_0)$, $f_{xy}(x_0, y_0)$ und $f_{yy}(x_0, y_0)$ und daraus den Wert + $$ + d := f_{xx}(x_0, y_0) \cdot f_{yy}(x_0, y_0) - \left(f_{xy}(x_0, y_0)\right)^2 + $$ + \item Dann gilt: + \subitem $f_{xx}(x_0, y_0) > 0 \ \land \ d > 0 \implies$ \emph{lokales Minimum} + \subitem $f_{xx}(x_0, y_0) < 0 \ \land \ d > 0 \implies$ \emph{lokales Maximum} + \subitem $d < 0 \implies$ \emph{Sattelpunkt} + \subitem $d = 0 \implies$ höhere Ableitung entscheidet + \end{enumerate} +\end{algo} + +\begin{defi}{Hesse-Matrix im $\R^2$} + Die \emph{Hesse-Matrix} im $\R^2$ ist definiert mit + $$ + H = \vektor{f_{xx}(x_0, y_0) & f_{xy}(x_0, y_0) \\ f_{xy}(x_0, y_0) & f_{yy}(x_0, y_0)} + $$ + + Ist $H$ \emph{positiv definit}, so liegt ein Minimum vor, ist $H$ \emph{negativ definit} ein Maximum und bei \emph{indefinitem} $H$ ein Sattelpunkt. + + Es gilt: + \begin{itemize} + \item $H$ ist positiv definit $\iff f_{xx}(x_0, y_0) > 0 \ \land \det H > 0$ + \item $H$ ist negativ definit $\iff f_{xx}(x_0, y_0) < 0 \ \land \det H > 0$ + \item $H$ indefinit $\iff \det H < 0$ + \end{itemize} +\end{defi} + +\begin{defi}{Hesse-Matrix im $\R^n$} + Die \emph{Hesse-Matrix} im $\R^n$ ist definiert mit + $$ + H = \vektor{\frac{\partial^2 f}{\partial x_1^2} & \ldots & \frac{\partial^2 f}{\partial x_1 \partial x_n} \\ \vdots & \ddots & \vdots \\ \frac{\partial^2 f}{\partial x_n \partial x_1} & \ldots & \frac{\partial^2 f}{\partial x_n^2}} + $$ + + Ist $H$ \emph{positiv definit}, so liegt ein Minimum vor, ist $H$ \emph{negativ definit} ein Maximum und bei \emph{indefinitem} $H$ ein Sattelpunkt. + + Es gilt: + \begin{itemize} + \item $H$ ist positiv definit $\iff$ alle \emph{Unterdeterminanten} (links oben beginnend) sind positiv + \item $H$ ist negativ definit $\iff$ alle \emph{Unterdeterminanten} (links oben beginnend) haben wechselndes Vorzeichen (beginnend mit negativem Vorzeichen) + \item $H$ indefinit $\iff$ sonst + \end{itemize} +\end{defi} + +\begin{example}{Lokale Extrema ohne Nebenbedingungen} + Untersuchen Sie die Funktion + $$ + v(x, y, z) = xy - z^4 -2(x^2 + y^2 -z^2) + $$ auf lokale Extrema und Sattelpunkte. + + \exampleseparator + + $v(x, y, z) = xy - z^4 -2(x^2 + y^2 -z^2) = xy - z^4 -2x^2 -2y^2 + 2z^2$ + + Wir berechnen zuerst die potentiellen Kandidaten. + Für diese muss gelten + $$ + \nabla v(x, y, z) = \vektor{v_x(x, y, z) \\ v_y(x, y, z)\\ v_z(x, y, z)} = \vec{0} + $$ + $$ + \iff \vektor{ y -4x \\ x -4y \\ -4z^3 +4z} = \vektor{0 \\ 0 \\ 0} \iff \vektor{y \\ x \\ -z(z^2 +1)} = \vektor{4x \\ 4y \\ 0} + $$ + Wir haben offensichtlich drei Gleichungen gegeben. + + Wir erkennen aus \Rnum{3} direkt, dass $z \in \{-1, 0, 1\}$ gelten muss und aus \Rnum{2} und \Rnum{1}, dass $x = y = 0$. + + Damit erhalten wir die drei Kandidatentupel: + \begin{itemize} + \item $(x_1, y_1, z_1) = (0, 0, -1)$, + \item $(x_2, y_2, z_2) = (0, 0, 0)$, + \item $(x_3, y_3, z_3) = (0, 0, 1)$. + \end{itemize} + + Wir bilden nun die Hesse-Matrix: + $$ + \begin{aligned} + f_{xx} = -4 \qquad & f_{xy} = 1 & & f_{xz} = 0 \\ + f_{yx} = f_{xy} = 1 \qquad & f_{yy} = -4 & & f_{yz} = 0 \\ + f_{zx} = f_{xz} = 0 \qquad & f_{zy} = f_{yz} = 0 & & f_{zz} = 12z^2 + 4 + \end{aligned} + $$ + + $$ + H = \vektor{f_{xx} & f_{xy} & f_{xz} \\ f_{yx} & f_{yy} & f_{yz} \\ f_{zx} & f_{zy} & f_{zz}} = \vektor{-4 & 1 & 0 \\ 1 & -4 & 0 \\ 0 & 0 & -12z^2 + 4} + $$ + + Es gilt für die Unterdeterminanten: + $$ + \begin{aligned} + \det H_1 & = -4 \\ + \det H_2 & = 15 \\ + \det H & = (-12z^2 + 4) \cdot \det H_2 = (-12z^2 + 4) \cdot 15 = -180z^2 + 60 + \end{aligned} + $$ + + Es gilt weiterhin + $$ + \det H \leq 0 \iff -180z^2 + 60 \leq 0 \iff z^2 \leq \frac{1}{3} + $$ + + Damit ist die Hesse-Matrix für alle $\abs{z} \leq \frac{1}{9}$ indefinit und sonst negativ definit. + + Damit sind die Kandidatentupel $(x_1, y_1, z_1) = (0, 0, -1)$ und $(x_3, y_3, z_3) = (0, 0, 1)$ Maxima und $(x_2, y_2, z_2) = (0, 0, 0)$ ein Sattelpunkt. \qed +\end{example} + +\subsubsection{Extremwerte mit Nebenbedingungen} + +\begin{defi}{Lagrange-Funktion} + Gegeben seien eine Funktion $f(x, y)$ und eine Nebenbedingung $g(x, y) = 0$. + Dann ist die \emph{Lagrange-Funktion} gegeben mit + $$ + L(x, y, \lambda) = f(x, y) + \lambda g(x, y) + $$ + + Es gilt damit: + $$ + L_\lambda = g(x, y) \quad \land \quad g(x, y) = 0 \implies L(x,y,\lambda) = f(x, y) + $$ +\end{defi} + +\begin{algo}{Lokale Extrema mit Nebenbedingung im $\R^2$} + \begin{enumerate} + \item Berechne die Kandidaten wie in freien Optimierungen mit + $$ + \nabla (L) = \vec{0} + $$ + \item Aufstellen der geränderten Hesse-Matrix für die drei Unbekannten mit + $$ + H = \vektor{L_{xx} & L_{xy} & g_x \\ L_{xy} & L_{yy} & g_y \\ g_x & g_y & 0} + $$ + \item Dann gilt: + \subitem $\det H > 0 \implies$ \emph{Maximum} + \subitem $\det H < 0 \implies$ \emph{Minimum} + \subitem $\det H = 0 \implies$ keine Entscheidung möglich + \end{enumerate} +\end{algo} + +\subsubsection{Parametrische Funktionen und Kurvenintegrale} + +\begin{defi}{Tangentenvektor} + Der \emph{Tangentenvektor} einer Kurve $\vec{x}(t)$ ist gegeben mit + $$ + \vec{x'}(t) = \vektor{x_1'(t) \\ \vdots \\ x_n'(t)} + $$ +\end{defi} + +\begin{defi}{Tangente} + Die \emph{Tangente} einer Kurve $\vec{x}(t)$ ist gegeben mit + $$ + T(t) = \vec{x}(t) + \lambda\vec{x'}(t) + $$ +\end{defi} + +\begin{defi}{Arbeitsintegral} + Seien die Kraft $F(\vec{x}(t))$ und ein Zeitintervall $t \in \interval{a,b}$, oder analog Start- und Endpunkte $\vec{A} = \vec{x}a)$ bzw. $\vec{B} = \vec{x}(b)$, gegeben. + + Dann ist die \emph{Arbeit} gegeben mit + $$ + W = \int^b_a F(\vec{x}(t)) \cdot \vec{x'}(t) \d t + $$ +\end{defi} + +\begin{example}{Arbeitsintegral} + Gegeben sei die Kurve $\vec{X}(t) = \vektor{t \\ t^2 \\ t^3}$. + Berechnen Sie die Arbeit im Vektorfeld + $$ + \vec{F}(x, y, z) = \vektor{x+yz \\ y + xz \\ z + xy} + $$ + entlang der Kurve. + + \exampleseparator + + Die Arbeit von Zeitpunkt $t=a$ bis Zeitpunkt $t=b$ ist gegeben mit + $$ + W = \int^b_a \vec{F} (\vec{X}(t)) \cdot \vec{X}'(t) \dt + $$ + Wir berechnen: + $$ + \begin{aligned} + W =\quad & \int^b_a \vec{F} (\vec{X}(t)) \cdot \vec{X}'(t) \dt \\ + =\quad & \int^b_a \vektor{t + t^5 \\ t^2 + t^4 \\ 2t^3} \cdot \vektor{1 \\ 2t \\ 3t^2} \dt \\ + =\quad & \int^b_a \left( t + t^5 + 2t(t^4 + t^2) + 3t^2 \cdot 2t^3\right) \dt \\ + =\quad & \int^b_a \left(9t^5 + 2t^3 + t\right) \dt \\ + =\quad & \left[ \frac{3t^6}{2} + \frac{t^4}{2} + \frac{t^2}{2} \right]^b_a = \frac{3(b^6 - a^6) + b^4 + b^2 - a^4 - a^2}{2} + \end{aligned} + $$\qed +\end{example} + +\begin{defi}{Potentialfunktion} + Sei $f : \R^n \to \R^n$ stetig differenzierbar. + $f$ heißt \emph{Gradientenfeld}, wenn es eine skalare Funktion $V$ gibt, mit + $$ + \nabla (V) = f + $$ + + Die Funktion $V$ heißt dann \emph{Potentialfunktion} von $f$ mit + $$ + V = \int f + $$ + + Es gilt: + \begin{itemize} + \item Im $\R^2$: + $$ + \frac{\partial f_1}{\partial y} = \frac{\partial f_2}{\partial x} + $$ + \item Im $\R^3$: + $$ + \operatorname{rot} f = 0 + $$ + \item Im $\R^n$ für die Jacobimatrix $J$ + $$ + J = J^T + $$ + \end{itemize} +\end{defi} + +\section{Mehrdimensionale Integration} + +\subsection{Doppelintegrale} + +\begin{defi}{Integral im $\R^2$} + Bezeichnet $A$ das Rechteck $\interval{x_0, x_1} \times \interval{y_0, y_1}$, so ist das \emph{Integral} von $f$ über das Gebiet $A$ gegeben mit + $$ + \int^{x_1}_{x_0}\int^{y_1}_{y_0} f(x, y) \d y\d x = \int_A f \d A = \int\int_A f \d A + $$ +\end{defi} + +\begin{algo}{Integration über kartesische krummlinige Bereiche} + Seien eine \emph{obere} und eine \emph{untere Funktion} $f_u(x)$ und $f_v(x)$ gegeben und in der zweiten Dimension das Intervall $\interval{a,b}$, dann gilt für das Integral im entsprechenden Integrationsbereich + $$ + \int_{x = a}^{b}\int_{y = f_u(x)}^{f_o(x)} f(x, y) \d y\d x + $$ +\end{algo} + +\begin{algo}{Flächeninhalt einer Grundfläche eines kartesischen krummlinigen Bereiches} + Der Flächeninhalt $F$ einer Grundfläche $A$ ergibt sich durch Integration mit $f(x, y) = 1$, also + $$ + F = \int_A 1 \d A + $$ +\end{algo} + +\begin{example}{Integration über kartesische krummlinige Bereiche} + Berechnen Sie das Volumen der Funktion $f(x, y) = x+y$ über die Fläche + $$ + A = \{(x, y) \in \R^2 \mid 1 \leq x^2 + 4y^2, x^2 + y^2 \leq 1, x \geq 0, y\geq 0\} + $$ + Skizzieren Sie zunächst die Fläche. + + \exampleseparator + + \begin{center} + \begin{tikzpicture}[scale=1] + \begin{axis}[ + width=15cm, + xmin=-1.5,xmax=1.5, + xtick distance=1, + xlabel = $x$, + ymin=-1.5,ymax=1.5, + ytick distance=1, + ylabel = $y$, + axis equal, + grid=both, + axis lines = middle, + disabledatascaling + ] + %\draw [name path=A] (axis cs:0,-2) arc[start angle=-90, end angle=90, radius={transformdirectionx(2)}]; + %\draw [name path=B] (axis cs:0,-3) arc[start angle=-90, end angle=90, radius={transformdirectionx(3)}]; + + \draw [name path=A1] (axis cs:1,0) arc[start angle=0, end angle=180, radius={transformdirectionx(1)}]; + \draw [name path=A2] (axis cs:-1,0) arc[start angle=180, end angle=360, radius={transformdirectionx(1)}]; + %\draw [name path=B] (axis cs:0,0) circle [x radius=1, y radius=1/4]; + + \draw [name path=B1] (axis cs:1,0) arc(0:180:1 and 1/2); + \draw [name path=B2] (axis cs:-1,0) arc(180:360:1 and 1/2); + + \tikzfillbetween[of=A1 and B1, soft clip={domain=0:1}]{red, opacity=0.75}; + %\tikzfillbetween[of=A2 and B2]{red, opacity=0.5}; + \end{axis} + \end{tikzpicture} + \end{center} + + Wir sehen, dass die Ellipsengleichung die untere und die Kreisgleichung die obere Schranke bilden. + Damit formen wir unser Integrationsgebiet wie folgt um: + $$ + A = \left\{(x, y) \in \R^2 \mid 0 \leq x \leq 1, \frac{\sqrt{1-x^2}}{2} \leq y \leq \sqrt{1-x^2} \right\} + $$ +\end{example} + +\begin{example}{Integration über kartesische krummlinige Bereiche (Fortsetzung)} + Dann können wir wie folgt die Fläche berechnen: + $$ + \begin{aligned} + \int\int_A (x+y) \d x \d y & = \int^1_0\int^{\sqrt{1-x^2}}_{\frac{\sqrt{1-x^2}}{2}} (x+y) \d y \d x \\ + & = \int^1_0 \left[xy + \frac{y^2}{2}\right]^{\sqrt{1-x^2}}_{\frac{\sqrt{1-x^2}}{2}} \d x \\ + & = \int^1_0 \left(x\sqrt{1-x^2} + \frac{1-x^2}{2} - \left( \frac{x\sqrt{1-x^2}}{2} - \frac{1-x^2}{8}\right)\right) \d x \\ + & = \int^1_0 \left(\frac{x\sqrt{1-x^2}}{2} + \frac{3(1-x^2)}{8}\right) \d x \\ + & = \frac{1}{2}\int^1_0 x\sqrt{1-x^2} \d x + \frac{3}{8} \int^1_0 (1-x^2) \d x \\ + & \overset{\footnote{$u = 1-x^2 \implies \frac{\d u}{\d x} = -2x \iff \d x = -\frac{\d u}{2x}$}}{=} -\frac{1}{4}\int^1_{x=0} \sqrt{u} \d u + \frac{3}{8} \int^1_0 (1-x^2) \d x \\ + & = -\frac{1}{4} \left[ \frac{2\sqrt{1-x^2}}{3} \right]^1_{0} + \frac{3}{8} \int^1_0 (1-x^2) \d x \\ + & = \frac{1}{6} + \frac{3}{8} \int^1_0 (1-x^2) \d x \\ + & = \frac{1}{6} + \frac{3}{8} \left[ x-\frac{x^3}{3} \right]^1_0 \\ + & = \frac{1}{6} + \frac{3}{8} \left( 1-\frac{1}{3} \right) \\ + & = \frac{5}{12} \\ + \end{aligned} + $$\qed +\end{example} + +\begin{algo}{Schwerpunkt einer Grundfläche eines homogenen Gebietes} + Der Schwerpunkt mit den Schwerpunktskoordinaten $(x_s, y_s)$ einer Fläche mit homogener Dichte ergibt sich mit der Flächenmaßzahl $F$ aus + $$ + x_s = \frac{1}{F}\int_A x \d A \quad \land \quad y_s = \frac{1}{F}\int_A y \d A + $$ +\end{algo} + +\begin{algo}{Masse einer Grundfläche eines inhomogenen Gebietes} + Wird die spezifische Dichte eines Stoffes in der Koordinate $(x, y)$ gegeben durch $\rho(x, y)$, so lässt sich die Masse einer Fläche $A$ berechnen mit + $$ + M = \int_A \rho(x, y) \d A + $$ +\end{algo} + +\begin{algo}{Integration in Polarkoordinaten} + Bei der Umwandlung der kartesischen Koordinaten $(x, y)$ in \emph{Polarkoordinaten} umwandeln, gilt + $$ + f(x, y) = f(r\cos\phi, r\sin\phi)\quad \land \quad \d y \d x = r \d r \d \phi + $$ + + Und dann insgesamt für die Integration: + $$ + \int_A f(x, y) \d y \d x = \int_A f(r \cos\phi, r\sin\phi)r\d r\d\phi + $$ +\end{algo} + +\begin{algo}{Uneigentliche Integrale mithilfe von Polarkoordinaten} + Der Übergang zu Polarkoordinaten kann bei der Berechnung von uneigentlichen zweidimensionalen Integralen behilflich sein. + Dabei gilt: + $$ + \int_{x=-\infty}^\infty\int_{y=-\infty}^\infty f(x, y) \d y \d x = \int_{\phi = 0}^{2\pi} \int_{r = 0}^\infty f(r\cos\phi, r\sin\phi)r\d r\d\phi + $$ +\end{algo} + +\begin{example}{Uneigentliche Integrale mithilfe von Polarkoordinaten} + Berechnen Sie das folgende Integral + $$ + \int_A x\cdot y \d A + $$ + über dem Integrationsgebiet $A$ gegeben durch die Ungleichungen + $$ + -2 \leq y \leq 2, \quad x \geq 0, \quad x^2 + y^2 \leq 4 + $$ + \begin{enumerate}[a)] + \item in kartesischen Koordinaten, + \item in Polarkoordinaten. + \end{enumerate} + + \exampleseparator + + \begin{enumerate}[a)] + \item + Es gilt: + $$ + \begin{aligned} + \int_A x\cdot y \d A & = \int_{-2}^2 \int^{\sqrt{4-y^2}}_0 x\cdot y \d x \d y \\ + & = \int_{-2}^2 y \left[ \frac{x^2}{2} \right]^{\sqrt{4-y^2}}_0 \d y \\ + & = \int_{-2}^2 \frac{y(4-y^2)}{2} \d y \\ + & = \frac{1}{2}\int_{-2}^2 (4y-y^3) \d y \\ + & = \frac{1}{2}\int_{-2}^2 (4y-y^3) \d y \\ + & = \frac{1}{2}\left[2y^2-\frac{y^4}{4}\right]_{0}^2 \\ + & = 0 + \end{aligned} + $$\qed + \end{enumerate} +\end{example} + + +\begin{example}{Uneigentliche Integrale mithilfe von Polarkoordinaten (Fortsetzung)} + \begin{enumerate}[a)] + \setcounter{enumi}{1} + \item + Es gilt: + $$ + \begin{aligned} + \int_A x\cdot y \d A & = \int^\frac{\pi}{2}_{-\frac{\pi}{2}} \int^2_0 r^3\cos\phi\sin\phi \d r \d \phi \\ + & = \int^\frac{\pi}{2}_{-\frac{\pi}{2}} \cos\phi\sin\phi \int^2_0 r^3 \d r \d \phi \\ + & = \int^\frac{\pi}{2}_{-\frac{\pi}{2}} \cos\phi\sin\phi \left[\frac{r^4}{4}\right]^2_0 \d \phi \\ + & = 4\int^\frac{\pi}{2}_{-\frac{\pi}{2}} \cos\phi\sin\phi \d \phi \\ + & \overset{\footnote{$u = \cos\phi \implies \frac{\d u}{\d \phi} = -\sin\phi \iff \d \phi = -\frac{\d u}{\sin \phi}$}}{=} -4\int^\frac{\pi}{2}_{\phi = -\frac{\pi}{2}} u \d u \\ + & = -4 \left[ \frac{\cos^2\phi}{2} \right]^\frac{\pi}{2}_{-\frac{\pi}{2}} \\ + & = 0 + \end{aligned} + $$\qed + \end{enumerate} +\end{example} +\subsection{Dreifachintegrale} + +\begin{defi}{Dreifachintegral} + Bezeichnet $V$ den Quader $\interval{x_0, x_1} \times \interval{y_0, y_1} \times \interval{z_0, z_1}$, so ist das \emph{Dreifachintegral} von $f$ über das Gebiet $V$ gegeben mit + $$ + \int^{x_1}_{x_0}\int^{y_1}_{y_0}\int^{z_1}_{z_0} f(x, y, z) \d z\d y\d x = \int_A f \d A = \int\int\int_A f \d A + $$ +\end{defi} + +\begin{bonus}{Volumenberechnung im $\R^3$} + Die Berechnung eines Volumen $V$ über den Bereich $V'$ im $\R^3$ geschieht völlig analog zum $\R^2$: + $$ + V = \int_{V'} 1 \d V' + $$ +\end{bonus} + +\begin{bonus}{Schwerpunktberechnung im $\R^3$} + Die Berechnung des Schwerpunktes $(x_s, y_s, z_s)$ mit Volumen $V$ über den Bereich $V'$ im $\R^3$ geschieht völlig analog zum $\R^2$: + $$ + x_s = \frac{1}{V}\int_{V'} x \d V' \quad \land \quad y_s = \frac{1}{V}\int_{V'} y \d V' \quad \land \quad z_s = \frac{1}{V}\int_{V'} z \d V' + $$ +\end{bonus} + +\begin{bonus}{Rechnen mit Kugelkoordinaten} + Der Übergang zu Kugelkoordinaten kann bei der Berechnung von dreidimensionalen Integralen behilflich sein. + Dabei gilt: + $$ + \int\int\int f(x,y,z) \d z\d y\d x = \int\int\int f(r\cos\phi\sin\theta, r\sin\phi\sin\theta, r\cos\theta) \abs{r^2\sin\theta} \d\theta\d\phi\d r + $$ +\end{bonus} + +\section{(*) Wachstums- und Zerfallsprozesse} + +\subsection{Ungebremstes Wachstum} + +\begin{defi}{Diskretes ungebremstes Wachstum} + Gegeben sei ein Wachstum $k$ innerhalb einer (beliebigen) Zeiteinheit $\Delta t_0$, eine Startpopulation $y_0$ und eine Änderungsrate + $$ + \Delta y = k\cdot y + $$ + dann ist die Lösungsfunktion + $$ + \boxed{y_n = y_0\cdot (1+k)^n} + $$ + wobei $y_n = y(n\cdot \Delta t_0)$ den Zustand nach $n$ Zeitschritten der Länge $\Delta t_0$ angibt. +\end{defi} + +\begin{bonus}{Diskretes ungebremstes Wachstum für Zeitteile}s + Gegeben sei ein Wachstum $k$ innerhalb einer (beliebigen) Zeiteinheit $\Delta t_0 = 1$, eine Startpopulation $y_0$ und eine Änderungsrate + $$ + \Delta y = k_{\Delta t_0}\cdot y + $$ + + Betrachten wir nun einen \emph{Zeitteil} $\Delta t$, dann ist das modifizierte Modell + $$ + \Delta y = y_n - y_{n-1} = k_{\Delta t}\cdot y_{n-1}\cdot \Delta t + $$ + mit der Lösung + $$ + \boxed{y_n = y_0\cdot (1 + k_{\Delta t} \cdot \Delta t)^n} + $$ + wobei $y_n = y(n\cdot \Delta t)$ den Zustand nach $n$ Zeitschritten der Länge $\Delta t$ angibt. + + Die Lösung dieses Modells wird auch als \emph{diskrete Evolutionsgleichung des ungebremsten Wachstums} bezeichnet. +\end{bonus} + +\begin{defi}{Kontinuierliches Modell der Evolutionsgleichung} + Zur Lösung der Modellgleichung + $$ + \lim_{\Delta t \to 0} \frac{\Delta y}{\Delta t} = k\cdot y + $$ + mit $y(0) = y_0$ und $k$ (kontinuierliches) Wachstum, so ist die \emph{kontinuierliche} Lösungsfunktion + $$ + \boxed{y(t) = y_o \cdot e^{kt}} + $$ + und wegen $\Delta t \to 0$ ist dies gleichbedeutend zu + $$ + y'(t) = k \cdot y(t) \ \text{mit} \ y(0) = 0 + $$ + + Ein solches Problem heißt \emph{Differentialgleichung mit Anfangswert} oder \emph{Anfangswertproblem}. +\end{defi} + +\subsection{Gebremstes Wachstum - Störung erster Ordnung} + +\begin{defi}{Diskretes Modell des Wachstums mit Störung erster Ordnung} + Gegeben sei ein Wachstum $k$ innerhalb einer (beliebigen) Zeiteinheit $\Delta t_0$, eine Startpopulation $y(0) = y_0$, $\Delta t$ ein Zeitteil, $a$ die \emph{Abnahme pro Zeiteinheit} und eine Änderungsrate + $$ + \Delta y = (k\cdot y - a) \cdot \Delta t + $$ + dann ist die Lösungsfunktion + $$ + \boxed{y_n = \left( y(0) - \frac{a}{k} \right) \cdot \left( 1 + k \cdot \Delta t \right)^n + \frac{a}{k}} + $$ +\end{defi} + +\begin{defi}{Kontinuierliches Modell des Wachstums mit Störung erster Ordnung} + Zur Lösung der Modellgleichung + $$ + \lim_{\Delta t \to 0} \frac{\Delta y}{\Delta t} = k\cdot y - a + $$ + mit $y(0) = y_0$, $k$ (kontinuierliches) Wachstum und $a$ \emph{kontinuierliche Abnahme} pro Zeiteinheit, ist die \emph{kontinuierliche} Lösungsfunktion + $$ + \boxed{y(t) = \left( y(0) - \frac{a}{k} \right) \cdot e^{kt} + \frac{a}{k}} + $$ + und wegen $\Delta t \to 0$ ist dies gleichbedeutend zu + $$ + y'(t) = k \cdot y(t) - a + $$ +\end{defi} + +\begin{defi}{Stationäre Lösung} + Die konstanten Werte, ermittelt durch $\Delta y = 0$, heißen \emph{stationäre Lösungen} $y_s$. + + Für Wachstumsmodelle mit Störung erster Ordnung gilt: + $$ + y_s = \frac{a}{k} + $$ +\end{defi} + +\subsection{Logistisches Wachstum - Störung zweiter Ordnung} + +\begin{defi}{Diskretes Modell des Wachstums mit Störung zweiter Ordnung} + Gegeben sei ein Wachstum $k$ innerhalb einer (beliebigen) Zeiteinheit $\Delta t_0$, eine Startpopulation $y(0) = y_0$, $\Delta t$ ein Zeitteil, $R$ \emph{Oberschranke der verfügbaren Ressourcen} und eine Änderungsrate + $$ + \Delta y = (k\cdot y \cdot (R-y)) \cdot \Delta t + $$ + dann ist die Lösungsfunktion + $$ + \boxed{y_n = \frac{R}{\frac{R-y_0}{y_0} \cdot (1 + R \cdot k \cdot \Delta t)^{-n} + 1}} + $$ +\end{defi} + +\begin{defi}{Kontinuierliches Modell des Wachstums mit Störung zweiter Ordnung} + Zur Lösung der Modellgleichung + $$ + \lim_{\Delta t \to 0} \frac{\Delta y}{\Delta t} = k\cdot y \cdot (R-y) + $$ + mit $y(0) = y_0$, $k$ (kontinuierliches) Wachstum und $R$ \emph{Oberschranke der verfügbaren Ressourcen}, ist die \emph{kontinuierliche} Lösungsfunktion + $$ + \boxed{y(t) = \frac{R}{\frac{R-y_0}{y_0} \cdot e^{-Rkt} + 1}} + $$ + und wegen $\Delta t \to 0$ ist dies gleichbedeutend zu + $$ + y'(t) = k \cdot y(t) \cdot (R-y(t)) + $$ +\end{defi} + +\section{Gewöhnliche Differentialgleichungen} + +\begin{defi}{Gewöhnliche Differentialgleichung $n$-ter Ordnung} + Eine Gleichung der Form + $$ + y^{(n)} = f(x, y, y', y'', \ldots, y^{(n-1)}) + $$ + heißt \emph{(explizite) gewöhnliche Differentialgleichung n-ter Ordnung}. + + Ist die Gleichung in der Form + $$ + f(x, y, y', y'', \ldots, y^{(n)}) = 0 + $$ + gegeben, so heißt die Differentialgleichung \emph{implizit}. + + Erfüllt $y(x)$ die Differentialgleichung, so heißt $y$ \emph{allgemeine Lösung der Differentialgleichung}. +\end{defi} + +\begin{defi}{Anfangswertproblem} + Die Vorgabe einer expliziten Differentialgleichung und der Werte + $$ + x_0, \quad y(x_0) = y_0, \quad y'(x_0) = y_1, \quad \ldots, \quad y^{(n-1)}(x_0) = y_{n-1} + $$ + heißt \emph{Anfangswertproblem}. + + Erfüllt $y(x)$ das Anfangswertproblem, so heißt $y$ \emph{spezielle Lösung des Anfangswertproblems}. +\end{defi} + +\subsection{Lösungsverfahren für Differentialgleichungen erster Ordnung} + +\begin{algo}{Trennung der Variablen} + Gegeben: Differentialgleichung der Form + $$ + \boxed{y' = f(x) \cdot g(y)} \quad \iff \quad \frac{\d y}{\d x} = f(x) \cdot g(y) + $$ + \begin{enumerate} + \item $x$ und $y$ wie folgt trennen: + $$ + \frac{1}{g(y)} \d y = f(x) \d x + $$ + \item Integration liefert: + $$ + \int \frac{1}{g(y)} \d y = \int f(x) \d x + $$ + \item Umstellen nach $y$ liefert die Lösung der Differentialgleichung + \end{enumerate} +\end{algo} + +\begin{example}{Trennung der Variablen} + Berechnen Sie die allgemeine Lösung der Differentialgleichung + $$ + y' + (1+x)\cdot y = 0\quad \iff \quad y' = -y\cdot (1+x) + $$ + \exampleseparator + + $$ + \begin{aligned} + & \frac{\d y}{\d x} & & = -y \cdot (1+x) \\ + \iff \quad & -\frac{1}{y} \d y & & = (1+x) \d x \\ + \iff \quad & \int -\frac{1}{y} \d y & & = \int (1+x) \d \\ + \iff \quad & - \ln\abs{y} - c_2 & & = x + \frac{x^2}{2} + c_1 \\ + \iff \quad & y & & = e^{-(c_1 + c_2)}e^{-\frac{x}{2}(x+2)} \\ + \iff \quad & y & & = ce^{-\frac{x}{2}(x+2)} \\ + \end{aligned} + $$\qed +\end{example} + +\begin{algo}{Substitution} + \begin{itemize} + \item Differentialgleichung vom Typ + $$ + \boxed{y' = f(ax + by + c)} + $$ + \begin{enumerate} + \item Substituiere $z = ax + by + c$ + \item Es ergibt sich + $$ + y = \frac{z -ax - c}{b} \quad \implies \quad y' = \frac{z' - a}{b} + $$ + bzw. + $$ + z' = a + bf(z) + $$ + \item Lösen mithile von \emph{Trennung der Variablen} (\emph{Tipp:} Dividieren durch rechte Seite) + \item Rücksubstitution in $y = \frac{z -ax - c}{b}$ ergibt die Lösung + \end{enumerate} + \item Differentialgleichung vom Typ + $$ + \boxed{y' = f\left(\frac{y}{x}\right)} + $$ + \begin{enumerate} + \item Substituiere $z = \frac{y}{x}$ + \item Es ergibt sich (Produktregel!) + $$ + y = z \cdot x \quad \implies \quad y' = z + z' \cdot x + $$ + bzw. + $$ + z' = \frac{f(z) - z}{x} \quad \iff \quad z + z' \cdot x = f(z) + $$ + \item Lösen mithile von \emph{Trennung der Variablen} + \item Rücksubstitution in $y = z \cdot x$ ergibt die allgemeine Lösung + \end{enumerate} + \end{itemize} +\end{algo} + +\begin{example}{Substitution} + Lösen Sie die folgende Differentialgleichung mit Hilfe einer geeigneten Substitution ($x \neq 0$): + $$ + y' = \frac{1}{\sin\left(\frac{y}{x}\right)} + \frac{y}{x} + $$ + \exampleseparator + + Sei $u = \frac{y}{x}$ ($\implies u' = \frac{xy' - y}{x^2} \iff y' = u + xu'$). Dann gilt: + + $$ + \begin{aligned} + & y' & & = \frac{1}{\sin\left(\frac{y}{x}\right)} + \frac{y}{x} \\ + \iff \quad & u + xu' & & = \frac{1}{\sin u} + u \\ + \iff \quad & xu' & & = \frac{1}{\sin u} \\ + \iff \quad & \frac{x \d u}{\d x} & & = \frac{1}{\sin u} \\ + \iff \quad & \sin u \d u & & = \frac{1}{x} \d x \\ + \iff \quad & \int \sin u \d u & & = \int \frac{1}{x} \d x \\ + \iff \quad & -\cos (u) + c_2 & & = \ln\abs{x} + c_1 \\ + \iff \quad & \cos (u) & & = -\ln\abs{x} - c_1 + c_2 \\ + \iff \quad & u & & = \arccos(-\ln\abs{x} - c_1 + c_2) \\ + \iff \quad & \frac{y}{x} & & = \arccos(-\ln\abs{x} - c_1 + c_2) \\ + \iff \quad & y & & = x\arccos(c - \ln\abs{x}) \\ + \end{aligned} + $$\qed +\end{example} + +\begin{defi}{Lineare Differentialgleichung} + Die Gleichung + $$ + y' + f(x) \cdot y = 0 + $$ + heißt \emph{linear homogene Differentialgleichung} 1. Ordung. + + Die Gleichung + $$ + y' + f(x) \cdot y = g(x) + $$ + heißt \emph{linear inhomogene Differentialgleichung} 1. Ordung und + $g(x)$ heißt \emph{Störfunktion}. + + Das zugehörige Anfangswertproblem heißt \emph{lineares Anfangswertproblem}. +\end{defi} + +\begin{algo}{Lösen von linearen homogenen Differentialgleichungen 1. Ordnung} + Für eine Gleichung + $$ + \boxed{y' + f(x)\cdot y = 0} + $$ + ist die allgemeine Lösung + $$ + y = ce^{\int -f(x) \d x} + $$ + + $c$ wird dann durch Einsetzen eines Anfangswertes berechnet. +\end{algo} + +\begin{algo}{Variation der Konstanten} + Gegeben: Differentialgleichung der Form + $$ + \boxed{y' + f(x)\cdot y = g(x)} + $$ + \begin{enumerate} + \item Löse homogene Differentialgleichung mit + $$ + y = ce^{\int - f(x) \d x} + $$ + \item Ersetze $c$ durch $c(x)$ + \item Berechne $y'$ + \item Vergleiche $y'$ mit ursprünglicher Störfunktion + \item Bestimme aus der Differentialgleichung die Lösung für $c(x)$ (enthält neue Konstante!) + \item Einsetzen in + $$ + y = c(x) \cdot e^{\int - f(x) \d x} + $$ + ergibt die allgemeine Lösung + \end{enumerate} +\end{algo} + +\begin{example}{Variation der Konstanten} + Berechnen Sie die allgemeine Lösung der Differentialgleichung + $$ + (x-2) \cdot y' = y + 2(x-2)^3 + $$ + \exampleseparator + + Umwandeln in allgemeine Darstellung: + $$ + (x-2) \cdot y' = y + 2(x-2)^3 \quad \iff \quad y' = \frac{y}{x-2} + 2(x-2)^2 \quad \iff \quad y' - \frac{1}{x-2}\cdot y = 2(x-2)^2 + $$ + Lösen der homogenen Gleichung: + $$ + \begin{aligned} + & y'_h - \frac{1}{x-2}\cdot y_h & & = 0 \\ + \iff \quad & y'_h & & = \frac{1}{x-2}\cdot y_h \\ + \iff \quad & \frac{1}{y_h} \d y_h & & = \frac{1}{x-2}\d x \\ + \iff \quad & \int \frac{1}{y_h} \d y_h & & = \int \frac{1}{x-2}\d x \\ + \iff \quad & \ln(y_h) + c_2 & & = \ln (x-2) + c_1 \\ + \iff \quad & (y_h) & & = e^{\ln (x-2) + c_1 - c_2} \\ + \iff \quad & y_h & & = c(x-2) \\ + \end{aligned} + $$ + + Lösen der Störfunktion: + $$ + \begin{aligned} + & y & & = c(x) \cdot (x-2) \\ + \implies \quad & y' & & = c'(x)(x-2) + c(x) + \end{aligned} + $$ + $$ + \begin{aligned} + & y' - \frac{1}{x-2}\cdot y & & = 2(x-2)^2 \\ + \iff \quad & \underbrace{c'(x)(x-2) + c(x)}_{y'} - \frac{1}{x-2}\cdot \underbrace{c(x) \cdot (x-2)}_{y} & & = 2(x-2)^2 \\ + \iff \quad & c'(x)(x-2) & & = 2(x-2)^2 \\ + \iff \quad & c'(x) & & = 2(x-2) \\ + \iff \quad & \int 1 \d c & & = 2\int x\d x - 4\int 1 \d x \\ + \iff \quad & c(x) & & = x^2 - 4x + c_1 + \end{aligned} + $$ + + Damit erhalten wir insgesamt: + $$ + y = (x^2 - 4x + c)(x-2) = c(x-2) + (x-4)(x-2)x + $$\qed +\end{example} + +\begin{defi}{Superpositionsprinzip (inhomogene lineare Differentialgleichungen)} + Die Lösung einer \emph{inhomogenen linearen Differentialgleichung} setzt sich zusammen aus der allgemeinen Lösung der homogenen Differentialgleichung $y_h$ und einer partikulären Lösung der \emph{inhomogenen Differentialgleichung} $y_p$ + $$ + y = y_h + y_p + $$ +\end{defi} + +\begin{algo}{Ansatz vom Typ der rechten Seite} + Man rät eine Lösung, indem man einen Ansatz für $y_p$ vom Typ der Störfunktion $g(x)$ wählt: + + \begin{center} + \begin{tabular}{c | c l} + Störfunktion $g(x)$ & Ansatz für $y_p$ \\ + \hline + $c_0$ & $\lambda_0$ & \rdelim\}{3}{3mm}[polynomiell] \\ + $c_0 + c_1x$ & $\lambda_0 + \lambda_1 x$ \\ + $c_0 + c_1x + \ldots + c_nx^n$ & $\lambda_0 + \lambda_1 x + \ldots + \lambda_nx^n$ \\ + \hline + $c_0e^{ax}$ & $\lambda_0 e^{ax}$ & \rdelim\}{4}{3mm}[exponentiell] \\ + $c_0e^{ax}$ & $\lambda_0 xe^{ax}$ \\ + $c_0e^{ax}$ & $\ldots$ \\ + $c_0e^{ax}$ & $\lambda_0 x^ne^{ax}$ \\ + \hline + $c_0\sin(ax) + c_1\cos(ax)$ & $\lambda_0\sin(ax) + \lambda_1\cos(ax)$ & \rdelim\}{3}{3mm}[trigonometrisch] \\ + $c_0e^{ax}\cdot \sin(bx)$ & $x\cdot (\lambda_1 \sin(bx) + \lambda_2 \cos(bx))$ \\ + $c_0e^{ax}\cdot \cos(bx)$ & $x\cdot (\lambda_1 \sin(bx) + \lambda_2 \cos(bx))$ \\ + \end{tabular} + \end{center} + + \emph{Bemerkungen:} + \begin{itemize} + \item Bei einer Summe von mehreren Funktionstypen sollten entsprechend viele partikuläre Teillösungen berechnet werden. Die Summe dieser Teillösungen entspricht dann insgesamt der partikulären Lösung $y_p$. + \item Existiert für eine Störfunktion $g(x) = cx^ne^{ax}$ ein Term $\mu x^ne^{ax}$ bereits in der homogenen Lösung, wählt man als Ansatz für $y_p = \lambda x^{n+1}e^{ax}$ (siehe Beispiel). + \end{itemize} +\end{algo} + +\begin{example}{Ansatz vom Typ der rechten Seite} + Berechnen Sie die allgemeine Lösung der linearen Differentialgleichung + $$ + y'- y = 9e^x + $$ + \exampleseparator + + Lösen der homogenen Gleichung: + $$ + y_h'- y_h = 0 \implies y_h = ce^{x} + $$ + + Mit der partikulären Lösung ($y_p = c_0xe^{x}$) + $$ + y_p = c_0xe^x \implies y'_p = c_0(e^x + xe^x) + $$ + gilt dann: + $$ + \begin{aligned} + & y'- y & & = 9e^x \\ + \iff \quad & c_0(e^x + xe^x) - c_0xe^x & & = 9e^x \\ + \iff \quad & c_0e^x(1 + x - x) & & = 9e^x \\ + \implies \quad & c_0 & & = 9 + \end{aligned} + $$ + + Und schlussendlich: + $$ + y = y_h + y_p \implies y = ce^x + 9e^xx + $$\qed +\end{example} + +\begin{algo}{Bernoulli-Differentialgleichung} + Gegeben: Differentialgleichung der Form + $$ + \boxed{y' + f(x) \cdot y = g(x)\cdot y^\alpha} + $$ + \begin{enumerate} + \item Substituiere + $$ + z = y^{1-\alpha} \quad \iff \quad y = z^{\frac{1}{1-\alpha}} + $$ + \item Einsetzen in die Differentialgleichung ergibt + $$ + z' + (1-\alpha) \cdot f(x)\cdot z = g(x) \cdot (1-\alpha) + $$ + \item Lösen der linearen Differentialgleichung + \item Rücksubstitution in + $$ + y = z^{\frac{1}{1-\alpha}} + $$ + ergibt die allgemeine Lösung + \end{enumerate} +\end{algo} + +\begin{defi}{Exakte Differentialgleichung} + Eine Differentialgleichung der Form + $$ + p(x, y) + q(x, y) \cdot y' = 0 \quad \iff \quad p(x, y) \d x + q(x, y) \d y = 0 + $$ + mit + $$ + p_y = q_x \ \text{\emph{(Integrabilitätsbedingung)}} + $$ + heißt \emph{exakte Differentialgleichung}. +\end{defi} + +\begin{algo}{Lösen von exakten Differentialgleichungen} + Gegeben: Differentialgleichung der Form + $$ + \boxed{p(x, y) + q(x, y) \cdot y' = 0 \quad \iff \quad p(x, y) \d x + q(x, y) \d y = 0} + $$ + \begin{enumerate} + \item Prüfen der Integrabilitätsbedingung + $$ + p_x = q_y + $$ + \item Stammfunktion berechnen mit + $$ + \underbrace{F(x, y) = \int p \d x}_{(*)} \quad \text{oder} \quad \underbrace{F(x, y) = \int q \d y}_{(**)} + $$ + \subitem Konstante $c$ ersetzen mit $c(y)$ $(*)$ bzw. $c(x)$ $(**)$ + \item Differentiation von $F(x, y)$ nach $y$ $(*)$ bzw. nach $x$ $(**)$ + \item Es ergibt sich + $$ + c(y)' = f(y) \quad \implies c(y) = \int f(y) \d y \quad (*) + $$ + bzw. + $$ + c(x)' = f(x) \quad \implies c(x) = \int f(x) \d x \quad (**) + $$ + \item Einsetzen ergibt die allgemeine Lösung + \end{enumerate} +\end{algo} + +\begin{defi}{Integrierender Faktor (Euler-Multiplikator)} + $\mu(x, y)$ ist genau dann ein \emph{integrierender Faktor} oder \emph{Euler-Multiplikator} für eine Funktion + $$ + p(x, y) + q(x, y) \cdot y' = 0 \quad \iff \quad p(x, y) \d x + q(x, y) \d y = 0 + $$ + wenn die Integrabilitätsbedingung + $$ + \frac{\partial \mu p}{\partial y} = \frac{\partial \mu q}{\partial x} + $$ + erfüllt wird. +\end{defi} + +\begin{algo}{Lösen von Differentialgleichungen mithilfe eines integrierenden Faktors} + Gegeben: Differentialgleichung der Form + $$ + \boxed{p(x, y) + q(x, y) \cdot y' = 0 \quad \iff \quad p(x, y) \d x + q(x, y) \d y = 0} + $$ + bei der die \emph{Integrabilitätsbedingung nicht erfüllt} wird. + + Wir betrachten hier nur integrierende Faktoren, die nur von $x$ bzw. nur von $y$ abhängig sind. + + \begin{enumerate} + \item Integrierender Faktor ist gegeben mit + $$ + \underbrace{\mu(x) = e^{\int m(x) \d x}}_{(*)} \quad \text{oder} \quad \underbrace{\mu(y) = e^{\int m(y) \d y}}_{(**)} + $$ + \subitem $(*)$ Untersuchen, ob $\mu$ nur von $x$ abhängt: + $$ + m(x) = \frac{p_y - q_x}{q} + $$ + \subitem $(**)$ Untersuchen, ob $\mu$ nur von $y$ abhängt: + $$ + m(y) = \frac{q_x - p_y}{p} + $$ + \item $m$ in entsprechende Formel für $\mu$ einsetzen + \item Einsetzen in die Differentialgleichung liefert + $$ + \mu p(x, y) + \mu q(x, y) \cdot y' = 0 \quad \iff \quad \mu p(x, y) \d x + \mu q(x, y) \d y = 0 + $$ + \item Prüfen der Integrabilitätsbedingung + \item Lösen der exakten Differentialgleichung + \end{enumerate} +\end{algo} + +\begin{example}{Lösen von Differentialgleichungen mithilfe eines integrierenden Faktors} + Lösen Sie die Differentialgleichung + $$ + (3xy + 2y^2) + (x^2 + 2xy) y' = 0 + $$ + + \exampleseparator + + Es gilt: + $$ + (3xy + 2y^2) + (x^2 + 2xy) y' = 0 \quad \iff \quad \underbrace{(3xy + 2y^2)}_{p(x, y)}\d x + \underbrace{(x^2 + 2xy)}_{q(x, y)}\d y = 0 + $$ + Integrabilitätsbedingung: + $$ + p_y = 3x + 4y \quad \neq \quad 2x + 2y = q_x \quad \lightning + $$ + + Integrierenden Faktor (Euler-Multiplikator) $\mu(x) = e^{\int m(x) \d x}$ bzw. $\mu(y) = e^{\int m(y) \d y}$ bestimmen: + \begin{itemize} + \item Untersuchung, ob $\mu$ nur von $y$ abhängt: + $$ + m = \frac{q_x - p_y}{p} = \frac{2x + 2y - \left(3x + 4y\right)}{3xy + 2y^2} = \frac{-x - 2y}{3xy + 2y^2} \quad \lightning + $$ + \item Untersuchung, ob $\mu$ nur von $x$ abhängt: + $$ + m = \frac{p_y - q_x}{q} = \frac{3x + 4y - (2x + 2y)}{x^2 + 2xy} = \frac{x + 2y}{x^2 + 2xy} = \frac{x+2y}{x(x+2y)} = \frac{1}{x} \quad \checkmark + $$ + \end{itemize} + + Damit erhalten wir den integrierenden Faktor mit: + $$ + \mu(x) = e^{\int \frac{1}{x} \d x} = cx \qquad (\text{sei} \ c = 1) + $$ + Einsetzen in die DGL: + $$ + \underbrace{\left(3x^2y + 2xy^2\right)}_{p(x, y)}\d x + \underbrace{\left(x^3 + 2x^2y\right)}_{q(x, y)}\d y = 0 + $$ + Integrabilitätsbedingung: + $$ + p_y = 3x^2 + 4xy \quad = \quad 3x^2 + 4xy = q_x \quad \checkmark + $$ + Wir wissen: + $$ + \underbrace{F = \int q \d y = x^3y + x^2y^2 + c(x)}_{F_y = q} \implies \underbrace{3x^2y + 2xy^2 + c'(x) = 3x^2y + 2xy^2}_{F_x = p} \implies c(x) = c + $$ + + Und insgesamt gilt damit: + $$ + F = x^3y + x^2y^2 + c + $$\qed +\end{example} + +\subsection{Lösungsverfahren für Differentialgleichungen zweiter Ordnung} + +\begin{defi}{Charakteristische Gleichung} + Die Gleichung + $$ + \alpha^2 + a\alpha + b = 0 + $$ + heißt die zur Differentialgleichung + $$ + y'' + ay' + b = 0 + $$ + gehörende \emph{charakteristische Gleichung}. +\end{defi} + +\begin{bonus}{Superpositionsprinzip (homogene lineare Differentialgleichungen)} + Sind $y_1(x)$ und $y_2(x)$ Lösungen einer \emph{homogenen linearen Differentialgleichung}, so ist auch jede \emph{Linearkombination} + $$ + \lambda\cdot y_1(x) + \mu\cdot y_2(x) + $$ + eine allgemeine Lösung der Differentialgleichung. +\end{bonus} + +\begin{algo}{Lösen von linearen homogenen Differentialgleichungen 2. Ordnung} + Für eine Gleichung + $$ + \boxed{y'' + ay' + by = 0} + $$ + stelle man die charakteristische Gleichung auf, mit + $$ + \alpha^2 + a\alpha + b = 0 \quad \implies \quad \alpha = -\frac{a}{2} \pm \sqrt{\left(\frac{a}{2}\right)^2 - b} + $$ + + Dann gilt mit $D = \left(\frac{a}{2}\right)^2 - b$ (Diskriminante): + \begin{itemize} + \item $D > 0$: + $$ + y_h = \lambda_1 e^{\alpha_1 x} + \lambda_2 e^{\alpha_2 x} + $$ + \item $D = 0$: + $$ + y_h = (\lambda_1 + \lambda_2x)\cdot e^{\alpha x} + $$ + \item $D < 0$: + $$ + y_h = e^{\Re(\alpha)} \cdot \left( \lambda_1 \cos(\Im(\alpha)) + \lambda_2 \sin(\Im(\alpha)) \right) = e^{-\frac{a}{2}} \cdot \left( \lambda_1 \cos(\sqrt{-D}) + \lambda_2 \sin(\sqrt{-D}) \right) + $$ + \end{itemize} + + \emph{Bemerkung:} + \begin{itemize} + \item $\Re(\alpha)$ ist der Realteil der Nullstelle + \item $\Im(\alpha)$ ist der Imaginärteil der Nullstelle + \end{itemize} +\end{algo} + +\begin{algo}{Lösen von linearen Differentialgleichungssystemen} + Gegeben: Differentialgleichungssystem der Form + \begin{equation} + y' = ay + bz + \end{equation} + \begin{equation} + z' = dy + cz + \end{equation} + + \begin{enumerate} + \item Umstellen von (1) nach $z$ ergibt + $$ + z = \frac{y' - ay}{b} + $$ + \item Differentiation von (1) und anschließendes Einsetzen von $z$ ergibt + $$ + y'' - (a + c) \cdot y' + (ac -bd) \cdot y = 0 + $$ + \item Lösen der homogenen Differentialgleichung mit der charakteristischen Gleichung + $$ + \alpha^2 - (a+c)\alpha + (ac-bd) = 0 + $$ + ergibt dann die allgemeine Lösung für $y$ + \item Einsetzen von $y$ (und $y'$) in + $$ + z = \frac{y' - ay}{b} + $$ + ergibt die allgemeine Lösung für $z$ + \end{enumerate} +\end{algo} + +\begin{example}{Lösen von linearen Differentialgleichungssystemen} + Lösen Sie folgendes Differentialgleichungssystem: + $$ + \begin{aligned} + y' & = y + 2z \\ + z' & = 2y + z - 2e^{x} + \end{aligned} + $$ + + \exampleseparator + + Wir leiten $y'$ ab: + $$ + \begin{aligned} + & y' = y + 2z \quad \iff \quad z = \frac{y'- y}{2} \\ + \iff \quad & y'' - y' - 2z' = 0 + \end{aligned} + $$ + Einsetzen von $z'$: + $$ + y'' - y' - 2z' = 0 \quad \iff \quad y'' - y' - 4y -2z + 4e^{x} = 0 + $$ + Einsetzen von $z$: + $$ + \begin{aligned} + & y'' - y' - 4y -2z + 4e^{x} = 0 \\ + \iff \quad & y'' - 2y' - 3y = -4e^{x} + \end{aligned} + $$ + + Lösung der homogenen Gleichung: + $$ + \begin{aligned} + & y'' - 2y' - 3y = 0 \\ + \implies \quad & \alpha^2 - 2\alpha - 3 = 0 \\ + \implies \quad & \alpha = 1 \pm \sqrt{\left( -1 \right)^2 + 3} \\ + \iff \quad & \alpha = 1 \pm 2 \\ + \implies \quad & y_h = \lambda_1e^{-x} + \lambda_2e^{3x} + \end{aligned} + $$ + + Berechnen der partikulären Lösung: + $$ + y_p = ce^x \quad \implies \quad y'_p = ce^x \quad \implies \quad y''_p = ce^x + $$ + $$ + \begin{aligned} + & y''_p - 2y'_p - 3y_p & & = -4e^{x} \\ + \iff \quad & ce^x - 2ce^x - 3ce^x & & = -4e^{x} \\ + \iff \quad & -4ce^x & & = -4e^{x} \\ + \implies \quad & c = 1 + \end{aligned} + $$ + Dann gilt insgesamt: + $$ + y = y_h + y_p = \lambda_1e^{-x} + \lambda_2e^{3x} + e^x + $$ + und + $$ + z = \frac{y'- y}{2} = \frac{\left( -\lambda_1e^{-x} + 3\lambda_2e^{3x} + e^x \right) - \left( \lambda_1e^{-x} + \lambda_2e^{3x} + e^x \right)}{2} = \lambda_2e^{3x} - \lambda_1e^{-x} + $$\qed +\end{example} + +\printindex +\printindex[Beispiele] + +\end{document} diff --git a/itg/itg.tex b/itg/itg.tex index 6a77b98..9553190 100644 --- a/itg/itg.tex +++ b/itg/itg.tex @@ -1,1544 +1,1544 @@ -\documentclass[german]{../spicker} - -\usepackage{amsmath} - -\usepackage{graphicx} -\usepackage{tabularx, multirow} - -\title{IT-Grundlagen} -\author{Patrick Gustav Blaneck} -\makeindex[intoc] -\makeindex[intoc, name=Beispiele,title=Beispiele] - -\newcommand{\scalarprod}[1]{\left\langle #1 \right\rangle} -\newcommand{\vektor}[1]{\begin{pmatrix*}[r] #1 \end{pmatrix*}} -\renewcommand{\span}[1]{\operatorname{span}\left(#1\right)} -\newcommand{\dx}{~\mathrm{d}x} - -\newenvironment{allintypewriter}{\ttfamily}{\par} -\newcommand*{\ditto}{\texttt{\char`\"}} - -\begin{document} -\maketitle -In dieser Zusammenfassung werden Inhalte aus dem ITG-Skript von Bastian Küppers verwendet. -\tableofcontents -\newpage - -%\setcounter{section}{1} - -\section{Codierung} -\subsection{Stellenwertsysteme} - -\begin{defi}{Stellenwertsystem} - Allgemein lässt sich der Wert einer Zahl in einem Stellenwertsystem zur Basis $B$ wie folgt ausdrücken ($d_i$ ist der Wert der $i$-ten Stelle, $r$ der Exponent der höchtswertigen Stelle): - $$ - n_b = \sum^r_{i=0} B^i \cdot d_i - $$ -\end{defi} - -\begin{algo}{Dezimal $\to$ Binär, Hexadezimal, $\ldots$} - Sei $B = 2$ für Umrechnung ins Binärsystem, bzw. $B =16$ für das Hexadezimalsystem. - - Es gilt für eine umzurechnende Zahl $z$: - - $$ - \begin{aligned} - z : B & = z_0 \quad & & \text{Rest } r_0 \\ - z_0 : B & = z_1 \quad & & \text{Rest } r_1 \\ - z_1 : B & = z_2 \quad & & \text{Rest } r_2 \\ - & \ldots & & \\ - z_{n-2} : B & = z_{n-1} \quad & & \text{Rest } r_{n-1} \\ - z_{n-1} : B & = 0 \quad & & \text{Rest } r_n - \end{aligned} - $$ - - Damit gilt dann: $(z)_{10} = (r_nr_{n-1}\ldots r_2r_1r_0)_B$ (also gelesen von \emph{unten nach oben}).\qed -\end{algo} - -\begin{algo}{Binär $\to$ Hexadezimal} - Sei eine Binärzahl $b$ gegeben mit $n \in 4\N$ Bits. - - Dann kann $b$ wie folgt in eine Hexadezimalzahl $h$ mit $m = \frac{n}{4}$ Zeichen umgeformt werden: - - $$ - \underbrace{b_{n-1}b_{n-2}b_{n-3}b_{n-4}}_{h_{m-1}} ~ \ldots ~ \underbrace{b_7b_6b_5b_4}_{h_1} ~ \underbrace{b_3b_2b_1b_0}_{h_0} - $$ - - Erinnerung: 4 Bits können binär nur 16 mögliche Werte annehmen! -\end{algo} - -\newpage -\subsection{Zahlendarstellungen} - -\begin{defi}{Einerkomplement} - Das \emph{Einerkomplement} einer Binärzahl wird gebildet, indem man alle Bits negiert. - - Das erste Bit gibt dabei das Vorzeichen an. - - Nachteile: Doppelte Darstellung der Null, Subtraktion lässt sich nicht auf Addition mit einer negativen Zahl zurückführen -\end{defi} - -\begin{defi}{Zweierkomplement} - Das \emph{Zweierkomplement} einer Binärzahl wird gebildet, indem man das Einerkomplement bildet und zusätzlich $1$ addiert. - - Das erste Bit gibt dabei das Vorzeichen an. - - Vorteile: Subtraktion entspricht Addition mit einer negativen Zahl, keine doppelte Null -\end{defi} - -\begin{defi}{Binäre Festkommazahlen} - Die Umwandlung des ganzzahligen Anteils einer (dezimalen) Festkommazahl erfolgt analog zu ganzen Zahlen. - - Zusätzlich werden aber die Nachkommastellen mit entsprechend negativen Exponenten weiter \glqq verrechnet\grqq. -\end{defi} - -\begin{defi}{Gleitkommazahlen nach \emph{IEEE 754}} - Die Darstellung einer Gleitkommazahl - $$ - x = s \cdot m \cdot b^e - $$ - besteht aus - \begin{itemize} - \item Vorzeichen $s$ (1 Bit) - \item Mantisse $m$ ($p$ Bits, $p_{\text{float}} = 23$, $p_{\text{double}} = 52$) - \item Basis $b$ (bei normalisierten Gleitkommazahlen nach IEEE ist $b = 2$) - \item Exponent $e$ ($r$ Bits, $r_{\text{float}} = 8$, $r_{\text{double}} = 11$) - \end{itemize} -\end{defi} - -\begin{algo}{Umrechnung in \emph{IEEE 754}} - \begin{itemize} - \item Umwandeln einer Dezimalzahl in eine \emph{binäre Festkommazahl} ohne Vorzeichen. - \item Normalisieren der \emph{Mantisse}:\\ - Das Komma wird $n$ Stellen nach links verschoben, so dass dort nur noch eine 1 als ganzzahliger Anteil vorhanden ist. ($n$ ist bei Verschieben nach rechts negativ!)\\ - $M$ ist dann der \emph{Nachkommateil}. - \item Bestimmen des \emph{Exponenten}: $E = (\text{bias } + n)_2$ (bias ist meist $127$, wenn nicht anders gegeben) - \item Bestimmen des \emph{Vorzeichenbits} $s$ - \item Zusammensetzen der Gleitkommazahl - $$ - s \mid E \mid M - $$ - \end{itemize} -\end{algo} - -\subsection{Zeichendarstellungen} - -\begin{defi}{UTF-8 Codierung} - \begin{tabular}{| c | r | c |} - \hline - Unicode-Bereich & \multicolumn{1}{|c|}{UTF-8-Codierung} & Möglichkeiten \\ - \hline - 0000 0000 - 0000 007F & 0xxx xxxx & 128 (7 Bits) \\ - 0000 0080 - 0000 07FF & 110x xxxx 10xx xxxx & 2.048 (11 Bits) \\ - 0000 0800 - 0000 FFFF & 1110 xxxx 10xx xxxx 10xx xxxx & 65.536 (16 Bits) \\ - 0001 0000 - 0010 FFFF & 1111 0xxx 10xx xxxx 10xx xxxx 10xx xxxx & 2.097.152 (21 Bits) \\ - \hline - \end{tabular} -\end{defi} - -\subsection{Spezielle Codierungen} - -\begin{algo}{Huffman-Codierung} - \begin{enumerate} - \item Schreibe Buchstaben mit Auftrittshäufigkeiten als \glqq Wald\grqq. - \item Fasse die beiden Bäume mit der geringsten Auftrittshäufigkeiten zu einem neuen Baum zusammen, dabei werden die Auftrittshäufigkeiten addiert. - \item Wiederhole, bis nur noch ein Baum existiert. - \item Codierung eines Buchstaben entspricht dann dem \emph{Pfad} zum entsprechenden Blatt mit \glqq links\grqq $\to$ 0, \glqq rechts\grqq $\to$ 1 - \end{enumerate} - - Mittlere Codelänge: - $$ - L(C) = \frac{\#\text{Bits der verschlüsselten Nachricht}}{\#{\text{Zeichen der verschlüsselten Nachricht}}} - $$ -\end{algo} - -\begin{defi}{Hamming-Codierung} - Bei der Hamming-Codierung werden Paritätsinformationen zu Daten hinzugefügt, um so mögliche Übertragungsfehler zu erkennen. - - Hamming-Codewörter haben die Länge $N = 2^k-1$, wobei $k$ Paritätsbits enthalten sind. - Die Bits werden der Einfachheit halber bei Eins beginnend durchnummeriert. - Die Paritätsbits stehen an den Stellen, deren Index eine 2er-Potenz ist. - - Sind $p_1, p_2, \ldots, p_k$ Paritätsbits, $d_1, d_2, \ldots, d_{N-k}$ Bits des Datenwortes und $c_1, c_2, \ldots, c_N$ die Bits des zu bildenden Codewortes, hat ein Codewort des so konstruierten Hamming-Codes die folgende Form: - - \begin{tabular}{| c | c | c || c | c | c | c || c | c | c | c | c | c | c | c || c | c | c |} - \hline - $c_1$ & $c_2$ & $c_3$ & $c_4$ & $c_5$ & $c_6$ & $c_7$ & $c_8$ & $c_9$ & $c_{10}$ & $c_{11}$ & $c_{12}$ & $c_{13}$ & $c_{14}$ & $c_{15}$ & $c_{16}$ & $c_{17}$ & \ldots \\ - \hline - $p_0$ & $p_1$ & $d_1$ & $p_2$ & $d_2$ & $d_3$ & $d_4$ & $p_3$ & $d_5$ & $d_6$ & $d_7$ & $d_8$ & $d_9$ & $d_{10}$ & $d_{11}$ & $p_4$ & $d_{12}$ & \ldots \\ - \hline - \end{tabular}\\ - - Dabei wird jedem Paritätsbit eine spezielle Bitmaske zugewiesen: - - \begin{tabular}{| c || c | c | c || c | c | c | c || c | c | c | c | c | c | c | c || c |} - \hline - & $c_1$ & $c_2$ & $c_3$ & $c_4$ & $c_5$ & $c_6$ & $c_7$ & $c_8$ & $c_9$ & $c_{10}$ & $c_{11}$ & $c_{12}$ & $c_{13}$ & $c_{14}$ & $c_{15}$ & \ldots \\ - \hline - Bitmaske $p_0$ & $p_0$ & $p_1$ & 1 & $p_2$ & 1 & 0 & 1 & $p_3$ & 1 & 0 & 1 & 0 & 1 & 0 & 1 & \ldots \\ - Bitmaske $p_1$ & $p_0$ & $p_1$ & 1 & $p_2$ & 0 & 1 & 1 & $p_3$ & 0 & 1 & 1 & 0 & 0 & 1 & 1 & \ldots \\ - Bitmaske $p_2$ & $p_0$ & $p_1$ & 0 & $p_2$ & 1 & 1 & 1 & $p_3$ & 0 & 0 & 0 & 1 & 1 & 1 & 1 & \ldots \\ - Bitmaske $p_3$ & $p_0$ & $p_1$ & 0 & $p_2$ & 0 & 0 & 0 & $p_3$ & 1 & 1 & 1 & 1 & 1 & 1 & 1 & \ldots \\ - \hline - \end{tabular}\\ - - Damit gilt: - $$ - \begin{aligned} - c_1 = p_0 & = c_3 \oplus c_5 \oplus c_7 \oplus c_9 \oplus c_{11} \oplus c_{13} \oplus c_{15} \oplus \ldots \\ - & \iff \text{jedes ungerade Datenbit} \\ - c_2 = p_1 & = c_3 \oplus c_6 \oplus c_7 \oplus c_{10} \oplus c_{11} \oplus c_{14} \oplus c_{15} \oplus \ldots \\ - & \iff \text{ein Datenbit rechts von $p_1$, zwei überspringen, zwei einberechnen, $\ldots$} \\ - c_4 = p_2 & = c_5 \oplus c_6 \oplus c_7 \oplus c_{12} \oplus c_{13} \oplus c_{14} \oplus c_{15} \oplus \ldots \\ - & \iff \text{drei Datenbit rechts von $p_2$, vier überspringen, vier einberechnen, $\ldots$} - \end{aligned} - $$ -\end{defi} - -\begin{algo}{Fehlererkennung beim Hamming-Code} - Situation: Empfangen eines Hamming-codierten Datensatzes - - \begin{enumerate} - \item Erneutes Berechnen der \emph{Paritätsbits} - \item Erkennen, welche neu berechneten Paritätsbits $p'_i$ \emph{verschieden} sind zu den empfangenen Paritätsbits $p_i$ - \item Bitfehler ist in dem Datenbit passiert, in dem gilt: - \subitem $p_i = p'_i \implies$ Bitmaske für $p_i$ ist $0$ - \subitem $p_i \neq p'_i \implies$ Bitmaske für $p_i$ ist $1$ - \end{enumerate} - - Es wird angenommen, dass nur ein Bitfehler in den Datenbits passiert ist. - - Anmerkung: Ist lediglich ein Paritätsbit verschieden, dann ist ein Übertragungsfehler in dem betreffenden Paritätsbit selbst aufgetreten, da alle Datenbits zur Berechnung von mindestens zwei Paritätsbits verwendet werden. -\end{algo} - -\section{Formale Sprachen} -\subsection{Backus-Naur-Form} - -\begin{defi}{(kontextfreie) Grammatik} - Eine (kontextfreie) Grammatik $G$ ist ein 4-Tupel $\{N, T, \Sigma, P\}$ mit folgenden Eigenschaften: - \begin{itemize} - \item $N$ ist eine endliche Menge von \emph{Nichtterminalsymbolen}, - \item $T$ ist eine endliche Menge von \emph{Terminalsymbolen}, - \item ein \emph{Startsymbol} $\Sigma \in N$, - \item eine endliche Menge an Produktionsregeln $P \subset N \times T^*$. - \end{itemize} - Es gilt $N \cap M = \emptyset$. $^*$ bezeichnet die Kleensche Hülle. - - Anmerkung: Die Notation verhält sich in der Vorlesung sehr anders als in den meisten Quellen. -\end{defi} - -\begin{defi}{Backus-Naur-Form} - In der \emph{Backus-Naur-Form} werden Symbole durch eine Zuweisung definiert.\\ - Diese wird durch den Operator \texttt{:=} dargestellt. - - \begin{itemize} - \item Dabei gilt weiterhin, dass in der Zuweisung eines \emph{Nichtterminalsymbols} mindestens ein weiteres Symbol auftauchen muss und - \item bei der Zuweisung eines \emph{Terminalsymbols} nur Zeichen des Alphabets. - \item Bei einer Zuweisung können mehrere Symbole oder Zeichen(-ketten) des Alphabets verbunden werden. - \item Durch ein Leerzeichen (\glqq ~~~\grqq, \texttt{space}) wird eine \texttt{und}-Verknüpfung definiert, - \item durch einen senkrechten Stricht (\glqq ~$\mid$~\grqq, \texttt{pipe}) wird eine \texttt{oder}-Zuweisung definiert. - \item Zur logischen Gliederung der Verknüpfungen können Klammern verwendet werden. - \item Es ist ebenfalls möglich Kardinalitäten für Symbole zu definieren: - \subitem Geschweifte Klammern \texttt{\{\}} definieren dabei eine \emph{beliebige Wiederholung} und - \subitem eckige Klammern \texttt{[]} definieren ein \emph{einmaliges Auftreten}. - \subitem In beiden Fällen ist das Weglassen des Symbols ebenfalls möglich. - \end{itemize} -\end{defi} - -\begin{example}{Backus-Naur-Form} - \begin{allintypewriter} - \begin{tabular}{rl} - Satz & := Subjekt Verb Präposition Nomen Ende \\ - Subjekt & := Nomen \\ - Nomen & := Artikel Substantiv \\ - Artikel & := \ditto der\ditto | \ditto die\ditto | \ditto das\ditto \\ - Substantiv & := \ditto Mann\ditto | \ditto Frau\ditto | \ditto Haus\ditto \\ - Verb & := \ditto geht\ditto \\ - Präposition & := \ditto in\ditto \\ - Ende & := \ditto .\ditto - \end{tabular} - \end{allintypewriter} -\end{example} - -\subsection{Programmiersprachen} - -\begin{defi}{Compiler} - Das Programm, welches den - menschenlesbaren \emph{Quellcode} anhand der Regeln der zugrundeliegenden Grammatik - interpretiert und in maschinenlesbare Anweisungen überführt, wird \emph{Compiler} genannt. - - Die maschinenlesbaren Anweisungen können dabei entweder direkt in eine - maschinenspezifische Binärfolge umgewandelt werden, oder in einen sogenannten - \emph{Bytecode}. - - Im zweiten Fall kann der Bytecode, - auch Zwischencode genannt, noch an beliebigen Prozessortypen angepasst werden, - muss dafür aber vor der Ausführung erneut bearbeitet werden. - - Bei der Kompilierung eines Programms werden zwei Phasen durchlaufen: - \begin{enumerate} - \item \textbf{Analysephase}, in der der Quellcode analysiert und auf Fehler geprüft wird: - \subitem \underline{\emph{Lexer} (lexikalischer Scanner)}: \\ - Quellcode wird in einzelne Teile (\emph{Tokens}) zerlegt und klassifiziert (z.B. als \emph{Schlüsselwörter} oder \emph{Bezeichner}).\\ - Der Lexer erkennt hier z.B. falsch benannte Variablen. - \subitem \underline{\emph{Parser} (syntaktische Analyse)}: \\ - Vom Lexer erzeugte \emph{Tokens} werden dem \emph{Parser} übergeben. - Der Parser überprüft den Quellcode auf Fehler und setzt ihn bei Fehlerfreiheit in einen \emph{Syntaxbaum} (AST) um.\\ - Hier werden Fehler wie fehlende Semikolons oder falsche genutzte Operatoren erkannt. - \subitem \underline{\emph{Semantische Analyse}}: \\ - Hier wird z.B. kontrolliert, ob eine verwendete Variable auch vorher deklariert wurde, oder ob Quell- und Zieltyp einer Anweisung übereinstimmen. Dabei erzeugte Metadaten werden in den AST integriert. - In diesem Schritt werden generell semantische Fehler erkannt, d.h. Anweisungen, die korrekt aussehen, aber fehlerhaft sind. - \\ - \item \textbf{Synthesephase}, in der Binär- bzw. Bytecode erzeugt wird: - \subitem \underline{\emph{Zwischencodeerzeugung}}: \\ - Hier wird plattformunabhängiger Bytecode erzeugt, der als Grundlage für den nächsten Schritt dient. - \subitem \underline{\emph{Optimierung}}: \\ - Während der Optimierung wird versucht die Performanz des erzeugten Programms zu steigern. - \subitem \underline{\emph{Codegenerierung}}: \\ - Hier wird aus dem optimierten Zwischencode der \emph{Binärcode} erzeugt. - \end{enumerate} -\end{defi} - -\begin{bonus}{Ahead-of-Time Compiler} - Bei dieser Variante wird der gesamte Quellcode \emph{in einem Rutsch} - in Binär- oder Bytecode übersetzt. Das kann mitunter dazu führen, dass die Kompilierung - sehr lange dauert. -\end{bonus} - -\begin{bonus}{Just-in-Time Compiler} - Daher haben sich mit der Zeit auch sogenannte \emph{Just-in- - Time Compiler} etablieren können, die nur einen kleinen Teil des Quellcodes direkt - übersetzen und weitere Teile des Quellcodes erst dann übersetzen, \emph{wenn sie bei der - Programmausführung benötigt werden}. -\end{bonus} - -\begin{defi}{Linker} - Nachdem der Compiler den Binärcode erzeugt hat, muss der \emph{Linker} daraus noch - ein lauffähiges Programm erstellen. Das ist insbesondere der Fall, wenn es mehrere - Dateien mit Quellcode gibt. - - Dies geschieht indem der Binärcode zu den verschiedenen - Quellcodedateien, der nun in sogenannten \emph{Objektdateien} vorliegt, zusammengefügt wird. Dabei werden beispielsweise symbolische Adressen aus mehreren - Quellcodemodulen und externen Bibliotheken so angepasst, dass sie zusammen - passen. - - Dabei wird zwischen \emph{statischem Linken} und \emph{dynamischen Linken} unterschieden: - - Beim \textbf{statischen Linken} werden alle verfügbaren Objektdateien zu \emph{einer - einzigen, ausführbaren Programmdatei} gelinkt. - \begin{itemize} - \item Vorteil: keine externen Abhängigkeiten, Programm auf jedem geeigneten System ohne Weiteres lauffähig - \item Nachteil: nicht mehr möglich, einzelne Programmteile auszutauschen ohne den Linkvorgang vollständig zu wiederholen, - \end{itemize} - Beim \textbf{dynamischen Linken} werden Funktions- und Variablenadressen erst zur Laufzeit aufgelöst, sodass externe Bibliotheken - einfach in Form von \emph{Dynamically Linked Libraries} (DLLs) bzw. \emph{Shared Objects} (SOs) angesprochen werden können. Da DLLs bzw. SOs als existierend - vorausgesetzt werden, wird das fertige Programm bei dynamischem Linken kleiner. - \begin{itemize} - \item Vorteil: mehrere Programme können dieselbe externe Bibliothek verwenden, ohne dass der benötigte Code mehrfach in einzelne Programme integriert werden muss. - \end{itemize} -\end{defi} - -\begin{defi}{Interpreter} - \emph{Interpreter} zeichnen sich dadurch aus, dass der Quellcode nicht einmalig in Binärcode übersetzt wird, sondern bei jeder Programmausführung schrittweise abgearbeitet wird. - \begin{itemize} - \item Vorteile: einfache Portabilität, dynamischere Quellcodeverwaltung - \item Nachteile: deutlich langsamere Ausführungsgeschwindigkeit, keine Optimierungen an Programmstruktur möglich - \end{itemize} -\end{defi} - -\section{Rechnerarchitekturen} -\subsection{Von-Neumann-Architektur} - -\begin{defi}{Von-Neumann-Architektur} - Im Grundsatz besteht die Architektur aus drei Komponenten: \emph{CPU}, \emph{Speicher} und \emph{I/O Einheit}. - - Die einzelnen Komponenten sind über Datenleitungen, sogenannte \emph{Busse}, verbunden. - \begin{center} - \includegraphics[]{images/von_neumann.pdf} - \end{center} -\end{defi} - -\begin{defi}{CPU} - Die \emph{CPU} (\emph{Central Processing Unit}, Prozessor) ist sozusagen das Gehirn des Computers. - Die CPU besteht im Wesentlichen aus drei Teilen, dem \emph{Leitwerk} und - dem \emph{Rechenwerk} und den \emph{Registern}, welche direkt zur Abarbeitung von Befehlen - benötigte Daten und berechnete Ergebnisse aufnehmen können. - - Das \emph{Leitwerk} steuert die Ausführung des Binärcodes, das \emph{Rechenwerk} führt anfallende Rechenoperationen aus. -\end{defi} - -\begin{bonus}{Aufbau Rechenoperationen} - \begin{itemize} - \item \emph{Operationsteil}: codiert konkreten Befehl - \item \emph{Operanden}: stellen z.B. Summanden einer Operation, oder Adresse einer Variablen dar - \end{itemize} -\end{bonus} - -\begin{bonus}{Abarbeitung von Befehlen} - Jeder Befehl durchläuft bei der Abarbeitung in der CPU folgende Schritte: - \begin{itemize} - \item \emph{Instruction Fetch (IF)} : Befehl lesen - \item \emph{Instruction Decode (ID)} : Befehl decodieren - \item \emph{Fetch Operands (FO)} : Operanden laden - \item \emph{Execute (EX)} : Befehl ausführen - \item \emph{Writeback (WB)} : Ergebnis schreiben - \end{itemize} - - \begin{center} - \includegraphics[]{images/befehlsabarbeitung.pdf} - \end{center} -\end{bonus} - -\begin{defi}{Prozessorarchitekturen} - \textbf{CISC} (\emph{Complex Instruction Set Computer}):\\ - Eine CISC CPU zeichnet sich durch einen \emph{komplexen Befehlssatz} in Form von \emph{Microcode} und dem Vorhandensein nur \emph{weniger Register} aus. - - \textbf{RISC} (\emph{Reduced Instruction Set Computer}):\\ - eine RISC CPU nur über \emph{wenige, in Hardware realisierte Befehle} und \emph{viele Prozessorregister}. -\end{defi} - -\begin{defi}{Pipelining} - In einer \emph{RISC CPU}, die nur wenige und elementare Befehle verwendet, kann dafür - gesorgt werden, dass alle Teilschritte, deren \emph{parallele Verarbeitung} das Pipelining - ermöglicht, gleich lange dauern. Nur deswegen kann das Konzept des Pipelinings - erfolgreich umgesetzt werden. - - Das ist bei einer \emph{CISC CPU} aufgrund der vielen - und teils sehr komplexen Befehle \emph{nicht} möglich. -\end{defi} - -\begin{example}{Pipelining} - 5-Stage-Pipeline: - \begin{itemize} - \item Instruction Fetch (\textbf{IF}): Befehl lesen - \item Instruction Decode (\textbf{ID}) : Befehl decodieren - \item Execute (\textbf{EX}) : Ausführen - \item Memory Access (\textbf{MEM}) : Ausführen - \item Writeback (\textbf{WB}) : Ergebnis schreiben - \end{itemize} - - \begin{center} - \begin{tabular}{| c || m{0.05\textwidth} | m{0.05\textwidth} | m{0.05\textwidth} | m{0.05\textwidth} | m{0.05\textwidth} | m{0.05\textwidth} |} - \hline - Instr. 1 & \texttt{IF} & \texttt{ID} & \texttt{EX} & \texttt{MEM} & \texttt{WB} & \\ - \hline - Instr. 2 & & \texttt{IF} & \texttt{ID} & \texttt{EX} & \texttt{MEM} & \texttt{WB} \\ - \hline - Instr. 3 & & & \texttt{IF} & \texttt{ID} & \texttt{EX} & \texttt{MEM} \\ - \hline - Instr. 4 & & & & \texttt{IF} & \texttt{ID} & \texttt{EX} \\ - \hline - Instr. 5 & & & & & \texttt{IF} & \texttt{ID} \\ - \hline - \hline - Clock Cycle & \multicolumn{1}{c|}{1} & \multicolumn{1}{c|}{2} & \multicolumn{1}{c|}{3} & \multicolumn{1}{c|}{4} & \multicolumn{1}{c|}{5} & \multicolumn{1}{c|}{6} \\ - \hline - \end{tabular} - \end{center} -\end{example} - -\begin{defi}{ROM} - Der \emph{ROM} ist ein Festwertspeicher, der - prinzipiell - \emph{nur gelesen} werden kann und die Firmware des Computers gespeichert hat. - - Im ROM liegt das sogenannte \emph{BIOS} (\emph{basic input output system}) bzw. moderner \emph{UEFI} - (\emph{unified extensible firmware interface}). - Die im ROM abgelegten Informationen stellen die Firmware des - Rechners dar. Diese Firmware sorgt dafür, dass der Computer nach dem Einschalten - in die Lage versetzt wird, grundlegende Hardwarekomponenten zu verwalten. -\end{defi} - -\begin{defi}{RAM} - Der \emph{RAM}, - auch \emph{Hauptspeicher} genannt, ist ein Speicher mit \emph{wahlfreiem Zugriff}, der seinen - Inhalt jedoch bei Verlust der Betriebsspannung \emph{verliert}. Im RAM werden Informationen - abgelegt, die ein \emph{Programm zur Laufzeit} benötigt. - - Sollen Daten - über das Ende des Programms hinaus gespeichert werden, müssen sie über die - \emph{I/O-Einheit} auf einen anderen Speicher geschrieben werden. -\end{defi} - -\begin{defi}{Cache} - \emph{Cache} ist \emph{schneller} als RAM, kann aber nur \emph{weniger Speicherkapazität} zur Verfügung stellen. - - Das bedeutet, dass der Cache nur kleine Datenmengen, sogenannte \emph{Cacheblocks}, aus dem Hauptspeicher vorhalten kann. - Diese haben eine definierte Größe und können dann schneller in die CPU geldaden werden, als das aus dem RAM möglich wäre. -\end{defi} - -\begin{defi}{Lokalität} - \textbf{Zeitliche Lokalität}:\\ - Es ist, bei entsprechender Programmierung, sehr wahrscheinlich, dass - auf eine Speicherzelle nicht nur einmal, sondern in kurzer Zeit \emph{mehrmals zugegriffen} - wird. - - \textbf{Örtliche Lokalität}:\\ - Es ist, bei entsprechender Programmierung, sehr wahrscheinlich, dass nach - dem Zugriff auf eine bestimmte Speicherzelle auch ein \emph{Zugriff in deren unmittelbarer - \glqq Nachbarschaft\grqq} stattfindet. -\end{defi} - -\begin{bonus}{Aufbau eines Caches} - \begin{center} - \includegraphics[]{images/cache_aufbau.pdf} - \end{center} - - Aus der Abbildung ist ersichtlich, dass der Cache selbst ebenenweise organisiert ist. - - Im Regelfall sind mindestens die Ebenen L1 und L2 vorhanden, oftmals sogar noch - eine dritte Ebene L3. Dabei ist in jedem Fall der L1-Cache in die CPU integriert, - häufig auch noch der L2-Cache. - - Beginnend beim - L3-Cache werden die Cachelevel mit größerer Nähe zur CPU jeweils kleiner und - schneller. Dieser Aufbau soll die Frage nach der Auswahl der Daten, die im Cache - vorgehalten werden, vereinfachen. Es ist also möglich einen relativ großen Datenbestand - im L3-Cache vorzuhalten, der schneller ist als der Hauptspeicher. Von dort - aus kann dann wiederum eine Teilmenge der Daten im noch schnelleren L2-Cache - vorgehalten werden, usw. - - Liegen benötigte Daten nicht im L1-Cache, welcher Daten bzw. Befehle schlussendlich an die CPU liefert, ist aufgrund der Lokalität und - des Aufbaus des Caches die Wahrscheinlichkeit hoch, dass die benötigten Daten - nicht aus dem langsamen Hauptspeicher geladen werden müssen, sondern sich in - einem der niedrigeren Cache-Level finden und damit immer noch vergleichsweise - schnell zur Verfügung gestellt werden können. -\end{bonus} - -\begin{bonus}{Interner Aufbau eines Cachelevels} - \begin{center} - \includegraphics[]{images/cache_level.pdf} - \end{center} - - Zu jedem Cacheblock wird die Startadresse des Blocks im RAM gespeichert, diese - Information wird \emph{Tag} genannt. - - Wird von der CPU eine Anfrage an den Speicher - gestellt, wird zunächst anhand des Tags unter Zuhilfenahme des Komparators geprüft, ob der angefragte Datensatz im Cache liegt. Dabei wird auch geprüft, ob eine - angefragte Speicheradresse innerhalb eines Cacheblocks liegt. Das ist möglich, da - der Tag sowie die Größe des Cacheblocks bekannt sind. - - Ist dies nicht der Fall, wird - die Anfrage an ein niedrigeres Cachelevel bzw. den RAM weitergereicht. - - Außerdem - werden zu jedem Cacheblock Statusbits gespeichert, die beispielsweise angeben ob - sich der Cacheblock verändert hat (\emph{dirty bit}), seit er in den Cache geladen wurden, - oder ob ein Platz im Cache mit einem gültigen Cacheblock belegt ist (\emph{invalid bit}). -\end{bonus} - -\begin{defi}{Organisation der Tags} - Die \emph{Blöcke} (Cache-Lines) eines Caches können in so genannte \emph{Sätze} zusammengefasst werden. - Für eine bestimmte Adresse ist dann immer nur einer der Sätze zuständig. - Innerhalb eines \emph{Satzes} bedienen alle Blöcke also nur einen \emph{Teil} aller vorhandenen Adressen. - - Im Folgenden stehe die Variable $m$ für die \emph{Gesamtanzahl der Cacheblöcke} und $n$ für die \emph{Anzahl der Blöcke pro Satz}, die so genannte \emph{Assoziativität}. - Dann besteht der Cache also aus $\frac {m}{n}$ Sätzen. - - \textbf{Direkt abgebildet} (\emph{DM}, \emph{direct mapped}, $n=1$):\\ - Es gibt pro Cacheblock nur eine einzige Möglichkeit, wo dieser - platziert werden kann. - - Daher kann es allerdings vorkommen, dass ein Cacheblock - nicht platziert werden kann, obwohl noch Platz im Cache wäre. - - \textbf{Vollassoziativ} (\emph{FA}, \emph{fully associative}, $n=m$):\\ - Ein Cacheblock kann beliebige auf freie Plätze im Cache zugeordnet - werden. - - Bei einer Speicheranfrage müssen allerdings alle gespeicherten - Tags durchsucht werden. - - \textbf{Satzassoziativ} (\emph{SA}, \emph{set associative}, $2\leq n \leq \frac{m}{2}$):\\ - Der verfügbare Platz wird in Gruppen unterteilt. Wie bei einem - DA Cache gibt es nur eine Gruppe, in der ein Cacheblock platziert werden kann; - wie bei einem VA Cache kann der Cacheblock innerhalb dieser Gruppe frei platziert - werden. -\end{defi} - -\begin{defi}{Cache-Lesezugriffe} - Findet ein Lesezugriff auf Speicherzelle $A$ statt, wird geprüft, ob Speicherzelle $A$ bereits im Cache liegt. - \begin{itemize} - \item \textbf{$A$ liegt im Cache} (\emph{cache hit}):\\ - Datensatz kann direkt aus dem Cache gelesen werden. - \item \textbf{$A$ liegt nicht im Cache} (\emph{cache miss}):\\ - Datensatz muss aus dem Hauptspeicher in den Cache geladen werden, danach wird der Datensatz gelesen. - \end{itemize} -\end{defi} - -\begin{defi}{Schreibmodi eines Cache} - \begin{itemize} - \item \textbf{write-through} (\emph{WT}):\\ - Datensatz wird im Cache und direkt im Hauptspeicher aktualisiert. - - \emph{Vorteile}: keine Probleme mit Datenkonsistenz im Hauptspeicher\\ - \emph{Nachteile}: hoher Aufwand für Schreiboperationen - \item \textbf{write-back} (\emph{WB}):\\ - Datensatz wird im Cache aktualisiert und erst dann in den Hauptspeicher geschrieben, wenn der entsprechende Cacheblock aus dem Cache verdrängt wird. - - \emph{Vorteile}: niedrige Belastund der Systembusse, keine Wartezyklen\\ - \emph{Nachteile}: fehlende Datenkonsistenz - \end{itemize} -\end{defi} - -\begin{defi}{Cache-Schreibzugriffe} - Findet ein Schreibzugriff auf Speicherzelle $A$ statt, wird geprüft, ob Speicherzelle $A$ bereits im Cache liegt. - \begin{itemize} - \item \textbf{$A$ liegt im Cache} (\emph{cache hit}):\\ - Datensatz wird im Cache (und im Hauptspeicher) aktualisiert. - \item \textbf{$A$ liegt nicht im Cache} (\emph{cache miss}):\\ - Datensatz wird im Hauptspeicher geschrieben, Inhalt des Caches wird nicht verändert. - \end{itemize} -\end{defi} - -\begin{defi}{Cache Misses} - \begin{itemize} - \item \textbf{Capacity Miss}: - \subitem - tritt auf, wenn Datensatz bereits im Cache war, aber \emph{bereits verdrängt} wurde - \subitem (aufgrund mangelnder Kapazität) - \subitem - hauptsächlich bei VA Caches - \item \textbf{Compulsory Miss}: - \subitem - tritt auf, wenn ein Datensatz das \emph{erste Mal} verwendet wird - \subitem - unabhängig vom Typ des Caches - \item \textbf{Conflict Miss}: - \subitem - tritt auf, wenn Datensatz bereits im Cache war, aber \emph{bereits verdrängt} wurde - \subitem (weil ein anderer Cacheblock an entsprechende Stelle gelagert werden sollte) - \subitem - vor allem bei DA Caches - \end{itemize} -\end{defi} - -\begin{defi}{RAID} - \textbf{RAID}: \textbf{R}edundant \textbf{A}rray of \textbf{I}ndependent \textbf{D}isks - - Ein \emph{RAID} besteht aus mindestens zwei Festplatten und zielt auf die \emph{Verbesserung einer Eigenschaft ab}: - \begin{itemize} - \item Erhöhung der Ausfallsicherheit - \item Steigerung der Datentransferrate - \item Erweiterung der Speicherkapazität - \item Möglichkeit des Austauschs von Festplatten im laufenden Betrieb - \item Kostenreduktion durch Einsatz mehrerer kostengünstiger Festplatten - \end{itemize} -\end{defi} - -\begin{defi}{RAID-Level} - Die genaue Funktionsweise des RAID wird durch das sogenannte \emph{RAID-Level} angegeben. - - \begin{itemize} - \item \textbf{RAID 0}: - \subitem - höhere Transferraten durch \emph{Striping} - \subitem - Daten werden auf mehrere Festplatten verteilt - \subitem - beim Lesen und Schreiben können mehrere Festplatten parallel verwendet werden - \subitem \emph{Nachteil}: fällt eine Festplatte aus, sind meist alle Daten verloren - \item \textbf{RAID 1}: - \subitem - erhöhte Ausfallsicherheit durch \emph{Mirroring} - \subitem - Daten in gleicher Weise auf mehrere Festplatten gleichzeitig abgelegt - \subitem - einzelne Daten \emph{können} auch parallel von mehreren Festplatten gelesen werden - \subitem \emph{Nachteil}: wird eine Datei gelöscht, wird sie auf allen Platten gelöscht (kein Backup!) - \item \textbf{RAID 5}: - \subitem - versucht Vorteile von RAID 0 und RAID 1 zu vereinen - \subitem - höhere Ausfallsicherheit bei höherer Datentransferrate - \subitem - besteht aus mindestens drei Festplatten - \subitem - Verwendet Variante von \emph{Striping}: - \subsubitem - nicht auf alle $n$ Festplatten verteilt - \subsubitem - auf allen Festplatten Paritätsinformationen zu Daten auf anderen $n-1$ Platten - \subsubitem - kann Ausfall einer Festplatte kompensieren - \end{itemize} - - - \begin{center} - \includegraphics[]{images/raid0.pdf} - - \includegraphics[]{images/raid1.pdf} - - \includegraphics[]{images/raid5.pdf} - \end{center} - - Merhere RAID-Systeme eines Typs können auch zu einem RAID-System zusammengefasst werden (z.B. \emph{RAID 100}, \emph{RAID 01}, \emph{RAID 10}, \ldots). -\end{defi} - -\begin{bonus}{HDD, SSD} - \textbf{HDD} (Hard Disk Drive, \emph{Festplatte}): - \begin{itemize} - \item Gehäuse der Festplatte beinhaltet mehrere, auf einer Achse übereinander montierten, runden Platten, welche mit einer magnetisierbaren Schicht überzogen sind - \item Schreib-/Leseköpfe werden durch einen zentralen Kamm über die Platten bewegt - \item \glqq Landing Zone\grqq zum Parken der Köpfe (Berührung $\to$ Datenverlust) - \item Platten rotieren mit konstanter Umdrehungszahl (5400-15000 rpm) - \item Kenngrößen: - \subitem - kontinuierliche Übertragungsrate (\emph{sustained data rate}) - \subitem - mittlere Zugriffszeit (\emph{(data) access time}), bestehend aus: - \subsubitem - Spurwechselzeit (\emph{seek time}) - \subsubitem - Latenzzeit (\emph{latency}) - \subsubitem - Kommando-Latenz (\emph{controller overhead}) - \end{itemize} - - - \textbf{SSD} (Solid State Drive): - \begin{itemize} - \item keine mechanischen Bauteile - \item niedriger Energieverbrauch - \item hoher Datendurchsatz - \item hoher Preis pro Speichereinheit - \end{itemize} -\end{bonus} - -\begin{bonus}{Daten- und Adressbus} - Einzelne Komponenten sind über Leitungen, sogenannte \emph{Busse} verbunden. - \begin{itemize} - \item \emph{Datenbus} (bi-direktional) - \item \emph{Adressbus} (uni-direktional, leitet Adressanfragen der CPU an RAM oder Cache weiter) - \end{itemize} -\end{bonus} - -\subsection{Parallele Rechnerarchitekturen} - -\begin{defi}{Flynn'sche Klassifikation (Flynn'sche Taxonomie)} - \begin{center} - \includegraphics[]{images/flynn.pdf} - \end{center} - - \begin{itemize} - \item \emph{SISD} entspricht der Von-Neumann-Architektur - \item \emph{MIMD} entspricht dem heutigen Mehrprozessorsystem - \item \emph{SIMD} entspricht dem Aufbau einer Grafikkarte (genutzt in HPC) - \item \emph{MISD} eher ungebräuchlich. - \end{itemize} -\end{defi} - -\begin{defi}{Shared-Memory Systeme} - Ein \emph{Shared-Memory System} teilt den vorhandenen RAM unter den verfügbaren Prozessorenkernen auf. - Das bedeutet, dass Daten zwischen den einzelnen Prozessorkernen \emph{implizit über den RAM} verteilt werden können, da - jeder Kern Zugriff auf den RAM hat. - - \textbf{SMP} (\emph{symmetric multi processing}) skaliert vergleichweise schlecht. - Das liegt daran, dass an die vorhandene Basis der Von-Neumann-Architektur einfach - weitere Prozessorkerne angeschlossen werden. Da sich diese Prozessorkerne - nun aber das vorhandene Bus-System teilen müssen, entsteht an dieser Stelle ein - \emph{Flaschenhals}. - - \textbf{ccNUMA} (\emph{cache-coherent non-uniform memory architecture}) soll dieses Problem, speziell im Bereich HPC, beheben. - Dabei wird der vorhandene Hauptspeicher auf mehrere Memory-Controller aufgeteilt. - Jeder Prozessor ist dann an einen eigenen Memory-Controller angeschlossen. - Dabei kann grundsätzlich weiterhin jeder Kern auf den gesamten RAM zugreifen. - Es kann nur sein, dass der Zugriff länger dauert, wenn der betreffende Teil des RAMs von einem anderen Memory-Controller verwaltet wird. -\end{defi} - -\begin{defi}{Distributed-Memory System} - Ein \emph{Distributed-Memory System} verbindet mehrere - \emph{unabhängige Recheneinheiten}, sodass Daten \emph{explizit} über eine Netzwerkverbindung - zwischen dieses Recheneinheiten verteilt werden müssen. - - Dieser Ansatz skaliert sehr gut, d.h. es ist - ohne Weiteres möglich weitere Recheneinheiten anzuschließen, ohne die Gesamtperformance - des Systems zu beeinträchtigen -\end{defi} - -\begin{bonus}{Speedup und Effizienz} - \emph{Speed Up} und \emph{Effizienz} beurteilen die Güte paralleler Programmausführung, indem sie \emph{Zeitersparnis} und die \emph{Anzahl der verwendeten Prozessorkerne} in Relation setzen. - - Sei $T(p)$ die Zeit zur Programmausführung bei Verwendung von $p$ CPUs. Dann sind der \emph{Speed Up} $S(p)$ und die Effizienz $E(p)$ definiert wie folgt: - $$ - S(p) = \frac{T(1)}{T(p)} \qquad \qquad E(p) = \frac{S(p)}{p} - $$ - Der \emph{Speed Up} gibt an, wieviel schneller die Programmausführung ist. - Die Effizienz gibt an, wie gut die verwendeten Prozessorkerne genutzt worden sind. - - Im Idealfall ist $S(p) = p$ und $E(p) = 1$. -\end{bonus} - -\begin{bonus}{Amdahl's Law} - Nach Amdahl wird der Geschwindigkeitszuwachs vor allem durch den sequentiellen Anteil des Problems beschränkt, da sich dessen Ausführungszeit durch Parallelisierung nicht verringern lässt. - - Der \emph{Speed Up} nach Amdahl ist wie folgt definiert ($f \in (0, 1]$: serieller Teil des Programms): - $$ - S(p) = \frac{T(1)}{f \cdot T(1) + (1-f) \cdot \frac{T(1)}{p}} = \frac{1}{f + \frac{1-f}{p}} - $$ -\end{bonus} - -\section{Betriebssysteme} - -\begin{defi}{Betriebssystem} - Das \emph{Betriebssystem} liegt als Softwareschicht zwischen dem Rechner bzw. der \\ \emph{Software-Hardwareschnittstelle}, die das BIOS zur Verfügung stellt, und den Anwenderprogrammen. - Das heißt, dass ein Endnutzer nur mit dem Betriebssystem, den vom Betriebssystem bereitgestellten Dienstprogrammen und den Anwenderprogrammen in Kontakt kommt. - - \begin{center} - \includegraphics[]{images/betriebssysteme.pdf} - \end{center} -\end{defi} - -\begin{bonus}{Anforderungen an ein Betriebssystem} - \begin{itemize} - \item Hohe Zuverlässigkeit und Leistung - \item Einfache Bedienbarkeit und Wartbarkeit - \item Niedrige Kosten - \end{itemize} -\end{bonus} - -\begin{bonus}{Batchsysteme} - \emph{Batchsysteme} sind dazu gedacht, Rechenaufgaben ohne Nutzereingabe abzuarbeiten. - Dazu gibt es eine \emph{Job Queue}, in welche Aufgaben eingestellt werden. - Diese Aufgaben werden dann bearbeitet und die Ergebnisse an den Nutzer ausgegeben. -\end{bonus} - -\begin{bonus}{Dialogsysteme} - \emph{Dialogsysteme} sind auf eine Interaktion mit dem Benutzer ausgelegt. - Sie sind die wohl geläufigste Form von Betriebssystemen, da diese Form auf z.B. Desktop-Computern eingesetzt wird. - - Dialogsysteme werden noch einmal unterteilt in \emph{Single User}- und \emph{Multi-User-Systeme}. -\end{bonus} - -\begin{bonus}{Echtzeitsysteme} - \emph{Echtzeitsysteme} sind reaktive Systeme, die mit Hilfe von Sensoren Ereignisse registrieren und anhand von Aktoren darauf reagieren. - Dabei ist die zeitliche Abfolge bzw. die Dauer der Ausführung von Interesse. -\end{bonus} - -\subsection{Prozess} - -\begin{defi}{Prozess} - Ein \emph{Prozess} ist die Abstraktion eines in Ausführung befindelichen Programms. - - Er besteht aus den \emph{Programmbefehlen} und dem \emph{Prozesskontext}. - - Der \emph{Prozesskontext} besteht aus dem privaten Adressraum des Prozessors, geöffneten Streams und abhängigen Prozessen. -\end{defi} - -\begin{defi}{Prozesszustände} - \begin{center} - \includegraphics[]{images/prozesszustaende.pdf} - \end{center} - \begin{enumerate} - \item Der Prozess muss auf ein externes Ereignis warten. - \item Die Zeitscheibe des Prozesses ist abgelaufen, oder ein höher priorisierter Prozess muss ausgeführt werden. - \item Der Prozess bekommt eine neue Zeitscheibe zugeteilt. - \item Das externe Ereignis, auf das der Prozess gewartet hat, ist eingetreten. - \end{enumerate} -\end{defi} - -\begin{bonus}{Multitasking} - \textbf{Preemptives Multitasking}: - \begin{itemize} - \item Betriebssystem entscheidet, wann welcher Prozess zur Ausführung kommt - \item Benutzer erhält Eindruck von Parallelität - \end{itemize} - - \textbf{Kooperatives Multitasking}: - \begin{itemize} - \item Prozess bestimmt selbst, wann er den Prozessor abgibt - \item \emph{Nachteile} - \subitem - z.B. Endlosschleifen können das gesamte System zum Absturz bringen - \subitem - das Betriebssystem kann nicht berechnen, wann der Prozessor wieder frei ist - \end{itemize} -\end{bonus} - -\begin{defi}{Scheduling} - Die Zuteilung von Zeitscheiben wird \emph{Scheduling} genannt und ist der Kern der Prozessverwaltung. - Das Scheduling sollte dabei jederzeit die folgenden Eigenschaften erfüllen: - \begin{itemize} - \item \emph{Fairness}: Jeder Prozess erhält einen gerechten Anteil der CPU-Zeit. - \item \emph{Effizienz}: Die CPU und andere Ressourcen sind möglichst vollständig ausgelastet. - \end{itemize} -\end{defi} - -\begin{bonus}{Priorität} - \textbf{Statische Priorität}: - \begin{itemize} - \item Jeder Prozess erhält beim Start eine \emph{feste Priorität} - \item Prozess mit \emph{höchster Priorität} bekommt als nächstes eine Zeitscheibe zugeteilt - \item Oft in Echtzeitsystemen verwendet - \end{itemize} - - \textbf{Dynamische Priorität}: - \begin{itemize} - \item Jeder Prozess erhält beim Start eine \emph{Anfangspriorität} - \item Prozess mit \emph{höchster Priorität} bekommt als nächstes eine Zeitscheibe zugeteilt - \item Prioritäten der Prozesse werden \emph{dynamisch geändert} - \end{itemize} -\end{bonus} - -\begin{algo}{Scheduling: FIFO (First In First Out)} - Prozesse werden nach \emph{Reihenfolge} ihres Einfügens in die \emph{Job-Queue} bearbeitet. - \begin{itemize} - \item Zuteilung der CPU findet nur statt, wenn laufender Prozess wartet oder sich beendet - \item Jeder Prozess kommt garantiert an die Reihe - \item Kurze Prozesse müssen unter Umständen sehr lange warten, bis sie ausgeführt werden - \end{itemize} -\end{algo} - -\begin{algo}{Scheduling: SJF (Shortest Job First)} - Prozesse werden aufsteigend nach ihrer \emph{geschätzten Ausführungszeit} bearbeitet. - \begin{itemize} - \item Große Prozesse kommen möglicherweise nie an die Reihe, wenn stets kleinere dazukommen - \item Wartezeit auf das Ergebnis eines Prozesses sich in etwa proportional zur Ausführungszeit - \end{itemize} -\end{algo} - -\begin{algo}{Scheduling: MLFQ (Multilevel Feedback Queue)} - Bei diesem Ansatz gibt \emph{mehrere FIFO-Queues}, denen jeweils - eine \emph{Priorität} zugeordnet ist. - - Ein neuer Prozess wird immer in der Queue mit - \emph{höchster Priorität} eingeordnet. - - Wird der Prozess während der ersten Zeitscheibe fertig, - so verlässt er das System. - - Gibt er die CPU freiwillig ab, beispielsweise weil er - durch das Warten auf ein externes Ereignis blockiert wird, wird er, sobald er wieder - bereit ist, in \emph{dieselbe Queue wieder einsortiert} und dort weiter ausgeführt. - - Verbraucht der Prozess seine Zeitscheibe vollständig, so wird er in die \emph{nächst-niedriger priorisierte FIFO-Queue} eingereiht. Dort gelten wieder dieselben Regeln wie vorher. - - Verbraucht der Prozess immer weiter seine Zeitscheiben vollständig, kommt er - schließich in der \emph{am niedrigsten priorisierten Queue} an. - Dort verweilt er, bis er abgearbeitet wurde, d.h. es gibt \emph{keine Möglichkeit} wieder in höher priorisierte Queues - eingestuft zu werden. - - Wieviele FIFO-Queues es gibt, ist vom konkreten Einsatzszenario abhängig. -\end{algo} - -\subsection{Speicherverwaltung} - -\begin{defi}{Reale Speicherverwaltung} - Jedem Prozess wird ein zusammenhängener Block im Hauptspeicher zugeteilt. - Wird in diesem Kontext der Arbeitsspeicher direkt aus den Prozessen heraus adressiert, spricht man von \emph{realer Speicherverwaltung}. - - Das bedeutet auch, dass die Größe des physikalisch vorhandenen Hauptspeichers die Anzahl der gleichzeitig ausführbaren Prozesse begrenzt. - - \emph{Nachteile}: - \begin{itemize} - \item Es muss Platz für das \emph{gesamte Programm und die Daten} gefunden werden. - \item Es kannt nicht mehr Speicher genutzt werden, als \emph{physikalisch vorhanden}. - \item Anforderung, zusammenhängender Speicherblöcke zu finden, verschärft Problem der \emph{Fragmentierung}. - \end{itemize} -\end{defi} - -\begin{bonus}{Fragmentierung} - \emph{Fragmentierung} passiert dann, wenn mehrere, kleine Blöcke im Hauptspeicher frei sind und unter der Prämisse, dass einem - Prozess ein zusammenhängender Block im Hauptspeicher zugeordnet werden - muss, dies eventuell zu einer Situation führt, in der kein neuer Prozess gestartet - werden kann, obwohl in Summe genügend Hauptspeicher frei wäre. -\end{bonus} - -\begin{defi}{Swapping} - Beim \emph{Swapping} wird der - Hauptspeicherinhalt eines Prozesses auf den \emph{Hintergrundspeicher}, beispielsweise - eine Festplatte (HDD), \emph{ausgelagert}, um Platz für andere Prozesse zu schaffen. - - Bekommt dann der Prozess, dessen Daten gerade auf dem Hintergrundspeicher liegen, - die CPU zugeteilt, müssen seine Daten \emph{erneut in den Hauptspeicher geladen werden}, - wahrscheinlich nachdem die Daten eines anderen Prozesses ausgelagert wurden. -\end{defi} - -\begin{defi}{Virtuelle Speicherverwaltung} - Jedem Prozess wird ein \emph{scheinbar zusammenhängender Speicherbereich} zur Verfügung gestellt. - Tatsächlich besteht der Speicher des Prozesses aus nicht zwangsläufig zusammenhängenden \emph{virtuelle Pages}. - - Der Prozess kann seinen Speicher mit \emph{virtuellen Adressen} beginnend bei 0 adressieren. - - Die Gesamtheit aller virtuellen Adressen wird als \emph{virtueller Adressraum} bezeichnet. -\end{defi} - -\begin{defi}{Virtuelle Pages} - \emph{Virtuelle Pages} werden auf Blöcke im Hauptspeicher gleicher Größe abgebildet. - - Hier kann auch \emph{Swapping} genutzt werden. In diesem Fall aber für einzelne Pages, nicht für den gesamten Hauptspeicherinhalt des Prozessors. -\end{defi} - -\begin{defi}{Pagetable} - Beim Zugriff auf eine virtuelle Speicheradresse durch einen Prozess muss diese - Adresse in eine physikalische Adresse umgewandelt werden. Das geschieht anhand - der \emph{Pagetable}, die das Betriebssystem \emph{für jeden Prozess} erstellt und aktualisiert. - - Da - die Pagetable virtuelle Pages auf physikalische Pages gleicher Größe abbildet, gibt es einen Teil der Adresse, der sogenannte \emph{Offset}, der die Position der Daten innerhalb - der Page angibt. - - Abhängig von - der Größe der Pages besteht das Offset aus $m$ Bits. - Für eine Pagegröße von 1MB - werden beispielsweise 20 Bits als Offset benötigt. - - Der Rest der Adresse, die Seitennummer, - muss dann anhand der Pagetable in die Basisadresse umgesetzt werden, - um die Adresse im physikalischen Speicher zu erhalten. Da die Seitennummer aus - $n$ Bits besteht, kann die Pagetable maximal $2^n$ Einträge enthalten. -\end{defi} - -\begin{example}{Pagetable} - Die Länge einer Adresse sei 16 Bit, aufgeteilt in je 8 Bit für Offset und Seitennummer. - - Es sei außerdem folgende Seitentabelle gegeben: - - \begin{center} - \begin{tabular}{|c|c|c|} - \hline - \textbf{Eintrag} & \textbf{Gültig} & \textbf{Basisadresse} \\ - \hline - 00 & Nein & - \\ - 01 & Ja & 0x17 \\ - 02 & Ja & 0x20 \\ - 03 & Ja & 0x08 \\ - 04 & Nein & - \\ - 05 & Ja & 0x10 \\ - \hline - \end{tabular} - \end{center} - - Dann können virtuelle Adressen anhand dieser Pagetable wie folgt umgesetzt werden: - - \begin{center} - \begin{tabular}{|c|c|} - \hline - \textbf{virtuelle Adresse} & \textbf{physikalische Adresse} \\ - \hline - 0x083A & ungültig (Seite 8 existiert nicht) \\ - 0x01FF & 0x17FF (Seite 1, Basisadresse 0x17) \\ - 0x0505 & 0x1005 (Seite 5, Basisadresse 0x10) \\ - 0x043A & ungültig (Seite 4 ungültig) \\ - \hline - \end{tabular} - \end{center} - - \emph{Hinweis}: Ist eine Adresse ungültig, wurde die dazugehörige Page in den Hintergrundspeicher ausgelagert. In diesem Fall muss die physikalische Page in den RAM geladen und die Pagetable aktualisiert werden. -\end{example} - -\begin{bonus}{Paging on Demand} - Das Vorgehen, aktuell - unbenutzte Pages aus dem Hauptspeicher auf den Hintergrundspeicher auszulagern - wird auch als \emph{Paging on Demand} bezeichnet. - Das Ziel dabei ist, Arbeitsspeicher - für andere Prozesse freizugeben. - - Dabei kann ein Prozess entweder Platz für eine - bestimmte Anzahl von physikalischen Pages zugewiesen bekommen, die sich im - Laufe der Prozessabarbeitung nicht ändert, oder es wird dynamisch anhand der aktuellen - Speicherauslastung entschieden, wieviel Platz ein Prozess belegen darf. -\end{bonus} - -\begin{algo}{Speicherverwaltung: FIFO (First In First Out)} - Beim \emph{FIFO}-Verfahren wird - diejenige Page ausgelagert, welche sich schon am längsten im Hauptspeicher - befindet. Dazu muss in der Pagetable festgehalten werden, wann welche - Page in den Hauptspeicher geladen wurde. -\end{algo} - -\begin{algo}{Speicherverwaltung: LRU/LFU (Least Recently / Frequently Used)} - Bei \emph{LRU} - wird mitgehalten, wieviele Ladevorgänge seit der letzten Benutzung einer - Page vorgenommen wurden. Das heißt, dass im Gegensatz zu FIFO, der - Kontrollzustand bei der Verwendung einer Page wieder auf \glqq 0\grqq gesetzt wird. -\end{algo} - -\begin{example}{Speicherverwaltung} - Seitenanforderungen: 1, 2, 3, 4, 1, 2, 5, 1, 2, 3, 4, 5 - - \textbf{FIFO-Strategie:} - - \begin{tabular}{|c|c|c|c|c|c|c|c|c|c|c|c|c|c|} - \hline - \multicolumn{1}{|c}{\textbf{Referenzfolge}} & \multicolumn{1}{c|}{} & 1 & 2 & 3 & 4 & 1 & 2 & 5 & 1 & 2 & 3 & 4 & 5 \\ - \hline - \hline - \multirow{3}{*}{\textbf{Arbeitsspeicher}} & Page 1 & \textcolor{red}{1} & 1 & 1 & \textcolor{red}{4} & 4 & 4 & \textcolor{red}{5} & 5 & 5 & 5 & 5 & 5 \\ - & Page 2 & & \textcolor{red}{2} & 2 & 2 & \textcolor{red}{1} & 1 & 1 & 1 & 1 & \textcolor{red}{3} & 3 & 3 \\ - & Page 3 & & & \textcolor{red}{3} & 3 & 3 & \textcolor{red}{2} & 2 & 2 & 2 & 2 & \textcolor{red}{4} & 4 \\ - \hline - \hline - \multirow{3}{*}{\textbf{Kontrollzustand}} & Page 1 & 0 & 1 & 2 & 0 & 1 & 2 & 0 & 1 & 2 & 3 & 4 & 5 \\ - & Page 2 & - & 0 & 1 & 2 & 0 & 1 & 2 & 3 & 4 & 0 & 1 & 2 \\ - & Page 3 & - & - & 0 & 1 & 2 & 0 & 1 & 2 & 3 & 4 & 0 & 1 \\ - \hline - \end{tabular} - - 9 Einlagerungen - - \textbf{LRU-Strategie:} - - \begin{tabular}{|c|c|c|c|c|c|c|c|c|c|c|c|c|c|} - \hline - \multicolumn{1}{|c}{\textbf{Referenzfolge}} & \multicolumn{1}{c|}{} & 1 & 2 & 3 & 4 & 1 & 2 & 5 & 1 & 2 & 3 & 4 & 5 \\ - \hline - \hline - \multirow{3}{*}{\textbf{Arbeitsspeicher}} & Page 1 & \textcolor{red}{1} & 1 & 1 & \textcolor{red}{4} & 4 & 4 & \textcolor{red}{5} & 5 & 5 & \textcolor{red}{3} & 3 & 3 \\ - & Page 2 & & \textcolor{red}{2} & 2 & 2 & \textcolor{red}{1} & 1 & 1 & 1 & 1 & 1 & \textcolor{red}{4} & 4 \\ - & Page 3 & & & \textcolor{red}{3} & 3 & 3 & \textcolor{red}{2} & 2 & 2 & 2 & 2 & 2 & \textcolor{red}{5} \\ - \hline - \hline - \multirow{3}{*}{\textbf{Kontrollzustand}} & Page 1 & 0 & 1 & 2 & 0 & 1 & 2 & 0 & 1 & 2 & 0 & 1 & 2 \\ - & Page 2 & - & 0 & 1 & 2 & 0 & 1 & 2 & 0 & 1 & 2 & 0 & 1 \\ - & Page 3 & - & - & 0 & 1 & 2 & 0 & 1 & 2 & 0 & 1 & 2 & 0 \\ - \hline - \end{tabular} - - 10 Einlagerungen -\end{example} - -\newpage -\subsection{Dateisystemverwaltung} - -\begin{defi}{BIOS (Basic Input/Output System)} - Das \emph{BIOS}: - \begin{itemize} - \item ist die \emph{Firmware} bei x86-PCs - \item liegt im \emph{nichtflüchtigen Speicher} auf der Hauptplatine des PCs - \item leitet den \emph{Start} des \emph{Betriebssystems} ein - \end{itemize} -\end{defi} - -\begin{defi}{UEFI (Unified Extensible Firmware Interface)} - \emph{UEFI} ist die zentrale Schnittstelle zwischen: - \begin{itemize} - \item der \emph{Firmware} - \item den \emph{einzelnen Komponenten} eines Rechners - \item und dem \emph{Betriebssystem} - \end{itemize} -\end{defi} - -\begin{bonus}{MBR (Master Boot Record)} - Der \emph{MBR} besteht aus insgesamt 512 Byte, die sich auf 446 Byte - für einen (optionalen) Bootloader, 64 Byte für die \emph{Partitionstabelle} und 2 Byte - für eine \emph{} (0xAA55) aufteilen. Die Magic Number dient dazu, einen - gültigen MBR zu identifizieren. - - In der Partitionstabelle können maximal 4 Partitionen - definiert werden, d.h. die Festplatte kann in maximal 4 logische Einheiten aufgeteilt - werden. -\end{bonus} - -\begin{bonus}{GPT (GUID Partition Table)} - Mit der Einführung von UEFI wurden auch die Limitierungen des - MBR aufgehoben und die GPT als Nachfolger definiert. - - Die \emph{GPT} beinhaltet zu Beginn - aus Kompatibilitätsgründen einen MBR, sodass ein hybrider Betrieb möglich - ist. In der GPT können bis zu 128 Partitionen abgelegt werden. - - Zur Absicherung der - GPT wird eine exakte Kopie der GPT am Ende des Datenträgers abgelegt. -\end{bonus} - -\begin{defi}{Dateisystem} - Ein Dateisystem ist im Prinzip eine Ablageorganisation für Daten auf einem Datenträger des Computers. - Das Dateisystem muss sicherstellen, - dass Dateien \emph{lesend und schreibend geöffnet} und auch wieder \emph{geschlossen} werden - können. Das bedeutet, dass Dateinamen auf physikalische Adressen auf dem - Datenträger abgebildet werden müssen. - - Spezielle Eigenschaften des Datenträgers - (Festplatte, USB-Stick, ...) müssen berücksichtigt werden. - - Generell bieten - alle (modernen) Dateisysteme folgende Attribute: - \begin{itemize} - \item Dateiname - \item Ablageort (Ordner bzw. Verzeichnis) - \item Dateigröße - \item Zugriffsrecht - \end{itemize} -\end{defi} - -\begin{defi}{Lineare Dateisysteme} - Bei linearen Dateisystemen werden Daten direkt hintereinander auf den Datenträger - geschrieben. Das bedeutet, dass wahlfreier Zugriff nicht möglich ist. Daher finden - diese Dateiysteme heutzutage nur noch Anwendung in Bereichen, in denen es nicht - primär auf Geschwindigkeit ankommt. -\end{defi} - -\begin{defi}{Hierarchische Dateisysteme} - Daten werden auf hierarchischen Dateisystemen in einer Verzeichnisstruktur - abgelegt. - - Diese Art von Dateisystem ist die wohl verbreiteste auf - modernen Computern und kann auf Festplatten, SSDs, USB-Sticks, SD-Karten und - sonstigen herkömmlichen Datenträgern verwendet werden. -\end{defi} - -\begin{defi}{Netzwerkdateisysteme} - In Netzwerkdateisystemen wird entfernter - Speicher auf einem Server wie ein lokales Medium behandelt. Das Betriebssystem - muss dann die Zugriffe auf Dateien in Netzwerkkommunikation umwandeln. - Für den Nutzer - eines Betriebsystems stellt sich Netzwerkspeicher allerdings in der Regel wie ein - hierarchisches Dateisystem dar. -\end{defi} - -\begin{bonus}{Sicherheitsaspekte} - \textbf{Paralleler Zugriff im Multitasking}: - \begin{itemize} - \item Bereitstellung von Locks für den Dateizugriff - \end{itemize} - - \textbf{Stromausfall während einer Schreiboperation}: - \begin{itemize} - \item Es muss Datenkonsistenz gewährleistet werden - \item Atomare Operationen, welche entweder abgeschlossen oder ausstehend sind - \subitem $\to$ Journalingdateisysteme - \end{itemize} -\end{bonus} - -\begin{defi}{Journalingdateisysteme} - Bei einem Journalingdateisystem werden alle Aktionen auf der Festplatte protokolliert - und erst als gültig aufgefasst, nachdem das Beenden der Aktion auf dem Dateisystem - im \emph{Journal} (Protokoll) vermerkt wurde. - - \begin{itemize} - \item \emph{Metadatenjournaling}: - \subitem - Konsistenz des Dateisystems - \item \emph{Fulljournaling}: - \subitem - Konsistenz des Dateisystems - \subitem - Konsistenz der Dateiinhalte - \end{itemize} - -\end{defi} - -\section{Virtualisierung} - -\begin{defi}{Virtualisierung} - \emph{Virtualisierung} bezeichnet Methoden, die es erlauben, Ressourcen - eines Computers \emph{zusammenzufassen oder aufzuteilen}. - - Dies wird erreicht, indem real existierende Hardware unter - Zuhilfenahme einer Softwareschicht zu virtueller Hardware \emph{abstrahiert} wird. - - Dabei können mehrere Szenarien unterschieden werden: - \begin{itemize} - \item Partitionierung - \item Aggregation - \item Emulation - \item Isolation - \end{itemize} - \vspace{1em} - \begin{center} - \includegraphics[]{images/virtualisierung.pdf} - \end{center} -\end{defi} - -\begin{defi}{Hypervisor / Virtual Machine Monitor (VMM)} - Der \emph{Hypervisor} ist ein Stück Soft- oder Hardware, das die Umsetzung - zwischen der \emph{virtuellen Maschine} und der \emph{physikalischen Hardware} vornimmt. - - \textbf{Typ-1-Hypervisor}: - \begin{itemize} - \item läuft direkt auf physikalischer Hardware - \end{itemize} - - \textbf{Typ-2-Hypervisor}: - \begin{itemize} - \item läuft als Anwendung auf dem Hostsystem - \end{itemize} -\end{defi} - -\subsection{Virtualisierungskonzepte} - -\begin{defi}{Paravirtualisierung} - \begin{itemize} - \item Funktionalitäten des Gast BS werden gezielt verändert (Kernel Anpassungen) - \item Gast-BS \glqq weiß\grqq, dass es sich in einer virtuellen Umgebung befindet - \item Gast-BS kann direkt mit dem Hypervisor interagieren, benötigt keine Hardware-Emulation - \end{itemize} - - \emph{Vorteile}: gute Performance - - \emph{Nachteile}: Gastsysteme nicht beliebig wählbar, hoher Aufwand für Kernel-Entwickler -\end{defi} - -\begin{defi}{Hardware-unterstützte Virtualisierung} - \begin{itemize} - \item Neue Prozessortechnologien: CPUs besitzen Befehlssatz, der Virtualisierung unterstützt - \item Modifikation des Gast-BS soll vermieden werden, direkt durch Hardware gelöst - \item Hypervisor soll durch hardwarebasierte Speicherverwaltung entlastet werden - \end{itemize} - - \emph{Vorteile}: Gast-BS muss nicht modifiziert werden, Gastsysteme frei wählbar - - \emph{Nachteile}: kein gemeinsamer Standard, Virtualisierungsplattform muss Technologie unterstützen -\end{defi} - -\begin{defi}{Hardware-Emulation} - \begin{itemize} - \item Innerhalb einer VM wird Standardhardware eines Rechners komplett oder teilweise simuliert - \item Emulator erzeugt Softwareschnittstellen, die vom Gast-BS angesprochen werden können - \item Emulator sorgt dafür, dass Befehle, die an simulierte Hardware gerichtet sind, für die physische Hardware des Hostsystems umgewandelt werden - \end{itemize} - - \emph{Vorteile}: flexible Wahl der Gast-BS - - \emph{Nachteile}: Performanceverlust durch hohen Virtualisierungsaufwand -\end{defi} - -\begin{defi}{Betriebssystemvirtualisierung} - \begin{itemize} - \item Innerhalb des Host-BS werden Virtual Environments (VE) / Container erzeugt - \item In VE ist kein eigenständiges Betriebssystem installiert - \item Kernel-Bibliotheken und Geräte-Treiber des Hostsystems genutzt - \item Einige Individualdaten müssen für Container definiert werden \\ (z.B. Dateisystem, IP Adresse, Hostname) - \end{itemize} - - \emph{Vorteile}: gute Performance, wenig Speicherbedarf - - \emph{Nachteile}: keine freie Wahl des Gast-BS (gebunden an Hostsystem) -\end{defi} - -\subsection{Cloud Computing} - -\begin{defi}{Cloud Computing} - \emph{Cloud Computing} ist im Wesentlichen ein Model um einen allgegenwärtigen, - bequemen, bedarfsgesteuerten Netzwerkzugang zu einem gemeinsamen Pool konfigurierbarer - Computer-Ressourcen zur Verfügung zu stellen. Zudem soll das Ganze - schnell und mit minimalem Verwaltungsaufwand und Interaktion mit dem Provider - funktionieren. -\end{defi} - -\begin{defi}{Servicemodelle} - \textbf{Infrastructure as a Service} (IaaS): - \begin{itemize} - \item vom Anbieter verwaltete Infrastruktur - \item Nutzer muss verwendetes Betriebssystem und Software vollständig selbst verwalten - \end{itemize} - - \textbf{Platform as a Service} (PaaS): - \begin{itemize} - \item virtuelle Plattform zur Verfügung gestellt (Betriebssystem, Entwicklungsplattform) - \item alles \glqq unterhalb\grqq der Plattform ist aber \emph{nicht} unter der Kontrolle des Nutzers - \end{itemize} - - \textbf{Software as a Service} (SaaS): - \begin{itemize} - \item nur eine einzelne Anwendung zur Verfügung gestellt - \item alles \glqq unterhalb\grqq der Anwendung ist aber \emph{nicht} unter der Kontrolle des Nutzers - \end{itemize} -\end{defi} - -\begin{bonus}{Charakterisken von Cloud Computing} - \begin{itemize} - \item Selbstverwaltung (On-demand self-service) - \item Breitband Internetzugang - \item Ressourcenbündelung - \item Elastizität - \item Leistungsmessung - \end{itemize} -\end{bonus} - -\begin{defi}{Bereitstellungsmodelle} - \textbf{Private Cloud}: - \begin{itemize} - \item für eine ganz spezielle Nutzergruppe betrieben - \item kann auch von der Firma selbst verwaltet werden - \end{itemize} - - \textbf{Community Cloud}: - \begin{itemize} - \item wird für verschiedene Nutzergruppen in einem bestimmten Kontext betrieben - \item in der Regel von einer der teilnehmenden Gruppen oder von externem Dienstleister bereitgestellt - \end{itemize} - - \textbf{Public Cloud}: - \begin{itemize} - \item für beliebige Nutzer zur Verfügung steht - \item von beliebigem Anbieter betrieben - \end{itemize} - - \textbf{Hybrid Cloud}: - \begin{itemize} - \item kombiniert mehrere der vorhergehenden Bereitstellungsmodelle - \item einzelnen Teile unabhängig voneinander, aber durch standardisierte Schnittstellen verbunden - \end{itemize} -\end{defi} - -\section{Datenschutz und Sicherheit} -\subsection{Datensicherheit} - -\begin{defi}{Kryptographie} - Kryptographie ist die Wissenschaft der Verschlüsselung von Informationen. Sie wird genutzt - um Informationen auf eine Art und Weise zu verändern, sodass ein Unbefugter - die Informationen nicht mehr lesen kann. Es soll nur dem tatsächlichen Adressaten - einer Nachricht möglich sein, diese auch zu lesen. Es geht also explizit nicht darum, - den Diebstahl von Informationen zu verhindern, sondern es geht darum, dass - entwendete Informationen nicht gelesen werden können. -\end{defi} - -\begin{defi}{Transpositionschiffren} - Die Verschlüsselung wird durch Umordnung der Zeichen - im Klartext umgesetzt. -\end{defi} - -\begin{defi}{Substitutionschiffren} - Die Verschlüsselung wird durch Ersetzung der Zeichen - im Klartext realisiert. - - \textbf{Monoalphabetische Substitution}: - \begin{itemize} - \item Jedes Zeichen des Klartexts wird durch genau - ein eindeutiges Zeichen aus dem Geheimtextalphabet ersetzt, das für einen - gewählten Schlüssel immer gleich ist. - \end{itemize} - - \textbf{Homophone Substitution}: - \begin{itemize} - \item Jedes Zeichen des Klartexts wird durch genau ein - anderes Zeichen aus einer eindeutigen Menge von Zeichen ersetzt, die für einen - gewählten Schlüssel immer gleich ist. - \end{itemize} - - \textbf{Polyalphabetische Substitution}: - \begin{itemize} - \item Jedes Zeichen wird durch ein eindeutiges Zeichen - aus einem von mehreren geheimen Alphabeten ersetzt, die für einen gewählten - Schlüssel immer gleich sind. Die Alphabete werden dabei immer der Reihe nach - verwendet. - \end{itemize} -\end{defi} - -\begin{example}{Cäsar Chiffre} - Im einfachsten Fall beinhalten $\mathfrak{P}$ und $\mathfrak{S}$ dieselben Zeichen und sind nur gegeneinander - um $k$ Zeichen verschoben. Diese Variante einer \emph{monoalphabetischen Substitutionschiffre} wird \emph{Cäsar Chiffre} genannt. - - Alice wählt für die Verschlüsselung $k = 10$ und erhält damit die folgenden Alphabete: - - \begin{center} - $\mathfrak{P}$: \texttt{A B C D E F G H I J K L M N O P Q R S T U V W X Y Z}\\ - $\mathfrak{S}$: \texttt{J K L M N O P Q R S T U V W X Y Z A B C D E F G H I}\\ - \end{center} - - Da Alice $k = 10$ gewählt hat, beginnt das Geheimtextalphabet mit \texttt{J}, dem - zehnten Buchstaben des Alphabets. Die Verschlüsselung führt Alice durch, - indem sie jeden Buchstaben ihres Klartexts durch den entsprechenden Buchstaben - aus dem Geheimtextalphabet ersetzt.Werden die beiden Alphabete wie - weiter oben aufgeschrieben, ist das einfach der Buchstabe im Geheimtextalphabet - der direkt unter dem Buchstaben im Klartextalphabet steht. Damit ergibt - sich für die Nachricht \texttt{HALLO} der Geheimtext \texttt{QJUUX}. Bob kann den - Geheimtext dann entschlüsseln, indem er wiederum beide Alphabete untereinander - schreibt und jedem Buchstaben aus dem Geheimtext den zugehörigen - Buchstaben aus dem Klartextalphabet zuorndet, der dann genau darüber steht. -\end{example} - -\begin{example}{Vigenère Chiffre} - Eine bekannte \emph{polyalphabetische Substitutionschiffre} ist die \emph{Vigenère Chiffre}. - Sie funktioniert im Prinzip wie die Cäsar-Chiffre, verwendet also verschobene - lateinische Alphabete zur Verschlüsselung. Wie viele Alphabete und wie - jedes von ihnen verschoben, wird durch den Schlüssel $k$ bestimmt, der in diesem - Fall ein Wort ist. Es gibt also soviele geheime Alphabete, wie es Zeichen - in $k$ gibt und jedes dieser Alphabete ist verschoben, so dass das $i$-te Alphabet - mit dem $i$-ten Zeichen von $k$ beginnt. - Alice wählt das Schlüsselwort $k = EDV$. Damit ergeben sich Klartext- und - Geheimalphabete wie folgt: - - \begin{center} - $\mathfrak{P}$: \texttt{A B C D E F G H I J K L M N O P Q R S T U V W X Y Z}\\ - $\mathfrak{S}_1$: \texttt{E F G H I J K L M N O P Q R S T U V W X Y Z A B C D}\\ - $\mathfrak{S}_2$: \texttt{D E F G H I J K L M N O P Q R S T U V W X Y Z A B C}\\ - $\mathfrak{S}_3$: \texttt{V W X Y Z A B C D E F G H I J K L M N O P Q R S T U}\\ - \end{center} - - Damit kann Alice den Klartext $M =$ \texttt{HALLOHALLO} verschlüsseln, indem Sie - die Buchstaben des Klartexts wie bei der Cäsar Chiffre zuordnet und dabei die - drei Geheimtextalphabete reihum verwendet. Da der Klartext mehr Zeichen - enthält, als es Geheimtextalphabete gibt, fängt sie nach jeweils drei Zeichen - wieder beim ersten Geheimtextalphabet an. Somit ergibt sich der Geheimtext - $C =$ \texttt{LDGPRCEOGS}. -\end{example} - -\begin{defi}{Moderne Verschlüsselungsverfahren} - Moderne Verschlüsselungsverfahren werden, im Gegensatz zu klassischen Verfahren, - nicht mehr auf Zeichen einer natürlichen Sprache angewandt. Stattdessen werden - Zahlen bzw. Bits als Grundlage der Operationen verwendet. Damit können - beliebige Daten verschlüsselt werden, nicht mehr nur Text. Damit sind moderne - Verschlüsselungsverfahren den Anforderungen der heutigen digitalen Gesellschaft - gewachsen. - - \textbf{Symmetrische Verfahren}: - \begin{itemize} - \item denselben Schlüssel zur Ver- und Entschlüsselung - \item Problem des Schlüsselaustauschs - \item Vertraulichkeit, aber keine zur Sicherstellung von Authentifizierung und Integrität - \item[$\to$] Blockchiffren - \subitem - zu verschlüsselnde Daten in $m$ Blöcke derselben Größe aufgeteilt - \subitem - einfachster Fall: jeder der zuvor erzeugten Blöcke $m_i$ mit Schlüssel $k$ - \subitem zu verschlüsseltem Block $c_i$ derselben Größe übersetzt - \item[$\to$] Stromchiffren - \subitem - Klartext wird bitweise anhand eines Schlüsselstroms verschlüsselt - \subitem - Schlüsselstrom und Geheimtext haben dieselbe Länge wie der Klartext - \end{itemize} - - \textbf{Asymmetrische Verfahren}: - \begin{itemize} - \item Die meisten asymmetrischen Verfahren basieren auf mathematischen Problemen, die nicht effizient zu lösen sind. - \item - \end{itemize} -\end{defi} - -\begin{algo}{RSA Verschlüsselung} - RSA basiert auf der Faktorisierung ganzes Zahlen, für die es keinen bekannten - effizienten Algorithmus gibt. Dabei geht es darum, eine Zahl in ihre Primfaktoren - zu zerlegen. - - Da beide Schlüssel des Schlüsselpaars zusammen funktionieren sollen, müssen sie - nach einer festen Vorschrift erzeugt werden: - \begin{enumerate} - \item Wähle zwei Primzahlen $p, q$ mit $p \neq q$ - \item Berechne $N = p \cdot q$ - \item Berechne $\varphi(N) = (p-1)\cdot (q-1)$ - \item Wähle ein $e$, das teilerfremd zu $\varphi(N)$ ist mit $1 < e < \varphi(N)$ - \item Berechne $d$, sodass $e \cdot d \equiv 1 \mod \varphi(N)$ - \end{enumerate} - - Nach dieser Prozedur ist $(e,N)$ der \emph{public key} und $(d,N)$ der \emph{private Key}. Damit - kann nun jeder Nachricht $M \in \N, 1 < M < N$ anhand folgender Formel verschlüsselt - werden: - $$ - C = M^e \mod N - $$ - - Die Entschlüsselung der verschlüsselten Nachricht $C$ kann dann anhand einer ähnlichen Formel durchgeführt werden: - $$ - M = C^d \mod N - $$ -\end{algo} - -\begin{example}{RSA Verschlüsselung} - Damit Alice Bob eine Nachricht schreiben kann, muss Bob zunächst seinen \emph{public Key} zur Vefügung stellen. - - Zur Erzeugung seines Schlüsselpaars wählt Bob die Primzahlen $p=13$ und $q=17$. - Damit ergibt sich $N = 221$ und $\varphi(N) = 192$. - Anschließend wählt Bob $e=5$ und berechnet damit $d=77$. - Damit kann Bob $(5, 221)$ als seinen \emph{public Key} an Alice geben und $(77, 221)$ behält er als \emph{private Key} für sich. - - Alice hat nun Bobs \emph{public Key} und möchte damit die Nachricht $M = 42$ verschlüsseln. - Dazu berechnet Sie $C = 42^5 \mod 221 = 9$ und schickt die verschlüsselte Nachricht anschließend an Bob. - - Bob kann nun mit seinem \emph{private Key} die erhaltene Nachricht entschlüsseln und erhält $M = 9^77 \mod 221 = 42$. -\end{example} - -\begin{defi}{Digitale Signatur} - Um auch \emph{Authentifizierung} - und \emph{Integritat} herstellen zu können, muss eine digitale Signatur verwendet - werden. Dazu braucht es zunachst eine \emph{Hashfunktion}, die eine Art Fingerabdruck - der Nachricht erzeugt. - - Nachdem mit der Hashfunktion der Hashwert der Nachricht berechnet wurde, wird - dieser mit dem \emph{private Key} des Senders verschlüsselt. - - Danach berechnet - der Empfänger selbst den Hashwert der empfangen Nachricht. Stimmen der - selbst berechnete Hashwert und der entschlüsselte Hashwert überein ist die \emph{Integrität} der Nachricht sichergestellt. Da zudem das Entschlüsseln des Hashwertes mit - dem öffentlichen Schlüssel des Senders funktioniert hat, ist der Sender authentifiziert, - da dessen privater Schlüssel zur Erstellung der digitalen Signatur verwendet - wurde. - - Es ist also notwendig, dass sich Sender und Empfanger vorab auf eine - Hashfunktion einigen. Zusatzlich ist wichtig zu beachten, dass eine Digitale Signatur - \emph{keine Vertraulichkeit} herstellt, dazu muss die Nachricht zusatzlich verschlüsselt - werden. -\end{defi} - -\begin{defi}{Hybride Chiffren} - Die Kombination von symmetrischen und asymmetrischen - Chiffren nennt man \emph{hybride Chiffren}. - - \begin{itemize} - \item verhältnismäßig kurzer Schlüssel einer Blockchiffre wird asymmetrisch verschlüsselt und zum Empfänger einer Nachricht transportiert - \item Kommunikation selbst läuft symmetrisch verschlüsselt ab - \item Kombination erzielt guten Kompromiss zwischen Sicherheit und Rechenaufwand - \end{itemize} -\end{defi} - -\printindex -\printindex[Beispiele] -\end{document} +\documentclass[german]{../spicker} + +\usepackage{amsmath} + +\usepackage{graphicx} +\usepackage{tabularx, multirow} + +\title{IT-Grundlagen} +\author{Patrick Gustav Blaneck} +\makeindex[intoc] +\makeindex[intoc, name=Beispiele,title=Beispiele] + +\newcommand{\scalarprod}[1]{\left\langle #1 \right\rangle} +\newcommand{\vektor}[1]{\begin{pmatrix*}[r] #1 \end{pmatrix*}} +\renewcommand{\span}[1]{\operatorname{span}\left(#1\right)} +\newcommand{\dx}{~\mathrm{d}x} + +\newenvironment{allintypewriter}{\ttfamily}{\par} +\newcommand*{\ditto}{\texttt{\char`\"}} + +\begin{document} +\maketitle +In dieser Zusammenfassung werden Inhalte aus dem ITG-Skript von Bastian Küppers verwendet. +\tableofcontents +\newpage + +%\setcounter{section}{1} + +\section{Codierung} +\subsection{Stellenwertsysteme} + +\begin{defi}{Stellenwertsystem} + Allgemein lässt sich der Wert einer Zahl in einem Stellenwertsystem zur Basis $B$ wie folgt ausdrücken ($d_i$ ist der Wert der $i$-ten Stelle, $r$ der Exponent der höchtswertigen Stelle): + $$ + n_b = \sum^r_{i=0} B^i \cdot d_i + $$ +\end{defi} + +\begin{algo}{Dezimal $\to$ Binär, Hexadezimal, $\ldots$} + Sei $B = 2$ für Umrechnung ins Binärsystem, bzw. $B =16$ für das Hexadezimalsystem. + + Es gilt für eine umzurechnende Zahl $z$: + + $$ + \begin{aligned} + z : B & = z_0 \quad & & \text{Rest } r_0 \\ + z_0 : B & = z_1 \quad & & \text{Rest } r_1 \\ + z_1 : B & = z_2 \quad & & \text{Rest } r_2 \\ + & \ldots & & \\ + z_{n-2} : B & = z_{n-1} \quad & & \text{Rest } r_{n-1} \\ + z_{n-1} : B & = 0 \quad & & \text{Rest } r_n + \end{aligned} + $$ + + Damit gilt dann: $(z)_{10} = (r_nr_{n-1}\ldots r_2r_1r_0)_B$ (also gelesen von \emph{unten nach oben}).\qed +\end{algo} + +\begin{algo}{Binär $\to$ Hexadezimal} + Sei eine Binärzahl $b$ gegeben mit $n \in 4\N$ Bits. + + Dann kann $b$ wie folgt in eine Hexadezimalzahl $h$ mit $m = \frac{n}{4}$ Zeichen umgeformt werden: + + $$ + \underbrace{b_{n-1}b_{n-2}b_{n-3}b_{n-4}}_{h_{m-1}} ~ \ldots ~ \underbrace{b_7b_6b_5b_4}_{h_1} ~ \underbrace{b_3b_2b_1b_0}_{h_0} + $$ + + Erinnerung: 4 Bits können binär nur 16 mögliche Werte annehmen! +\end{algo} + +\newpage +\subsection{Zahlendarstellungen} + +\begin{defi}{Einerkomplement} + Das \emph{Einerkomplement} einer Binärzahl wird gebildet, indem man alle Bits negiert. + + Das erste Bit gibt dabei das Vorzeichen an. + + Nachteile: Doppelte Darstellung der Null, Subtraktion lässt sich nicht auf Addition mit einer negativen Zahl zurückführen +\end{defi} + +\begin{defi}{Zweierkomplement} + Das \emph{Zweierkomplement} einer Binärzahl wird gebildet, indem man das Einerkomplement bildet und zusätzlich $1$ addiert. + + Das erste Bit gibt dabei das Vorzeichen an. + + Vorteile: Subtraktion entspricht Addition mit einer negativen Zahl, keine doppelte Null +\end{defi} + +\begin{defi}{Binäre Festkommazahlen} + Die Umwandlung des ganzzahligen Anteils einer (dezimalen) Festkommazahl erfolgt analog zu ganzen Zahlen. + + Zusätzlich werden aber die Nachkommastellen mit entsprechend negativen Exponenten weiter \glqq verrechnet\grqq. +\end{defi} + +\begin{defi}{Gleitkommazahlen nach \emph{IEEE 754}} + Die Darstellung einer Gleitkommazahl + $$ + x = s \cdot m \cdot b^e + $$ + besteht aus + \begin{itemize} + \item Vorzeichen $s$ (1 Bit) + \item Mantisse $m$ ($p$ Bits, $p_{\text{float}} = 23$, $p_{\text{double}} = 52$) + \item Basis $b$ (bei normalisierten Gleitkommazahlen nach IEEE ist $b = 2$) + \item Exponent $e$ ($r$ Bits, $r_{\text{float}} = 8$, $r_{\text{double}} = 11$) + \end{itemize} +\end{defi} + +\begin{algo}{Umrechnung in \emph{IEEE 754}} + \begin{itemize} + \item Umwandeln einer Dezimalzahl in eine \emph{binäre Festkommazahl} ohne Vorzeichen. + \item Normalisieren der \emph{Mantisse}:\\ + Das Komma wird $n$ Stellen nach links verschoben, so dass dort nur noch eine 1 als ganzzahliger Anteil vorhanden ist. ($n$ ist bei Verschieben nach rechts negativ!)\\ + $M$ ist dann der \emph{Nachkommateil}. + \item Bestimmen des \emph{Exponenten}: $E = (\text{bias } + n)_2$ (bias ist meist $127$, wenn nicht anders gegeben) + \item Bestimmen des \emph{Vorzeichenbits} $s$ + \item Zusammensetzen der Gleitkommazahl + $$ + s \mid E \mid M + $$ + \end{itemize} +\end{algo} + +\subsection{Zeichendarstellungen} + +\begin{defi}{UTF-8 Codierung} + \begin{tabular}{| c | r | c |} + \hline + Unicode-Bereich & \multicolumn{1}{|c|}{UTF-8-Codierung} & Möglichkeiten \\ + \hline + 0000 0000 - 0000 007F & 0xxx xxxx & 128 (7 Bits) \\ + 0000 0080 - 0000 07FF & 110x xxxx 10xx xxxx & 2.048 (11 Bits) \\ + 0000 0800 - 0000 FFFF & 1110 xxxx 10xx xxxx 10xx xxxx & 65.536 (16 Bits) \\ + 0001 0000 - 0010 FFFF & 1111 0xxx 10xx xxxx 10xx xxxx 10xx xxxx & 2.097.152 (21 Bits) \\ + \hline + \end{tabular} +\end{defi} + +\subsection{Spezielle Codierungen} + +\begin{algo}{Huffman-Codierung} + \begin{enumerate} + \item Schreibe Buchstaben mit Auftrittshäufigkeiten als \glqq Wald\grqq. + \item Fasse die beiden Bäume mit der geringsten Auftrittshäufigkeiten zu einem neuen Baum zusammen, dabei werden die Auftrittshäufigkeiten addiert. + \item Wiederhole, bis nur noch ein Baum existiert. + \item Codierung eines Buchstaben entspricht dann dem \emph{Pfad} zum entsprechenden Blatt mit \glqq links\grqq $\to$ 0, \glqq rechts\grqq $\to$ 1 + \end{enumerate} + + Mittlere Codelänge: + $$ + L(C) = \frac{\#\text{Bits der verschlüsselten Nachricht}}{\#{\text{Zeichen der verschlüsselten Nachricht}}} + $$ +\end{algo} + +\begin{defi}{Hamming-Codierung} + Bei der Hamming-Codierung werden Paritätsinformationen zu Daten hinzugefügt, um so mögliche Übertragungsfehler zu erkennen. + + Hamming-Codewörter haben die Länge $N = 2^k-1$, wobei $k$ Paritätsbits enthalten sind. + Die Bits werden der Einfachheit halber bei Eins beginnend durchnummeriert. + Die Paritätsbits stehen an den Stellen, deren Index eine 2er-Potenz ist. + + Sind $p_1, p_2, \ldots, p_k$ Paritätsbits, $d_1, d_2, \ldots, d_{N-k}$ Bits des Datenwortes und $c_1, c_2, \ldots, c_N$ die Bits des zu bildenden Codewortes, hat ein Codewort des so konstruierten Hamming-Codes die folgende Form: + + \begin{tabular}{| c | c | c || c | c | c | c || c | c | c | c | c | c | c | c || c | c | c |} + \hline + $c_1$ & $c_2$ & $c_3$ & $c_4$ & $c_5$ & $c_6$ & $c_7$ & $c_8$ & $c_9$ & $c_{10}$ & $c_{11}$ & $c_{12}$ & $c_{13}$ & $c_{14}$ & $c_{15}$ & $c_{16}$ & $c_{17}$ & \ldots \\ + \hline + $p_0$ & $p_1$ & $d_1$ & $p_2$ & $d_2$ & $d_3$ & $d_4$ & $p_3$ & $d_5$ & $d_6$ & $d_7$ & $d_8$ & $d_9$ & $d_{10}$ & $d_{11}$ & $p_4$ & $d_{12}$ & \ldots \\ + \hline + \end{tabular}\\ + + Dabei wird jedem Paritätsbit eine spezielle Bitmaske zugewiesen: + + \begin{tabular}{| c || c | c | c || c | c | c | c || c | c | c | c | c | c | c | c || c |} + \hline + & $c_1$ & $c_2$ & $c_3$ & $c_4$ & $c_5$ & $c_6$ & $c_7$ & $c_8$ & $c_9$ & $c_{10}$ & $c_{11}$ & $c_{12}$ & $c_{13}$ & $c_{14}$ & $c_{15}$ & \ldots \\ + \hline + Bitmaske $p_0$ & $p_0$ & $p_1$ & 1 & $p_2$ & 1 & 0 & 1 & $p_3$ & 1 & 0 & 1 & 0 & 1 & 0 & 1 & \ldots \\ + Bitmaske $p_1$ & $p_0$ & $p_1$ & 1 & $p_2$ & 0 & 1 & 1 & $p_3$ & 0 & 1 & 1 & 0 & 0 & 1 & 1 & \ldots \\ + Bitmaske $p_2$ & $p_0$ & $p_1$ & 0 & $p_2$ & 1 & 1 & 1 & $p_3$ & 0 & 0 & 0 & 1 & 1 & 1 & 1 & \ldots \\ + Bitmaske $p_3$ & $p_0$ & $p_1$ & 0 & $p_2$ & 0 & 0 & 0 & $p_3$ & 1 & 1 & 1 & 1 & 1 & 1 & 1 & \ldots \\ + \hline + \end{tabular}\\ + + Damit gilt: + $$ + \begin{aligned} + c_1 = p_0 & = c_3 \oplus c_5 \oplus c_7 \oplus c_9 \oplus c_{11} \oplus c_{13} \oplus c_{15} \oplus \ldots \\ + & \iff \text{jedes ungerade Datenbit} \\ + c_2 = p_1 & = c_3 \oplus c_6 \oplus c_7 \oplus c_{10} \oplus c_{11} \oplus c_{14} \oplus c_{15} \oplus \ldots \\ + & \iff \text{ein Datenbit rechts von $p_1$, zwei überspringen, zwei einberechnen, $\ldots$} \\ + c_4 = p_2 & = c_5 \oplus c_6 \oplus c_7 \oplus c_{12} \oplus c_{13} \oplus c_{14} \oplus c_{15} \oplus \ldots \\ + & \iff \text{drei Datenbit rechts von $p_2$, vier überspringen, vier einberechnen, $\ldots$} + \end{aligned} + $$ +\end{defi} + +\begin{algo}{Fehlererkennung beim Hamming-Code} + Situation: Empfangen eines Hamming-codierten Datensatzes + + \begin{enumerate} + \item Erneutes Berechnen der \emph{Paritätsbits} + \item Erkennen, welche neu berechneten Paritätsbits $p'_i$ \emph{verschieden} sind zu den empfangenen Paritätsbits $p_i$ + \item Bitfehler ist in dem Datenbit passiert, in dem gilt: + \subitem $p_i = p'_i \implies$ Bitmaske für $p_i$ ist $0$ + \subitem $p_i \neq p'_i \implies$ Bitmaske für $p_i$ ist $1$ + \end{enumerate} + + Es wird angenommen, dass nur ein Bitfehler in den Datenbits passiert ist. + + Anmerkung: Ist lediglich ein Paritätsbit verschieden, dann ist ein Übertragungsfehler in dem betreffenden Paritätsbit selbst aufgetreten, da alle Datenbits zur Berechnung von mindestens zwei Paritätsbits verwendet werden. +\end{algo} + +\section{Formale Sprachen} +\subsection{Backus-Naur-Form} + +\begin{defi}{(kontextfreie) Grammatik} + Eine (kontextfreie) Grammatik $G$ ist ein 4-Tupel $\{N, T, \Sigma, P\}$ mit folgenden Eigenschaften: + \begin{itemize} + \item $N$ ist eine endliche Menge von \emph{Nichtterminalsymbolen}, + \item $T$ ist eine endliche Menge von \emph{Terminalsymbolen}, + \item ein \emph{Startsymbol} $\Sigma \in N$, + \item eine endliche Menge an Produktionsregeln $P \subset N \times T^*$. + \end{itemize} + Es gilt $N \cap M = \emptyset$. $^*$ bezeichnet die Kleensche Hülle. + + Anmerkung: Die Notation verhält sich in der Vorlesung sehr anders als in den meisten Quellen. +\end{defi} + +\begin{defi}{Backus-Naur-Form} + In der \emph{Backus-Naur-Form} werden Symbole durch eine Zuweisung definiert.\\ + Diese wird durch den Operator \texttt{:=} dargestellt. + + \begin{itemize} + \item Dabei gilt weiterhin, dass in der Zuweisung eines \emph{Nichtterminalsymbols} mindestens ein weiteres Symbol auftauchen muss und + \item bei der Zuweisung eines \emph{Terminalsymbols} nur Zeichen des Alphabets. + \item Bei einer Zuweisung können mehrere Symbole oder Zeichen(-ketten) des Alphabets verbunden werden. + \item Durch ein Leerzeichen (\glqq ~~~\grqq, \texttt{space}) wird eine \texttt{und}-Verknüpfung definiert, + \item durch einen senkrechten Stricht (\glqq ~$\mid$~\grqq, \texttt{pipe}) wird eine \texttt{oder}-Zuweisung definiert. + \item Zur logischen Gliederung der Verknüpfungen können Klammern verwendet werden. + \item Es ist ebenfalls möglich Kardinalitäten für Symbole zu definieren: + \subitem Geschweifte Klammern \texttt{\{\}} definieren dabei eine \emph{beliebige Wiederholung} und + \subitem eckige Klammern \texttt{[]} definieren ein \emph{einmaliges Auftreten}. + \subitem In beiden Fällen ist das Weglassen des Symbols ebenfalls möglich. + \end{itemize} +\end{defi} + +\begin{example}{Backus-Naur-Form} + \begin{allintypewriter} + \begin{tabular}{rl} + Satz & := Subjekt Verb Präposition Nomen Ende \\ + Subjekt & := Nomen \\ + Nomen & := Artikel Substantiv \\ + Artikel & := \ditto der\ditto | \ditto die\ditto | \ditto das\ditto \\ + Substantiv & := \ditto Mann\ditto | \ditto Frau\ditto | \ditto Haus\ditto \\ + Verb & := \ditto geht\ditto \\ + Präposition & := \ditto in\ditto \\ + Ende & := \ditto .\ditto + \end{tabular} + \end{allintypewriter} +\end{example} + +\subsection{Programmiersprachen} + +\begin{defi}{Compiler} + Das Programm, welches den + menschenlesbaren \emph{Quellcode} anhand der Regeln der zugrundeliegenden Grammatik + interpretiert und in maschinenlesbare Anweisungen überführt, wird \emph{Compiler} genannt. + + Die maschinenlesbaren Anweisungen können dabei entweder direkt in eine + maschinenspezifische Binärfolge umgewandelt werden, oder in einen sogenannten + \emph{Bytecode}. + + Im zweiten Fall kann der Bytecode, + auch Zwischencode genannt, noch an beliebigen Prozessortypen angepasst werden, + muss dafür aber vor der Ausführung erneut bearbeitet werden. + + Bei der Kompilierung eines Programms werden zwei Phasen durchlaufen: + \begin{enumerate} + \item \textbf{Analysephase}, in der der Quellcode analysiert und auf Fehler geprüft wird: + \subitem \underline{\emph{Lexer} (lexikalischer Scanner)}: \\ + Quellcode wird in einzelne Teile (\emph{Tokens}) zerlegt und klassifiziert (z.B. als \emph{Schlüsselwörter} oder \emph{Bezeichner}).\\ + Der Lexer erkennt hier z.B. falsch benannte Variablen. + \subitem \underline{\emph{Parser} (syntaktische Analyse)}: \\ + Vom Lexer erzeugte \emph{Tokens} werden dem \emph{Parser} übergeben. + Der Parser überprüft den Quellcode auf Fehler und setzt ihn bei Fehlerfreiheit in einen \emph{Syntaxbaum} (AST) um.\\ + Hier werden Fehler wie fehlende Semikolons oder falsche genutzte Operatoren erkannt. + \subitem \underline{\emph{Semantische Analyse}}: \\ + Hier wird z.B. kontrolliert, ob eine verwendete Variable auch vorher deklariert wurde, oder ob Quell- und Zieltyp einer Anweisung übereinstimmen. Dabei erzeugte Metadaten werden in den AST integriert. + In diesem Schritt werden generell semantische Fehler erkannt, d.h. Anweisungen, die korrekt aussehen, aber fehlerhaft sind. + \\ + \item \textbf{Synthesephase}, in der Binär- bzw. Bytecode erzeugt wird: + \subitem \underline{\emph{Zwischencodeerzeugung}}: \\ + Hier wird plattformunabhängiger Bytecode erzeugt, der als Grundlage für den nächsten Schritt dient. + \subitem \underline{\emph{Optimierung}}: \\ + Während der Optimierung wird versucht die Performanz des erzeugten Programms zu steigern. + \subitem \underline{\emph{Codegenerierung}}: \\ + Hier wird aus dem optimierten Zwischencode der \emph{Binärcode} erzeugt. + \end{enumerate} +\end{defi} + +\begin{bonus}{Ahead-of-Time Compiler} + Bei dieser Variante wird der gesamte Quellcode \emph{in einem Rutsch} + in Binär- oder Bytecode übersetzt. Das kann mitunter dazu führen, dass die Kompilierung + sehr lange dauert. +\end{bonus} + +\begin{bonus}{Just-in-Time Compiler} + Daher haben sich mit der Zeit auch sogenannte \emph{Just-in- + Time Compiler} etablieren können, die nur einen kleinen Teil des Quellcodes direkt + übersetzen und weitere Teile des Quellcodes erst dann übersetzen, \emph{wenn sie bei der + Programmausführung benötigt werden}. +\end{bonus} + +\begin{defi}{Linker} + Nachdem der Compiler den Binärcode erzeugt hat, muss der \emph{Linker} daraus noch + ein lauffähiges Programm erstellen. Das ist insbesondere der Fall, wenn es mehrere + Dateien mit Quellcode gibt. + + Dies geschieht indem der Binärcode zu den verschiedenen + Quellcodedateien, der nun in sogenannten \emph{Objektdateien} vorliegt, zusammengefügt wird. Dabei werden beispielsweise symbolische Adressen aus mehreren + Quellcodemodulen und externen Bibliotheken so angepasst, dass sie zusammen + passen. + + Dabei wird zwischen \emph{statischem Linken} und \emph{dynamischen Linken} unterschieden: + + Beim \textbf{statischen Linken} werden alle verfügbaren Objektdateien zu \emph{einer + einzigen, ausführbaren Programmdatei} gelinkt. + \begin{itemize} + \item Vorteil: keine externen Abhängigkeiten, Programm auf jedem geeigneten System ohne Weiteres lauffähig + \item Nachteil: nicht mehr möglich, einzelne Programmteile auszutauschen ohne den Linkvorgang vollständig zu wiederholen, + \end{itemize} + Beim \textbf{dynamischen Linken} werden Funktions- und Variablenadressen erst zur Laufzeit aufgelöst, sodass externe Bibliotheken + einfach in Form von \emph{Dynamically Linked Libraries} (DLLs) bzw. \emph{Shared Objects} (SOs) angesprochen werden können. Da DLLs bzw. SOs als existierend + vorausgesetzt werden, wird das fertige Programm bei dynamischem Linken kleiner. + \begin{itemize} + \item Vorteil: mehrere Programme können dieselbe externe Bibliothek verwenden, ohne dass der benötigte Code mehrfach in einzelne Programme integriert werden muss. + \end{itemize} +\end{defi} + +\begin{defi}{Interpreter} + \emph{Interpreter} zeichnen sich dadurch aus, dass der Quellcode nicht einmalig in Binärcode übersetzt wird, sondern bei jeder Programmausführung schrittweise abgearbeitet wird. + \begin{itemize} + \item Vorteile: einfache Portabilität, dynamischere Quellcodeverwaltung + \item Nachteile: deutlich langsamere Ausführungsgeschwindigkeit, keine Optimierungen an Programmstruktur möglich + \end{itemize} +\end{defi} + +\section{Rechnerarchitekturen} +\subsection{Von-Neumann-Architektur} + +\begin{defi}{Von-Neumann-Architektur} + Im Grundsatz besteht die Architektur aus drei Komponenten: \emph{CPU}, \emph{Speicher} und \emph{I/O Einheit}. + + Die einzelnen Komponenten sind über Datenleitungen, sogenannte \emph{Busse}, verbunden. + \begin{center} + \includegraphics[]{images/von_neumann.pdf} + \end{center} +\end{defi} + +\begin{defi}{CPU} + Die \emph{CPU} (\emph{Central Processing Unit}, Prozessor) ist sozusagen das Gehirn des Computers. + Die CPU besteht im Wesentlichen aus drei Teilen, dem \emph{Leitwerk} und + dem \emph{Rechenwerk} und den \emph{Registern}, welche direkt zur Abarbeitung von Befehlen + benötigte Daten und berechnete Ergebnisse aufnehmen können. + + Das \emph{Leitwerk} steuert die Ausführung des Binärcodes, das \emph{Rechenwerk} führt anfallende Rechenoperationen aus. +\end{defi} + +\begin{bonus}{Aufbau Rechenoperationen} + \begin{itemize} + \item \emph{Operationsteil}: codiert konkreten Befehl + \item \emph{Operanden}: stellen z.B. Summanden einer Operation, oder Adresse einer Variablen dar + \end{itemize} +\end{bonus} + +\begin{bonus}{Abarbeitung von Befehlen} + Jeder Befehl durchläuft bei der Abarbeitung in der CPU folgende Schritte: + \begin{itemize} + \item \emph{Instruction Fetch (IF)} : Befehl lesen + \item \emph{Instruction Decode (ID)} : Befehl decodieren + \item \emph{Fetch Operands (FO)} : Operanden laden + \item \emph{Execute (EX)} : Befehl ausführen + \item \emph{Writeback (WB)} : Ergebnis schreiben + \end{itemize} + + \begin{center} + \includegraphics[]{images/befehlsabarbeitung.pdf} + \end{center} +\end{bonus} + +\begin{defi}{Prozessorarchitekturen} + \textbf{CISC} (\emph{Complex Instruction Set Computer}):\\ + Eine CISC CPU zeichnet sich durch einen \emph{komplexen Befehlssatz} in Form von \emph{Microcode} und dem Vorhandensein nur \emph{weniger Register} aus. + + \textbf{RISC} (\emph{Reduced Instruction Set Computer}):\\ + eine RISC CPU nur über \emph{wenige, in Hardware realisierte Befehle} und \emph{viele Prozessorregister}. +\end{defi} + +\begin{defi}{Pipelining} + In einer \emph{RISC CPU}, die nur wenige und elementare Befehle verwendet, kann dafür + gesorgt werden, dass alle Teilschritte, deren \emph{parallele Verarbeitung} das Pipelining + ermöglicht, gleich lange dauern. Nur deswegen kann das Konzept des Pipelinings + erfolgreich umgesetzt werden. + + Das ist bei einer \emph{CISC CPU} aufgrund der vielen + und teils sehr komplexen Befehle \emph{nicht} möglich. +\end{defi} + +\begin{example}{Pipelining} + 5-Stage-Pipeline: + \begin{itemize} + \item Instruction Fetch (\textbf{IF}): Befehl lesen + \item Instruction Decode (\textbf{ID}) : Befehl decodieren + \item Execute (\textbf{EX}) : Ausführen + \item Memory Access (\textbf{MEM}) : Ausführen + \item Writeback (\textbf{WB}) : Ergebnis schreiben + \end{itemize} + + \begin{center} + \begin{tabular}{| c || m{0.05\textwidth} | m{0.05\textwidth} | m{0.05\textwidth} | m{0.05\textwidth} | m{0.05\textwidth} | m{0.05\textwidth} |} + \hline + Instr. 1 & \texttt{IF} & \texttt{ID} & \texttt{EX} & \texttt{MEM} & \texttt{WB} & \\ + \hline + Instr. 2 & & \texttt{IF} & \texttt{ID} & \texttt{EX} & \texttt{MEM} & \texttt{WB} \\ + \hline + Instr. 3 & & & \texttt{IF} & \texttt{ID} & \texttt{EX} & \texttt{MEM} \\ + \hline + Instr. 4 & & & & \texttt{IF} & \texttt{ID} & \texttt{EX} \\ + \hline + Instr. 5 & & & & & \texttt{IF} & \texttt{ID} \\ + \hline + \hline + Clock Cycle & \multicolumn{1}{c|}{1} & \multicolumn{1}{c|}{2} & \multicolumn{1}{c|}{3} & \multicolumn{1}{c|}{4} & \multicolumn{1}{c|}{5} & \multicolumn{1}{c|}{6} \\ + \hline + \end{tabular} + \end{center} +\end{example} + +\begin{defi}{ROM} + Der \emph{ROM} ist ein Festwertspeicher, der - prinzipiell - \emph{nur gelesen} werden kann und die Firmware des Computers gespeichert hat. + + Im ROM liegt das sogenannte \emph{BIOS} (\emph{basic input output system}) bzw. moderner \emph{UEFI} + (\emph{unified extensible firmware interface}). + Die im ROM abgelegten Informationen stellen die Firmware des + Rechners dar. Diese Firmware sorgt dafür, dass der Computer nach dem Einschalten + in die Lage versetzt wird, grundlegende Hardwarekomponenten zu verwalten. +\end{defi} + +\begin{defi}{RAM} + Der \emph{RAM}, + auch \emph{Hauptspeicher} genannt, ist ein Speicher mit \emph{wahlfreiem Zugriff}, der seinen + Inhalt jedoch bei Verlust der Betriebsspannung \emph{verliert}. Im RAM werden Informationen + abgelegt, die ein \emph{Programm zur Laufzeit} benötigt. + + Sollen Daten + über das Ende des Programms hinaus gespeichert werden, müssen sie über die + \emph{I/O-Einheit} auf einen anderen Speicher geschrieben werden. +\end{defi} + +\begin{defi}{Cache} + \emph{Cache} ist \emph{schneller} als RAM, kann aber nur \emph{weniger Speicherkapazität} zur Verfügung stellen. + + Das bedeutet, dass der Cache nur kleine Datenmengen, sogenannte \emph{Cacheblocks}, aus dem Hauptspeicher vorhalten kann. + Diese haben eine definierte Größe und können dann schneller in die CPU geldaden werden, als das aus dem RAM möglich wäre. +\end{defi} + +\begin{defi}{Lokalität} + \textbf{Zeitliche Lokalität}:\\ + Es ist, bei entsprechender Programmierung, sehr wahrscheinlich, dass + auf eine Speicherzelle nicht nur einmal, sondern in kurzer Zeit \emph{mehrmals zugegriffen} + wird. + + \textbf{Örtliche Lokalität}:\\ + Es ist, bei entsprechender Programmierung, sehr wahrscheinlich, dass nach + dem Zugriff auf eine bestimmte Speicherzelle auch ein \emph{Zugriff in deren unmittelbarer + \glqq Nachbarschaft\grqq} stattfindet. +\end{defi} + +\begin{bonus}{Aufbau eines Caches} + \begin{center} + \includegraphics[]{images/cache_aufbau.pdf} + \end{center} + + Aus der Abbildung ist ersichtlich, dass der Cache selbst ebenenweise organisiert ist. + + Im Regelfall sind mindestens die Ebenen L1 und L2 vorhanden, oftmals sogar noch + eine dritte Ebene L3. Dabei ist in jedem Fall der L1-Cache in die CPU integriert, + häufig auch noch der L2-Cache. + + Beginnend beim + L3-Cache werden die Cachelevel mit größerer Nähe zur CPU jeweils kleiner und + schneller. Dieser Aufbau soll die Frage nach der Auswahl der Daten, die im Cache + vorgehalten werden, vereinfachen. Es ist also möglich einen relativ großen Datenbestand + im L3-Cache vorzuhalten, der schneller ist als der Hauptspeicher. Von dort + aus kann dann wiederum eine Teilmenge der Daten im noch schnelleren L2-Cache + vorgehalten werden, usw. + + Liegen benötigte Daten nicht im L1-Cache, welcher Daten bzw. Befehle schlussendlich an die CPU liefert, ist aufgrund der Lokalität und + des Aufbaus des Caches die Wahrscheinlichkeit hoch, dass die benötigten Daten + nicht aus dem langsamen Hauptspeicher geladen werden müssen, sondern sich in + einem der niedrigeren Cache-Level finden und damit immer noch vergleichsweise + schnell zur Verfügung gestellt werden können. +\end{bonus} + +\begin{bonus}{Interner Aufbau eines Cachelevels} + \begin{center} + \includegraphics[]{images/cache_level.pdf} + \end{center} + + Zu jedem Cacheblock wird die Startadresse des Blocks im RAM gespeichert, diese + Information wird \emph{Tag} genannt. + + Wird von der CPU eine Anfrage an den Speicher + gestellt, wird zunächst anhand des Tags unter Zuhilfenahme des Komparators geprüft, ob der angefragte Datensatz im Cache liegt. Dabei wird auch geprüft, ob eine + angefragte Speicheradresse innerhalb eines Cacheblocks liegt. Das ist möglich, da + der Tag sowie die Größe des Cacheblocks bekannt sind. + + Ist dies nicht der Fall, wird + die Anfrage an ein niedrigeres Cachelevel bzw. den RAM weitergereicht. + + Außerdem + werden zu jedem Cacheblock Statusbits gespeichert, die beispielsweise angeben ob + sich der Cacheblock verändert hat (\emph{dirty bit}), seit er in den Cache geladen wurden, + oder ob ein Platz im Cache mit einem gültigen Cacheblock belegt ist (\emph{invalid bit}). +\end{bonus} + +\begin{defi}{Organisation der Tags} + Die \emph{Blöcke} (Cache-Lines) eines Caches können in so genannte \emph{Sätze} zusammengefasst werden. + Für eine bestimmte Adresse ist dann immer nur einer der Sätze zuständig. + Innerhalb eines \emph{Satzes} bedienen alle Blöcke also nur einen \emph{Teil} aller vorhandenen Adressen. + + Im Folgenden stehe die Variable $m$ für die \emph{Gesamtanzahl der Cacheblöcke} und $n$ für die \emph{Anzahl der Blöcke pro Satz}, die so genannte \emph{Assoziativität}. + Dann besteht der Cache also aus $\frac {m}{n}$ Sätzen. + + \textbf{Direkt abgebildet} (\emph{DM}, \emph{direct mapped}, $n=1$):\\ + Es gibt pro Cacheblock nur eine einzige Möglichkeit, wo dieser + platziert werden kann. + + Daher kann es allerdings vorkommen, dass ein Cacheblock + nicht platziert werden kann, obwohl noch Platz im Cache wäre. + + \textbf{Vollassoziativ} (\emph{FA}, \emph{fully associative}, $n=m$):\\ + Ein Cacheblock kann beliebige auf freie Plätze im Cache zugeordnet + werden. + + Bei einer Speicheranfrage müssen allerdings alle gespeicherten + Tags durchsucht werden. + + \textbf{Satzassoziativ} (\emph{SA}, \emph{set associative}, $2\leq n \leq \frac{m}{2}$):\\ + Der verfügbare Platz wird in Gruppen unterteilt. Wie bei einem + DA Cache gibt es nur eine Gruppe, in der ein Cacheblock platziert werden kann; + wie bei einem VA Cache kann der Cacheblock innerhalb dieser Gruppe frei platziert + werden. +\end{defi} + +\begin{defi}{Cache-Lesezugriffe} + Findet ein Lesezugriff auf Speicherzelle $A$ statt, wird geprüft, ob Speicherzelle $A$ bereits im Cache liegt. + \begin{itemize} + \item \textbf{$A$ liegt im Cache} (\emph{cache hit}):\\ + Datensatz kann direkt aus dem Cache gelesen werden. + \item \textbf{$A$ liegt nicht im Cache} (\emph{cache miss}):\\ + Datensatz muss aus dem Hauptspeicher in den Cache geladen werden, danach wird der Datensatz gelesen. + \end{itemize} +\end{defi} + +\begin{defi}{Schreibmodi eines Cache} + \begin{itemize} + \item \textbf{write-through} (\emph{WT}):\\ + Datensatz wird im Cache und direkt im Hauptspeicher aktualisiert. + + \emph{Vorteile}: keine Probleme mit Datenkonsistenz im Hauptspeicher\\ + \emph{Nachteile}: hoher Aufwand für Schreiboperationen + \item \textbf{write-back} (\emph{WB}):\\ + Datensatz wird im Cache aktualisiert und erst dann in den Hauptspeicher geschrieben, wenn der entsprechende Cacheblock aus dem Cache verdrängt wird. + + \emph{Vorteile}: niedrige Belastund der Systembusse, keine Wartezyklen\\ + \emph{Nachteile}: fehlende Datenkonsistenz + \end{itemize} +\end{defi} + +\begin{defi}{Cache-Schreibzugriffe} + Findet ein Schreibzugriff auf Speicherzelle $A$ statt, wird geprüft, ob Speicherzelle $A$ bereits im Cache liegt. + \begin{itemize} + \item \textbf{$A$ liegt im Cache} (\emph{cache hit}):\\ + Datensatz wird im Cache (und im Hauptspeicher) aktualisiert. + \item \textbf{$A$ liegt nicht im Cache} (\emph{cache miss}):\\ + Datensatz wird im Hauptspeicher geschrieben, Inhalt des Caches wird nicht verändert. + \end{itemize} +\end{defi} + +\begin{defi}{Cache Misses} + \begin{itemize} + \item \textbf{Capacity Miss}: + \subitem - tritt auf, wenn Datensatz bereits im Cache war, aber \emph{bereits verdrängt} wurde + \subitem (aufgrund mangelnder Kapazität) + \subitem - hauptsächlich bei VA Caches + \item \textbf{Compulsory Miss}: + \subitem - tritt auf, wenn ein Datensatz das \emph{erste Mal} verwendet wird + \subitem - unabhängig vom Typ des Caches + \item \textbf{Conflict Miss}: + \subitem - tritt auf, wenn Datensatz bereits im Cache war, aber \emph{bereits verdrängt} wurde + \subitem (weil ein anderer Cacheblock an entsprechende Stelle gelagert werden sollte) + \subitem - vor allem bei DA Caches + \end{itemize} +\end{defi} + +\begin{defi}{RAID} + \textbf{RAID}: \textbf{R}edundant \textbf{A}rray of \textbf{I}ndependent \textbf{D}isks + + Ein \emph{RAID} besteht aus mindestens zwei Festplatten und zielt auf die \emph{Verbesserung einer Eigenschaft ab}: + \begin{itemize} + \item Erhöhung der Ausfallsicherheit + \item Steigerung der Datentransferrate + \item Erweiterung der Speicherkapazität + \item Möglichkeit des Austauschs von Festplatten im laufenden Betrieb + \item Kostenreduktion durch Einsatz mehrerer kostengünstiger Festplatten + \end{itemize} +\end{defi} + +\begin{defi}{RAID-Level} + Die genaue Funktionsweise des RAID wird durch das sogenannte \emph{RAID-Level} angegeben. + + \begin{itemize} + \item \textbf{RAID 0}: + \subitem - höhere Transferraten durch \emph{Striping} + \subitem - Daten werden auf mehrere Festplatten verteilt + \subitem - beim Lesen und Schreiben können mehrere Festplatten parallel verwendet werden + \subitem \emph{Nachteil}: fällt eine Festplatte aus, sind meist alle Daten verloren + \item \textbf{RAID 1}: + \subitem - erhöhte Ausfallsicherheit durch \emph{Mirroring} + \subitem - Daten in gleicher Weise auf mehrere Festplatten gleichzeitig abgelegt + \subitem - einzelne Daten \emph{können} auch parallel von mehreren Festplatten gelesen werden + \subitem \emph{Nachteil}: wird eine Datei gelöscht, wird sie auf allen Platten gelöscht (kein Backup!) + \item \textbf{RAID 5}: + \subitem - versucht Vorteile von RAID 0 und RAID 1 zu vereinen + \subitem - höhere Ausfallsicherheit bei höherer Datentransferrate + \subitem - besteht aus mindestens drei Festplatten + \subitem - Verwendet Variante von \emph{Striping}: + \subsubitem - nicht auf alle $n$ Festplatten verteilt + \subsubitem - auf allen Festplatten Paritätsinformationen zu Daten auf anderen $n-1$ Platten + \subsubitem - kann Ausfall einer Festplatte kompensieren + \end{itemize} + + + \begin{center} + \includegraphics[]{images/raid0.pdf} + + \includegraphics[]{images/raid1.pdf} + + \includegraphics[]{images/raid5.pdf} + \end{center} + + Merhere RAID-Systeme eines Typs können auch zu einem RAID-System zusammengefasst werden (z.B. \emph{RAID 100}, \emph{RAID 01}, \emph{RAID 10}, \ldots). +\end{defi} + +\begin{bonus}{HDD, SSD} + \textbf{HDD} (Hard Disk Drive, \emph{Festplatte}): + \begin{itemize} + \item Gehäuse der Festplatte beinhaltet mehrere, auf einer Achse übereinander montierten, runden Platten, welche mit einer magnetisierbaren Schicht überzogen sind + \item Schreib-/Leseköpfe werden durch einen zentralen Kamm über die Platten bewegt + \item \glqq Landing Zone\grqq zum Parken der Köpfe (Berührung $\to$ Datenverlust) + \item Platten rotieren mit konstanter Umdrehungszahl (5400-15000 rpm) + \item Kenngrößen: + \subitem - kontinuierliche Übertragungsrate (\emph{sustained data rate}) + \subitem - mittlere Zugriffszeit (\emph{(data) access time}), bestehend aus: + \subsubitem - Spurwechselzeit (\emph{seek time}) + \subsubitem - Latenzzeit (\emph{latency}) + \subsubitem - Kommando-Latenz (\emph{controller overhead}) + \end{itemize} + + + \textbf{SSD} (Solid State Drive): + \begin{itemize} + \item keine mechanischen Bauteile + \item niedriger Energieverbrauch + \item hoher Datendurchsatz + \item hoher Preis pro Speichereinheit + \end{itemize} +\end{bonus} + +\begin{bonus}{Daten- und Adressbus} + Einzelne Komponenten sind über Leitungen, sogenannte \emph{Busse} verbunden. + \begin{itemize} + \item \emph{Datenbus} (bi-direktional) + \item \emph{Adressbus} (uni-direktional, leitet Adressanfragen der CPU an RAM oder Cache weiter) + \end{itemize} +\end{bonus} + +\subsection{Parallele Rechnerarchitekturen} + +\begin{defi}{Flynn'sche Klassifikation (Flynn'sche Taxonomie)} + \begin{center} + \includegraphics[]{images/flynn.pdf} + \end{center} + + \begin{itemize} + \item \emph{SISD} entspricht der Von-Neumann-Architektur + \item \emph{MIMD} entspricht dem heutigen Mehrprozessorsystem + \item \emph{SIMD} entspricht dem Aufbau einer Grafikkarte (genutzt in HPC) + \item \emph{MISD} eher ungebräuchlich. + \end{itemize} +\end{defi} + +\begin{defi}{Shared-Memory Systeme} + Ein \emph{Shared-Memory System} teilt den vorhandenen RAM unter den verfügbaren Prozessorenkernen auf. + Das bedeutet, dass Daten zwischen den einzelnen Prozessorkernen \emph{implizit über den RAM} verteilt werden können, da + jeder Kern Zugriff auf den RAM hat. + + \textbf{SMP} (\emph{symmetric multi processing}) skaliert vergleichweise schlecht. + Das liegt daran, dass an die vorhandene Basis der Von-Neumann-Architektur einfach + weitere Prozessorkerne angeschlossen werden. Da sich diese Prozessorkerne + nun aber das vorhandene Bus-System teilen müssen, entsteht an dieser Stelle ein + \emph{Flaschenhals}. + + \textbf{ccNUMA} (\emph{cache-coherent non-uniform memory architecture}) soll dieses Problem, speziell im Bereich HPC, beheben. + Dabei wird der vorhandene Hauptspeicher auf mehrere Memory-Controller aufgeteilt. + Jeder Prozessor ist dann an einen eigenen Memory-Controller angeschlossen. + Dabei kann grundsätzlich weiterhin jeder Kern auf den gesamten RAM zugreifen. + Es kann nur sein, dass der Zugriff länger dauert, wenn der betreffende Teil des RAMs von einem anderen Memory-Controller verwaltet wird. +\end{defi} + +\begin{defi}{Distributed-Memory System} + Ein \emph{Distributed-Memory System} verbindet mehrere + \emph{unabhängige Recheneinheiten}, sodass Daten \emph{explizit} über eine Netzwerkverbindung + zwischen dieses Recheneinheiten verteilt werden müssen. + + Dieser Ansatz skaliert sehr gut, d.h. es ist + ohne Weiteres möglich weitere Recheneinheiten anzuschließen, ohne die Gesamtperformance + des Systems zu beeinträchtigen +\end{defi} + +\begin{bonus}{Speedup und Effizienz} + \emph{Speed Up} und \emph{Effizienz} beurteilen die Güte paralleler Programmausführung, indem sie \emph{Zeitersparnis} und die \emph{Anzahl der verwendeten Prozessorkerne} in Relation setzen. + + Sei $T(p)$ die Zeit zur Programmausführung bei Verwendung von $p$ CPUs. Dann sind der \emph{Speed Up} $S(p)$ und die Effizienz $E(p)$ definiert wie folgt: + $$ + S(p) = \frac{T(1)}{T(p)} \qquad \qquad E(p) = \frac{S(p)}{p} + $$ + Der \emph{Speed Up} gibt an, wieviel schneller die Programmausführung ist. + Die Effizienz gibt an, wie gut die verwendeten Prozessorkerne genutzt worden sind. + + Im Idealfall ist $S(p) = p$ und $E(p) = 1$. +\end{bonus} + +\begin{bonus}{Amdahl's Law} + Nach Amdahl wird der Geschwindigkeitszuwachs vor allem durch den sequentiellen Anteil des Problems beschränkt, da sich dessen Ausführungszeit durch Parallelisierung nicht verringern lässt. + + Der \emph{Speed Up} nach Amdahl ist wie folgt definiert ($f \in (0, 1]$: serieller Teil des Programms): + $$ + S(p) = \frac{T(1)}{f \cdot T(1) + (1-f) \cdot \frac{T(1)}{p}} = \frac{1}{f + \frac{1-f}{p}} + $$ +\end{bonus} + +\section{Betriebssysteme} + +\begin{defi}{Betriebssystem} + Das \emph{Betriebssystem} liegt als Softwareschicht zwischen dem Rechner bzw. der \\ \emph{Software-Hardwareschnittstelle}, die das BIOS zur Verfügung stellt, und den Anwenderprogrammen. + Das heißt, dass ein Endnutzer nur mit dem Betriebssystem, den vom Betriebssystem bereitgestellten Dienstprogrammen und den Anwenderprogrammen in Kontakt kommt. + + \begin{center} + \includegraphics[]{images/betriebssysteme.pdf} + \end{center} +\end{defi} + +\begin{bonus}{Anforderungen an ein Betriebssystem} + \begin{itemize} + \item Hohe Zuverlässigkeit und Leistung + \item Einfache Bedienbarkeit und Wartbarkeit + \item Niedrige Kosten + \end{itemize} +\end{bonus} + +\begin{bonus}{Batchsysteme} + \emph{Batchsysteme} sind dazu gedacht, Rechenaufgaben ohne Nutzereingabe abzuarbeiten. + Dazu gibt es eine \emph{Job Queue}, in welche Aufgaben eingestellt werden. + Diese Aufgaben werden dann bearbeitet und die Ergebnisse an den Nutzer ausgegeben. +\end{bonus} + +\begin{bonus}{Dialogsysteme} + \emph{Dialogsysteme} sind auf eine Interaktion mit dem Benutzer ausgelegt. + Sie sind die wohl geläufigste Form von Betriebssystemen, da diese Form auf z.B. Desktop-Computern eingesetzt wird. + + Dialogsysteme werden noch einmal unterteilt in \emph{Single User}- und \emph{Multi-User-Systeme}. +\end{bonus} + +\begin{bonus}{Echtzeitsysteme} + \emph{Echtzeitsysteme} sind reaktive Systeme, die mit Hilfe von Sensoren Ereignisse registrieren und anhand von Aktoren darauf reagieren. + Dabei ist die zeitliche Abfolge bzw. die Dauer der Ausführung von Interesse. +\end{bonus} + +\subsection{Prozess} + +\begin{defi}{Prozess} + Ein \emph{Prozess} ist die Abstraktion eines in Ausführung befindelichen Programms. + + Er besteht aus den \emph{Programmbefehlen} und dem \emph{Prozesskontext}. + + Der \emph{Prozesskontext} besteht aus dem privaten Adressraum des Prozessors, geöffneten Streams und abhängigen Prozessen. +\end{defi} + +\begin{defi}{Prozesszustände} + \begin{center} + \includegraphics[]{images/prozesszustaende.pdf} + \end{center} + \begin{enumerate} + \item Der Prozess muss auf ein externes Ereignis warten. + \item Die Zeitscheibe des Prozesses ist abgelaufen, oder ein höher priorisierter Prozess muss ausgeführt werden. + \item Der Prozess bekommt eine neue Zeitscheibe zugeteilt. + \item Das externe Ereignis, auf das der Prozess gewartet hat, ist eingetreten. + \end{enumerate} +\end{defi} + +\begin{bonus}{Multitasking} + \textbf{Preemptives Multitasking}: + \begin{itemize} + \item Betriebssystem entscheidet, wann welcher Prozess zur Ausführung kommt + \item Benutzer erhält Eindruck von Parallelität + \end{itemize} + + \textbf{Kooperatives Multitasking}: + \begin{itemize} + \item Prozess bestimmt selbst, wann er den Prozessor abgibt + \item \emph{Nachteile} + \subitem - z.B. Endlosschleifen können das gesamte System zum Absturz bringen + \subitem - das Betriebssystem kann nicht berechnen, wann der Prozessor wieder frei ist + \end{itemize} +\end{bonus} + +\begin{defi}{Scheduling} + Die Zuteilung von Zeitscheiben wird \emph{Scheduling} genannt und ist der Kern der Prozessverwaltung. + Das Scheduling sollte dabei jederzeit die folgenden Eigenschaften erfüllen: + \begin{itemize} + \item \emph{Fairness}: Jeder Prozess erhält einen gerechten Anteil der CPU-Zeit. + \item \emph{Effizienz}: Die CPU und andere Ressourcen sind möglichst vollständig ausgelastet. + \end{itemize} +\end{defi} + +\begin{bonus}{Priorität} + \textbf{Statische Priorität}: + \begin{itemize} + \item Jeder Prozess erhält beim Start eine \emph{feste Priorität} + \item Prozess mit \emph{höchster Priorität} bekommt als nächstes eine Zeitscheibe zugeteilt + \item Oft in Echtzeitsystemen verwendet + \end{itemize} + + \textbf{Dynamische Priorität}: + \begin{itemize} + \item Jeder Prozess erhält beim Start eine \emph{Anfangspriorität} + \item Prozess mit \emph{höchster Priorität} bekommt als nächstes eine Zeitscheibe zugeteilt + \item Prioritäten der Prozesse werden \emph{dynamisch geändert} + \end{itemize} +\end{bonus} + +\begin{algo}{Scheduling: FIFO (First In First Out)} + Prozesse werden nach \emph{Reihenfolge} ihres Einfügens in die \emph{Job-Queue} bearbeitet. + \begin{itemize} + \item Zuteilung der CPU findet nur statt, wenn laufender Prozess wartet oder sich beendet + \item Jeder Prozess kommt garantiert an die Reihe + \item Kurze Prozesse müssen unter Umständen sehr lange warten, bis sie ausgeführt werden + \end{itemize} +\end{algo} + +\begin{algo}{Scheduling: SJF (Shortest Job First)} + Prozesse werden aufsteigend nach ihrer \emph{geschätzten Ausführungszeit} bearbeitet. + \begin{itemize} + \item Große Prozesse kommen möglicherweise nie an die Reihe, wenn stets kleinere dazukommen + \item Wartezeit auf das Ergebnis eines Prozesses sich in etwa proportional zur Ausführungszeit + \end{itemize} +\end{algo} + +\begin{algo}{Scheduling: MLFQ (Multilevel Feedback Queue)} + Bei diesem Ansatz gibt \emph{mehrere FIFO-Queues}, denen jeweils + eine \emph{Priorität} zugeordnet ist. + + Ein neuer Prozess wird immer in der Queue mit + \emph{höchster Priorität} eingeordnet. + + Wird der Prozess während der ersten Zeitscheibe fertig, + so verlässt er das System. + + Gibt er die CPU freiwillig ab, beispielsweise weil er + durch das Warten auf ein externes Ereignis blockiert wird, wird er, sobald er wieder + bereit ist, in \emph{dieselbe Queue wieder einsortiert} und dort weiter ausgeführt. + + Verbraucht der Prozess seine Zeitscheibe vollständig, so wird er in die \emph{nächst-niedriger priorisierte FIFO-Queue} eingereiht. Dort gelten wieder dieselben Regeln wie vorher. + + Verbraucht der Prozess immer weiter seine Zeitscheiben vollständig, kommt er + schließich in der \emph{am niedrigsten priorisierten Queue} an. + Dort verweilt er, bis er abgearbeitet wurde, d.h. es gibt \emph{keine Möglichkeit} wieder in höher priorisierte Queues + eingestuft zu werden. + + Wieviele FIFO-Queues es gibt, ist vom konkreten Einsatzszenario abhängig. +\end{algo} + +\subsection{Speicherverwaltung} + +\begin{defi}{Reale Speicherverwaltung} + Jedem Prozess wird ein zusammenhängener Block im Hauptspeicher zugeteilt. + Wird in diesem Kontext der Arbeitsspeicher direkt aus den Prozessen heraus adressiert, spricht man von \emph{realer Speicherverwaltung}. + + Das bedeutet auch, dass die Größe des physikalisch vorhandenen Hauptspeichers die Anzahl der gleichzeitig ausführbaren Prozesse begrenzt. + + \emph{Nachteile}: + \begin{itemize} + \item Es muss Platz für das \emph{gesamte Programm und die Daten} gefunden werden. + \item Es kannt nicht mehr Speicher genutzt werden, als \emph{physikalisch vorhanden}. + \item Anforderung, zusammenhängender Speicherblöcke zu finden, verschärft Problem der \emph{Fragmentierung}. + \end{itemize} +\end{defi} + +\begin{bonus}{Fragmentierung} + \emph{Fragmentierung} passiert dann, wenn mehrere, kleine Blöcke im Hauptspeicher frei sind und unter der Prämisse, dass einem + Prozess ein zusammenhängender Block im Hauptspeicher zugeordnet werden + muss, dies eventuell zu einer Situation führt, in der kein neuer Prozess gestartet + werden kann, obwohl in Summe genügend Hauptspeicher frei wäre. +\end{bonus} + +\begin{defi}{Swapping} + Beim \emph{Swapping} wird der + Hauptspeicherinhalt eines Prozesses auf den \emph{Hintergrundspeicher}, beispielsweise + eine Festplatte (HDD), \emph{ausgelagert}, um Platz für andere Prozesse zu schaffen. + + Bekommt dann der Prozess, dessen Daten gerade auf dem Hintergrundspeicher liegen, + die CPU zugeteilt, müssen seine Daten \emph{erneut in den Hauptspeicher geladen werden}, + wahrscheinlich nachdem die Daten eines anderen Prozesses ausgelagert wurden. +\end{defi} + +\begin{defi}{Virtuelle Speicherverwaltung} + Jedem Prozess wird ein \emph{scheinbar zusammenhängender Speicherbereich} zur Verfügung gestellt. + Tatsächlich besteht der Speicher des Prozesses aus nicht zwangsläufig zusammenhängenden \emph{virtuelle Pages}. + + Der Prozess kann seinen Speicher mit \emph{virtuellen Adressen} beginnend bei 0 adressieren. + + Die Gesamtheit aller virtuellen Adressen wird als \emph{virtueller Adressraum} bezeichnet. +\end{defi} + +\begin{defi}{Virtuelle Pages} + \emph{Virtuelle Pages} werden auf Blöcke im Hauptspeicher gleicher Größe abgebildet. + + Hier kann auch \emph{Swapping} genutzt werden. In diesem Fall aber für einzelne Pages, nicht für den gesamten Hauptspeicherinhalt des Prozessors. +\end{defi} + +\begin{defi}{Pagetable} + Beim Zugriff auf eine virtuelle Speicheradresse durch einen Prozess muss diese + Adresse in eine physikalische Adresse umgewandelt werden. Das geschieht anhand + der \emph{Pagetable}, die das Betriebssystem \emph{für jeden Prozess} erstellt und aktualisiert. + + Da + die Pagetable virtuelle Pages auf physikalische Pages gleicher Größe abbildet, gibt es einen Teil der Adresse, der sogenannte \emph{Offset}, der die Position der Daten innerhalb + der Page angibt. + + Abhängig von + der Größe der Pages besteht das Offset aus $m$ Bits. + Für eine Pagegröße von 1MB + werden beispielsweise 20 Bits als Offset benötigt. + + Der Rest der Adresse, die Seitennummer, + muss dann anhand der Pagetable in die Basisadresse umgesetzt werden, + um die Adresse im physikalischen Speicher zu erhalten. Da die Seitennummer aus + $n$ Bits besteht, kann die Pagetable maximal $2^n$ Einträge enthalten. +\end{defi} + +\begin{example}{Pagetable} + Die Länge einer Adresse sei 16 Bit, aufgeteilt in je 8 Bit für Offset und Seitennummer. + + Es sei außerdem folgende Seitentabelle gegeben: + + \begin{center} + \begin{tabular}{|c|c|c|} + \hline + \textbf{Eintrag} & \textbf{Gültig} & \textbf{Basisadresse} \\ + \hline + 00 & Nein & - \\ + 01 & Ja & 0x17 \\ + 02 & Ja & 0x20 \\ + 03 & Ja & 0x08 \\ + 04 & Nein & - \\ + 05 & Ja & 0x10 \\ + \hline + \end{tabular} + \end{center} + + Dann können virtuelle Adressen anhand dieser Pagetable wie folgt umgesetzt werden: + + \begin{center} + \begin{tabular}{|c|c|} + \hline + \textbf{virtuelle Adresse} & \textbf{physikalische Adresse} \\ + \hline + 0x083A & ungültig (Seite 8 existiert nicht) \\ + 0x01FF & 0x17FF (Seite 1, Basisadresse 0x17) \\ + 0x0505 & 0x1005 (Seite 5, Basisadresse 0x10) \\ + 0x043A & ungültig (Seite 4 ungültig) \\ + \hline + \end{tabular} + \end{center} + + \emph{Hinweis}: Ist eine Adresse ungültig, wurde die dazugehörige Page in den Hintergrundspeicher ausgelagert. In diesem Fall muss die physikalische Page in den RAM geladen und die Pagetable aktualisiert werden. +\end{example} + +\begin{bonus}{Paging on Demand} + Das Vorgehen, aktuell + unbenutzte Pages aus dem Hauptspeicher auf den Hintergrundspeicher auszulagern + wird auch als \emph{Paging on Demand} bezeichnet. + Das Ziel dabei ist, Arbeitsspeicher + für andere Prozesse freizugeben. + + Dabei kann ein Prozess entweder Platz für eine + bestimmte Anzahl von physikalischen Pages zugewiesen bekommen, die sich im + Laufe der Prozessabarbeitung nicht ändert, oder es wird dynamisch anhand der aktuellen + Speicherauslastung entschieden, wieviel Platz ein Prozess belegen darf. +\end{bonus} + +\begin{algo}{Speicherverwaltung: FIFO (First In First Out)} + Beim \emph{FIFO}-Verfahren wird + diejenige Page ausgelagert, welche sich schon am längsten im Hauptspeicher + befindet. Dazu muss in der Pagetable festgehalten werden, wann welche + Page in den Hauptspeicher geladen wurde. +\end{algo} + +\begin{algo}{Speicherverwaltung: LRU/LFU (Least Recently / Frequently Used)} + Bei \emph{LRU} + wird mitgehalten, wieviele Ladevorgänge seit der letzten Benutzung einer + Page vorgenommen wurden. Das heißt, dass im Gegensatz zu FIFO, der + Kontrollzustand bei der Verwendung einer Page wieder auf \glqq 0\grqq gesetzt wird. +\end{algo} + +\begin{example}{Speicherverwaltung} + Seitenanforderungen: 1, 2, 3, 4, 1, 2, 5, 1, 2, 3, 4, 5 + + \textbf{FIFO-Strategie:} + + \begin{tabular}{|c|c|c|c|c|c|c|c|c|c|c|c|c|c|} + \hline + \multicolumn{1}{|c}{\textbf{Referenzfolge}} & \multicolumn{1}{c|}{} & 1 & 2 & 3 & 4 & 1 & 2 & 5 & 1 & 2 & 3 & 4 & 5 \\ + \hline + \hline + \multirow{3}{*}{\textbf{Arbeitsspeicher}} & Page 1 & \textcolor{red}{1} & 1 & 1 & \textcolor{red}{4} & 4 & 4 & \textcolor{red}{5} & 5 & 5 & 5 & 5 & 5 \\ + & Page 2 & & \textcolor{red}{2} & 2 & 2 & \textcolor{red}{1} & 1 & 1 & 1 & 1 & \textcolor{red}{3} & 3 & 3 \\ + & Page 3 & & & \textcolor{red}{3} & 3 & 3 & \textcolor{red}{2} & 2 & 2 & 2 & 2 & \textcolor{red}{4} & 4 \\ + \hline + \hline + \multirow{3}{*}{\textbf{Kontrollzustand}} & Page 1 & 0 & 1 & 2 & 0 & 1 & 2 & 0 & 1 & 2 & 3 & 4 & 5 \\ + & Page 2 & - & 0 & 1 & 2 & 0 & 1 & 2 & 3 & 4 & 0 & 1 & 2 \\ + & Page 3 & - & - & 0 & 1 & 2 & 0 & 1 & 2 & 3 & 4 & 0 & 1 \\ + \hline + \end{tabular} + + 9 Einlagerungen + + \textbf{LRU-Strategie:} + + \begin{tabular}{|c|c|c|c|c|c|c|c|c|c|c|c|c|c|} + \hline + \multicolumn{1}{|c}{\textbf{Referenzfolge}} & \multicolumn{1}{c|}{} & 1 & 2 & 3 & 4 & 1 & 2 & 5 & 1 & 2 & 3 & 4 & 5 \\ + \hline + \hline + \multirow{3}{*}{\textbf{Arbeitsspeicher}} & Page 1 & \textcolor{red}{1} & 1 & 1 & \textcolor{red}{4} & 4 & 4 & \textcolor{red}{5} & 5 & 5 & \textcolor{red}{3} & 3 & 3 \\ + & Page 2 & & \textcolor{red}{2} & 2 & 2 & \textcolor{red}{1} & 1 & 1 & 1 & 1 & 1 & \textcolor{red}{4} & 4 \\ + & Page 3 & & & \textcolor{red}{3} & 3 & 3 & \textcolor{red}{2} & 2 & 2 & 2 & 2 & 2 & \textcolor{red}{5} \\ + \hline + \hline + \multirow{3}{*}{\textbf{Kontrollzustand}} & Page 1 & 0 & 1 & 2 & 0 & 1 & 2 & 0 & 1 & 2 & 0 & 1 & 2 \\ + & Page 2 & - & 0 & 1 & 2 & 0 & 1 & 2 & 0 & 1 & 2 & 0 & 1 \\ + & Page 3 & - & - & 0 & 1 & 2 & 0 & 1 & 2 & 0 & 1 & 2 & 0 \\ + \hline + \end{tabular} + + 10 Einlagerungen +\end{example} + +\newpage +\subsection{Dateisystemverwaltung} + +\begin{defi}{BIOS (Basic Input/Output System)} + Das \emph{BIOS}: + \begin{itemize} + \item ist die \emph{Firmware} bei x86-PCs + \item liegt im \emph{nichtflüchtigen Speicher} auf der Hauptplatine des PCs + \item leitet den \emph{Start} des \emph{Betriebssystems} ein + \end{itemize} +\end{defi} + +\begin{defi}{UEFI (Unified Extensible Firmware Interface)} + \emph{UEFI} ist die zentrale Schnittstelle zwischen: + \begin{itemize} + \item der \emph{Firmware} + \item den \emph{einzelnen Komponenten} eines Rechners + \item und dem \emph{Betriebssystem} + \end{itemize} +\end{defi} + +\begin{bonus}{MBR (Master Boot Record)} + Der \emph{MBR} besteht aus insgesamt 512 Byte, die sich auf 446 Byte + für einen (optionalen) Bootloader, 64 Byte für die \emph{Partitionstabelle} und 2 Byte + für eine \emph{} (0xAA55) aufteilen. Die Magic Number dient dazu, einen + gültigen MBR zu identifizieren. + + In der Partitionstabelle können maximal 4 Partitionen + definiert werden, d.h. die Festplatte kann in maximal 4 logische Einheiten aufgeteilt + werden. +\end{bonus} + +\begin{bonus}{GPT (GUID Partition Table)} + Mit der Einführung von UEFI wurden auch die Limitierungen des + MBR aufgehoben und die GPT als Nachfolger definiert. + + Die \emph{GPT} beinhaltet zu Beginn + aus Kompatibilitätsgründen einen MBR, sodass ein hybrider Betrieb möglich + ist. In der GPT können bis zu 128 Partitionen abgelegt werden. + + Zur Absicherung der + GPT wird eine exakte Kopie der GPT am Ende des Datenträgers abgelegt. +\end{bonus} + +\begin{defi}{Dateisystem} + Ein Dateisystem ist im Prinzip eine Ablageorganisation für Daten auf einem Datenträger des Computers. + Das Dateisystem muss sicherstellen, + dass Dateien \emph{lesend und schreibend geöffnet} und auch wieder \emph{geschlossen} werden + können. Das bedeutet, dass Dateinamen auf physikalische Adressen auf dem + Datenträger abgebildet werden müssen. + + Spezielle Eigenschaften des Datenträgers + (Festplatte, USB-Stick, ...) müssen berücksichtigt werden. + + Generell bieten + alle (modernen) Dateisysteme folgende Attribute: + \begin{itemize} + \item Dateiname + \item Ablageort (Ordner bzw. Verzeichnis) + \item Dateigröße + \item Zugriffsrecht + \end{itemize} +\end{defi} + +\begin{defi}{Lineare Dateisysteme} + Bei linearen Dateisystemen werden Daten direkt hintereinander auf den Datenträger + geschrieben. Das bedeutet, dass wahlfreier Zugriff nicht möglich ist. Daher finden + diese Dateiysteme heutzutage nur noch Anwendung in Bereichen, in denen es nicht + primär auf Geschwindigkeit ankommt. +\end{defi} + +\begin{defi}{Hierarchische Dateisysteme} + Daten werden auf hierarchischen Dateisystemen in einer Verzeichnisstruktur + abgelegt. + + Diese Art von Dateisystem ist die wohl verbreiteste auf + modernen Computern und kann auf Festplatten, SSDs, USB-Sticks, SD-Karten und + sonstigen herkömmlichen Datenträgern verwendet werden. +\end{defi} + +\begin{defi}{Netzwerkdateisysteme} + In Netzwerkdateisystemen wird entfernter + Speicher auf einem Server wie ein lokales Medium behandelt. Das Betriebssystem + muss dann die Zugriffe auf Dateien in Netzwerkkommunikation umwandeln. + Für den Nutzer + eines Betriebsystems stellt sich Netzwerkspeicher allerdings in der Regel wie ein + hierarchisches Dateisystem dar. +\end{defi} + +\begin{bonus}{Sicherheitsaspekte} + \textbf{Paralleler Zugriff im Multitasking}: + \begin{itemize} + \item Bereitstellung von Locks für den Dateizugriff + \end{itemize} + + \textbf{Stromausfall während einer Schreiboperation}: + \begin{itemize} + \item Es muss Datenkonsistenz gewährleistet werden + \item Atomare Operationen, welche entweder abgeschlossen oder ausstehend sind + \subitem $\to$ Journalingdateisysteme + \end{itemize} +\end{bonus} + +\begin{defi}{Journalingdateisysteme} + Bei einem Journalingdateisystem werden alle Aktionen auf der Festplatte protokolliert + und erst als gültig aufgefasst, nachdem das Beenden der Aktion auf dem Dateisystem + im \emph{Journal} (Protokoll) vermerkt wurde. + + \begin{itemize} + \item \emph{Metadatenjournaling}: + \subitem - Konsistenz des Dateisystems + \item \emph{Fulljournaling}: + \subitem - Konsistenz des Dateisystems + \subitem - Konsistenz der Dateiinhalte + \end{itemize} + +\end{defi} + +\section{Virtualisierung} + +\begin{defi}{Virtualisierung} + \emph{Virtualisierung} bezeichnet Methoden, die es erlauben, Ressourcen + eines Computers \emph{zusammenzufassen oder aufzuteilen}. + + Dies wird erreicht, indem real existierende Hardware unter + Zuhilfenahme einer Softwareschicht zu virtueller Hardware \emph{abstrahiert} wird. + + Dabei können mehrere Szenarien unterschieden werden: + \begin{itemize} + \item Partitionierung + \item Aggregation + \item Emulation + \item Isolation + \end{itemize} + \vspace{1em} + \begin{center} + \includegraphics[]{images/virtualisierung.pdf} + \end{center} +\end{defi} + +\begin{defi}{Hypervisor / Virtual Machine Monitor (VMM)} + Der \emph{Hypervisor} ist ein Stück Soft- oder Hardware, das die Umsetzung + zwischen der \emph{virtuellen Maschine} und der \emph{physikalischen Hardware} vornimmt. + + \textbf{Typ-1-Hypervisor}: + \begin{itemize} + \item läuft direkt auf physikalischer Hardware + \end{itemize} + + \textbf{Typ-2-Hypervisor}: + \begin{itemize} + \item läuft als Anwendung auf dem Hostsystem + \end{itemize} +\end{defi} + +\subsection{Virtualisierungskonzepte} + +\begin{defi}{Paravirtualisierung} + \begin{itemize} + \item Funktionalitäten des Gast BS werden gezielt verändert (Kernel Anpassungen) + \item Gast-BS \glqq weiß\grqq, dass es sich in einer virtuellen Umgebung befindet + \item Gast-BS kann direkt mit dem Hypervisor interagieren, benötigt keine Hardware-Emulation + \end{itemize} + + \emph{Vorteile}: gute Performance + + \emph{Nachteile}: Gastsysteme nicht beliebig wählbar, hoher Aufwand für Kernel-Entwickler +\end{defi} + +\begin{defi}{Hardware-unterstützte Virtualisierung} + \begin{itemize} + \item Neue Prozessortechnologien: CPUs besitzen Befehlssatz, der Virtualisierung unterstützt + \item Modifikation des Gast-BS soll vermieden werden, direkt durch Hardware gelöst + \item Hypervisor soll durch hardwarebasierte Speicherverwaltung entlastet werden + \end{itemize} + + \emph{Vorteile}: Gast-BS muss nicht modifiziert werden, Gastsysteme frei wählbar + + \emph{Nachteile}: kein gemeinsamer Standard, Virtualisierungsplattform muss Technologie unterstützen +\end{defi} + +\begin{defi}{Hardware-Emulation} + \begin{itemize} + \item Innerhalb einer VM wird Standardhardware eines Rechners komplett oder teilweise simuliert + \item Emulator erzeugt Softwareschnittstellen, die vom Gast-BS angesprochen werden können + \item Emulator sorgt dafür, dass Befehle, die an simulierte Hardware gerichtet sind, für die physische Hardware des Hostsystems umgewandelt werden + \end{itemize} + + \emph{Vorteile}: flexible Wahl der Gast-BS + + \emph{Nachteile}: Performanceverlust durch hohen Virtualisierungsaufwand +\end{defi} + +\begin{defi}{Betriebssystemvirtualisierung} + \begin{itemize} + \item Innerhalb des Host-BS werden Virtual Environments (VE) / Container erzeugt + \item In VE ist kein eigenständiges Betriebssystem installiert + \item Kernel-Bibliotheken und Geräte-Treiber des Hostsystems genutzt + \item Einige Individualdaten müssen für Container definiert werden \\ (z.B. Dateisystem, IP Adresse, Hostname) + \end{itemize} + + \emph{Vorteile}: gute Performance, wenig Speicherbedarf + + \emph{Nachteile}: keine freie Wahl des Gast-BS (gebunden an Hostsystem) +\end{defi} + +\subsection{Cloud Computing} + +\begin{defi}{Cloud Computing} + \emph{Cloud Computing} ist im Wesentlichen ein Model um einen allgegenwärtigen, + bequemen, bedarfsgesteuerten Netzwerkzugang zu einem gemeinsamen Pool konfigurierbarer + Computer-Ressourcen zur Verfügung zu stellen. Zudem soll das Ganze + schnell und mit minimalem Verwaltungsaufwand und Interaktion mit dem Provider + funktionieren. +\end{defi} + +\begin{defi}{Servicemodelle} + \textbf{Infrastructure as a Service} (IaaS): + \begin{itemize} + \item vom Anbieter verwaltete Infrastruktur + \item Nutzer muss verwendetes Betriebssystem und Software vollständig selbst verwalten + \end{itemize} + + \textbf{Platform as a Service} (PaaS): + \begin{itemize} + \item virtuelle Plattform zur Verfügung gestellt (Betriebssystem, Entwicklungsplattform) + \item alles \glqq unterhalb\grqq der Plattform ist aber \emph{nicht} unter der Kontrolle des Nutzers + \end{itemize} + + \textbf{Software as a Service} (SaaS): + \begin{itemize} + \item nur eine einzelne Anwendung zur Verfügung gestellt + \item alles \glqq unterhalb\grqq der Anwendung ist aber \emph{nicht} unter der Kontrolle des Nutzers + \end{itemize} +\end{defi} + +\begin{bonus}{Charakterisken von Cloud Computing} + \begin{itemize} + \item Selbstverwaltung (On-demand self-service) + \item Breitband Internetzugang + \item Ressourcenbündelung + \item Elastizität + \item Leistungsmessung + \end{itemize} +\end{bonus} + +\begin{defi}{Bereitstellungsmodelle} + \textbf{Private Cloud}: + \begin{itemize} + \item für eine ganz spezielle Nutzergruppe betrieben + \item kann auch von der Firma selbst verwaltet werden + \end{itemize} + + \textbf{Community Cloud}: + \begin{itemize} + \item wird für verschiedene Nutzergruppen in einem bestimmten Kontext betrieben + \item in der Regel von einer der teilnehmenden Gruppen oder von externem Dienstleister bereitgestellt + \end{itemize} + + \textbf{Public Cloud}: + \begin{itemize} + \item für beliebige Nutzer zur Verfügung steht + \item von beliebigem Anbieter betrieben + \end{itemize} + + \textbf{Hybrid Cloud}: + \begin{itemize} + \item kombiniert mehrere der vorhergehenden Bereitstellungsmodelle + \item einzelnen Teile unabhängig voneinander, aber durch standardisierte Schnittstellen verbunden + \end{itemize} +\end{defi} + +\section{Datenschutz und Sicherheit} +\subsection{Datensicherheit} + +\begin{defi}{Kryptographie} + Kryptographie ist die Wissenschaft der Verschlüsselung von Informationen. Sie wird genutzt + um Informationen auf eine Art und Weise zu verändern, sodass ein Unbefugter + die Informationen nicht mehr lesen kann. Es soll nur dem tatsächlichen Adressaten + einer Nachricht möglich sein, diese auch zu lesen. Es geht also explizit nicht darum, + den Diebstahl von Informationen zu verhindern, sondern es geht darum, dass + entwendete Informationen nicht gelesen werden können. +\end{defi} + +\begin{defi}{Transpositionschiffren} + Die Verschlüsselung wird durch Umordnung der Zeichen + im Klartext umgesetzt. +\end{defi} + +\begin{defi}{Substitutionschiffren} + Die Verschlüsselung wird durch Ersetzung der Zeichen + im Klartext realisiert. + + \textbf{Monoalphabetische Substitution}: + \begin{itemize} + \item Jedes Zeichen des Klartexts wird durch genau + ein eindeutiges Zeichen aus dem Geheimtextalphabet ersetzt, das für einen + gewählten Schlüssel immer gleich ist. + \end{itemize} + + \textbf{Homophone Substitution}: + \begin{itemize} + \item Jedes Zeichen des Klartexts wird durch genau ein + anderes Zeichen aus einer eindeutigen Menge von Zeichen ersetzt, die für einen + gewählten Schlüssel immer gleich ist. + \end{itemize} + + \textbf{Polyalphabetische Substitution}: + \begin{itemize} + \item Jedes Zeichen wird durch ein eindeutiges Zeichen + aus einem von mehreren geheimen Alphabeten ersetzt, die für einen gewählten + Schlüssel immer gleich sind. Die Alphabete werden dabei immer der Reihe nach + verwendet. + \end{itemize} +\end{defi} + +\begin{example}{Cäsar Chiffre} + Im einfachsten Fall beinhalten $\mathfrak{P}$ und $\mathfrak{S}$ dieselben Zeichen und sind nur gegeneinander + um $k$ Zeichen verschoben. Diese Variante einer \emph{monoalphabetischen Substitutionschiffre} wird \emph{Cäsar Chiffre} genannt. + + Alice wählt für die Verschlüsselung $k = 10$ und erhält damit die folgenden Alphabete: + + \begin{center} + $\mathfrak{P}$: \texttt{A B C D E F G H I J K L M N O P Q R S T U V W X Y Z}\\ + $\mathfrak{S}$: \texttt{J K L M N O P Q R S T U V W X Y Z A B C D E F G H I}\\ + \end{center} + + Da Alice $k = 10$ gewählt hat, beginnt das Geheimtextalphabet mit \texttt{J}, dem + zehnten Buchstaben des Alphabets. Die Verschlüsselung führt Alice durch, + indem sie jeden Buchstaben ihres Klartexts durch den entsprechenden Buchstaben + aus dem Geheimtextalphabet ersetzt.Werden die beiden Alphabete wie + weiter oben aufgeschrieben, ist das einfach der Buchstabe im Geheimtextalphabet + der direkt unter dem Buchstaben im Klartextalphabet steht. Damit ergibt + sich für die Nachricht \texttt{HALLO} der Geheimtext \texttt{QJUUX}. Bob kann den + Geheimtext dann entschlüsseln, indem er wiederum beide Alphabete untereinander + schreibt und jedem Buchstaben aus dem Geheimtext den zugehörigen + Buchstaben aus dem Klartextalphabet zuorndet, der dann genau darüber steht. +\end{example} + +\begin{example}{Vigenère Chiffre} + Eine bekannte \emph{polyalphabetische Substitutionschiffre} ist die \emph{Vigenère Chiffre}. + Sie funktioniert im Prinzip wie die Cäsar-Chiffre, verwendet also verschobene + lateinische Alphabete zur Verschlüsselung. Wie viele Alphabete und wie + jedes von ihnen verschoben, wird durch den Schlüssel $k$ bestimmt, der in diesem + Fall ein Wort ist. Es gibt also soviele geheime Alphabete, wie es Zeichen + in $k$ gibt und jedes dieser Alphabete ist verschoben, so dass das $i$-te Alphabet + mit dem $i$-ten Zeichen von $k$ beginnt. + Alice wählt das Schlüsselwort $k = EDV$. Damit ergeben sich Klartext- und + Geheimalphabete wie folgt: + + \begin{center} + $\mathfrak{P}$: \texttt{A B C D E F G H I J K L M N O P Q R S T U V W X Y Z}\\ + $\mathfrak{S}_1$: \texttt{E F G H I J K L M N O P Q R S T U V W X Y Z A B C D}\\ + $\mathfrak{S}_2$: \texttt{D E F G H I J K L M N O P Q R S T U V W X Y Z A B C}\\ + $\mathfrak{S}_3$: \texttt{V W X Y Z A B C D E F G H I J K L M N O P Q R S T U}\\ + \end{center} + + Damit kann Alice den Klartext $M =$ \texttt{HALLOHALLO} verschlüsseln, indem Sie + die Buchstaben des Klartexts wie bei der Cäsar Chiffre zuordnet und dabei die + drei Geheimtextalphabete reihum verwendet. Da der Klartext mehr Zeichen + enthält, als es Geheimtextalphabete gibt, fängt sie nach jeweils drei Zeichen + wieder beim ersten Geheimtextalphabet an. Somit ergibt sich der Geheimtext + $C =$ \texttt{LDGPRCEOGS}. +\end{example} + +\begin{defi}{Moderne Verschlüsselungsverfahren} + Moderne Verschlüsselungsverfahren werden, im Gegensatz zu klassischen Verfahren, + nicht mehr auf Zeichen einer natürlichen Sprache angewandt. Stattdessen werden + Zahlen bzw. Bits als Grundlage der Operationen verwendet. Damit können + beliebige Daten verschlüsselt werden, nicht mehr nur Text. Damit sind moderne + Verschlüsselungsverfahren den Anforderungen der heutigen digitalen Gesellschaft + gewachsen. + + \textbf{Symmetrische Verfahren}: + \begin{itemize} + \item denselben Schlüssel zur Ver- und Entschlüsselung + \item Problem des Schlüsselaustauschs + \item Vertraulichkeit, aber keine zur Sicherstellung von Authentifizierung und Integrität + \item[$\to$] Blockchiffren + \subitem - zu verschlüsselnde Daten in $m$ Blöcke derselben Größe aufgeteilt + \subitem - einfachster Fall: jeder der zuvor erzeugten Blöcke $m_i$ mit Schlüssel $k$ + \subitem zu verschlüsseltem Block $c_i$ derselben Größe übersetzt + \item[$\to$] Stromchiffren + \subitem - Klartext wird bitweise anhand eines Schlüsselstroms verschlüsselt + \subitem - Schlüsselstrom und Geheimtext haben dieselbe Länge wie der Klartext + \end{itemize} + + \textbf{Asymmetrische Verfahren}: + \begin{itemize} + \item Die meisten asymmetrischen Verfahren basieren auf mathematischen Problemen, die nicht effizient zu lösen sind. + \item + \end{itemize} +\end{defi} + +\begin{algo}{RSA Verschlüsselung} + RSA basiert auf der Faktorisierung ganzes Zahlen, für die es keinen bekannten + effizienten Algorithmus gibt. Dabei geht es darum, eine Zahl in ihre Primfaktoren + zu zerlegen. + + Da beide Schlüssel des Schlüsselpaars zusammen funktionieren sollen, müssen sie + nach einer festen Vorschrift erzeugt werden: + \begin{enumerate} + \item Wähle zwei Primzahlen $p, q$ mit $p \neq q$ + \item Berechne $N = p \cdot q$ + \item Berechne $\varphi(N) = (p-1)\cdot (q-1)$ + \item Wähle ein $e$, das teilerfremd zu $\varphi(N)$ ist mit $1 < e < \varphi(N)$ + \item Berechne $d$, sodass $e \cdot d \equiv 1 \mod \varphi(N)$ + \end{enumerate} + + Nach dieser Prozedur ist $(e,N)$ der \emph{public key} und $(d,N)$ der \emph{private Key}. Damit + kann nun jeder Nachricht $M \in \N, 1 < M < N$ anhand folgender Formel verschlüsselt + werden: + $$ + C = M^e \mod N + $$ + + Die Entschlüsselung der verschlüsselten Nachricht $C$ kann dann anhand einer ähnlichen Formel durchgeführt werden: + $$ + M = C^d \mod N + $$ +\end{algo} + +\begin{example}{RSA Verschlüsselung} + Damit Alice Bob eine Nachricht schreiben kann, muss Bob zunächst seinen \emph{public Key} zur Vefügung stellen. + + Zur Erzeugung seines Schlüsselpaars wählt Bob die Primzahlen $p=13$ und $q=17$. + Damit ergibt sich $N = 221$ und $\varphi(N) = 192$. + Anschließend wählt Bob $e=5$ und berechnet damit $d=77$. + Damit kann Bob $(5, 221)$ als seinen \emph{public Key} an Alice geben und $(77, 221)$ behält er als \emph{private Key} für sich. + + Alice hat nun Bobs \emph{public Key} und möchte damit die Nachricht $M = 42$ verschlüsseln. + Dazu berechnet Sie $C = 42^5 \mod 221 = 9$ und schickt die verschlüsselte Nachricht anschließend an Bob. + + Bob kann nun mit seinem \emph{private Key} die erhaltene Nachricht entschlüsseln und erhält $M = 9^77 \mod 221 = 42$. +\end{example} + +\begin{defi}{Digitale Signatur} + Um auch \emph{Authentifizierung} + und \emph{Integritat} herstellen zu können, muss eine digitale Signatur verwendet + werden. Dazu braucht es zunachst eine \emph{Hashfunktion}, die eine Art Fingerabdruck + der Nachricht erzeugt. + + Nachdem mit der Hashfunktion der Hashwert der Nachricht berechnet wurde, wird + dieser mit dem \emph{private Key} des Senders verschlüsselt. + + Danach berechnet + der Empfänger selbst den Hashwert der empfangen Nachricht. Stimmen der + selbst berechnete Hashwert und der entschlüsselte Hashwert überein ist die \emph{Integrität} der Nachricht sichergestellt. Da zudem das Entschlüsseln des Hashwertes mit + dem öffentlichen Schlüssel des Senders funktioniert hat, ist der Sender authentifiziert, + da dessen privater Schlüssel zur Erstellung der digitalen Signatur verwendet + wurde. + + Es ist also notwendig, dass sich Sender und Empfanger vorab auf eine + Hashfunktion einigen. Zusatzlich ist wichtig zu beachten, dass eine Digitale Signatur + \emph{keine Vertraulichkeit} herstellt, dazu muss die Nachricht zusatzlich verschlüsselt + werden. +\end{defi} + +\begin{defi}{Hybride Chiffren} + Die Kombination von symmetrischen und asymmetrischen + Chiffren nennt man \emph{hybride Chiffren}. + + \begin{itemize} + \item verhältnismäßig kurzer Schlüssel einer Blockchiffre wird asymmetrisch verschlüsselt und zum Empfänger einer Nachricht transportiert + \item Kommunikation selbst läuft symmetrisch verschlüsselt ab + \item Kombination erzielt guten Kompromiss zwischen Sicherheit und Rechenaufwand + \end{itemize} +\end{defi} + +\printindex +\printindex[Beispiele] +\end{document} diff --git a/la1/la1.tex b/la1/la1.tex index 5ba913e..ede3b91 100644 --- a/la1/la1.tex +++ b/la1/la1.tex @@ -1,669 +1,669 @@ -\documentclass[german]{../spicker} - -\usepackage{amsmath} -\usepackage{polynom} - -\title{Lineare Algebra 1} -\author{Patrick Gustav Blaneck} -\makeindex[intoc] -\makeindex[intoc, name=Beispiele,title=Beispiele] - -\newcommand{\scalarprod}[1]{\left\langle #1 \right\rangle} -\newcommand{\vektor}[1]{\begin{pmatrix*}[r] #1 \end{pmatrix*}} -\renewcommand{\span}[1]{\operatorname{span}\left(#1\right)} -\newcommand{\dx}{~\mathrm{d}x} - -\begin{document} -\maketitle -\tableofcontents -\newpage - -%\setcounter{section}{1} - -\section{Analytische Geometrie} - -\subsection{Skalarprodukt und Norm} - -\begin{defi}{Skalarprodukt} - Eine Abbildung $\scalarprod{\cdot, \cdot}$ heißt Skalarprodukt, wenn folgende Bedingungen erfüllt sind: - \begin{itemize} - \item[\textbf{SP1}] Symmetrie: $\forall a, b \in \R^n: \scalarprod{a, b} = \scalarprod{b, a}$ - \item[\textbf{SP2}] $\forall a, b, c \in \R^n: \scalarprod{a, b+c} = \scalarprod{a, b} + \scalarprod{a, c}$ - \item[\textbf{SP3}] $\forall a \in \R^n: \scalarprod{\alpha a, b} = \alpha \scalarprod{a, b} = \scalarprod{a, \alpha b}$ - \item[\textbf{SP4}] positive Definitheit: $\forall a \in \R^n \setminus \{0\}: \scalarprod{a, a} > 0 \land \scalarprod{0, 0} = 0$ - \end{itemize} -\end{defi} - -\begin{defi}{Euklidisches Skalarprodukt} - Für $a, b$ sei ihr \emph{euklidisches Skalarprodukt} $\scalarprod{a, b}$ definiert als - $$ - \scalarprod{a, b} := \sum_{i=1}^n a_ib_i - $$ -\end{defi} - -\begin{defi}{Norm} - Eine Norm $\norm{a}$ hat folgende Eigenschaften: - \begin{itemize} - \item[\textbf{N0}] $\norm{a} \in \R$ - \item[\textbf{N1}] $\norm{a} \geq 0$ - \item[\textbf{N2}] $\norm{a} = 0 \iff a = 0$ - \item[\textbf{N3}] $\forall \lambda \in \R : \norm{\lambda a} = \abs{\lambda} \norm{a}$ - \item[\textbf{N4}] Dreiecksungleichung $\norm{a+b} \leq \norm{a} + \norm{b}$ - \end{itemize} -\end{defi} - -\begin{defi}{Euklidische Norm} - Einem Vektor $a$ wird die \emph{euklidische Norm} oder \emph{Standardnorm} $\norm{a}$ zugeordnet durch - $$ - \norm{a} := \left(\sum_{i=1}^n a_i^2\right)^{\frac{1}{2}} - $$ -\end{defi} - -\begin{bonus}{Diskrete Minkowskische Ungleichung} - Für $p \geq 1$ definiert man die $\ell_p$-Norm durch - $$ - \norm{a}_p := \left(\sum^n_{i=1} \abs{a_i}^p\right)^\frac{1}{p} - $$ - \begin{itemize} - \item $p=1$: \emph{Betragssummennorm} oder \emph{Einsernorm} - \item $p=2$: euklidische Norm - \item $p=\infty$: \emph{Maximumnorm} pder $\ell_\infty$\emph{-Norm} ($\norm{a}_\infty = \max\{\abs{a_i}, \ldots, \abs{a_n}\}$) - \end{itemize} -\end{bonus} - -\begin{defi}{Orthogonalität} - Seien $a,b \in \R^n$ und $\scalarprod{\cdot, \cdot}$ ein beliebiges Skalarprodukt. - Die Vektoren $a$ und $b$ stehen \emph{orthogonal} zueinander bzgl. $\scalarprod{\cdot, \cdot}$, Schreibweise $a \perp b$, wenn $\scalarprod{a, b} = 0$. -\end{defi} - -\begin{algo}{Orthogonalen Vektor finden} - Wir betrachten den Vektor $a= (a_1, a_2)^T$. - Für den senkrechten Vektor $a'$ gilt: $(-a_2, a_1)^T$. -\end{algo} - -\begin{bonus}{Satz des Pythagoras} - Seien $a,b \in \R^n$ mit $a \perp b$ und $\scalarprod{\cdot, \cdot}$ ein beliebiges Skalarprodukt. - Dann gilt: - $$ - \norm{a + b}^2 = \norm{a}^2 + \norm{b}^2 - $$ -\end{bonus} - -\begin{defi}{Orthogonale Projektion} - Seien $a, b$ zwei Vektoren und $b \neq 0$. Dann gilt für die orthogonale Projektion $p$ von $a$ in Richtung $b$: - $$ - p_b(a) = \frac{\scalarprod{a, b}}{\scalarprod{b, b}} b - $$ -\end{defi} - -\begin{bonus}{Cauchy-Schwarzsche Ungleichung} - Für $a, b \in \R^n$ gilt: - $$ - \abs{\scalarprod{a, b}} \leq \norm{a} \norm{b} - $$ -\end{bonus} - -\begin{defi}{Winkel zwischen Vektoren} - Seien $a, b\in \R^n\setminus \{0\}$. - Der Winkel zwischen $a$ und $b$, geschrieben $\angle (a, b)$, wird definiert als - $$ - \angle (a, b) := \arccos \frac{\scalarprod{a, b}}{\norm{a} \norm{b}} - $$ -\end{defi} - -\begin{defi}{Vektorprodukt (Kreuzprodukt)} - Seien $a, b \in \R^n$. Dann heißt - $$ - a \times b := \vektor{a_2b_3-a_3b_2 \\ a_3b_1-a_1b_3 \\ a_1b_2 - a_2b_1} - $$ - das \emph{Vektorprodukt} oder \emph{Kreuzprodukt} von $a$ und $b$. -\end{defi} - -\newpage -\subsection{Geraden und Ebenen} - -\begin{defi}{Gerade (Punkt-Richtungsgleichung)} - Für einen \emph{Ortsvektor} oder \emph{Aufpunkt} $p$ und einen \emph{Richtungsvektor} $v \neq 0$ heißt - $$ - x = p + \alpha v - $$ - \emph{Punkt-Richtungsgleichung} einer \emph{Geraden} $G$. -\end{defi} - -\begin{defi}{Gerade (Normalform in der Ebene)} - Sei $G$ eine Gerade in der Ebene, $p$ der Aufpunkt und $v$ der Richtungsvektor von $G$.\\ - Gilt $n \perp v$, dann heißt - $$ - \scalarprod{x,n} = \scalarprod{p, n} \iff n_1x_1 + n_2x_2 = c - $$ - \emph{Normalform} von $G$. -\end{defi} - -\begin{defi}{Ebene (Punkt-Richtungsgleichung)} - Seien $p, v, w \in \R^3, v\neq 0$ und $w \neq 0$, und seien $v$ und $w$ nicht parallel. - Dann heißt - $$ - x = p + \alpha v + \beta w - $$ - \emph{Punkt-Richtungsgleichung} einer \emph{Ebene} $E$. -\end{defi} - -\begin{defi}{Ebene (Normalform)} - Sei $E$ eine Ebene im Raum, $p$ der Aufpunkt und $v, w$ Richtungsvektoren von $E$. \\ - Gilt $n \perp v \land n \perp w$, dann heißt - $$ - \scalarprod{x, n} = \scalarprod{p, n} \iff n_1x_1 + n_2x_2 + n_3x_3 = d - $$ - \emph{Normalform} von $E$. -\end{defi} - - -\begin{defi}{Hessesche Normalform} - Sei $n$ ein Normalenvektor einer Gerade $G$ in der Ebene oder einer Ebene $E$ im Raum. - Gilt $\norm{n} = 1$, so heißt die damit gebildete Normalform \emph{Hessesche Normalform}. -\end{defi} - -\begin{algo}{Normalform $\to$ Hessesche Normalform (Geraden und Ebenen)} - Man erhält die Hessesche Normalform aus einer beliebigen Normalform, indem man die Normalform durch $\norm{n}$ teilt: - $$ - \frac{\scalarprod{x, n}}{\norm{n}} = \frac{\scalarprod{p, n}}{\norm{n}} - $$ - Damit liegt der Normalvektor bis auf das Vorzeichen eindeutig fest. -\end{algo} - -\begin{algo}{Punkt-Richtungsform $\to$ Normalform (Geraden)} - Sei eine Gerade $G$ gegeben durch $x = p + \alpha v$ mit $v = (v_1, v_2)^T$. - Einene Normalenvektor $n$ findet man durch - $$ - n := \vektor{v_2 \\ -v_1}. - $$ - Durch Ausrechnen von $\scalarprod{p, n}$ erhält man die rechte Seite der Normalform. -\end{algo} - -\begin{algo}{Normalform $\to$ Punkt-Richtungsform (Geraden)} - Liegt die Gerade in der Normalform $ax_1 + bx_2 = c$ vor, wird ein Richtungsvektor $v \perp n \iff v \perp (a, b)^T$ benötigt. - - Man kann hier $v = (b, -a)^T$ wählen. Einen Aufpunkt $p$ erhält man, indem man z.B. $x_1 = 0$ oder $x_2 = 0$ setzt und aus der parameterlosen Form die andere Komponente errechnet. -\end{algo} - -\begin{algo}{Punkt-Richtungsform $\to$ Normalform (Ebenen)} - Um einen Normalenvektor $n$ für die Richtungsvektoren $v, w$ zu erhalten, kann man das Kreuzprodukt der beiden Richtungsvektoren berechnen. - - Als Aufpunkt lässt sich jeder Punkt der Ebene verwenden, insbesondere der Vektor $p$ aus der Punkt-Richtungsform. -\end{algo} - -\begin{algo}{Normalform $\to$ Punkt-Richtungsform (Ebenen)} - Aus der Normalgleichung $ax_1 + bx_2 + cx_3 = d$ liest man den Normalenvektor $n = (a, b, c)^T$ ab. - Mindestens eine Komponente $n_i$ von $n$ ist ungleich $0$. - Wir vertauschen $n_i$ mit einer anderen Komponente $n_j$ und verändern das Vorzeichen von $n_j$ im so erzeugten Vektor. - - Weil es zwei Möglichkeiten gibt $i \neq j$ zu wählen, erhalten wir zwei Vektoren $v$ und $w$, mit $v \perp n$, $w\perp n$ und $v \neq 0 \neq w$ und $v \not \parallel w$. - - Ein Aufpunkt lässt sich errechnen, indem man zwei der drei Koordinaten von $x = (x_1, x_2, x_3)^T$ z.B. den Wert 0 zuweist und dann aus der Normalform den Wert der fehlenden Koordinate errechnet. - - Sollte dies nicht möglich sein, wähle man ein anderes Koordinatenpaar. Es gibt immer zwei Koordinaten in $x$, mit denen obige Rechnung möglich ist. - -\end{algo} - -\begin{defi}{Lagebeziehungen von Geraden und Ebenen} - Geraden: - \begin{itemize} - \item Zwei Geraden in $\R^2$ oder $\R^3$ heißen \emph{parallel}, wenn ihre Richtungsvektoren parallel sind. - \item Zwei sich schneidende Geraden heißen \emph{orthogonal}, wenn ihre Richtungsvektoren orthogonal sind. - \item Seien $G$ und $G'$ zwei sich schneidende Geraden mit Richtungsvektoren $v$ bzw. $v'$. Der Winkel zwischen den Geraden wird definiert durch - $$ - \angle (G, G') := \min \{\angle (v, v'), \angle (v', v)\} = \arccos \left(\frac{\abs{\scalarprod{v, v'}}}{\norm{v} \norm{v'}}\right) - $$ - \end{itemize} - - Ebenen: - \begin{itemize} - \item Zwei Ebenen heißen \emph{parallel}, wenn ihre Normalenvektoren parallel sind. Sie heißen \emph{orthogonal}, wenn ihre Normalenvektoren orthogonal sind. - \item Sei $E$ eine Ebene mit Normalenvektor $n$. Eine Gerade mit Richtungsvektoren $v$ heißt \emph{parallel} zur Ebene $E$, falls $v \perp n$. - \item Seien $n$ und $n'$ Normalenvektoren der beiden Ebenen $E$ und $E'$. Dann wird der Winkel $\angle (E, E')$ zwischen den beiden Ebenen erklärt durch - $$ - \angle (E, E') := \min \{\angle (n, n'), \angle (n', n)\} = \arccos \left(\frac{\abs{\scalarprod{n, n'}}}{\norm{n} \norm{n'}}\right) - $$ - \end{itemize} -\end{defi} - -\begin{algo}{Schnittmengen zwischen Geraden und Ebenen in $\R^2$ und $\R^3$} - \begin{enumerate} - \item Man sorgt eventuell durch Umrechnung dafür, dass das eine Objekt durch eine parameterlose (\emph{Normalgleichung}) und das andere durch eine parameterbehaftete Gleichung (\emph{Punkt-Richtungsgleichung}) beschrieben wird. - \item Man setzt die Parametergleichung in die parameterlose Gleichung ein und erhält Ausdrücke für den oder die Parameter. - \item Diese setzt man in die Parametergleichung ein und erhält eine Parametrisierung der Schnittmenge. - \end{enumerate} -\end{algo} - -\begin{example}{Schnittmenge zwischen einer Gerade und einer Ebene} - Gegeben seien $p = (1, -1, 2)^T$, $q = (1, 1, 1)^T$ und $n = (1, 2, 3)^T$. - Gesucht wird der Schnittpunkt der Geraden $G$ durch $p$ in Richtung von $n$ mit der Ebene $E$ durch $q$ senkrecht zu $n$. - Man verwendet bei der Gleichsetzung für $E$ eine Normal- und für $G$ eine Parameterform, z.B. - $$ - x = \vektor{x_1, x_2, x_3} = \vektor{1 \\ -1 \\ 2} + \alpha \cdot \vektor{1 \\ 2\\ 3}. - $$ - Komponentenweise liest man daraus die Gleichungen - $$ - x_1 = 1 + \alpha \qquad x_2 = -1+2\alpha \qquad x_3 = 2+3\alpha - $$ - ab. Eine Normalform von $E$ lautet - $$ - \scalarprod{x, n} = \scalarprod{q, n} \iff x_1 + 2x_2 + 3x_3 = 6. - $$ - Einsetzen in die Normalgleichung liefert dann $\alpha = \frac{1}{14}$. - Den Schnittpunkt $s$ erhält man durch Ensetzen von $\alpha$ in die Parametergleichung: - $$ - s = p + \alpha n = \left(\frac{15}{14}, -\frac{12}{14}, \frac{31}{14}\right)^T. - $$\qed -\end{example} - -\begin{bonus}{Lotfußpunkt} - Sei $G$ eine Gerade mit Richtungsvektor $v$ und $q \notin G$. - Ein Punkt $q'\in G$ heißt \emph{Lotfußpunkt}, wenn $l := q=q' \perp G$ gilt, $l$ heißt \emph{Lot}, und der Abstand $d$ zwischen einem Punkt und einer Geraden in $\R^3$ wird definiert durch $d := \norm{l}$. -\end{bonus} - -\begin{algo}{Abstandsberechnung (Punkte, Geraden und Hyperebenen)} - Abstandsberechnungen zwischen Punkten, Geraden und Hyperebenen lassen sich auf die Berechnung des Lotfußpunktes zurückführen: - - \begin{enumerate} - \item Bestimme die Richtung $r$ des Lots. - \item Bestimme jeweils einen Punkt auf den beiden Objekten und (durch Differenzbildung) den Abstandsvektor $a$ zwischen den beiden Punkten (Aufpunkte!). - \item Das Lot $l$ ist die Projektion von $a$ auf $r$. Der gesuchte Abstand ist $d = \norm{l}$. - \end{enumerate} - $$ - l = \frac{\scalarprod{a, r}}{\scalarprod{r, r}} r \qquad d = \frac{\abs{\scalarprod{a, r}}}{\scalarprod{r, r}} \norm{r} = \frac{\abs{\scalarprod{a, r}}}{\norm{r}} - $$ - - Tipps: - \begin{itemize} - \item Ist eine Hyperebene beteiligt, dann wählt man $r$ als Normalenvektor $n$ der Hyperebene. - \item Bei zwei Geraden in $\R^3$ muss $r$ senkrecht auf beiden Geraden stehen. - \item Bei nicht parallelen Geraden wählt man $r$ als Vektorprodukt der beiden Richtungsvektoren. - \item Der Abstand zweier paralleler Geraden lässt sich auf den Abstand eines Punkts zu einer Geraden zurückführen. - \end{itemize} -\end{algo} - -\begin{algo}{Abstand Punkt-Gerade im $\R^3$} - \begin{enumerate} - \item $a = l + r$, also $l = a-r$ - \item $r$ ist die Projektion von $a$ auf den Richtungsvektor der Geraden $v$, also - $$ - r = \frac{\scalarprod{a, v}}{\scalarprod{v, v}}v - $$ - \item Zusammen ergibt sich - $$ - l = a - \frac{\scalarprod{a, v}}{\scalarprod{v, v}}v \qquad d = \norm{l} - $$ - \end{enumerate} -\end{algo} - -\newpage -\subsection{Die Determinante im $\R^2$ und $\R^3$} -\begin{defi}{Determinante} - Sei $A \in \R^{n\times n}$. - \begin{itemize} - \item[\textbf{n=1:}] $A = (a_1)$. Dann gilt - $$ - \det(A) := a_1 - $$ - \item[\textbf{n=2:}] Sei $A = (a, b)$ mit den Spaltenvektoren $a, b \in \R^2$. Dann gilt - $$ - \det A = \det(a, b) := a_1b_2 - b_1a_2 - $$ - Der Betrag der Determinanten entspricht genau der Fläche des von $a$ und $b$ aufgespannten Parallelogramms. - \item[\textbf{n=3:}] - $$ - \det(a, b, c) = \det \vektor{a_1 & b_1 & c_1 \\ a_2 & b_2 & c_2 \\ a_3 & b_3 & c_3} = a_1b_2c_3 + b_1c_2a_3 + c_1a_2b_3 - a_1c_2b_3 - b_1a_2c_3-c_1b_2a_3 - $$ - \end{itemize} - -\end{defi} - -\begin{defi}{Spatprodukt} - Für drei Vektoren $a, b, c \in \R^3$ nennt man - $$ - \scalarprod{a, b \times c} \in \R - $$ - das \emph{Spatprodukt} der drei Vektoren $a, b, c$. - - Die Vektoren $a, b, c$ bilden die Kanten eines Körpers im dreidimensionalen Raum, eines \emph{Parallelipeds} oder \emph{Spats}. - - Es entspricht also der Betrag der Determinante dem Volumen des durch die drei Spaltenvektoren aufgespannten Spats. -\end{defi} - -\begin{bonus}{Determinante (Alternative)} - Seien $a, b, c \in \R^3$, $\phi$ der Winkel zwischen $a$ und $b$ sowie $\psi$ der Winkel zwischen den Vektoren $a\times b$ und $c$. Dann gilt: - $$ - \det (a, b, c) = \norm{a} \norm{b} \norm{c} \sin \phi \cos \psi - $$ -\end{bonus} - -\begin{defi}{Eigenschaften der Determinante} - Die Determinante hat folgende Eigenschaften. - \begin{itemize} - \item[\textbf{D1}] $\det(a, b, c) = \det(c, a, b) = \det(b, c, a)$ - \item[\textbf{D2}] $\det(a, b, c) = - \det(b, a, c)$ - \item[\textbf{D3}] $\det(a, a, c) = 0$ - \item[\textbf{D4}] Für $\alpha \in R$ gilt $\det(\alpha a, b, c) = \alpha \det(a, b, c)$ - \item[\textbf{D5}] $\det(a,b, c + d) = \det(a, b, c) + \det(a, b, d)$ - \item[\textbf{D6}] $\det A = \det A^T$ - \end{itemize} -\end{defi} - -\begin{bonus}{Lösbarkeit linearer Gleichungssysteme} - Notwendig und hinreichend dafür, dass das lineare Gleichungssystem $LG$ eine eindeutige Lösung besitzt, ist die Bedingung - $$ - \det(a, b, c) \neq 0 - $$ -\end{bonus} - -\newpage -\section{Algebraische Strukturen} -\subsection{Gruppen} - -\begin{defi}{Gruppe} - Sei $M$ eine Menge, und $\circ: M \times M \to M$ eine \emph{Verknüpfung}. - $(M, \circ)$ heißt Gruppe, wenn gilt: - \begin{itemize} - \item[\textbf{G1}] (Assoziativität): Die Verknüpfung ist assoziativ, d.h. es gilt: - $$ - \forall x, y, z \in M : (x \circ y) \circ z = x \circ (y \circ z) - $$ - \item[\textbf{G2}] (Neutralelement:) Es existiert ein neutrales Element $e \in M$ so dass - $$ - \forall x \in M : x \circ e = x - $$ - \item[\textbf{G3}] (Inverses Element:) $\forall x \in M \exists x'$ mit - $$ - x \circ x' = e - $$ - \item Gilt für eine Gruppe $G = (M, \circ)$, dass $x \circ y = y\circ x, \forall x, y \in M$, dann heißt $G$ \emph{abelsche Gruppe} oder \emph{kommutative Gruppe}. - \end{itemize} - - Auch muss implizit gelten: - \begin{itemize} - \item $x \circ y$ existiert $\forall x, y \in M$ und ist eindeutig festgelegt - \item $x \circ y \in M$ - \end{itemize} - Ist dies der Fall, ist die Abbildung $\circ: M \times M \to M$ \emph{wohldefiniert}. -\end{defi} - -\begin{defi}{Untergruppe} - Sei $G = (M, \circ)$ eine Gruppe und $M' \subseteq M$. Bildet $U = (M', \circ)$ eine Gruppe, so heißt $U$ \emph{Untergruppe} von $G$, Schreibweise $U \leq G$. - - Für $G$ und $U$ wie oben gilt $U \leq G$ genau dann, wenn gilt: - \begin{enumerate} - \item $M'\neq \emptyset$ - \item $\forall a, b \in M' : a\circ b \in M'$ - \item $\forall a \in M': a^{-1} \in M$ - \end{enumerate} -\end{defi} - -\newpage -\subsection{Körper} -\begin{defi}{Körper} - Das Tripel $(\R, +, \cdot)$ hat folgende Eigenschaften: - \begin{enumerate} - \item $(\R, +)$ bildet eine abelsche Gruppe. - \item $(\R \setminus \{0\}, \cdot)$ bildet eine abelsche Gruppe. - \item Es gelten die \emph{Distributivgesetze} - $$ - \forall x, y, z \in \R : (x+y) \cdot z = (x\cdot z) + (x \cdot y) \text{ und } x \cdot (y + z) = (x \cdot y) + (x \cdot z) - $$ - \emph{Jedes} Tripel $(M, \oplus, \odot)$, das die obigen drei Bedingungen erfüllt, wird \emph{Körper} genannt. - \end{enumerate} -\end{defi} - -\newpage -\subsection{Vektorräume} -\begin{defi}{Vektorraum} - Sei $K$ ein beliebiger Körper. - Eine nicht-leere Menge $V$ zusammen mit den beiden Abbildungen - $$ - \begin{aligned} - & \oplus : V \times V \to V, \quad (x, y) \to x \oplus y \in V - \text{ und } & \odot : K \times V \to V, \quad (\lambda, x) \to \lambda \odot x \in V - \end{aligned} - $$ - heißt \emph{Vektorraum über K} oder \emph{K-Vektorraum}, wenn folgende Axiome gelten: - \begin{itemize} - \item $(V, \oplus)$ ist eine kommutative Gruppe. - \item $\forall \lambda, \mu \in K$ und $x \in V$ gilt $\lambda \odot (\mu \odot x) = (\lambda\mu) \odot x$, wobei mit $\lambda\mu$ die Multiplikation aus $K$ gemeint ist. - \item $\forall x \in V$ gilt $1 \odot x = x$ ($1$ ist das neutrale Element der Multiplikation aus $K$) - \item $\forall \lambda \in K, x, y \in V$ gilt: $\lambda \odot (x \oplus y) = (\lambda x) \oplus (\lambda \odot y)$. - \item $\forall \lambda, \mu \in K, x \in V$ gilt $(\lambda + \mu) \odot x = (\lambda \odot x) \oplus (\lambda \odot x)$ - \end{itemize} -\end{defi} - -\begin{defi}{Untervektorraum} - Eine Teilmenge $U \subseteq V$ heißt \emph{Untervektorraum} oder \emph{Unterraum} von $V$, wenn $U \neq \emptyset$ und $\forall x, y \in U$ und alle $\lambda \in K$ gilt: - $$ - \begin{aligned} - & x \oplus y \in U, \\ - & \lambda \odot x \in U. - \end{aligned} - $$ -\end{defi} - -\newpage -\subsection{Lineare Unabhängigkeit, Basis, Dimension} - -Seien $v_1, \ldots, v_r \in V$ Vektoren eines $K$-Vektorraums $V$. - -\begin{defi}{Linearkombination} - Lässt sich $v\in V$ als Summe dieser Vektoren mit Vorfaktoren darstellen, - $$ - v = \sum^r_{k=1} \lambda_kv_k - $$ - heißt $v$ $Linearkombination$ von $v_1, \ldots, v_r$. -\end{defi} - -\begin{defi}{Lineare Hülle} - Die Menge - $$ - L(v_1, \ldots, v_r) := \left\{ \sum^r_{k=1} \lambda_kv_k \mid \lambda_i \in K \right\} \subseteq V - $$ - aller Linearkombinationen heißt \emph{Lineare Hülle} von $v_1, \ldots, v_r$. -\end{defi} - -\begin{defi}{Erzeugendensystem} - Sei $V$ ein $K$-Vektorraum und $(v_1, \ldots, v_n)$ ein $n$-Tupel von Vektoren in $V$. - Gilt $L(v_1, \ldots, v_n) = V$, nennt man $(v_1, \ldots, v_n)$ ein \emph{Erzeugendensystem} von $V$. - - $V$ heißt \emph{endlich erzeugt}, wenn es endlich viele Vektoren $v_1, \ldots, v_r$ gibt, so dass $L(v_1, \ldots, v_r) = V$, ansonsten \emph{nicht endlich erzeugt}. -\end{defi} - -\begin{defi}{Lineare Unabhängigkeit} - Sei $V$ ein $K$-Vektorraum. Ein $r$-Tupel $(v_1, \ldots, v_r)$ von Vektoren in $V$ heißt \emph{linear unabhängig}, wenn aus $\lambda_1v_1 +\lambda_2v_2 + \ldots + \lambda_rv_r = 0$ stets folgt, dass $\lambda_1 = \lambda_2 = \ldots = \lambda_r = 0$ gilt. - - Außerdem gilt: - \begin{itemize} - \item Keiner der Vektoren ist eine Linearkombination der übrigen. - \item Keiner der Vektoren ist der Nullvektor. - \end{itemize} - - Tipp: Ein $r$-Tupel $(v_1, \ldots, v_r)$ von Vektoren in $V$ ist \emph{linear unabhängig} genau dann, wenn $\det(v_1, \ldots, v_r) \neq 0$. -\end{defi} - -\begin{bonus}{Lineare Unabhängigkeit von Funktionen} - Wir bilden zu den Funktionen $f_1, \ldots, f_n$ für paarweise verschiedene $x_1, \ldots, x_n$ die $n$ Vektoren - $$ - (f_1(x_1), \ldots, f_1(x_n))^T, \ldots, (f_n(x_1), \ldots, f_n(x_n))^T \in \mathbb{K}^n. - $$ - Sind diese Vektoren linear unabhängig, dann sind die Funktionen $f_1, \ldots, f_n$ selbst linear unabhängig. - - Hinweis: Die Rückrichtung gilt \textbf{nicht}! -\end{bonus} - -\begin{defi}{Basis} - Sei $v \neq \{0\}$ ein endlich erzeugter $K$-Vektorraum und $v_1, \ldots, v_n \in V$. Das $n$-Tupel $B = (v_1, \ldots, v_n)$ heißt \emph{Basis} oder \emph{minimales Erzeugendensystem} von $V$, wenn $B$ linear unabhängig ist und wenn gilt $L(B) = V$. - Weiter sei $\emptyset$ die Basis des Nullvektorraums $\{0\}$. -\end{defi} - -\begin{bonus}{Koordinaten eines Vektors} - Sei $(v_1, \ldots, v_n)$ eine Basis von $V$ und $v \in V$ mit - $$ - v = \lambda_1v_1 + \ldots + \ldots_nv_n, \lambda_i, \ldots, \lambda_n \in K - $$ - Das $n$-Tupel der obigen Vorfaktoren $(\lambda_1, \ldots, \lambda_n) \in K^n$ nennt man \emph{Koordinaten} des Vektors $v$ bzgl. der Basis $(v_1, \ldots, v_n)$. -\end{bonus} - -\begin{defi}{Basisergänzungssatz} - Sei $V$ ein $K$-Vektorraum und seien - $$ - v_1, \ldots, v_r, \quad w_1, \ldots w_s \in V - $$ - Ist $(v_1, \ldots, v_r)$ linear unabhängig und ist - $$ - L(v_1, \ldots, v_r, w_1, \ldots w_s) = V, - $$ - dann kann man $(v_1, \ldots, v_r)$ durch evtl. Hinzunahme geeigneter Vektoren aus $\{w_1, \ldots w_s\}$ zu einer Basis von $V$ ergänzen. -\end{defi} - -\begin{defi}{Austauschlemma} - Sind $(v_1, \ldots, v_n)$, $(w_1, \ldots w_n)$ Basen eines $K$-Vektorraums $V$, dann gibt es zu jedem $v_i$ ein $w_j$, so dass aus $(v_1, \ldots, v_n)$ wieder eine Basis entsteht, wenn man in ihr $v_i$ durch $w_j$ ersetzt. -\end{defi} - -\begin{defi}{Dimension} - Besitzt ein Vektorraum $v \neq \{0\}$ eine Basis $(v_1, \ldots, v_n)$, so definieren wir die \emph{Dimension} von $V$ als $\dim(V) := n$. - Besitzt $V$ keine endliche Basis, dann setzt man $\dim(V) := \infty$. Weiter sei $\dim(\{0\}) := 0$. -\end{defi} - -\newpage -\subsection{Polynome} -\begin{defi}{Polynom} - Ein \emph{Polynom} oder ganzrationale Funktion $p : \mathbb{K} \to \mathbb{K}$ ist eine Funktion der Gestalt - $$ - p(x) = a_0 + a_1x + a_2x^x + \ldots + a_nx_n = \sum^n_{k=0} a_kx^k - $$. -\end{defi} - -\begin{bonus}{Polynome als $\mathbb{K}$-Vektorraum} - Sei $+$ die Addition von Funktionen und $\cdot$ die Multiplikation einer Funktion mit einem Skalar. Dann bildet $(P_n, +, \cdot)$ einen $\mathbb{K}$-Vektorraum. -\end{bonus} - -\begin{bonus}{Basis des Vektorraums $P_n$} - Die Funktionen $1, x, x^2, \ldots, x^n$ bilden eine Basis des Vektorraums $P_n$ und es gilt - $$ - \dim(P_n) = n + 1. - $$ - Diese Basis wird auch \emph{Monombasis} genannt. -\end{bonus} - -\begin{defi}{Interpolationspolynom} - Gegeben seien die $n+1$-Punkte $(x_k, y_k), 0 \leq k \leq n$ mit \emph{paarweise verschiedenen} $x_k$. - Dann existiert genau ein $p_n \in P_n$ mit $y_k = p_n(x_k) \forall 0 \leq k \leq n$. - Dies ist das sogenannte \emph{Interpolationspolynom}. -\end{defi} - -\begin{example}{Interpolationspolynom} - Wir betrachten die drei Punkte $(-2, 1)$, $(-1, -1)$ und $(1, 1)$. - - Eine interpolierende Parabel $p_2$ wird durch diese Punkte festgelegt. - - Die allgemeine Form des Polynoms ist $p_2(x) = ax^2 + bx + c$. - Einsetzen der drei Punkte ergibt die Gleichungen - $$ - \begin{aligned} - (1, 1): \quad & 1 = a + b + c \\ - (-1, -1): \quad & -1 = a - b + c \\ - (-2, 1): \quad & 1 = 4a - 2b + c \\ - \end{aligned} - $$ - und führt damit zu einem linearen Gleichungssystem. - - Man errechnet als Lösung $a = 1$, $b = 1$, $c = -1$ und erhält - $$ - p_2(x) = x^2 + x -1. - $$\qed -\end{example} - -\begin{example}{Lineare Unabhängigkeit von Polynomen} - Die Polynome - $$ - p_1(x) = (1-x)^2 \qquad p_2(x) = (1-x)x \qquad p_3(x) = x^2 - $$ - sollen auf lineare Unabhängigkeit geprüft werden. - Wir berechnen zunächst die Koeffizientenvektoren. - $$ - \begin{aligned} - & p_1(x) = (1-x)^2 & & =1-2x+1x^2 & & \implies a_{0_1} = 1, ~a_{1_1} = -2, ~a_{2_1} = 1 \\ - & p_2(x) = (1-x)x & & =0+ 1x -x^2 & & \implies a_{0_2} = 0, ~a_{1_2} = 1, ~a_{2_2} = -1 \\ - & p_3(x) = x^2 & & & & \implies a_{0_3} = 0, ~a_{1_3} = 0, ~a_{2_3} = 1 - \end{aligned} - $$ - - $\det(a_0, a_1, a_2) \neq 0$ und damit sind die Polynome linear unabhängig.\qed -\end{example} - -\subsection{Skalarprodukte, euklidische und unitäre Räume} -\begin{defi}{Euklidische und unitäre Vektorräume} - Ein reeller Vektorraum gemeinsam mit einem Skalarprodukt heißt \emph{euklidischer Vektorraum}, ein komplexer Vektorraum mit einem Skalarprodukt heißt \emph{unitärer Vektorraum}. -\end{defi} - -\begin{defi}{Orthogonale Projektion} - Sei $U$ ein endlich erzeugter Untervektorraum von $V$ und $a \in V$. - Ein Vektor $p_u(a) \in U$ heißt \emph{orthogonale Projektion} von $a$ auf $U$, wenn gilt: - $$ - a - p_U(a) \perp u \quad \forall u \in U. - $$ -\end{defi} - -\begin{defi}{Orthogonales Komplement} - Für $M \subseteq V$ heißt - $$ - M^\perp := \{v\in V \mid v \perp u \quad \forall u \in M\} - $$ - das \emph{orthogonale Komplement} von $M$. -\end{defi} - -\begin{defi}{Orthogonalsystem, Orthonormalsystem, Orthogonalbasis, Orthonormalbasis} - Sei $B = (v_1, \ldots, v_m)$ ein $m$-Tupel mit Vektoren in $V\setminus \{0\}$. - \begin{enumerate} - \item $B$ heißt \emph{Orthogonalsystem} in $V$, falls alle $v_i$ paarweise orthogonal sind. - \item Ein Orthogonalsystem, für das zusätzlich $\forall v_i \in B: \norm{v_i} = 1$ gilt, heißt \emph{Orthonormalsystem}. - \item Ein Orthogonalsystem, das eine Basis von $V$ bildet, heißt \emph{Orthogonalbasis} von $V$. - \item Ein Orthonormalsystem, das eine Basis von $V$ bildet, heißt \emph{Orthonormalbasis} von $V$. - \end{enumerate} -\end{defi} - -\subsection{Das Verfahren von Gram-Schmidt} -\begin{defi}{Gram-Schmidt-Verfahren} - Sei $V$ ein unitärer Vektorraum und $v_1, \ldots, v_m$ linear unabhängig. - Seien - $$ - \begin{aligned} - w_1 & :={} \frac{v_1}{\norm{v_1}} \\ - r_{k+1} & :={} v_{k+1} - \sum^k_{i=1} \scalarprod{v_{i+1}, w_i}w_i \\ - w_{k+1} & :={} \frac{r_{k+1}}{\norm{r_{k+1}}} - \end{aligned} - $$ - Dann bilden $(w_1, \ldots, w_m)$ eine Orthonormalbasis von $L(v_1, \ldots, v_m)$. -\end{defi} - -\begin{example}{Gram-Schmidt-Verfahren (allgemein)} - Wir betrachten eine beliebige Basis $(v_1, v_2, v_3)$ von $\R^3$. - Wir gehen so vor: - \begin{enumerate} - \item Man wählt einfach $w_1 = \frac{1}{\norm{v_1}}v_1$, weil dann offenbar $\norm{w_1} = 1$ gilt. - \item Wir konstruieren einen Vektor $r_2$, der senkrecht auf $w_1$ steht. - Dazu projizieren wir $v_2$ auf den von $w_1$ erzeugen Unterraum $L(w_1)$ und setzen $r_2 := v_2 - p_{L(v_1)}(v_2)$. - Dann gilt nach Definition der orthogonalen Projektion $v_1 \perp r_2$. - Man erhält - $$ - r_2 = v_2 - \scalarprod{v_2, w_1}w_1. - $$ - Normierung von $r_2$ liefert $w_2$. - \item Der Vektor $r_3 := v_3 - p_{L(v_1, v_2)}(v_3)$ steht nach Konstruktion senkrecht auf $L(v_1, v_2)$ und daher gilt insbesonere $r_3 \perp v_1$ und $r_3 \perp v_2$. - Weil $(w_1, w_2)$ eine Orthonormalbasis von $L(v_1, v_2)$ bilden, gilt: - $$ - r_3 = v_3 - \scalarprod{v_3, w_1}w_1 - \scalarprod{v_3, w_2}w_2 - $$ - Normierung von $r_3$ ergibt $w_3$. - \end{enumerate} -\end{example} - - -\printindex -\printindex[Beispiele] -\end{document} +\documentclass[german]{../spicker} + +\usepackage{amsmath} +\usepackage{polynom} + +\title{Lineare Algebra 1} +\author{Patrick Gustav Blaneck} +\makeindex[intoc] +\makeindex[intoc, name=Beispiele,title=Beispiele] + +\newcommand{\scalarprod}[1]{\left\langle #1 \right\rangle} +\newcommand{\vektor}[1]{\begin{pmatrix*}[r] #1 \end{pmatrix*}} +\renewcommand{\span}[1]{\operatorname{span}\left(#1\right)} +\newcommand{\dx}{~\mathrm{d}x} + +\begin{document} +\maketitle +\tableofcontents +\newpage + +%\setcounter{section}{1} + +\section{Analytische Geometrie} + +\subsection{Skalarprodukt und Norm} + +\begin{defi}{Skalarprodukt} + Eine Abbildung $\scalarprod{\cdot, \cdot}$ heißt Skalarprodukt, wenn folgende Bedingungen erfüllt sind: + \begin{itemize} + \item[\textbf{SP1}] Symmetrie: $\forall a, b \in \R^n: \scalarprod{a, b} = \scalarprod{b, a}$ + \item[\textbf{SP2}] $\forall a, b, c \in \R^n: \scalarprod{a, b+c} = \scalarprod{a, b} + \scalarprod{a, c}$ + \item[\textbf{SP3}] $\forall a \in \R^n: \scalarprod{\alpha a, b} = \alpha \scalarprod{a, b} = \scalarprod{a, \alpha b}$ + \item[\textbf{SP4}] positive Definitheit: $\forall a \in \R^n \setminus \{0\}: \scalarprod{a, a} > 0 \land \scalarprod{0, 0} = 0$ + \end{itemize} +\end{defi} + +\begin{defi}{Euklidisches Skalarprodukt} + Für $a, b$ sei ihr \emph{euklidisches Skalarprodukt} $\scalarprod{a, b}$ definiert als + $$ + \scalarprod{a, b} := \sum_{i=1}^n a_ib_i + $$ +\end{defi} + +\begin{defi}{Norm} + Eine Norm $\norm{a}$ hat folgende Eigenschaften: + \begin{itemize} + \item[\textbf{N0}] $\norm{a} \in \R$ + \item[\textbf{N1}] $\norm{a} \geq 0$ + \item[\textbf{N2}] $\norm{a} = 0 \iff a = 0$ + \item[\textbf{N3}] $\forall \lambda \in \R : \norm{\lambda a} = \abs{\lambda} \norm{a}$ + \item[\textbf{N4}] Dreiecksungleichung $\norm{a+b} \leq \norm{a} + \norm{b}$ + \end{itemize} +\end{defi} + +\begin{defi}{Euklidische Norm} + Einem Vektor $a$ wird die \emph{euklidische Norm} oder \emph{Standardnorm} $\norm{a}$ zugeordnet durch + $$ + \norm{a} := \left(\sum_{i=1}^n a_i^2\right)^{\frac{1}{2}} + $$ +\end{defi} + +\begin{bonus}{Diskrete Minkowskische Ungleichung} + Für $p \geq 1$ definiert man die $\ell_p$-Norm durch + $$ + \norm{a}_p := \left(\sum^n_{i=1} \abs{a_i}^p\right)^\frac{1}{p} + $$ + \begin{itemize} + \item $p=1$: \emph{Betragssummennorm} oder \emph{Einsernorm} + \item $p=2$: euklidische Norm + \item $p=\infty$: \emph{Maximumnorm} pder $\ell_\infty$\emph{-Norm} ($\norm{a}_\infty = \max\{\abs{a_i}, \ldots, \abs{a_n}\}$) + \end{itemize} +\end{bonus} + +\begin{defi}{Orthogonalität} + Seien $a,b \in \R^n$ und $\scalarprod{\cdot, \cdot}$ ein beliebiges Skalarprodukt. + Die Vektoren $a$ und $b$ stehen \emph{orthogonal} zueinander bzgl. $\scalarprod{\cdot, \cdot}$, Schreibweise $a \perp b$, wenn $\scalarprod{a, b} = 0$. +\end{defi} + +\begin{algo}{Orthogonalen Vektor finden} + Wir betrachten den Vektor $a= (a_1, a_2)^T$. + Für den senkrechten Vektor $a'$ gilt: $(-a_2, a_1)^T$. +\end{algo} + +\begin{bonus}{Satz des Pythagoras} + Seien $a,b \in \R^n$ mit $a \perp b$ und $\scalarprod{\cdot, \cdot}$ ein beliebiges Skalarprodukt. + Dann gilt: + $$ + \norm{a + b}^2 = \norm{a}^2 + \norm{b}^2 + $$ +\end{bonus} + +\begin{defi}{Orthogonale Projektion} + Seien $a, b$ zwei Vektoren und $b \neq 0$. Dann gilt für die orthogonale Projektion $p$ von $a$ in Richtung $b$: + $$ + p_b(a) = \frac{\scalarprod{a, b}}{\scalarprod{b, b}} b + $$ +\end{defi} + +\begin{bonus}{Cauchy-Schwarzsche Ungleichung} + Für $a, b \in \R^n$ gilt: + $$ + \abs{\scalarprod{a, b}} \leq \norm{a} \norm{b} + $$ +\end{bonus} + +\begin{defi}{Winkel zwischen Vektoren} + Seien $a, b\in \R^n\setminus \{0\}$. + Der Winkel zwischen $a$ und $b$, geschrieben $\angle (a, b)$, wird definiert als + $$ + \angle (a, b) := \arccos \frac{\scalarprod{a, b}}{\norm{a} \norm{b}} + $$ +\end{defi} + +\begin{defi}{Vektorprodukt (Kreuzprodukt)} + Seien $a, b \in \R^n$. Dann heißt + $$ + a \times b := \vektor{a_2b_3-a_3b_2 \\ a_3b_1-a_1b_3 \\ a_1b_2 - a_2b_1} + $$ + das \emph{Vektorprodukt} oder \emph{Kreuzprodukt} von $a$ und $b$. +\end{defi} + +\newpage +\subsection{Geraden und Ebenen} + +\begin{defi}{Gerade (Punkt-Richtungsgleichung)} + Für einen \emph{Ortsvektor} oder \emph{Aufpunkt} $p$ und einen \emph{Richtungsvektor} $v \neq 0$ heißt + $$ + x = p + \alpha v + $$ + \emph{Punkt-Richtungsgleichung} einer \emph{Geraden} $G$. +\end{defi} + +\begin{defi}{Gerade (Normalform in der Ebene)} + Sei $G$ eine Gerade in der Ebene, $p$ der Aufpunkt und $v$ der Richtungsvektor von $G$.\\ + Gilt $n \perp v$, dann heißt + $$ + \scalarprod{x,n} = \scalarprod{p, n} \iff n_1x_1 + n_2x_2 = c + $$ + \emph{Normalform} von $G$. +\end{defi} + +\begin{defi}{Ebene (Punkt-Richtungsgleichung)} + Seien $p, v, w \in \R^3, v\neq 0$ und $w \neq 0$, und seien $v$ und $w$ nicht parallel. + Dann heißt + $$ + x = p + \alpha v + \beta w + $$ + \emph{Punkt-Richtungsgleichung} einer \emph{Ebene} $E$. +\end{defi} + +\begin{defi}{Ebene (Normalform)} + Sei $E$ eine Ebene im Raum, $p$ der Aufpunkt und $v, w$ Richtungsvektoren von $E$. \\ + Gilt $n \perp v \land n \perp w$, dann heißt + $$ + \scalarprod{x, n} = \scalarprod{p, n} \iff n_1x_1 + n_2x_2 + n_3x_3 = d + $$ + \emph{Normalform} von $E$. +\end{defi} + + +\begin{defi}{Hessesche Normalform} + Sei $n$ ein Normalenvektor einer Gerade $G$ in der Ebene oder einer Ebene $E$ im Raum. + Gilt $\norm{n} = 1$, so heißt die damit gebildete Normalform \emph{Hessesche Normalform}. +\end{defi} + +\begin{algo}{Normalform $\to$ Hessesche Normalform (Geraden und Ebenen)} + Man erhält die Hessesche Normalform aus einer beliebigen Normalform, indem man die Normalform durch $\norm{n}$ teilt: + $$ + \frac{\scalarprod{x, n}}{\norm{n}} = \frac{\scalarprod{p, n}}{\norm{n}} + $$ + Damit liegt der Normalvektor bis auf das Vorzeichen eindeutig fest. +\end{algo} + +\begin{algo}{Punkt-Richtungsform $\to$ Normalform (Geraden)} + Sei eine Gerade $G$ gegeben durch $x = p + \alpha v$ mit $v = (v_1, v_2)^T$. + Einene Normalenvektor $n$ findet man durch + $$ + n := \vektor{v_2 \\ -v_1}. + $$ + Durch Ausrechnen von $\scalarprod{p, n}$ erhält man die rechte Seite der Normalform. +\end{algo} + +\begin{algo}{Normalform $\to$ Punkt-Richtungsform (Geraden)} + Liegt die Gerade in der Normalform $ax_1 + bx_2 = c$ vor, wird ein Richtungsvektor $v \perp n \iff v \perp (a, b)^T$ benötigt. + + Man kann hier $v = (b, -a)^T$ wählen. Einen Aufpunkt $p$ erhält man, indem man z.B. $x_1 = 0$ oder $x_2 = 0$ setzt und aus der parameterlosen Form die andere Komponente errechnet. +\end{algo} + +\begin{algo}{Punkt-Richtungsform $\to$ Normalform (Ebenen)} + Um einen Normalenvektor $n$ für die Richtungsvektoren $v, w$ zu erhalten, kann man das Kreuzprodukt der beiden Richtungsvektoren berechnen. + + Als Aufpunkt lässt sich jeder Punkt der Ebene verwenden, insbesondere der Vektor $p$ aus der Punkt-Richtungsform. +\end{algo} + +\begin{algo}{Normalform $\to$ Punkt-Richtungsform (Ebenen)} + Aus der Normalgleichung $ax_1 + bx_2 + cx_3 = d$ liest man den Normalenvektor $n = (a, b, c)^T$ ab. + Mindestens eine Komponente $n_i$ von $n$ ist ungleich $0$. + Wir vertauschen $n_i$ mit einer anderen Komponente $n_j$ und verändern das Vorzeichen von $n_j$ im so erzeugten Vektor. + + Weil es zwei Möglichkeiten gibt $i \neq j$ zu wählen, erhalten wir zwei Vektoren $v$ und $w$, mit $v \perp n$, $w\perp n$ und $v \neq 0 \neq w$ und $v \not \parallel w$. + + Ein Aufpunkt lässt sich errechnen, indem man zwei der drei Koordinaten von $x = (x_1, x_2, x_3)^T$ z.B. den Wert 0 zuweist und dann aus der Normalform den Wert der fehlenden Koordinate errechnet. + + Sollte dies nicht möglich sein, wähle man ein anderes Koordinatenpaar. Es gibt immer zwei Koordinaten in $x$, mit denen obige Rechnung möglich ist. + +\end{algo} + +\begin{defi}{Lagebeziehungen von Geraden und Ebenen} + Geraden: + \begin{itemize} + \item Zwei Geraden in $\R^2$ oder $\R^3$ heißen \emph{parallel}, wenn ihre Richtungsvektoren parallel sind. + \item Zwei sich schneidende Geraden heißen \emph{orthogonal}, wenn ihre Richtungsvektoren orthogonal sind. + \item Seien $G$ und $G'$ zwei sich schneidende Geraden mit Richtungsvektoren $v$ bzw. $v'$. Der Winkel zwischen den Geraden wird definiert durch + $$ + \angle (G, G') := \min \{\angle (v, v'), \angle (v', v)\} = \arccos \left(\frac{\abs{\scalarprod{v, v'}}}{\norm{v} \norm{v'}}\right) + $$ + \end{itemize} + + Ebenen: + \begin{itemize} + \item Zwei Ebenen heißen \emph{parallel}, wenn ihre Normalenvektoren parallel sind. Sie heißen \emph{orthogonal}, wenn ihre Normalenvektoren orthogonal sind. + \item Sei $E$ eine Ebene mit Normalenvektor $n$. Eine Gerade mit Richtungsvektoren $v$ heißt \emph{parallel} zur Ebene $E$, falls $v \perp n$. + \item Seien $n$ und $n'$ Normalenvektoren der beiden Ebenen $E$ und $E'$. Dann wird der Winkel $\angle (E, E')$ zwischen den beiden Ebenen erklärt durch + $$ + \angle (E, E') := \min \{\angle (n, n'), \angle (n', n)\} = \arccos \left(\frac{\abs{\scalarprod{n, n'}}}{\norm{n} \norm{n'}}\right) + $$ + \end{itemize} +\end{defi} + +\begin{algo}{Schnittmengen zwischen Geraden und Ebenen in $\R^2$ und $\R^3$} + \begin{enumerate} + \item Man sorgt eventuell durch Umrechnung dafür, dass das eine Objekt durch eine parameterlose (\emph{Normalgleichung}) und das andere durch eine parameterbehaftete Gleichung (\emph{Punkt-Richtungsgleichung}) beschrieben wird. + \item Man setzt die Parametergleichung in die parameterlose Gleichung ein und erhält Ausdrücke für den oder die Parameter. + \item Diese setzt man in die Parametergleichung ein und erhält eine Parametrisierung der Schnittmenge. + \end{enumerate} +\end{algo} + +\begin{example}{Schnittmenge zwischen einer Gerade und einer Ebene} + Gegeben seien $p = (1, -1, 2)^T$, $q = (1, 1, 1)^T$ und $n = (1, 2, 3)^T$. + Gesucht wird der Schnittpunkt der Geraden $G$ durch $p$ in Richtung von $n$ mit der Ebene $E$ durch $q$ senkrecht zu $n$. + Man verwendet bei der Gleichsetzung für $E$ eine Normal- und für $G$ eine Parameterform, z.B. + $$ + x = \vektor{x_1, x_2, x_3} = \vektor{1 \\ -1 \\ 2} + \alpha \cdot \vektor{1 \\ 2\\ 3}. + $$ + Komponentenweise liest man daraus die Gleichungen + $$ + x_1 = 1 + \alpha \qquad x_2 = -1+2\alpha \qquad x_3 = 2+3\alpha + $$ + ab. Eine Normalform von $E$ lautet + $$ + \scalarprod{x, n} = \scalarprod{q, n} \iff x_1 + 2x_2 + 3x_3 = 6. + $$ + Einsetzen in die Normalgleichung liefert dann $\alpha = \frac{1}{14}$. + Den Schnittpunkt $s$ erhält man durch Ensetzen von $\alpha$ in die Parametergleichung: + $$ + s = p + \alpha n = \left(\frac{15}{14}, -\frac{12}{14}, \frac{31}{14}\right)^T. + $$\qed +\end{example} + +\begin{bonus}{Lotfußpunkt} + Sei $G$ eine Gerade mit Richtungsvektor $v$ und $q \notin G$. + Ein Punkt $q'\in G$ heißt \emph{Lotfußpunkt}, wenn $l := q=q' \perp G$ gilt, $l$ heißt \emph{Lot}, und der Abstand $d$ zwischen einem Punkt und einer Geraden in $\R^3$ wird definiert durch $d := \norm{l}$. +\end{bonus} + +\begin{algo}{Abstandsberechnung (Punkte, Geraden und Hyperebenen)} + Abstandsberechnungen zwischen Punkten, Geraden und Hyperebenen lassen sich auf die Berechnung des Lotfußpunktes zurückführen: + + \begin{enumerate} + \item Bestimme die Richtung $r$ des Lots. + \item Bestimme jeweils einen Punkt auf den beiden Objekten und (durch Differenzbildung) den Abstandsvektor $a$ zwischen den beiden Punkten (Aufpunkte!). + \item Das Lot $l$ ist die Projektion von $a$ auf $r$. Der gesuchte Abstand ist $d = \norm{l}$. + \end{enumerate} + $$ + l = \frac{\scalarprod{a, r}}{\scalarprod{r, r}} r \qquad d = \frac{\abs{\scalarprod{a, r}}}{\scalarprod{r, r}} \norm{r} = \frac{\abs{\scalarprod{a, r}}}{\norm{r}} + $$ + + Tipps: + \begin{itemize} + \item Ist eine Hyperebene beteiligt, dann wählt man $r$ als Normalenvektor $n$ der Hyperebene. + \item Bei zwei Geraden in $\R^3$ muss $r$ senkrecht auf beiden Geraden stehen. + \item Bei nicht parallelen Geraden wählt man $r$ als Vektorprodukt der beiden Richtungsvektoren. + \item Der Abstand zweier paralleler Geraden lässt sich auf den Abstand eines Punkts zu einer Geraden zurückführen. + \end{itemize} +\end{algo} + +\begin{algo}{Abstand Punkt-Gerade im $\R^3$} + \begin{enumerate} + \item $a = l + r$, also $l = a-r$ + \item $r$ ist die Projektion von $a$ auf den Richtungsvektor der Geraden $v$, also + $$ + r = \frac{\scalarprod{a, v}}{\scalarprod{v, v}}v + $$ + \item Zusammen ergibt sich + $$ + l = a - \frac{\scalarprod{a, v}}{\scalarprod{v, v}}v \qquad d = \norm{l} + $$ + \end{enumerate} +\end{algo} + +\newpage +\subsection{Die Determinante im $\R^2$ und $\R^3$} +\begin{defi}{Determinante} + Sei $A \in \R^{n\times n}$. + \begin{itemize} + \item[\textbf{n=1:}] $A = (a_1)$. Dann gilt + $$ + \det(A) := a_1 + $$ + \item[\textbf{n=2:}] Sei $A = (a, b)$ mit den Spaltenvektoren $a, b \in \R^2$. Dann gilt + $$ + \det A = \det(a, b) := a_1b_2 - b_1a_2 + $$ + Der Betrag der Determinanten entspricht genau der Fläche des von $a$ und $b$ aufgespannten Parallelogramms. + \item[\textbf{n=3:}] + $$ + \det(a, b, c) = \det \vektor{a_1 & b_1 & c_1 \\ a_2 & b_2 & c_2 \\ a_3 & b_3 & c_3} = a_1b_2c_3 + b_1c_2a_3 + c_1a_2b_3 - a_1c_2b_3 - b_1a_2c_3-c_1b_2a_3 + $$ + \end{itemize} + +\end{defi} + +\begin{defi}{Spatprodukt} + Für drei Vektoren $a, b, c \in \R^3$ nennt man + $$ + \scalarprod{a, b \times c} \in \R + $$ + das \emph{Spatprodukt} der drei Vektoren $a, b, c$. + + Die Vektoren $a, b, c$ bilden die Kanten eines Körpers im dreidimensionalen Raum, eines \emph{Parallelipeds} oder \emph{Spats}. + + Es entspricht also der Betrag der Determinante dem Volumen des durch die drei Spaltenvektoren aufgespannten Spats. +\end{defi} + +\begin{bonus}{Determinante (Alternative)} + Seien $a, b, c \in \R^3$, $\phi$ der Winkel zwischen $a$ und $b$ sowie $\psi$ der Winkel zwischen den Vektoren $a\times b$ und $c$. Dann gilt: + $$ + \det (a, b, c) = \norm{a} \norm{b} \norm{c} \sin \phi \cos \psi + $$ +\end{bonus} + +\begin{defi}{Eigenschaften der Determinante} + Die Determinante hat folgende Eigenschaften. + \begin{itemize} + \item[\textbf{D1}] $\det(a, b, c) = \det(c, a, b) = \det(b, c, a)$ + \item[\textbf{D2}] $\det(a, b, c) = - \det(b, a, c)$ + \item[\textbf{D3}] $\det(a, a, c) = 0$ + \item[\textbf{D4}] Für $\alpha \in R$ gilt $\det(\alpha a, b, c) = \alpha \det(a, b, c)$ + \item[\textbf{D5}] $\det(a,b, c + d) = \det(a, b, c) + \det(a, b, d)$ + \item[\textbf{D6}] $\det A = \det A^T$ + \end{itemize} +\end{defi} + +\begin{bonus}{Lösbarkeit linearer Gleichungssysteme} + Notwendig und hinreichend dafür, dass das lineare Gleichungssystem $LG$ eine eindeutige Lösung besitzt, ist die Bedingung + $$ + \det(a, b, c) \neq 0 + $$ +\end{bonus} + +\newpage +\section{Algebraische Strukturen} +\subsection{Gruppen} + +\begin{defi}{Gruppe} + Sei $M$ eine Menge, und $\circ: M \times M \to M$ eine \emph{Verknüpfung}. + $(M, \circ)$ heißt Gruppe, wenn gilt: + \begin{itemize} + \item[\textbf{G1}] (Assoziativität): Die Verknüpfung ist assoziativ, d.h. es gilt: + $$ + \forall x, y, z \in M : (x \circ y) \circ z = x \circ (y \circ z) + $$ + \item[\textbf{G2}] (Neutralelement:) Es existiert ein neutrales Element $e \in M$ so dass + $$ + \forall x \in M : x \circ e = x + $$ + \item[\textbf{G3}] (Inverses Element:) $\forall x \in M \exists x'$ mit + $$ + x \circ x' = e + $$ + \item Gilt für eine Gruppe $G = (M, \circ)$, dass $x \circ y = y\circ x, \forall x, y \in M$, dann heißt $G$ \emph{abelsche Gruppe} oder \emph{kommutative Gruppe}. + \end{itemize} + + Auch muss implizit gelten: + \begin{itemize} + \item $x \circ y$ existiert $\forall x, y \in M$ und ist eindeutig festgelegt + \item $x \circ y \in M$ + \end{itemize} + Ist dies der Fall, ist die Abbildung $\circ: M \times M \to M$ \emph{wohldefiniert}. +\end{defi} + +\begin{defi}{Untergruppe} + Sei $G = (M, \circ)$ eine Gruppe und $M' \subseteq M$. Bildet $U = (M', \circ)$ eine Gruppe, so heißt $U$ \emph{Untergruppe} von $G$, Schreibweise $U \leq G$. + + Für $G$ und $U$ wie oben gilt $U \leq G$ genau dann, wenn gilt: + \begin{enumerate} + \item $M'\neq \emptyset$ + \item $\forall a, b \in M' : a\circ b \in M'$ + \item $\forall a \in M': a^{-1} \in M$ + \end{enumerate} +\end{defi} + +\newpage +\subsection{Körper} +\begin{defi}{Körper} + Das Tripel $(\R, +, \cdot)$ hat folgende Eigenschaften: + \begin{enumerate} + \item $(\R, +)$ bildet eine abelsche Gruppe. + \item $(\R \setminus \{0\}, \cdot)$ bildet eine abelsche Gruppe. + \item Es gelten die \emph{Distributivgesetze} + $$ + \forall x, y, z \in \R : (x+y) \cdot z = (x\cdot z) + (x \cdot y) \text{ und } x \cdot (y + z) = (x \cdot y) + (x \cdot z) + $$ + \emph{Jedes} Tripel $(M, \oplus, \odot)$, das die obigen drei Bedingungen erfüllt, wird \emph{Körper} genannt. + \end{enumerate} +\end{defi} + +\newpage +\subsection{Vektorräume} +\begin{defi}{Vektorraum} + Sei $K$ ein beliebiger Körper. + Eine nicht-leere Menge $V$ zusammen mit den beiden Abbildungen + $$ + \begin{aligned} + & \oplus : V \times V \to V, \quad (x, y) \to x \oplus y \in V + \text{ und } & \odot : K \times V \to V, \quad (\lambda, x) \to \lambda \odot x \in V + \end{aligned} + $$ + heißt \emph{Vektorraum über K} oder \emph{K-Vektorraum}, wenn folgende Axiome gelten: + \begin{itemize} + \item $(V, \oplus)$ ist eine kommutative Gruppe. + \item $\forall \lambda, \mu \in K$ und $x \in V$ gilt $\lambda \odot (\mu \odot x) = (\lambda\mu) \odot x$, wobei mit $\lambda\mu$ die Multiplikation aus $K$ gemeint ist. + \item $\forall x \in V$ gilt $1 \odot x = x$ ($1$ ist das neutrale Element der Multiplikation aus $K$) + \item $\forall \lambda \in K, x, y \in V$ gilt: $\lambda \odot (x \oplus y) = (\lambda x) \oplus (\lambda \odot y)$. + \item $\forall \lambda, \mu \in K, x \in V$ gilt $(\lambda + \mu) \odot x = (\lambda \odot x) \oplus (\lambda \odot x)$ + \end{itemize} +\end{defi} + +\begin{defi}{Untervektorraum} + Eine Teilmenge $U \subseteq V$ heißt \emph{Untervektorraum} oder \emph{Unterraum} von $V$, wenn $U \neq \emptyset$ und $\forall x, y \in U$ und alle $\lambda \in K$ gilt: + $$ + \begin{aligned} + & x \oplus y \in U, \\ + & \lambda \odot x \in U. + \end{aligned} + $$ +\end{defi} + +\newpage +\subsection{Lineare Unabhängigkeit, Basis, Dimension} + +Seien $v_1, \ldots, v_r \in V$ Vektoren eines $K$-Vektorraums $V$. + +\begin{defi}{Linearkombination} + Lässt sich $v\in V$ als Summe dieser Vektoren mit Vorfaktoren darstellen, + $$ + v = \sum^r_{k=1} \lambda_kv_k + $$ + heißt $v$ $Linearkombination$ von $v_1, \ldots, v_r$. +\end{defi} + +\begin{defi}{Lineare Hülle} + Die Menge + $$ + L(v_1, \ldots, v_r) := \left\{ \sum^r_{k=1} \lambda_kv_k \mid \lambda_i \in K \right\} \subseteq V + $$ + aller Linearkombinationen heißt \emph{Lineare Hülle} von $v_1, \ldots, v_r$. +\end{defi} + +\begin{defi}{Erzeugendensystem} + Sei $V$ ein $K$-Vektorraum und $(v_1, \ldots, v_n)$ ein $n$-Tupel von Vektoren in $V$. + Gilt $L(v_1, \ldots, v_n) = V$, nennt man $(v_1, \ldots, v_n)$ ein \emph{Erzeugendensystem} von $V$. + + $V$ heißt \emph{endlich erzeugt}, wenn es endlich viele Vektoren $v_1, \ldots, v_r$ gibt, so dass $L(v_1, \ldots, v_r) = V$, ansonsten \emph{nicht endlich erzeugt}. +\end{defi} + +\begin{defi}{Lineare Unabhängigkeit} + Sei $V$ ein $K$-Vektorraum. Ein $r$-Tupel $(v_1, \ldots, v_r)$ von Vektoren in $V$ heißt \emph{linear unabhängig}, wenn aus $\lambda_1v_1 +\lambda_2v_2 + \ldots + \lambda_rv_r = 0$ stets folgt, dass $\lambda_1 = \lambda_2 = \ldots = \lambda_r = 0$ gilt. + + Außerdem gilt: + \begin{itemize} + \item Keiner der Vektoren ist eine Linearkombination der übrigen. + \item Keiner der Vektoren ist der Nullvektor. + \end{itemize} + + Tipp: Ein $r$-Tupel $(v_1, \ldots, v_r)$ von Vektoren in $V$ ist \emph{linear unabhängig} genau dann, wenn $\det(v_1, \ldots, v_r) \neq 0$. +\end{defi} + +\begin{bonus}{Lineare Unabhängigkeit von Funktionen} + Wir bilden zu den Funktionen $f_1, \ldots, f_n$ für paarweise verschiedene $x_1, \ldots, x_n$ die $n$ Vektoren + $$ + (f_1(x_1), \ldots, f_1(x_n))^T, \ldots, (f_n(x_1), \ldots, f_n(x_n))^T \in \mathbb{K}^n. + $$ + Sind diese Vektoren linear unabhängig, dann sind die Funktionen $f_1, \ldots, f_n$ selbst linear unabhängig. + + Hinweis: Die Rückrichtung gilt \textbf{nicht}! +\end{bonus} + +\begin{defi}{Basis} + Sei $v \neq \{0\}$ ein endlich erzeugter $K$-Vektorraum und $v_1, \ldots, v_n \in V$. Das $n$-Tupel $B = (v_1, \ldots, v_n)$ heißt \emph{Basis} oder \emph{minimales Erzeugendensystem} von $V$, wenn $B$ linear unabhängig ist und wenn gilt $L(B) = V$. + Weiter sei $\emptyset$ die Basis des Nullvektorraums $\{0\}$. +\end{defi} + +\begin{bonus}{Koordinaten eines Vektors} + Sei $(v_1, \ldots, v_n)$ eine Basis von $V$ und $v \in V$ mit + $$ + v = \lambda_1v_1 + \ldots + \ldots_nv_n, \lambda_i, \ldots, \lambda_n \in K + $$ + Das $n$-Tupel der obigen Vorfaktoren $(\lambda_1, \ldots, \lambda_n) \in K^n$ nennt man \emph{Koordinaten} des Vektors $v$ bzgl. der Basis $(v_1, \ldots, v_n)$. +\end{bonus} + +\begin{defi}{Basisergänzungssatz} + Sei $V$ ein $K$-Vektorraum und seien + $$ + v_1, \ldots, v_r, \quad w_1, \ldots w_s \in V + $$ + Ist $(v_1, \ldots, v_r)$ linear unabhängig und ist + $$ + L(v_1, \ldots, v_r, w_1, \ldots w_s) = V, + $$ + dann kann man $(v_1, \ldots, v_r)$ durch evtl. Hinzunahme geeigneter Vektoren aus $\{w_1, \ldots w_s\}$ zu einer Basis von $V$ ergänzen. +\end{defi} + +\begin{defi}{Austauschlemma} + Sind $(v_1, \ldots, v_n)$, $(w_1, \ldots w_n)$ Basen eines $K$-Vektorraums $V$, dann gibt es zu jedem $v_i$ ein $w_j$, so dass aus $(v_1, \ldots, v_n)$ wieder eine Basis entsteht, wenn man in ihr $v_i$ durch $w_j$ ersetzt. +\end{defi} + +\begin{defi}{Dimension} + Besitzt ein Vektorraum $v \neq \{0\}$ eine Basis $(v_1, \ldots, v_n)$, so definieren wir die \emph{Dimension} von $V$ als $\dim(V) := n$. + Besitzt $V$ keine endliche Basis, dann setzt man $\dim(V) := \infty$. Weiter sei $\dim(\{0\}) := 0$. +\end{defi} + +\newpage +\subsection{Polynome} +\begin{defi}{Polynom} + Ein \emph{Polynom} oder ganzrationale Funktion $p : \mathbb{K} \to \mathbb{K}$ ist eine Funktion der Gestalt + $$ + p(x) = a_0 + a_1x + a_2x^x + \ldots + a_nx_n = \sum^n_{k=0} a_kx^k + $$. +\end{defi} + +\begin{bonus}{Polynome als $\mathbb{K}$-Vektorraum} + Sei $+$ die Addition von Funktionen und $\cdot$ die Multiplikation einer Funktion mit einem Skalar. Dann bildet $(P_n, +, \cdot)$ einen $\mathbb{K}$-Vektorraum. +\end{bonus} + +\begin{bonus}{Basis des Vektorraums $P_n$} + Die Funktionen $1, x, x^2, \ldots, x^n$ bilden eine Basis des Vektorraums $P_n$ und es gilt + $$ + \dim(P_n) = n + 1. + $$ + Diese Basis wird auch \emph{Monombasis} genannt. +\end{bonus} + +\begin{defi}{Interpolationspolynom} + Gegeben seien die $n+1$-Punkte $(x_k, y_k), 0 \leq k \leq n$ mit \emph{paarweise verschiedenen} $x_k$. + Dann existiert genau ein $p_n \in P_n$ mit $y_k = p_n(x_k) \forall 0 \leq k \leq n$. + Dies ist das sogenannte \emph{Interpolationspolynom}. +\end{defi} + +\begin{example}{Interpolationspolynom} + Wir betrachten die drei Punkte $(-2, 1)$, $(-1, -1)$ und $(1, 1)$. + + Eine interpolierende Parabel $p_2$ wird durch diese Punkte festgelegt. + + Die allgemeine Form des Polynoms ist $p_2(x) = ax^2 + bx + c$. + Einsetzen der drei Punkte ergibt die Gleichungen + $$ + \begin{aligned} + (1, 1): \quad & 1 = a + b + c \\ + (-1, -1): \quad & -1 = a - b + c \\ + (-2, 1): \quad & 1 = 4a - 2b + c \\ + \end{aligned} + $$ + und führt damit zu einem linearen Gleichungssystem. + + Man errechnet als Lösung $a = 1$, $b = 1$, $c = -1$ und erhält + $$ + p_2(x) = x^2 + x -1. + $$\qed +\end{example} + +\begin{example}{Lineare Unabhängigkeit von Polynomen} + Die Polynome + $$ + p_1(x) = (1-x)^2 \qquad p_2(x) = (1-x)x \qquad p_3(x) = x^2 + $$ + sollen auf lineare Unabhängigkeit geprüft werden. + Wir berechnen zunächst die Koeffizientenvektoren. + $$ + \begin{aligned} + & p_1(x) = (1-x)^2 & & =1-2x+1x^2 & & \implies a_{0_1} = 1, ~a_{1_1} = -2, ~a_{2_1} = 1 \\ + & p_2(x) = (1-x)x & & =0+ 1x -x^2 & & \implies a_{0_2} = 0, ~a_{1_2} = 1, ~a_{2_2} = -1 \\ + & p_3(x) = x^2 & & & & \implies a_{0_3} = 0, ~a_{1_3} = 0, ~a_{2_3} = 1 + \end{aligned} + $$ + + $\det(a_0, a_1, a_2) \neq 0$ und damit sind die Polynome linear unabhängig.\qed +\end{example} + +\subsection{Skalarprodukte, euklidische und unitäre Räume} +\begin{defi}{Euklidische und unitäre Vektorräume} + Ein reeller Vektorraum gemeinsam mit einem Skalarprodukt heißt \emph{euklidischer Vektorraum}, ein komplexer Vektorraum mit einem Skalarprodukt heißt \emph{unitärer Vektorraum}. +\end{defi} + +\begin{defi}{Orthogonale Projektion} + Sei $U$ ein endlich erzeugter Untervektorraum von $V$ und $a \in V$. + Ein Vektor $p_u(a) \in U$ heißt \emph{orthogonale Projektion} von $a$ auf $U$, wenn gilt: + $$ + a - p_U(a) \perp u \quad \forall u \in U. + $$ +\end{defi} + +\begin{defi}{Orthogonales Komplement} + Für $M \subseteq V$ heißt + $$ + M^\perp := \{v\in V \mid v \perp u \quad \forall u \in M\} + $$ + das \emph{orthogonale Komplement} von $M$. +\end{defi} + +\begin{defi}{Orthogonalsystem, Orthonormalsystem, Orthogonalbasis, Orthonormalbasis} + Sei $B = (v_1, \ldots, v_m)$ ein $m$-Tupel mit Vektoren in $V\setminus \{0\}$. + \begin{enumerate} + \item $B$ heißt \emph{Orthogonalsystem} in $V$, falls alle $v_i$ paarweise orthogonal sind. + \item Ein Orthogonalsystem, für das zusätzlich $\forall v_i \in B: \norm{v_i} = 1$ gilt, heißt \emph{Orthonormalsystem}. + \item Ein Orthogonalsystem, das eine Basis von $V$ bildet, heißt \emph{Orthogonalbasis} von $V$. + \item Ein Orthonormalsystem, das eine Basis von $V$ bildet, heißt \emph{Orthonormalbasis} von $V$. + \end{enumerate} +\end{defi} + +\subsection{Das Verfahren von Gram-Schmidt} +\begin{defi}{Gram-Schmidt-Verfahren} + Sei $V$ ein unitärer Vektorraum und $v_1, \ldots, v_m$ linear unabhängig. + Seien + $$ + \begin{aligned} + w_1 & :={} \frac{v_1}{\norm{v_1}} \\ + r_{k+1} & :={} v_{k+1} - \sum^k_{i=1} \scalarprod{v_{k+1}, w_i}w_i \\ + w_{k+1} & :={} \frac{r_{k+1}}{\norm{r_{k+1}}} + \end{aligned} + $$ + Dann bilden $(w_1, \ldots, w_m)$ eine Orthonormalbasis von $L(v_1, \ldots, v_m)$. +\end{defi} + +\begin{example}{Gram-Schmidt-Verfahren (allgemein)} + Wir betrachten eine beliebige Basis $(v_1, v_2, v_3)$ von $\R^3$. + Wir gehen so vor: + \begin{enumerate} + \item Man wählt einfach $w_1 = \frac{1}{\norm{v_1}}v_1$, weil dann offenbar $\norm{w_1} = 1$ gilt. + \item Wir konstruieren einen Vektor $r_2$, der senkrecht auf $w_1$ steht. + Dazu projizieren wir $v_2$ auf den von $w_1$ erzeugen Unterraum $L(w_1)$ und setzen $r_2 := v_2 - p_{L(v_1)}(v_2)$. + Dann gilt nach Definition der orthogonalen Projektion $v_1 \perp r_2$. + Man erhält + $$ + r_2 = v_2 - \scalarprod{v_2, w_1}w_1. + $$ + Normierung von $r_2$ liefert $w_2$. + \item Der Vektor $r_3 := v_3 - p_{L(v_1, v_2)}(v_3)$ steht nach Konstruktion senkrecht auf $L(v_1, v_2)$ und daher gilt insbesonere $r_3 \perp v_1$ und $r_3 \perp v_2$. + Weil $(w_1, w_2)$ eine Orthonormalbasis von $L(v_1, v_2)$ bilden, gilt: + $$ + r_3 = v_3 - \scalarprod{v_3, w_1}w_1 - \scalarprod{v_3, w_2}w_2 + $$ + Normierung von $r_3$ ergibt $w_3$. + \end{enumerate} +\end{example} + + +\printindex +\printindex[Beispiele] +\end{document} diff --git a/la2/la2.pdf b/la2/la2.pdf index 4cd8b44e586329ab54bf66e0e58003482c8b7080..80b2e189975afaa4e738e39f5740ffd04e17c1a1 100644 GIT binary patch delta 143 zcmaE}QRvM^p$)Uy89O)6VgJX(BGj<mt$7|-`#dhj_IX@P?en;px6k8Zsj6o;Gc-1~ zG%}hl-^C&W<7{{8VtK{sZ0hP{ZsBBNYUJqTY-r?a;bdXrYG`O?>15_&V(w_}Y^PvD MNXhp6DJ-=t0Io79z5oCK delta 143 zcmaE}QRvM^p$)Uy8T&TRVgJX(@``i2OY=Og_IX^4?en;p+UIdGZ=c7-QdQ4xVrXGt zWMDpBzKcZ$#@X)F#qx^N+1bF=(A3e~#MIc_)!f3+$j#E(!qm~g$lTD}#l^zJ&`!aI Mkdp2BQ&?(Q0Lqpqo&W#< diff --git a/la2/la2.tex b/la2/la2.tex index 304bce2..cfed3e7 100644 --- a/la2/la2.tex +++ b/la2/la2.tex @@ -1,1575 +1,1575 @@ -\documentclass[german]{../spicker} - -\usepackage{amsmath} -\usepackage{polynom} -\usepackage{nicefrac} -\usepackage{array} % for \newcolumntype macro -\usepackage{tikz} -\usepackage{pgfplots} -\usepackage{multirow,bigdelim} -\usepgfplotslibrary{fillbetween} - -\usetikzlibrary{positioning} - -\title{Lineare Algebra 2} -\author{Patrick Gustav Blaneck} -\makeindex[intoc] -\makeindex[intoc, name=Beispiele,title=Beispiele] - -\newcommand{\scalarprod}[1]{\left\langle #1 \right\rangle} -\newcommand{\vektor}[1]{\begin{pmatrix*}[c] #1 \end{pmatrix*}} -\renewcommand{\span}[1]{\operatorname{span}\left(#1\right)} - -\newcommand{\im}{\operatorname{im}} -\newcommand{\rg}{\operatorname{rg}} -\newcommand{\defect}{\operatorname{def}} -\newcommand{\Eig}{\operatorname{Eig}} - -\renewcommand{\d}{\,\mathrm{d}} - -\renewcommand{\abs}[1]{\left| #1 \right|} -\newcommand{\cis}[1]{\left( \cos\left( #1 \right) + i \sin\left( #1 \right) \right)} -\newcommand{\sgn}{\text{sgn}} -\newcommand{\diff}{\mathrm{d}} -\newcommand{\dx}{~\mathrm{d}x} -\newcommand{\du}{~\mathrm{d}u} -\newcommand{\dv}{~\mathrm{d}v} -\newcommand{\dw}{~\mathrm{d}w} -\newcommand{\dt}{~\mathrm{d}t} -\newcommand{\dn}{~\mathrm{d}n} -\newcommand{\dudx}{~\frac{\mathrm{d}u}{\mathrm{d}x}} -\newcommand{\dudn}{~\frac{\mathrm{d}u}{\mathrm{d}n}} -\newcommand{\dvdx}{~\frac{\mathrm{d}v}{\mathrm{d}x}} -\newcommand{\dwdx}{~\frac{\mathrm{d}w}{\mathrm{d}x}} -\newcommand{\dtdx}{~\frac{\mathrm{d}t}{\mathrm{d}x}} -\newcommand{\ddx}{\frac{\mathrm{d}}{\mathrm{d}x}} -\newcommand{\dFdx}{\frac{\mathrm{d}F}{\mathrm{d}x}} -\newcommand{\dfdx}{\frac{\mathrm{d}f}{\mathrm{d}x}} -\newcommand{\interval}[1]{\left[ #1 \right]} - -\newcolumntype{L}{>{$}l<{$}} % math-mode version of "l" column type -\newcolumntype{R}{>{$}r<{$}} % math-mode version of "r" column type -\newcolumntype{C}{>{$}c<{$}} % math-mode version of "c" column type -\newcolumntype{P}{>{$}p<{$}} % math-mode version of "l" column type - -\newenvironment{sysmatrix}[1] - {\left(\begin{array}{@{}#1@{}}} - {\end{array}\right)} - -\newcommand{\dvektor}[1]{\begin{vmatrix*}[r] #1 \end{vmatrix*}} - -\begin{document} -\maketitle -\tableofcontents -\newpage - -%\setcounter{section}{1} - -\section{Lineare Abbildungen} - -\subsection{Grundlegende Eigenschaften linearer Abbildungen} - -\begin{defi}{Homomorphismus} - Eine Abbildung $f : V \to W$ heißt \emph{linear} oder ein \emph{Homomorphismus}, falls $\forall x, y \in V, \forall \lambda \in K$ gilt: - \begin{itemize} - \item Additivität: $f(x + y) = f(x) + f(y)$ - \item Homogenität: $f(\lambda x) = \lambda f(x)$ - \end{itemize} - - Es gilt auch: - \begin{itemize} - \item Für eine lineare Funktion $f$ gilt $f(0) = 0$. - \item Die Funktion $f$ ist genau dann linear, wenn $\forall x, y \in V, \forall \lambda \in K$ gilt: - $$ - f(x + \lambda y) = f(x) + \lambda f(y) - $$ - \item Summen, Vielfache linearer Abbildungen und vektorwertige Abbildungen, deren Komponenten aus linearen Abbildungen bestehen, sind wiederum linear. - \end{itemize} -\end{defi} - -\begin{example}{Homomorphismus} - Gegeben sei die Abbildung $f : \R^3 \to \R^2$ mit $f(x_1, x_2, x_3) = (x_1-2x_3, 4x_2)$. - - Zeigen Sie: $f$ ist linear. - - \exampleseparator - - $f$ ist genau dann \emph{linear}, wenn $f$ \emph{homogen} und \emph{additiv} ist. - - \emph{Homogenität:} $\forall x \in \R^3, \lambda \in \R: f(\lambda x) = \lambda f(x)$ - $$ - \begin{aligned} - & f(\lambda x) & & = \lambda f(x) \\ - \equiv \quad & f(\lambda x_1, \lambda x_2, \lambda x_3) & & = \lambda f(x_1, x_2, x_3) \\ - \equiv \quad & (\lambda x_1-2 \lambda x_3, 4 \lambda x_2) & & = \lambda (x_1-2x_3, 4x_2) \\ - \equiv \quad & \lambda (x_1-2x_3, 4x_2) & & = \lambda (x_1-2x_3, 4x_2) \quad \checkmark - \end{aligned} - $$ - \emph{Additivität:} $\forall x, y \in \R^3: f(x + y) = f(x) + f_4(y)$ - $$ - \begin{aligned} - & f(x + y) & & = f(x) + f(y) \\ - \equiv \quad & f(x_1 + y_1, x_2 + y_2, x_3 + y_3) & & = f(x_1, x_2, x_3) + f(y_1, y_2, y_3) \\ - \equiv \quad & (x_1 + y_1-2(x_3 + y_3), 4(x_2 + y_2)) & & = (x_1-2x_3, 4x_2) + (y_1-2y_3, 4y_2) \\ - \equiv \quad & (x_1 + y_1-2 x_3 -2 y_3, 4 x_2 +4 y_2) & & = (x_1 + y_1-2 x_3 -2 y_3, 4 x_2 +4 y_2) \quad \checkmark - \end{aligned} - $$ - - Damit ist $f$ linear. \qed -\end{example} - -\begin{defi}{Kern} - Der \emph{Kern} einer linearen Abbildung $f : V \to W$ wird definiert durch - $$ - \ker (f) := f^{-1}(0) - $$ - - Dabei gilt: - \begin{itemize} - \item $\im (f)$\footnote{Bild von $f$} ist ein Untervektorraum von $W$. - \item $\ker (f)$ ist ein Untervektorraum von $V$. - \end{itemize} - - Eine lineare Abbildung ist genau dann injektiv, wenn $\ker (f) = \{0\}$ gilt. -\end{defi} - -\begin{bonus}{Defekt} - Für eine lineare Funktion $f: V\to W$ definiert man den \emph{Defekt} von $f$ durch - $$ - \defect (f) := \dim\ker (f) - $$ - - Eine lineare Abbildung ist genau dann injektiv, wenn $\defect (f) = 0$ gilt. -\end{bonus} - -\begin{example}{Kern} - Gegeben sei die Abbildung $f : \R^3 \to \R^2$ mit $f(x_1, x_2, x_3) = (x_1-2x_3, 4x_2)$. - - Bestimmen Sie den Kern von $f$ und geben Sie $\dim(\ker(f))$ an. - - \exampleseparator - - $$ - f(x_1, x_2, x_3) = 0 \iff - \begin{sysmatrix}{ccc|c} - 1 & 0 & -2 & 0 \\ - 0 & 4 & 0 & 0 - \end{sysmatrix} - \implies x_2 = 0 \quad \land \quad x_1 = 2x_3 - $$ - Daraus folgt: - $$ - \ker(f) = f^{-1}(0) = \left\{ (2\lambda, 0, \lambda) \mid \lambda \in \R \right\} \implies \defect(f) = \dim(\ker(f)) = 1 - $$\qed -\end{example} - -\begin{defi}{Rang} - Für eine lineare Funktion $f: V\to W$ definiert man den \emph{Rang} von $f$ durch - $$ - \rg (f) := \dim\im (f) - $$ - - Eine lineare Abbildung ist genau dann surjektiv, wenn $\rg (f) = \dim (W)$ gilt. -\end{defi} - -\begin{defi}{Dimensionsformel für lineare Abbildungen (Rangsatz)} - Es sei $f : V \to W$ linear. Dann gilt: - $$ - \defect (f) + \rg (f) = \dim V - $$ - bzw. äquivalent - $$ - \dim\ker (f) + \dim\im (f) = \dim V - $$ -\end{defi} - -\begin{defi}{Isomorphismus} - Sei $f : V \to W$ linear. - Dann ist $f$ ein \emph{Isomorphismus}, wenn $f$ bijektiv ist. - - Es gilt (für $f$ linear): - \begin{itemize} - \item $f$ ist genau dann ein Isomorphismus, wenn $\ker(f) = \{0\}$ und $\im(f) = W$ gilt. - \item Gelte $\dim (V) = \dim (W)$. Dann gilt $f$ ist injektiv $\iff$ $f$ ist surjektiv $\iff$ $f$ ist bijektiv. - \end{itemize} - - Es gilt (für $f$ Isomorphismus): - \begin{itemize} - \item $\dim(V) = \dim(W)$ - \item $f^{-1} : W \to V$ ist ebenfalls ein Isomorphismus. - \end{itemize} - - Sei $\dim(V) = \dim(W) = n$, $(v_1, \ldots, v_n)$ eine Basis von $V$ und $f : V \to W$ linear. - $f$ ist genau dann ein Isomorphismus, wenn $(f(v_1), \ldots, f(v_n))$ eine Basis von $W$ bildet. -\end{defi} - -\begin{bonus}{Isomorphie} - Seien $V$ und $W$ zwei $K$-Vektorräume - Dann heißen $V$ und $W$ \emph{isomorph}, Schreibweise $V \simeq W$, falls ein Isomorphismus von $V$ nach $W$ existiert. - - Gilt $\dim(V) = \dim(W) = n$, dann gilt direkt $K^n \simeq V \simeq W$. -\end{bonus} - -\begin{defi}{Automorphismus} - Sei $f : V \to W$ linear. - Dann ist $f$ ein \emph{Automorphismus}, wenn $f$ bijektiv ist und $V = W$. -\end{defi} - -\begin{defi}{Endomorphismus} - Eine lineare Abbildung $f : V \to V$ heißt \emph{Endomorphismus}. -\end{defi} - -\subsection{Matrizen und lineare Abbildungen} - -\begin{defi}{Abbildungsmatrix} - Sei $f : V \to W$ linear. Dann ist die \emph{Abbildungsmatrix} $A$ bzgl. $f$ gegeben mit - $$ - A = \vektor{f(e_1) & \ldots & f(e_n)} \ \text{mit} \ \forall x : f(x) = Ax - $$ - - Sei $(v_1, \ldots, v_n)$ eine Basis von $V$. Dann gilt: - \begin{itemize} - \item $\im(f) = \scalarprod{f(v_1), \ldots, f(v_n)}$ - \item $f$ ist injektiv $\iff$ $f(v_1), \ldots, f(v_n)$ sind linear unabhängig. - \end{itemize} -\end{defi} - -\begin{defi}{Darstellungsmatrix} - Sei $f : V \to W$ linear, $\mathcal{B}_V = (v_1, \ldots, v_n)$ eine Basis von $V$ und $\mathcal{B}_W = (w_1, \ldots, w_m)$ eine Basis von $W$. - Dann ist - $$ - M^{\mathcal{B}_V}_{\mathcal{B}_W} (f) = \vektor{K_{\mathcal{B}_W}(f(v_1)) & \ldots & K_{\mathcal{B}_W}(f(v_1))} - $$ - die \emph{Darstellungsmatrix} von $f$ bezüglich der Basen $\mathcal{B}_V$ und $\mathcal{B}_W$. - - $K_{\mathcal{B}_W}(f(v_i))$ bedeutet hier, dass das Bild von $v_i$ in der Basis $\mathcal{B}_W$ kodiert wird. - - Es gilt: - \begin{itemize} - \item Sind $\mathcal{B}_V$ und $\mathcal{B}_W$ die Standardbasen bez. $V$ und $W$, dann gilt $M^{\mathcal{B}_V}_{\mathcal{B}_W} (f) = A$. - \end{itemize} -\end{defi} - -\begin{example}{Abbildungsmatrix} - Sei - $$ - F\left(\vektor{x\\y\\z}\right) = \vektor{x + y + 2z \\ -3x + z \\ -x + 2y + 5z} - $$ - \begin{enumerate}[a)] - \item Geben Sie für obige Abbildung die Abbildungsmatrix an. - \item Bestimmen Sie $\ker(F)$ und dessen Dimension. - \item Bestimmen Sie mit Hilfe der Dimensionsformel $\dim(\im (F))$. - \item Geben Sie eine Basis des Bildes an. - \end{enumerate} - - \exampleseparator - - \begin{enumerate}[a)] - \item Sei $B$ die kanonische Einheitsbasis des $\R^3$. - Dann ist die Abbildungsmatrix gegeben mit - $$ - A = M^B_B (F) = \vektor{~ \\F(e_1) & F(e_2) & F(e_3)\\ ~} = \vektor{1 & 1 & 2\\ -3 & 0 & 1\\ -1 & 2 & 5} - $$\qed - \item $$ - M^B_B \cdot \vektor{x \\ y \\ z} = \vektor{1 & 1 & 2\\ -3 & 0 & 1\\ -1 & 2 & 5} \cdot \vektor{x \\ y \\ z} = \vektor{0 \\ 0 \\ 0} - $$ - - Wir erhalten also ein LGS, dessen Lösung eine Basis von $\ker(F)$ ist: - $$ - \begin{sysmatrix}{c c c | c} - 1 & 1 & 2 & 0 \\ -3 & 0 & 1 & 0 \\ -1 & 2 & 5 & 0 - \end{sysmatrix} - \sim - \begin{sysmatrix}{c c c | c} - 1 & 1 & 2 & 0 \\ 0 & 3 & 7 & 0 \\ 0 & 3 & 7 & 0 - \end{sysmatrix} - \sim - \begin{sysmatrix}{c c c | c} - 1 & 1 & 2 & 0 \\ 0 & 3 & 7 & 0 \\ 0 & 0 & 0 & 0 - \end{sysmatrix} - \sim - \begin{sysmatrix}{c c c | c} - -3 & 0 & 1 & 0 \\ 0 & \frac{3}{7} & 1 & 0 \\ 0 & 0 & 0 & 0 - \end{sysmatrix} - $$ - - Daraus können wir folgern, dass $\ker(F) = \scalarprod{\vektor{1 & -7 & 3}^T}$ und $\defect(F) = 1$. \qed - \item $\dim(\R^3) = \defect(F) + \rg(F) \implies \rg(F) = 2$\qed - \item Wegen $\rg(F) = 2$ wissen wir, dass wir zwei linear unabhängige Vektoren aus $M^B_B$ auswählen können, die dann automatisch eine Basis von $\im(F)$ ergeben. - - Wir wählen $\im(F) = \scalarprod{ \vektor{1 & 0 & 2}^T, \vektor{2 & 1 & 5}^T }$.\qed - \end{enumerate} -\end{example} - -\subsection{Abbildungsverkettung und Matrizenmultiplikation} - -\begin{defi}{Eigenschaften der Abbildungsverkettung} - Seien $U$, $V$, $W$ $K$-Vektorräume und $f : V \to W$ sowie $g : U \to V$ linear. - Dann ist auch $f \circ g : U \to W$ linear. - - Ist $f$ ein Isomorphismus und $\dim(V) = \dim(W)$, dann gilt: - $$ - \rg(f\circ g) = \rg(g) - $$ -\end{defi} - -\begin{defi}{Eigenschaften der Matrixmultiplikation} - Seien $A$, $B$, $C$ so, dass die nachfolgend vorkommenden Matrixmultiplikationen definiert sind. - Dann gilt: - \begin{itemize} - \item $A(BC) = (AB)C$ (Assoziativgesetz) - \item $A(B+C) = AB+AC$ und $(A+B)C = AC+BC$ (Distributivgesetz) - \item $(AB)^T = B^TA^T$ - \item Sei $A \in K^{m\times n}$ und $E_k \in K^{k\times k}$ die $(k\times k)$-Einheitsmatrix. Dann gilt: - $$ - AE_n = E_mA = A - $$ - \item Sei $A \in K^{m\times n}$ und $0_{kl} \in K^{k\times l}$ die $(k\times l)$-Nullmatrix. Dann gilt: - $$ - A0_{nl} = 0_{ml} \quad \text{und} \quad 0_{km}A = 0_{kn} - $$ - \item Das Matrixprodukt ist im Allgemeinen nicht kommutativ. - \item Seien $x, y \in K^n$. Dann gilt: - $$ - \scalarprod{x, y} = x^T \cdot y - $$ - \end{itemize} -\end{defi} - -\begin{example}{Matrixmultiplikation} - Gegeben sind die Matrizen - $$ - A = \vektor{10 & 2 & 3 \\ 8 & 5 & 3 \\ 2 & 3 & 2}, \quad - B = \vektor{7 & 3 \\ 1 & 5}, \quad - C = \vektor{4 & 5 \\ 2 & 7 \\ 3 & 6} - $$ - Welche der folgenden Matrixprodukte sind wohldefiniert? - - \begin{enumerate}[a)] - \item $A\cdot B$ - \item $C\cdot B$ - \item $C\cdot B \cdot A$ - \end{enumerate} - - \exampleseparator - - \begin{enumerate}[a)] - \item $$ - A\cdot B = \overset{3\times \pmb{3}}{\vektor{10 & 2 & 3 \\ 8 & 5 & 3 \\ 2 & 3 & 2}} \overset{\pmb{2}\times 2}{\vektor{7 & 3 \\ 1 & 5}} \quad \lightning \quad (3 \neq 2) - $$ - \item $$ - C\cdot B = \overset{3\times \pmb{2}}{\vektor{4 & 5 \\ 2 & 7 \\ 3 & 6}} \overset{\pmb{2}\times 2}{\vektor{7 & 3 \\ 1 & 5}} = \vektor{33 & 37 \\ 21 & 41 \\ 27 & 39} - $$ - \item $$ - C\cdot B \cdot A = \overset{3\times \pmb{2}}{\vektor{4 & 5 \\ 2 & 7 \\ 3 & 6}} \overset{\pmb{2}\times \pmb{2}}{\vektor{7 & 3 \\ 1 & 5}} \overset{\pmb{3}\times 3}{\vektor{10 & 2 & 3 \\ 8 & 5 & 3 \\ 2 & 3 & 2}} \quad \lightning \quad (2 \neq 3) - $$ - \end{enumerate} -\end{example} - -\begin{defi}{Inverse einer Matrix} - Sei $A$ eine quadratische Matrix. - Gibt es eine Matrix $A^{-1}$ mit - $$ - AA^{-1} = A^{-1}A = E - $$ - so heißt $A$ \emph{invertierbar} oder auch \emph{regulär}. - $A^{-1}$ wird als \emph{Inverse} von $A$ bezeichnet. - - Es gilt: - \begin{itemize} - \item Eine lineare Abbildung $f : V \to W$ ist genau dann invertierbar, wenn ihre Darstellungsmatrix invertierbar ist. - \item Jede invertierbare Matrix ist quadratisch. - \end{itemize} - - Seien $A, B \in K^{n\times n}$ invertierbar. - Dann gilt: - \begin{itemize} - \item $AB = E \iff BA = E \iff B = A^{-1}$ - \item $AB$ ist invertierbar, und es gilt $(AB)^{-1} = B^{-1}A^{-1}$. - \item $A^{-1}$ ist invertierbar, und es gilt $(A^{-1})^{-1} = A$. - \item $A^T$ ist invertierbar, und es gilt $(A^T)^{-1} = (A^{-1})^T$. - \item Für $\lambda \in K \setminus \{0\}$ ist $\lambda A$ invertierbar, und es gilt $(\lambda A)^{-1} = \frac{1}{\lambda}A^{-1}$. - \end{itemize} -\end{defi} - -\begin{example}{Inverse einer Matrix (Gauß-Algorithmus)} - Berechnen Sie mit Hilfe des Gauß-Algorithmus die Inverse zu folgender Matrix: - $$\vektor{0 & 0 & 2 & 0 \\ 1 & 0 & 0 & 1 \\ 0 & -1 & -3 & 0 \\ 2 & 1 & 5 & 3}$$ - - \exampleseparator - - $$ - \begin{sysmatrix}{cccr|cccr} - 0 & 0 & 2 & 0 & 1 & 0 & 0 & 0 \\ - 1 & 0 & 0 & 1 & 0 & 1 & 0 & 0 \\ - 0 & -1 & -3 & 0 & 0 & 0 & 1 & 0 \\ - 2 & 1 & 5 & 3 & 0 & 0 & 0 & 1 - \end{sysmatrix} - \sim - \begin{sysmatrix}{cccr|cccr} - 0 & 0 & 1 & 0 & \nicefrac{1}{2} & 0 & 0 & 0 \\ - 1 & 0 & 0 & 1 & 0 & 1 & 0 & 0 \\ - 0 & -1 & 0 & 0 & \nicefrac{3}{2} & 0 & 1 & 0 \\ - 2 & 1 & 0 & 3 & -\nicefrac{5}{2} & 0 & 0 & 1 - \end{sysmatrix} - $$ - $$ - \sim - \begin{sysmatrix}{cccr|cccr} - 0 & 0 & 1 & 0 & \nicefrac{1}{2} & 0 & 0 & 0 \\ - 1 & 0 & 0 & 1 & 0 & 1 & 0 & 0 \\ - 0 & 1 & 0 & 0 & -\nicefrac{3}{2} & 0 & -1 & 0 \\ - 0 & 1 & 0 & 1 & -\nicefrac{5}{2} & -2 & 0 & 1 - \end{sysmatrix} - \sim - \begin{sysmatrix}{cccr|cccr} - 0 & 0 & 1 & 0 & \nicefrac{1}{2} & 0 & 0 & 0 \\ - 1 & 0 & 0 & 1 & 0 & 1 & 0 & 0 \\ - 0 & 1 & 0 & 0 & -\nicefrac{3}{2} & 0 & -1 & 0 \\ - 0 & 0 & 0 & 1 & -1 & -2 & 1 & 1 - \end{sysmatrix} - $$ - $$ - \sim - \begin{sysmatrix}{cccr|cccr} - 0 & 0 & 1 & 0 & \nicefrac{1}{2} & 0 & 0 & 0 \\ - 1 & 0 & 0 & 0 & 1 & 3 & -1 & -1 \\ - 0 & 1 & 0 & 0 & -\nicefrac{3}{2} & 0 & -1 & 0 \\ - 0 & 0 & 0 & 1 & -1 & -2 & 1 & 1 - \end{sysmatrix} - \sim - \begin{sysmatrix}{cccr|cccr} - 1 & 0 & 0 & 0 & 1 & 3 & -1 & -1 \\ - 0 & 1 & 0 & 0 & -\nicefrac{3}{2} & 0 & -1 & 0 \\ - 0 & 0 & 1 & 0 & \nicefrac{1}{2} & 0 & 0 & 0 \\ - 0 & 0 & 0 & 1 & -1 & -2 & 1 & 1 - \end{sysmatrix} - $$ - - Damit ist - $$ - \vektor{0 & 0 & 2 & 0 \\ 1 & 0 & 0 & 1 \\ 0 & -1 & -3 & 0 \\ 2 & 1 & 5 & 3}^{-1} = \vektor{1 & 3 & -1 & -1 \\-\nicefrac{3}{2} & 0 & -1 & 0 \\ \nicefrac{1}{2} & 0 & 0 & 0 \\ -1 & -2 & 1 & 1} - $$\qed -\end{example} - -\begin{example}{Inverse von verketteten Abbildungen} - Ein sehr gutes (aber sperriges) Beispiel zum Finden von Inversen verketteter Abbildungen ist zu finden im \emph{Lineare Algebra Übungsblatt 05} (Aufgabe 6). - - Das Übungsblatt ist erreichbar unter \url{https://fh-aachen.paddel.xyz/#lineare-algebra-2}. -\end{example} - -\subsection{Koordinatentransformationen} - -\begin{defi}{Koordinatenabbildung} - Sei $V$ ein $K$-Vektorraum mit einer Basis $\mathcal{B} = (b_1, \ldots, b_n)$. - Dann existiert genau ein Isomorphismus $\varphi_{\mathcal{B}} : K^n \to V$ mit $\varphi_{\mathcal{B}}(e_i) = v_i$, $1 \leq i \leq n$. - - Der Isomorphismus $\varphi_{\mathcal{B}}$ heißt \emph{Koordinatenabbildung}. -\end{defi} - -\begin{defi}{Koordinaten eines Vektors} - Sei $V$ ein $K$-Vektorraum mit einer Basis $\mathcal{B} = (b_1, \ldots, b_n)$. - Die Abbildung $K_{\mathcal{B}}(v)$ mit - $$ - K_{\mathcal{B}} : V \to K^n , v = \sum^n_{i=1} \lambda_ib_i \longmapsto \vektor{\lambda_1 \\ \vdots \\ \lambda_n} - $$ - erzeugt die \emph{Koordinaten von v bezüglich der Basis} $\mathcal{B}$. - - Es gilt: - \begin{itemize} - \item $K_{\mathcal{B}}(v) = \varphi^{-1}_{\mathcal{B}}(v)$ - \end{itemize} -\end{defi} - -\begin{defi}{Transformationsmatrix} - Sei ein Vektorraum $V$ mit den Basen $\mathcal{A} = (a_1, \ldots, a_n)$ und $\mathcal{B} = (b_1, \ldots, b_n)$ gegeben. - - Für einen Vektor $v$ existieren die Darstellungen $K_{\mathcal{A}}(v)$ und $K_{\mathcal{B}}(v)$. - Es gilt: - - \begin{center} - \begin{tikzpicture} - \node (v) {$V$}; - \node [below left=of v] (k1) {$K^n$}; - \node [below right=of v] (k2) {$K^n$}; - - \draw [->] (k1) -- (v) node [midway, above left] {\small $\varphi_{\mathcal{A}}$}; - \draw [->] (k2) -- (v) node [midway, above right] {\small $\varphi_{\mathcal{B}}$}; - \draw [->] (k1) -- (k2) node [midway, below] {\small $T^{\mathcal{A}}_{\mathcal{B}} = \varphi_{\mathcal{B}}^{-1} \circ \varphi_{\mathcal{A}}$}; - \end{tikzpicture} - \end{center} - - - Die Matrix $T^{\mathcal{A}}_{\mathcal{B}}$ heißt \emph{Transformationsmatrix des Basiswechsels von} $\mathcal{A}$ \emph{nach} $\mathcal{B}$ - - Sei $v\in V$ beliebig, $K_{\mathcal{A}}(v) = \vektor{x_1 & \ldots & x_n}^T$ und $K_{\mathcal{B}}(v) = \vektor{y_1 & \ldots & y_n}^T$. Dann gilt: - $$ - \vektor{y_1 \\ \vdots \\ y_n} = T^{\mathcal{A}}_{\mathcal{B}} \vektor{x_1 \\ \vdots \\ x_n} - $$ - - Sind die Koordinaten von $v$ beqüglich $\mathcal{A}$ bekannt, kann man mithilfe der Matrix $T^{\mathcal{A}}_{\mathcal{B}}$ die Koordinaten von $v$ bezüglich $\mathcal{B}$ berechnen. - - Seien $A$ und $B$ die Matrizen der Basisvektoren von $\mathcal{A}$ bzw. $\mathcal{B}$. - Dann gilt: - - \begin{center} - \begin{tikzpicture} - \node (ka) {$K_{\mathcal{A}}(x)$}; - \node [right=of ka] (kb) {$K_{\mathcal{B}}(x)$}; - - \node [above=of ka] (x1) {$x$}; - \node [above=of kb] (x2) {$x$}; - - - \draw [->] (x1) -- (x2) node [midway, above] {\small $E$}; - \draw [->] (ka) -- (x1) node [midway, left] {\small $A$}; - \draw [->] (kb) -- (x2) node [midway, right] {\small $B$}; - \draw [->] (ka) -- (kb) node [midway, below] {\small $T^{\mathcal{A}}_{\mathcal{B}}$}; - \end{tikzpicture} - \end{center} - - Man erkennt: - $$ - T^{\mathcal{A}}_{\mathcal{B}} = B^{-1}A - $$ -\end{defi} - -\begin{example}{Transformationsmatrizen} - $\mathcal{A} = (e_1, e_2, e_3)$, $\mathcal{A}' = (a'_1, a'_2, a'_3)$ und $\mathcal{A}'' = (a''_1, a''_2, a''_3)$ bilden mit den kanonischen Einheitsvektoren $e_1, e_2, e_3$ sowie - $$ - a'_1 = \vektor{1\\0\\0}, a'_2 = \vektor{1\\1\\0}, a'_3 = \vektor{1\\1\\1} - \quad \text{bzw.} \quad - a''_1 = \vektor{1\\-1\\0}, a''_2 = \vektor{-1\\0\\1}, a''_3 = \vektor{0\\1\\1} - $$ - jeweils Basen des $\R^3$. - - Bestimmen Sie: - \begin{enumerate}[a)] - \item die Transformationsmatrizen $T^{\mathcal{A}'}_{\mathcal{A}}$ sowie $T^{\mathcal{A}}_{\mathcal{A}'}$. - \item die Transformationsmatrizen $T^{\mathcal{A}''}_{\mathcal{A}}$ sowie $T^{\mathcal{A}}_{\mathcal{A}''}$. - \item die Transformationsmatrizen $T^{\mathcal{A}'}_{\mathcal{A}''}$ sowie $T^{\mathcal{A}''}_{\mathcal{A}'}$. - \item die Koordinaten des Vektors $\vektor{1 & 0 & 1}^T$ bzgl. der Basen $\mathcal{A}'$ und $\mathcal{A}''$. - \end{enumerate} - - \exampleseparator - - \begin{enumerate}[a)] - \item Berechnen von $\mathcal{A}'^{-1}$: - $$ - \begin{sysmatrix}{rrr|rrr} - 1 & 1 & 1 & 1 & 0 & 0 \\ - 0 & 1 & 1 & 0 & 1 & 0 \\ - 0 & 0 & 1 & 0 & 0 & 1 - \end{sysmatrix} - \sim - \begin{sysmatrix}{rrr|rrr} - 1 & 1 & 0 & 1 & 0 & -1 \\ - 0 & 1 & 0 & 0 & 1 & -1 \\ - 0 & 0 & 1 & 0 & 0 & 1 - \end{sysmatrix} - \sim - \begin{sysmatrix}{rrr|rrr} - 1 & 0 & 0 & 1 & -1 & 0 \\ - 0 & 1 & 0 & 0 & 1 & -1 \\ - 0 & 0 & 1 & 0 & 0 & 1 - \end{sysmatrix} - $$ - - Damit gilt: - $$ - T^{\mathcal{A}'}_{\mathcal{A}} = \mathcal{A}^{-1}\mathcal{A}' = \vektor{1 & 0 & 0 \\ 0 & 1 & 0 \\ 0 & 0 & 1} \vektor{1 & 1 & 1 \\ 0 & 1 & 1 \\ 0 & 0 & 1} = \vektor{1 & 1 & 1 \\ 0 & 1 & 1 \\ 0 & 0 & 1} - $$ - und - $$ - T^{\mathcal{A}}_{\mathcal{A}'} = \mathcal{A}'^{-1}\mathcal{A} = \vektor{1 & -1 & 0 \\ 0 & 1 & -1 \\ 0 & 0 & 1} \vektor{1 & 0 & 0 \\ 0 & 1 & 0 \\ 0 & 0 & 1} = \vektor{1 & -1 & 0 \\ 0 & 1 & -1 \\ 0 & 0 & 1}. - $$\qed - \item Berechnen von $\mathcal{A}''^{-1}$: - $$ - \begin{sysmatrix}{rrr|rrr} - 1 & -1 & 0 & 1 & 0 & 0 \\ - -1 & 0 & 1 & 0 & 1 & 0 \\ - 0 & 1 & 1 & 0 & 0 & 1 - \end{sysmatrix} - \sim - \ldots - \sim - \begin{sysmatrix}{rrr|rrr} - 1 & 0 & 0 & \nicefrac{1}{2} & -\nicefrac{1}{2} & \nicefrac{1}{2} \\ - 0 & 1 & 0 & -\nicefrac{1}{2} & -\nicefrac{1}{2} & \nicefrac{1}{2}\\ - 0 & 0 & 1 & \nicefrac{1}{2} & \nicefrac{1}{2} & \nicefrac{1}{2} - \end{sysmatrix} - = - \frac{1}{2}\vektor{1 & -1 & 1 \\ -1 & -1 & 1 \\ 1 & 1 & 1} - $$ - Damit gilt: - $$ - T^{\mathcal{A}''}_{\mathcal{A}} = \mathcal{A}^{-1}\mathcal{A}'' = \vektor{1 & 0 & 0 \\ 0 & 1 & 0 \\ 0 & 0 & 1} \vektor{1 & -1 & 0 \\ -1 & 0 & 1 \\ 0 & 1 & 1} = \vektor{1 & -1 & 0 \\ -1 & 0 & 1 \\ 0 & 1 & 1} - $$ - und - $$ - T^{\mathcal{A}}_{\mathcal{A}''} = \mathcal{A}''^{-1}\mathcal{A} = \frac{1}{2}\vektor{1 & -1 & 1 \\ -1 & -1 & 1 \\ 1 & 1 & 1} \vektor{1 & 0 & 0 \\ 0 & 1 & 0 \\ 0 & 0 & 1} = \frac{1}{2}\vektor{1 & -1 & 1 \\ -1 & -1 & 1 \\ 1 & 1 & 1}. - $$\qed - \end{enumerate} - -\end{example} - -\begin{example}{Transformationsmatrizen (Fortsetzung)} - \begin{enumerate}[a)] - \setcounter{enumi}{2} - \item Mit den bisherigen Ergebnissen gilt: - $$ - T^{\mathcal{A}'}_{\mathcal{A}''} = \mathcal{A}''^{-1}\mathcal{A}' = \frac{1}{2}\vektor{1 & -1 & 1 \\ -1 & -1 & 1 \\ 1 & 1 & 1} \vektor{1 & 1 & 1 \\ 0 & 1 & 1 \\ 0 & 0 & 1} = \frac{1}{2}\vektor{1 & 0 & 1 \\ -1 & -2 & -1 \\ 1 & 2 & 3} - $$ - und - $$ - T^{\mathcal{A}''}_{\mathcal{A}'} = \mathcal{A}'^{-1}\mathcal{A}'' = \vektor{1 & -1 & 0 \\ 0 & 1 & -1 \\ 0 & 0 & 1} \vektor{1 & -1 & 0 \\ -1 & 0 & 1 \\ 0 & 1 & 1} = \vektor{2 & -1 & -1 \\ -1 & -1 & 0 \\ 0 & 1 & 1}. - $$\qed - \item Sei $x = \vektor{1 & 0 & 1}^T$. - - Dann gilt für $x$ bzgl. $\mathcal{A}'$: - $$ - x = K_{\mathcal{A}'}(x) = T^{\mathcal{A}}_{\mathcal{A}'} \cdot K_{\mathcal{A}}(x) = \vektor{1 & -1 & 0 \\ 0 & 1 & -1 \\ 0 & 0 & 1} \vektor{1 \\ 0 \\ 1} = \vektor{1 \\ -1 \\ 1}, - $$ - bzw. bzgl. $\mathcal{A}''$: - $$ - x = K_{\mathcal{A}''}(x) = T^{\mathcal{A}}_{\mathcal{A}''} \cdot K_{\mathcal{A}}(x) = \frac{1}{2}\vektor{1 & -1 & 1 \\ -1 & -1 & 1 \\ 1 & 1 & 1} \vektor{1 \\ 0 \\ 1} = \vektor{1 \\ 0 \\ 1}. - $$\qed - \end{enumerate} -\end{example} - -\begin{defi}{Darstellungsmatrix mit Basistransformation} - Seien $V$ und $W$ endlich erzeugt mit Basen $\mathcal{A}$ und $\mathcal{A}'$ bzw. $\mathcal{B}$ und $\mathcal{B}'$. - Sei weiter $f : V \to W$ linear. - Dann gilt: - $$ - M^{\mathcal{A}'}_{\mathcal{\mathcal{B}'}}(f) = T^{\mathcal{B}}_{\mathcal{B}'} \cdot M^{\mathcal{A}}_{\mathcal{\mathcal{B}}}(f) \cdot T^{\mathcal{A}'}_{\mathcal{A}} - $$ - - Zur Visualisierung dient folgendes kommutative Diagramm: - \begin{center} - \begin{tikzpicture} - \node (kn1) {$K^n$}; - \node [above right=of kn1] (v) {$V$}; - \node [above left=of v] (kn2) {$K^n$}; - \node [right=of v] (w) {$W$}; - \node [above right=of w] (km2) {$K^m$}; - \node [below right=of w] (km1) {$K^m$}; - - \draw [->] (kn1) -- (v) node [midway, above left] {\small $\varphi_{\mathcal{A}'}$}; - \draw [->] (kn2) -- (v) node [midway, above right] {\small $\varphi_{\mathcal{A}}$}; - \draw [->] (km1) -- (w) node [midway, above right] {\small $\varphi_{\mathcal{B}'}$}; - \draw [->] (km2) -- (w) node [midway, above left] {\small $\varphi_{\mathcal{B}}$}; - - \draw [->] (v) -- (w) node [midway, above] {\small $f$}; - - \draw [->] (kn2) -- (km2) node [midway, above] {\small $M^{\mathcal{A}}_{\mathcal{B}} (f)$}; - \draw [->] (kn1) -- (km1) node [midway, below] {\small $M^{\mathcal{A}'}_{\mathcal{B}'} (f)$}; - - \draw [->] (kn2) -- (kn1) node [midway, left] {\small $T^{\mathcal{A}}_{\mathcal{A}'}$}; - \draw [->] (km2) -- (km1) node [midway, right] {\small $T^{\mathcal{B}}_{\mathcal{B}'}$}; - \end{tikzpicture} - \end{center} -\end{defi} - -\section{Determinanten} - -\begin{defi}{Elementarmatrix} - Seien $1\leq i$, $j \leq n$ mit $i \neq j$ und $\lambda \in K \setminus \{0\}$ gegeben. - Dann sei - $$ - C1 := \vektor{1 & & & & \\ & \ddots & & & \\ & \lambda & \ddots & & \\ & & & \ddots & & \\ & & & & \ddots & \\ & & & & & 1} \in K^{n \times n} - $$ - wobei der $(i, j)$-te Eintrag den Wert $\lambda$ annehmen soll und alle anderen Einträge außerhalb der Hauptdiagonalen $0$ sein sollen. - - Sei $C2$ die Matrix, die man aus der Einheitsmatrix gewinnt, indem man die $i$-te und $j$-te Spalte vertauscht, also - $$ - C2 := \vektor{1 & & & & \\ & \ddots & & & \\ & & 0 & &1 \\ & & & \ddots & & \\ & & 1 & & 0 & \\ & & & & & 1} \in K^{n \times n} - $$ - - Zuletzt definieren wir - $$ - C3 := \vektor{1 & & & & \\ & \ddots & & & \\ & & \lambda & & \\ & & & \ddots & & \\ & & & & \ddots & \\ & & & & & 1} \in K^{n \times n} - $$ - - Matrizen der Gestalt $C1$, $C2$ oder $C3$ nennt man \emph{Elementarmatrizen}. - - Es gilt: - \begin{itemize} - \item Die Multiplikation einer Matrix $A$ von links mit einer Elementarmatrix entspricht der Anwendung einer elementaren Zeilenoperation des Gauß-Verfahrens auf $A$. - \subitem Notation: $Zi$ statt $Ci$ - \item Die Multiplikation einer Matrix $A$ von rechts mit einer Elementarmatrix entspricht der Anwendung einer elementaren Spaltenoperation auf $A$. - \subitem Notation: $Si$ statt $Ci$ - \end{itemize} - - \begin{itemize} - \item $C1$ entspricht dem Addieren von $\lambda$-mal Spalte bzw. Zeile $j$ auf Spalte bzw. Zeile $i$. - \item $C2$ entspricht dem Tauschen von Spalte bzw. Zeile $i$ mit Spalte bzw. Zeile $j$. - \item $C3$ entspricht dem Multiplizieren von Spalte bzw. Zeile $i$ mit $\lambda$. - \end{itemize} -\end{defi} - -\begin{example}{Elementarmatrizen} - Sei - $$ - A = \vektor{1 & 0 \\ -5 & 2} - $$ - Bestimmen Sie Elementarmatrizen $M_1$ und $M_2$ mit $M_1M_2A = E$. - - \exampleseparator - - Es gilt: - $$ - \begin{sysmatrix}{cc|cc} - 1 & 0 & 1 & 0 \\ - -5 & 2 & 0 & 1 - \end{sysmatrix} - \sim - \begin{sysmatrix}{cc|cc} - 1 & 0 & 1 & 0 \\ - 0 & 2 & 5 & 1 - \end{sysmatrix} - \sim - \begin{sysmatrix}{cc|cc} - 1 & 0 & 1 & 0 \\ - 0 & 1 & \frac{5}{2} & \frac{1}{2} - \end{sysmatrix} - $$ - Damit gilt: - $$ - A^{-1} = \vektor{1 & 0 \\ \frac{5}{2} & \frac{1}{2}} =\footnote{Das wird aus dem Kontext ersichtlich: Für $A^{-1}$ wird zuerst fünfmal \Rnum{1} auf \Rnum{2} addiert und anschließend wird \Rnum{2} mit $\frac{1}{2}$ skaliert.} \vektor{1 & 0 \\ 0 & \frac{1}{2}} \cdot \vektor{1 & 0 \\ 5 & 1} - $$ - und schlussendlich: - $$ - A^{-1} \cdot A = \vektor{1 & 0 \\ 0 & \frac{1}{2}} \cdot \vektor{1 & 0 \\ 5 & 1} \cdot A = M_1 M_2 A - $$\qed -\end{example} - -\begin{defi}{Eigenschaften der Determinante} - Für $A, B \in K^{n\times n}$ gilt: - \begin{itemize} - \item $S1$ und $Z1$ ändern die Determinante einer Matrix nicht. ($\det(C1) = 1$) - \item $S2$ und $Z2$ kehren das Vorzeichen der Determinante um. ($\det(C2) = -1$) - \item $S3$ und $Z3$ vervielfachen den Wert der Determinante um den Faktor $\lambda$. ($\det(C3) = \lambda$) - \end{itemize} - - \begin{itemize} - \item $\det(A) = \det(A^T)$ - \item Besitzt $A$ zwei gleiche Spalten bzw. Zeilen, so gilt $\det(A) = 0$. - \item $A$ invertierbar $\iff \det(A) \neq 0$ - \item $\det(AB) = \det(A)\det(B)$ - \item $A$ invertierbar $\implies \det(A^{-1}) = (\det(A))^{-1}$ - \end{itemize} -\end{defi} - -\subsection{Verfahren zur Berechnung der Determinante} - -\begin{defi}{Laplacescher Entwicklungssatz} - Für $A \in K^{n\times n}$ bezeichne $A_{ij}$ die Matrix in $K^{(n-1)\times (n-1)}$, die durch Streichen der $i$-ten Zeile und der $j$-ten Spalte aus $A$ hervorgeht. - - Es sei $A = (a_{ij}) \in K^{n\times n}$ und $j$ mit $1 \leq j \leq n$. - Dann gilt: - $$ - \det(A) = \sum^n_{i=1} (-1)^{i+j} a_{ij}\det(A_{ij}) - $$ - Man spricht von der \emph{Entwicklung der Determinante nach der j-ten Spalte}. - Ebenso ist eine \emph{Entwicklung der Determinante nach der i-ten Zeile} möglich: - $$ - \det(A) = \sum^n_{j=1} (-1)^{i+j} a_{ij}\det(A_{ij}) - $$ -\end{defi} - -\begin{defi}{Determinante mit Gauß-Algorithmus} - Zur Berechnung mit dem Gauß-Algorithmus bringt man die gegebene Matrix $A$ mittels äquivalenter Zeilen- oder Spaltenumformungen $Z1$-$Z3$ bzw. $S1$-$S3$ auf Stufenform $B$ und errechnet dann nach Folgerung $\det(A)$ leicht als Produkt der Hauptdiagonalelelemente von $B$, multipliziert mit den Determinanten der genutzten Elementarmatrizen. -\end{defi} - -\begin{example}{Determinante mit Gauß-Algorithmus} - Berechnen Sie die Determinante von $A = \vektor{4 & 5 & 6 \\ 2 & -2 & -1 \\ 0 & 1 & -3}$ mit Hilfe des Gauß-Algorithmus. - - \exampleseparator - - $$ - \vektor{4 & 5 & 6 \\ 2 & -2 & -1 \\ 0 & 1 & -3} - \underset{}{\xrightarrow{\text{\Rnum{2}: \Rnum{2} + 2 \Rnum{3}}}} - \vektor{4 & 5 & 6 \\ 2 & 0 & -7 \\ 0 & 1 & -3} - \underset{}{\xrightarrow{\text{\Rnum{1}: \Rnum{1} - 5 \Rnum{3}}}} - \vektor{4 & 0 & 21 \\ 2 & 0 & -7 \\ 0 & 1 & -3} - \underset{}{\xrightarrow{\text{\Rnum{1}: \Rnum{1} - 2 \Rnum{2}}}} - \vektor{0 & 0 & 35 \\ 2 & 0 & -7 \\ 0 & 1 & -3} - $$ - $$ - \vektor{0 & 0 & 35 \\ 2 & 0 & -7 \\ 0 & 1 & -3} - \underset{\nicefrac{1}{35} \cdot \det(A)}{\xrightarrow{\text{\Rnum{1}: \Rnum{1} - 2 \Rnum{2}}}} - \vektor{0 & 0 & 1 \\ 2 & 0 & -7 \\ 0 & 1 & -3} - \underset{}{\xrightarrow{\text{(\Rnum{2}: \Rnum{2} + 7 \Rnum{1})} \ \circ \ \text{(\Rnum{3}: \Rnum{3} + 3 \Rnum{1})}}} - \vektor{0 & 0 & 1 \\ 2 & 0 & 0 \\ 0 & 1 & 0} - $$ - $$ - \vektor{0 & 0 & 1 \\ 2 & 0 & 0 \\ 0 & 1 & 0} - \underset{(-1)\cdot(-1)\cdot \det A}{\xrightarrow{\text{(\Rnum{1}$\,\leftrightarrow\,$\Rnum{3})} \ \circ \ \text{(\Rnum{1}$\,\leftrightarrow\,$\Rnum{2})}}} - \vektor{2 & 0 & 0 \\ 0 & 1 & 0 \\ 0 & 0 & 1} - $$ - Damit gilt: - $$ - \det A = (-1) \cdot (-1) \cdot 35 \cdot \dvektor{2 & 0 & 0 \\ 0 & 1 & 0 \\ 0 & 0 & 1} = 35 \cdot 2 = 70 - $$\qed -\end{example} - -\begin{bonus}{Tipps zur Determinantenberechnung} - \begin{enumerate} - \item Für $(2\times 2)$- und $(3\times 3)$-Matrizen empfiehlt sich die Sarrus-Regel.\footnote{Siehe Lineare Algebra 1} - \item Die Laplace-Entwicklung ist dann vorzuziehen, wenn in einer Spalte oder Zeile nur wenige Nicht-Null-Einträge vorhanden sind, weil bei einer Entwicklung nach dieser Zeile bzw. Spalte die meisten Summanden erst gar nicht berechnet werden müssen. - \item Es können zur Berechnung der Determinanten mehrere Verfahren kombiniert werden, z.B. $(4\times 4)$-Matrizen zuerst nach Laplace entwickeln und die dann entstehenden Determinanten von $(3\times 3)$-Matrizen direkt mit der Sarrus-Regel berechnen. - \end{enumerate} -\end{bonus} - -\begin{bonus}{Inverse einer $(2\times 2)$-Matrix} - Sei $A$ definiert als $A = \vektor{a & b \\ c & d}$. Dann gilt: - $$ - A^{-1} = \frac{1}{\det(A)} \vektor{d & -b \\ -c & a} = \frac{1}{ad - bc} \vektor{d & -b \\ -c & a} - $$ -\end{bonus} - -\section{Lineare Gleichungssysteme} - -\subsection{Lösbarkeit eines linearen Gleichungssystems} - -\begin{defi}{Lineares Gleichungssystem} - Seien $A = (a_{ij}) \in K^{m\times n}$ und $b = \vektor{b_1 & \ldots & b_m}^T$. - Dann heißt - $$ - \begin{aligned} - & a_{11}x_1 & & + \ \ldots \ + & & a_{1n}x_n & & = & & b_1 \\ - & \ldots \\ - & a_{m1}x_1 & & + \ \ldots \ + & & a_{mn}x_n & & = & & b_m - \end{aligned} - $$ - \emph{lineares Gleichungssystem} bzgl. $(x_1, \ldots, x_n)$ mit Koeffizienten $a_{ij}$ in $K$. - Hierbei sind $x_1, \ldots, x_n$ die \emph{Unbekannten} des Systems. - - Für $b = 0_{m1}$ nennt man das lineare Gleichungssystem \emph{homogen}, sonst \emph{inhomogen}. - - Jedes lineare Gleichungssystem kann in der Form $Ax = b$ geschrieben werden. -\end{defi} - -\begin{defi}{Lösungsmenge} - Die \emph{Lösungsmenge} $L(A, b)$ des zu $(A, b)$ gehörigen Gleichungssystems ist festgelegt durch - $$ - L(A, b) := \{x \in K^n \mid Ax = b\} - $$ -\end{defi} - -\begin{defi}{Spaltenrang} - Die lineare Abbildung $L_A : K^n \to K^m$ sei gegeben durch $L_A(x) := Ax$. Dann sei $\rg(A) := \rg(L_A)$. - Der \emph{Spaltenrang} $\rg_S(A)$ sei die maximale Anzahl linear unabhängiger Spaltenvektoren von $A$. - - Es gilt $\rg(A) = \rg_S(A)$. -\end{defi} - -\begin{defi}{Zeilenrang} - Für $A \in K^{m\times n}$ sei die maximale Anzahl linear unabhängiger Zeilenvektoren von $A$ der \emph{Zeilenrang} $\rg_Z(A)$ von $A$. - - Es gilt: - $$ - \rg(A) = \rg_S(A) = \rg_Z(A) - $$ -\end{defi} - -\begin{defi}{Lösbarkeit von linearen Gleichungssystemen} - Das lineare Gleichungssystem $Ax = b$ ist genau dann lösbar, wenn gilt: - $$ - \rg(a_1, \ldots, a_n) = \rg(a_1, \ldots, a_n, b) - $$ - Kürzer schreibt man $\rg(A) = \rg(A, b)$. - - $Ax = b$ ist also genau dann eindeutig lösbar, falls $\ker(A) = \{0\} \iff \rg(A) = \rg(A, b) = n$. -\end{defi} - -\begin{bonus}{Äquivalente Bedingungen für eindeutige Lösbarkeit} - Sei $K \in \{\R, \C\}$. - Für $A \in K^{n\times n}$ und die dadurch gegebene lineare Abbildung $L_A$ sind folgende Bedingungen äquivalent: - \begin{enumerate} - \item $A$ ist invertierbar. - \item $Ax = 0$ hat nur die triviale Lösung $x=0$. - \item Durch Zeilen- und Spaltenumformungen kann $A$ auf die Einheitsmatrix transformiert werden. - \item $A$ ist darstellbar als Produkt von Elementarmatrizen. - \item $Ax = b$ besitzt für jedes $b \in K^n$ mindestens eine Lösung. - \item $Ax = b$ hat genau eine Lösung für jedes $b \in K^n$. - \item $\det(A) \neq 0$ - \item $\im(A) = K^n$ - \item $L_A$ ist bijektiv. - \item Die Spaltenvektoren von $A$ sind linear unabhängig. - \item Die Zeilenvektoren von $A$ sind linear unabhängig. - \item Die Spaltenvektoren von $A$ bilden eine Basis von $K^n$. - \item Die Zeilenvektoren von $A$ bilden eine Basis von $K^n$. - \item $\rg(A)=n$ - \item $\ker(L_A) = \{0\}$ - \item $(\ker(L_A))^\perp = K^n$ - \item Das orthogonale Komplement des von den Zeilen von $A$ aufgespannten Raums ist $\{0\}$. - \item $A^TA$ ist invertierbar. - \end{enumerate} -\end{bonus} - -\begin{defi}{Allgemeine Lösung eines linearen Gleichungssystems} - Sei $x_s \in K^n$ eine (spezielle) Lösung von $Ax = b$. - Dann gilt: - $$ - L(A, b) = x_s + \ker(A) = \{x_s + x \mid x \in \ker(A)\} - $$ - bzw., wenn $(v_1, \ldots, v_r)$ eine Basis von $\ker(A)$ ist: - $$ - L(A, b) = \{x + \lambda_1 v_1 + \ldots + \lambda_rv_r \mid \lambda_i \in K\} - $$ -\end{defi} - -\begin{example}{Allgemeine Lösung eines linearen Gleichungssystems} - Finden Sie die Lösung des linearen Gleichungssystems - $$ - \vektor{-1 & 1 & 0 \\ 0 & 1 & 1}x = \vektor{0 \\ 2} - $$ - mit Hilfe folgender Schritte: - \begin{enumerate}[a)] - \item Bestimmen Sie den Kern der Abbildungsmatrix. - \item Erraten Sie eine spezielle Lösung. - \item Bestimmen Sie die allgemeine Lösung. - \end{enumerate} - - \exampleseparator - - \begin{enumerate}[a)] - \item $$ - \begin{sysmatrix}{rrr|r} - -1 & 1 & 0 & 0 \\ - 0 & 1 & 1 & 0 - \end{sysmatrix} - \quad \implies \quad - \ker \vektor{-1 & 1 & 0 \\ 0 & 1 & 1} = \scalarprod{\vektor{1 \\ 1 \\ -1}} - $$\qed - \item $$ - x = \vektor{0\\0\\2} \quad \implies \quad \vektor{-1 & 1 & 0 \\ 0 & 1 & 1}\cdot \vektor{0\\0\\2} = \vektor{0 \\ 2} - $$\qed - \item Es gilt: - $$ - L \left({\vektor{-1 & 1 & 0 \\ 0 & 1 & 1}, \vektor{0 \\ 2}} \right) = \vektor{0\\0\\2} + \ker\vektor{-1 & 1 & 0 \\ 0 & 1 & 1} = \vektor{0\\0\\2} + \lambda \cdot \vektor{1 \\ 1 \\ -1}, \quad \lambda \in \R - $$\qed - \end{enumerate} -\end{example} - -\begin{defi}{Cramersche Regel} - Es seien $A = \vektor{a_1 & \ldots & a_n} \in K^{n\times n}$ und $x, b \in K^n$ sowie $Ax=b$ ein lineares Gleichungssystem, und es gelte $\det(A) \neq 0$. - Seien - $$ - A_i := \vektor{a_1 & \ldots & a_{i-1} & b & a_{i+1} & \ldots & a_n}, 1 \leq i \leq n - $$ - Dann gilt: - $$ - x_i = \frac{\det(A_i)}{\det(A)} - $$ -\end{defi} - -\begin{example}{Cramersche Regel} - In der Elektrotechnik ergeben sich eine Widerstandsmatrix $R$ und ein Quellspannungsvektor $U$: - $$ - R = \vektor{1 & 3 & 0 \\ 1 & 4 & 1 \\ 2 & 1 & 1}, \quad U = \vektor{5 \\ 9 \\ 8}. - $$ - Gesucht ist der Stromvektor $I$, der sich durch Lösen des linearen Gleichungssystems - $$ - R \cdot I = U - $$ - ergibt. - Bestimmen Sie die Lösung mithilfe der Cramerschen Regel. - - \exampleseparator - - Es gilt: - $$ - \vektor{1 & 3 & 0 \\ 1 & 4 & 1 \\ 2 & 1 & 1} \vektor{i_1 \\ i_2 \\ i_3} = \vektor{5 \\ 9 \\ 8} - $$ - - Nach der Cramerschen Regel gilt:\footnote{$\abs{R} = -1 \cdot (1-6) + 1 \cdot (4-3) = 6$} - $$ - i_1 = \frac{\dvektor{5 & 3 & 0 \\ 9 & 4 & 1 \\ 8 & 1 & 1}}{\abs{R}} = \frac{-1 \cdot (5-24) + 1 \cdot (20-27)}{6} = \frac{12}{6} = 2 - $$ - $$ - i_2 = \frac{\dvektor{1 & 5 & 0 \\ 1 & 9 & 1 \\ 2 & 8 & 1}}{\abs{R}} = \frac{-1 \cdot (8-10) + 1 \cdot (9-5)}{6} = \frac{6}{6} = 1 - $$ - $$ - i_3 = \frac{\dvektor{1 & 3 & 5 \\ 1 & 4 & 9 \\ 2 & 1 & 8}}{\abs{R}} = \frac{32+54+5-40-9-24}{6} = \frac{18}{6} = 3 - $$ - - Damit ist der Stromvektor $I$ gegeben mit $I = \vektor{2 & 1 & 3}^T$.\qed -\end{example} - -\subsection{Über- und unterbestimmte lineare Gleichungssysteme} - -\begin{defi}{Normalgleichung} - Sei $p_A(b)$ die Projektion eines Vektors $b \in \R^m$ auf den von den Vektoren $A = \vektor{a_1 & \ldots & a_n} \in \R^{m\times n}$ aufgespannten Unterraum $U$, also das Bild von $A$. - - Damit existiert ein $x \in \R^n$ mit - $$ - p_A(b) = \sum^n_{k=1} x_ka_k = Ax - $$ - Dann gilt - $$ - b - p_A(b) \iff \ldots \iff A^TAx = A^Tb - $$ - - Die Gleichungen $A^TAx = A^Tb$ heißen \emph{Normalgleichungen}. - - Die Normalgleichungen sind für jede relle Matrix $A \in \R^{m\times n}$ lösbar. - -\end{defi} - -\begin{defi}{Verallgemeinerte Inverse} - Gegeben ist ein lineares Gleichungssystem $Ax=b$ mit $A \in \R^{m\times n}$, $x \in \R^n$, $b \in \R^m$. - - Im Fall $\rg(A) = n$ (voller Spaltenrang) existiert mit - $$ - x = (A^TA)^{-1}A^Tb - $$ - eine eindeutige Lösung. - In diesem Fall heißt $(A^TA)^{-1}A^T$ \emph{verallgemeinerte Inverse} von $A$. - - Im Fall $\rg(A) = m$ (voller Zeilenrang) existiert mit - $$ - x = A^T(AA^T)^{-1}b - $$ - eine eindeutige Lösung. - In diesem Fall heißt $A^T(AA^T)^{-1}$ \emph{verallgemeinerte Inverse} von $A$. -\end{defi} - -\begin{algo}{Lösen von überbestimmten Gleichungssystemen (Methode der kleinsten Quadrate)} - Gegeben ist das \emph{überbestimmte} Gleichungssystem - $$ - Ax = b, \quad A \in \R^{m\times n}, \, b\in \R^m, \, m \geq n - $$ - Im Fall $\rg(A) = n$ (voller Spaltenrang) gilt mithilfe der verallgemeinerten Inverse für - $$ - x_s = (A^TA)^{-1}A^Tb - $$ - dass - $$ - \norm{b-Ax_s} = \min_{z\in\R^n} \norm{b-Az} - $$ - - Der Vektor $x_s$ heißt \emph{Näherungslösung nach der Methode der kleinsten Quadrate}. -\end{algo} - -\begin{example}{Methode der kleinsten Quadrate} - Eine Messreihe ergibt zu den Zeiten $t = 1,2,3,4,5$ in Sekunden folgende Temperaturwerte: - - \begin{center} - \begin{tabular}{l | CCCCC} - $t$ Sekunden & 1 & 2 & 3 & 4 & 5 \\ - \hline - $y(t)\si{\celsius}$ & 0.9 & 5.8 & 11.4 & 12.1 & 12.9 \\ - \end{tabular} - \end{center} - - Stellen Sie das überbestimmte Gleichungssystem für die unbekannten Parameter $a$ und $b$ auf und bestimmen Sie diese nach der Methode der kleinsten Quadrate, wenn folgende Beziehung zwischen $y$ und $t$ gilt: - $$ - y(t) = a \cdot t + b \cdot \sin\left( -t \cdot \frac{\pi}{2} \right) - $$ - \exampleseparator - - \begin{center} - \begin{tikzpicture}[scale=1] - \begin{axis}[ - %view={45}{15}, - width=15cm, - unit vector ratio*=1 1, - axis lines = middle, - grid=major, - ymin=-.5, - ymax=14, - xmin=0, - xmax=7, - %zmin=-1, - %zmax=10, - xlabel = $x$, - ylabel = $y$, - %zlabel = $z$, - %xtick style={draw=none}, - %ytick style={draw=none}, - %ztick style={draw=none}, - xtick distance={1}, - ytick distance={1}, - %ztick distance={1}, - %xticklabels=\empty, - %yticklabels=\empty, - %zticklabels=\empty, - disabledatascaling, - ] - - \addplot[domain=0:6, samples=100, color=red]{3.02308 * x - 2.22308 * sin(deg(x * pi/2))}; - - \node[label={315:{(1,0.9)}},circle,fill,inner sep=1pt] at (axis cs:1,0.9) {}; - \node[label={135:{(2,5.8)}},circle,fill,inner sep=1pt] at (axis cs:2,5.8) {}; - \node[label={135:{(3,11.4)}},circle,fill,inner sep=1pt] at (axis cs:3,11.4) {}; - \node[label={135:{(4,12.1)}},circle,fill,inner sep=1pt] at (axis cs:4,12.1) {}; - \node[label={315:{(5,12.9)}},circle,fill,inner sep=1pt] at (axis cs:5,12.9) {}; - \end{axis} - \end{tikzpicture} - \end{center} -\end{example} - -\begin{example}{Methode der kleinsten Quadrate (Fortsetzung)} - Mit den gegebenen Daten erhalten wir folgendes LGS: - $$ - Ax = b \quad \iff \quad \vektor{1 & -\sin \frac{\pi}{2} \\ 2 & -\sin \pi \\ 3 & -\sin \frac{3\pi}{2} \\ 4 & -\sin 2 \pi \\ 5 & -\sin \frac{5\pi}{2}}\vektor{a \\ b} = \vektor{0.9 \\ 5.8 \\ 11.4 \\ 12.1 \\ 12.9} \quad \iff \quad \vektor{1 & -1 \\ 2 & 0 \\ 3 & 1 \\ 4 & 0 \\ 5 & -1}\vektor{a \\ b} = \vektor{0.9 \\ 5.8 \\ 11.4 \\ 12.1 \\ 12.9} - $$ - mit - $$ - \rg(A) = 2 = n \quad \implies \quad A^TAx = A^Tb \quad \iff \quad x = \left(A^T A\right)^{-1} A^T b - $$ - Dann gilt nach der Methode der kleinsten Quadrate: - $$ - \begin{aligned} - x_s \quad = \quad & \left(A^T A\right)^{-1} A^T b \\ - = \quad & \left(\vektor{1 & 2 & 3 & 4 & 5 \\ -1 & 0 & 1 & 0 & -1} \vektor{1 & -1 \\ 2 & 0 \\ 3 & 1 \\ 4 & 0 \\ 5 & -1}\right)^{-1} \vektor{1 & 2 & 3 & 4 & 5 \\ -1 & 0 & 1 & 0 & -1} \vektor{0.9 \\ 5.8 \\ 11.4 \\ 12.1 \\ 12.9} \\ - = \quad & \vektor{55 & -3 \\ -3 & 3}^{-1} \vektor{1 & 2 & 3 & 4 & 5 \\ -1 & 0 & 1 & 0 & -1} \vektor{0.9 \\ 5.8 \\ 11.4 \\ 12.1 \\ 12.9} \\ - = \quad & \frac{1}{156}\vektor{3 & 3 \\ 3 & 55} \vektor{1 & 2 & 3 & 4 & 5 \\ -1 & 0 & 1 & 0 & -1} \vektor{0.9 \\ 5.8 \\ 11.4 \\ 12.1 \\ 12.9} \\ - = \quad & \frac{1}{156}\vektor{0 & 6 & 12 & 12 & 12 \\ -52 & 6 & 64 & 12 & -40} \vektor{0.9 \\ 5.8 \\ 11.4 \\ 12.1 \\ 12.9} \\ - = \quad & \frac{1}{156}\vektor{471.6 \\ 346.8} = \vektor{3.02308 \\ 2.22308} = \vektor{a \\ b} - \end{aligned} - $$ - - Damit gilt insgesamt: - $$ - y(t) = a \cdot t + b \cdot \sin\left( -t \cdot \frac{\pi}{2} \right) = 3.02308 \cdot t + 2.22308 \cdot \sin\left( -t \cdot \frac{\pi}{2} \right) - $$\qed -\end{example} - - -\begin{algo}{Lösen von unterbestimmten Gleichungssystemen} - Gegeben ist das \emph{unterbestimmte} Gleichungssystem - $$ - Ax = b, \quad A \in \R^{m\times n}, \, b\in \R^m, \, m \leq n - $$ - Im Fall $\rg(A) = m$ (voller Zeilenrang) gilt mithilfe der verallgemeinerten Inverse für - $$ - x_s = A^T(AA^T)^{-1}b - $$ - dass - $$ - \norm{x_s} = \min_{Ax=b} \norm{x} \quad \land \quad x_s \perp \ker(A) - $$ - - Der Vektor $x_s$ ist eine \emph{eindeutige Lösung mit minimaler Norm}. -\end{algo} - -\begin{example}{Lösen von unterbestimmten Gleichungssystemen} - Die Punkte $A(6;0;0)$, $B(2;1;3)$ und $C(-2;-2;2)$ liegen in einer Ebene $E$. - \begin{enumerate}[a)] - \item Stellen Sie die Hessesche Normalform der Ebene auf. - Wie groß ist der Abstand der Ebene zum Ursprung? - \item Welcher Punkt in der Ebene hat den kleinsten Abstand zum Ursprung? - Stellen Sie dazu das zugehörige unterbestimmte LGS auf und finden Sie die Lösung mit Hilfe der verallgemeinerten Inverse. - \end{enumerate} - - \exampleseparator - - \begin{enumerate}[a)] - \item Wir wählen uns $\vec{a}$ (Ortsvektor von $A$) als Stützvektor und die Vektoren $v = \vec{b} - \vec{a}$ und $w = \vec{c} - \vec{a}$ als Richtungsvektoren der Ebene. - Dann gilt: - $$ - v = \vektor{2\\1\\3} - \vektor{6\\0\\0} = \vektor{-4\\1\\3}, \qquad w = \vektor{-2\\-2\\2} - \vektor{6\\0\\0} = \vektor{-8\\-2\\2} - $$ - $$ - n = \frac{v \times w}{\abs{v \times w}} = \frac{1}{\abs{v \times w}} \vektor{8 \\ -16 \\ 16} = \frac{1}{24} \vektor{8 \\ -16 \\ 16} = \vektor{\nicefrac{1}{3} \\ -\nicefrac{2}{3} \\ \nicefrac{2}{3}} - $$ - - Mit $n$ als (normierten) Normalenvektor erhalten wir dann die Hessesche Normalform der Ebene mit - $$ - E: \scalarprod{x,n} = \scalarprod{\vec{a}, n} \quad \iff \quad \frac{1}{3} \cdot x - \frac{2}{3} \cdot y + \frac{2}{3} \cdot z = 2 - $$ - - Setzen wir den Nullpunkt in die Ebene ein, erhalten wir den Abstand mit $d = 2$.\qed - \item Mit der Ebenengleichung - $$ - E: \frac{1}{3} \cdot x - \frac{2}{3} \cdot y + \frac{2}{3} \cdot z = 2 - $$ - können wir folgendes unterbestimmte LGS aufstellen: - $$ - Ax = b \quad \iff \quad \vektor{\nicefrac{1}{3} & -\nicefrac{2}{3} & \nicefrac{2}{3}} \vektor{x \\ y \\ z} = \vektor{2} - $$ - mit - $$ - \rg(A) = 1 = m \quad \implies \quad x = A^T \left(AA^T\right)^{-1}b - $$ - - Dann gilt: - $$ - \begin{aligned} - x_s \quad = \quad & A^T \left(AA^T\right)^{-1}b \\ - = \quad & \vektor{\nicefrac{1}{3} \\ -\nicefrac{2}{3} \\ \nicefrac{2}{3}} \left( \vektor{\nicefrac{1}{3} & -\nicefrac{2}{3} & \nicefrac{2}{3}} \vektor{\nicefrac{1}{3} \\ -\nicefrac{2}{3} \\ \nicefrac{2}{3}} \right)^{-1} \cdot 2 \\ - = \quad & \vektor{\nicefrac{2}{3} \\ -\nicefrac{4}{3} \\ \nicefrac{4}{3}} = \vektor{x\\y\\z} - \end{aligned} - $$ - Damit ist dann $\vektor{\nicefrac{2}{3} & -\nicefrac{4}{3} & \nicefrac{4}{3}}^T$ der gesuchte Punkt in der Ebene mit dem geringsten Abstand.\qed - \end{enumerate} -\end{example} -\section{Geometrie linearer Abbildungen} - -\subsection{Orthogonale Abbildungen und Matrizen} - -\begin{defi}{Isometrie} - Eine \emph{Isometrie} ist eine lineare Abbildung, die zwei metrische Räume aufeinander abbildet und dabei die euklidische Länge eines Vektors erhält. - - Man spricht auch von einer abstandserhaltenden Abbildung. - - Sei $f : \R^n \to \R^n$ beliebig. Dann sind äquivalent: - \begin{enumerate} - \item $\forall x, y \in \R^n : \scalarprod{f(x), f(y)} = \scalarprod{x, y}$ - \item $f$ ist eine winkelerhaltende Isometrie. - \end{enumerate} -\end{defi} - -\begin{defi}{Orthogonalmatrix} - Eine Matrix $A\in \R^{n\times n}$ heißt \emph{orthogonal}, wenn ihre Spaltenvektoren eine Orthonormalbasis bilden. - - Die Menge aller orthogonalen Matrizen in $\R^{n\times n}$ heiße $O(n)$. - - Es gilt: - \begin{itemize} - \item $A \in O(n) \implies \abs{\det(A)} = 1$ - \end{itemize} - - Es sind äquivalent: - \begin{enumerate} - \item $A \in O(n)$ - \item $A$ ist invertierbar, und es gilt $A^{-1} = A^T$ - \item $A^T \in O(n)$ - \end{enumerate} -\end{defi} - -\begin{example}{Orthogonalmatrix} - Zeigen Sie, dass die Matrix - $$ - Q = \vektor{ - \cos \beta & -\sin\beta & 0 \\ - \cos \alpha \sin\beta & \cos\alpha \cos\beta & -\sin\alpha \\ - \sin\alpha \sin\beta & \sin\alpha \cos\beta & \cos\alpha - } - $$ - eine Orthogonalmatrix ist und bestimmen Sie ihre Inverse. - - \exampleseparator - - Genau dann, wenn $Q$ eine Orthogonalmatrix ist, ist $QQ^T = I$ und damit auch $Q^T = Q^{-1}$: - $$ - \begin{aligned} - QQ^T = \quad & - \vektor{ \cos \beta & -\sin\beta & 0 \\ \cos \alpha \sin\beta & \cos\alpha \cos\beta & -\sin\alpha \\ \sin\alpha \sin\beta & \sin\alpha \cos\beta & \cos\alpha } - \vektor{ \cos\beta & \cos\alpha \sin\beta & \sin\alpha \sin\beta \\ -\sin\beta & \cos\alpha \cos\beta & \sin\alpha \cos\beta \\ 0 & -\sin\alpha & \cos\alpha} \\ - = \quad & \vektor{\cos^2\beta + \sin^2\beta & 0 & 0 \\ 0 & \cos^2\alpha \left( \sin^2\beta + \cos^2\beta \right) + \sin^2\alpha & 0 \\ 0 & 0 & \sin^2\alpha \left( \sin^2\beta + \cos^2\beta \right) + \cos^2\alpha} \\ - = \quad & \vektor{\cos^2\beta + \sin^2\beta & 0 & 0 \\ 0 & \cos^2\alpha + \sin^2\alpha & 0 \\ 0 & 0 & \sin^2\alpha + \cos^2\alpha} \\ - = \quad & \vektor{1 & 0 & 0 \\ 0 & 1 & 0 \\ 0 & 0 & 1} - \end{aligned} - $$ - - Damit ist $Q$ eine Orthogonalmatrix und $Q^T$ die Inverse von $Q$.\qed -\end{example} - -\begin{algo}{QR-Zerlegung} - Sei $A = \vektor{a_1 & \ldots & a_n} \in \R^{m\times n}$ und $\rg(A) = n$. - Dann gibt es eine in den Spalten orthogonale Matrix $Q \in \R^{m\times n}$ und eine obere Dreiecksmatrix $R \in \R^{n\times n}$ mit $A = QR$. - Hierbei können die Spalten von $Q$ mithilfe des Verfahrens von Gram-Schmidt aus den Spalten von $A$ erzeugt werden, und es gilt $\rg(R) = n$. - - Mit $Q = \vektor{q_1 & \ldots & q_n}$ und $R = (\varrho_{ij})$ ergibt sich $R$ durch Lösen der $n$ linearen Gleichungen - $$ - \vektor{a_1 & \ldots & a_n} = \vektor{q_1 & \ldots & q_n} \vektor{ \varrho_{11} & \varrho_{12} & \ldots & \varrho_{1n} \\ & \varrho_{22} & \ldots & \varrho_{2n} \\ & & \ddots & \vdots \\ & & & \varrho_{nn}} - $$ - Hierbei kann bei $n > 1$ über die per Gram-Schmidt generierten Zwischenrechnungen durch Koeffizientenvergleich gelöst werden. -\end{algo} - -\begin{example}{QR-Zerlegung} - Wie lautet die QR-Zerlegung von - $$ - A = \vektor{3 & 1 \\ 4 & 5}? - $$ - Lösen Sie anschließend mit dieser Zerlegung das lineare Gleichungssystem $Ax = b$ mit $b = \vektor{2 & 3}^T$. - - \exampleseparator - - Wir wenden das Gram-Schmidt-Verfahren auf die Spaltenvektoren an:\footnote{Wir sehen, dass die Vektoren orthogonal sind.} - $$ - \begin{aligned} - v_1 \quad = \quad & \vektor{3 \\4} \\ - w_1 \quad = \quad & \frac{v_1}{\norm{v_1}} = \frac{1}{5}\vektor{3 \\4} = \vektor{\nicefrac{3}{5}\\\nicefrac{4}{5}} \\ - v_2 \quad = \quad & \vektor{1 \\5} \\ - r_2 \quad = \quad & v_2 - \scalarprod{v_2, w_1}w_1 \\ - = \quad & \vektor{1 \\ 5} - \left( \frac{1}{5} \right)^2\scalarprod{\vektor{1 \\ 5}, \vektor{3 \\ 4}}\vektor{3 \\ 4} = \vektor{-\nicefrac{44}{25} \\ \nicefrac{33}{25}}\\ - w_2 \quad = \quad & \frac{r_2}{\norm{r_2}} = \frac{5}{11} \vektor{-\nicefrac{44}{25} \\ \nicefrac{33}{25}} = \vektor{-\nicefrac{4}{5} \\ \nicefrac{3}{5}} - \end{aligned} - $$ - - Damit erhalten wir $Q$ mit - $$ - Q = \vektor{w_1 & w_2} = \vektor{\nicefrac{3}{5} & -\nicefrac{4}{5} \\ \nicefrac{4}{5} & \nicefrac{3}{5}} = \frac{1}{5} \vektor{3 & -4 \\ 4 & 3} - $$ - Da $A$ quadratisch ist\footnote{\ldots und damit auch $Q$}, gilt: - $$ - QR = A \quad \iff \quad R = Q^TA - $$ - womit $R$ gegeben ist, mit - $$ - R = Q^TA = \frac{1}{5}\vektor{3 & 4 \\ -4 & 3} \vektor{3 & 1 \\ 4 & 5} = \frac{1}{5} \vektor{25 & 23 \\ 0 & 11} - $$ -\end{example} - -\begin{example}{QR-Zerlegung (Fortsetzung)} - Für das gegebene lineare Gleichungssystem $Ax = b$ ergibt sich dann: - $$ - Ax = b \quad \iff \quad QRx = b \quad \iff \quad Rx = Q^Tb - $$ - $$ - \begin{aligned} - \iff \quad & \frac{1}{5} \vektor{25 & 23 \\ 0 & 11}x = \frac{1}{5}\vektor{3 & 4 \\ -4 & 3}\vektor{2\\3} \\ - \iff \quad & \vektor{25 & 23 \\ 0 & 11}x = \vektor{18 \\ 1} \\ - \implies \quad & 11x_2 = 1 \quad \land \quad 25x_1 + 23x_2 = 18 \\ - \iff \quad & x_2 = \frac{1}{11} \quad \land \quad x_1 = \frac{7}{11} \\ - \implies \quad & x = \vektor{\nicefrac{7}{11} \\ \nicefrac{1}{11}} - \end{aligned} - $$\qed -\end{example} - -\subsection{Eigenwerte und Eigenvektoren} - -\begin{defi}{Eigenwert, Eigenvektor und Eigenraum} - Existiert für einen Endomorphismus $f$ ein $\lambda \in \C$ und $v\in V \setminus \{0\}$ mit - $$ - f(v) = \lambda v - $$ - dann heißt $v$ \emph{Eigenvektor} von $f$ zum \emph{Eigenwert} $\lambda$. - - Sei $\lambda$ ein Eigenwert von $f$ und $v_1, \ldots, v_k$ Eigenvektoren von $f$ zu $\lambda$. - Dann ist auch $v \in L(v_1, \ldots, v_k) \setminus \{0\}$ ein Eigenvektor von $f$ zu $\lambda$. - - Für $\lambda \in \C$ ist $\Eig(f;\lambda) := \{v \in V \mid f(v) = \lambda v\}$, der \emph{Eigenraum} von $f$ zu $\lambda$, ein Untervektorraum von $V$. - - Es gilt: - \begin{itemize} - \item Für $\lambda \neq \gamma$ gilt $\Eig(f;\lambda) \cap \Eig(f;\gamma) = \{0\}$. - \item Eigenvektoren zu unterschiedlichen Eigenwerten sind linear unabhängig. - \item Die Eigenwerte einer Dreiecksmatrix sind die Werte auf der Hauptdiagonalen. - \item Eigenwerte reeller symmetrischer Matrizen sind immer reell. - \item Zu jedem Eigenwert einer reellen symmetrischen Matrix existieren reelle Eigenvektoren. - \item Sei $A \in \R^{n\times n}$ symmetrisch, $\lambda \neq \mu$ zwei Eigenwerte von $A$ mit Eigenvektoren $v$ bzw. $w$. Dann gilt $v \perp w$. - \end{itemize} - -\end{defi} - -\begin{defi}{Charakteristisches Polynom} - Sei $A \in \C^{n\times n}$. - Dann ist die Funktion - $$ - \chi_A(\lambda) := \det(A-\lambda E) - $$ - ein Polynom mit $\deg(\chi_A) = n$ und heißt \emph{charakteristisches Polynom}. - - Es gilt: - \begin{itemize} - \item $\lambda \in \C$ ist Eigenwert von $A$ $\iff \chi_A(\lambda) = 0$ - \item $A$ hat (mit Vielfachheit) genau $n$ Eigenwerte $\lambda_i \in \C$. - \item $\Eig(f;\lambda) = \ker(A-\lambda E)$ - \end{itemize} -\end{defi} - -\begin{example}{Eigenwerte und Eigenvektoren} - Gegeben sind - $$ - A_t = \vektor{1 & t \\ -2 & -1-t} \quad \text{und} \quad x_t = \vektor{-t \\ 2}, t \in \R - $$ - Zeigen Sie, dass der Vektor $x_t$ Eigenvektor der Matrix $A_t$ ist. - Wie lautet der zugehörige Eigenwert? - Bestimmen Sie auch den zweiten Eigenwert. - - \exampleseparator - - Berechnen des charakteristischen Polynoms von $A_t$: - $$ - \abs{A - \lambda I} = \abs{\vektor{1 - \lambda & t \\ -2 & -1-t-\lambda}} = (1-\lambda)(-1-t-\lambda) + 2t = \lambda^2 + t\lambda + t - 1 - $$ - - Nullstellen des charakteristischen Polynoms (Eigenwerte): - $$ - \lambda_{1,2} = -\frac{t}{2} \pm \sqrt{\left(\frac{t}{2}\right)^2 - t + 1} = -\frac{t}{2} \pm \sqrt{\frac{t^2-4t + 4}{4}} = -\frac{t}{2} \pm \frac{t-2}{2} - $$ - $$ - \lambda_1 = -1 \quad \land \quad \lambda_2 = -t +1 - $$ - - Bestimmen des Eigenraums/der Eigenvektoren zum Eigenwert $\lambda_1$: - $$ - \begin{sysmatrix}{cc|c} - 1-\lambda_1 & t & 0 \\ - -2 & -1-t-\lambda_1 & 0 - \end{sysmatrix} - \sim - \begin{sysmatrix}{cc|c} - 2 & t & 0 \\ - -2 & -t & 0 - \end{sysmatrix} - \sim - \begin{sysmatrix}{cc|c} - 2 & t & 0 \\ - 0 & 0 & 0 - \end{sysmatrix} - $$ - $$ - \begin{aligned} - \implies \quad & 2x_1 + tx_2 = 0 \iff x_1 = -\frac{tx_2}{2} \\ - \implies \quad & E(\lambda_1) = \ker(A-\lambda_1 I) = \scalarprod{\vektor{-t \\ 2}} \ni x_t - \end{aligned} - $$ - - Insgesamt sind also die Eigenwerte $\lambda_1 = -1$ und $\lambda_2 = -t+1$ und $x_t$ Eigenvektor zu $\lambda_1$.\qed -\end{example} - -\begin{bonus}{Eigenwerte und Determinanten} - Für $A = \vektor{a_1 & \ldots & a_n} \in \C^{n\times n}$ mit Eigenwerten $\lambda_i$, $1 \leq i \leq n$ gilt - $$ - \det(A) = \prod^n_{i=1}\lambda_i - $$ -\end{bonus} - -\subsection{Diagonalisierung linearer Abbildungen} - -\begin{defi}{Diagonalisierbarkeit} - Eine quadratische Matrix $A \in \C^{n\times n}$ heißt \emph{diagonalisierbar}, wenn es eine Diagonalmatrix $D$ und eine invertierbare Matrix $S$ existiert, sodass - $$ - A = SDS^{-1} - $$ - gilt. - Dabei ist $A$ genau dann diagonalisierbar, wenn eine Basis aus Eigenvektoren existiert. - Bildet man mit ihnen als Spalten eine Matrix $S$, dann ist $S$ genau die oben genannte Matrix\footnote{\ldots des Basiswechsels.}. - - Auf der Hauptdiagonalen von $D$ befinden sich die entsprechenden Eigenwerte von $A$. - - Es gilt: - \begin{itemize} - \item Zu jeder reellsymmetrischen Matrix $A$ gibt es eine Orthogonalmatrix $S$ und eine Diagonalmatrix $D$ wie oben. - \end{itemize} -\end{defi} - -\begin{example}{Diagonalmatrix} - Gesucht ist die Matrix $A$ mit den Eigenwerten $1$ und $4$ und den zugehörigen Eigenvektoren $\vektor{4\\1}$ und $\vektor{2\\1}$. - - \exampleseparator - - Wir wissen, dass $A$ diagonalisierbar ist. - Damit gilt - $$ - \begin{aligned} - A & \quad = SDS^{-1} \\ - & \quad = \vektor{4 & 2 \\ 1 & 1} \vektor{1 & 0 \\ 0 & 4} \vektor{4 & 2 \\ 1 & 1}^{-1} \\ - & \quad = \vektor{4 & 2 \\ 1 & 1} \vektor{1 & 0 \\ 0 & 4} \frac{1}{2} \vektor{1 & -2 \\ -1 & 4} \\ - & \quad = \frac{1}{2} \vektor{4 & 2 \\ 1 & 1} \vektor{1 & -2 \\ -4 & 16} \\ - & \quad = \frac{1}{2} \vektor{-4 & 24 \\ -3 & 14} - \end{aligned} - $$\qed -\end{example} - -\begin{defi}{Vielfachheit} - Sei $A \in \C^{n\times n}$ und $\lambda$ ein Eigenwert. - - Die Vielfachheit der Nullstelle $\lambda$ von $\chi_A$ heißte \emph{algebraische Vielfachheit} $a(\lambda)$. - - Weiter sei $g(\lambda) := \dim(\Eig(A;\lambda))$ die \emph{geometrische Vielfachheit} von $\lambda$. - - Es gilt: - \begin{itemize} - \item Existiert ein Eigenwert $\tilde{\lambda}$ mit $a(\tilde{\lambda}) > g(\tilde{\lambda})$, dann ist $A$ nicht diagonalisierbar. - \end{itemize} -\end{defi} - -\begin{bonus}{Normale Matrix} - Eine Matrix $A \in \C^{n\times n}$ heißt \emph{normal}, wenn gilt: - $$ - AA^{*} = A^{*}A \quad \iff \quad A\bar{A}^T = \bar{A}^TA - $$ - - $A^{*}$ heißt adjungierte Matrix von $A$. - - Sei $A \in \C^{n\times n}$. - Es gilt: - \begin{itemize} - \item Es existiert eine bzgl. des Standardskalarprodukts in $\C^n$ orthonormale Basis aus Eigenvektoren, d.h. $A$ ist diagonalisierbar. - \item Jede reelle symmetrische Matrix ist diagonalisierbar. Die Eigenwerte sind reell. - \item Jede reelle antisymmetrische Matrix (d.h. $A^T = -A$) ist diagonalisierbar. Die Eigenwerte sind rein imaginär oder 0. - \item Jede reelle orthogonale Matrix ist diagonalisierbar. - \end{itemize} -\end{bonus} - -\subsection{Definitheit und Skalarprodukte} - -\begin{defi}{Skalarprodukt} - Für ein \emph{Skalarprodukt} $(\cdot, \cdot) : \R^n \times \R^n \to \R$ müssen drei Bedingungen erfüllt sein: - \begin{enumerate} - \item $(\cdot, \cdot)$ ist linear in den Spalten. - \item $(\cdot, \cdot)$ ist symmetrisch. - \item $(x, x) > 0$ für $x \neq 0$. - \end{enumerate} - - Wir wählen eine beliebige Matrix $A \in \R^{n\times n}$ und betrachten die Abbildung - $$ - (\cdot, \cdot)_A : \R^n \times \R^n \to \R, \quad (x, y)_A := \scalarprod{x, Ay} - $$ - wobei $\scalarprod{\cdot, \cdot}$ für das Standardskalarprodukt steht. - - Die Abbildung $(\cdot, \cdot)_A$ ist genau dann symmetrisch, wenn $A$ symmetrisch ist. - - Nicht jede symmetrische Matrix definiert ein Skalarprodukt (z.B. die Nullmatrix). -\end{defi} - -\begin{defi}{Quadratische Form} - Sei $A$ eine symmetrische Matrix $A \in \R^{n\times n}$. - - Die Abbildung $x \to \scalarprod{x, Ax}$ wird \emph{quadratische Form} genannt. -\end{defi} - -\begin{defi}{Hauptminoren} - Für $A \in \R^{n\times n}$ seien $A_k$ die \emph{links oben} beginnenden $k \times k$-Untermatrizen $A_k = (a_{ij})^k_{i,j=1}$ von $A$. - - Dann heißen $D_k = \det(A_k)$ die \emph{Hauptunterdeterminanten} oder \emph{Hauptminoren} von $A$. -\end{defi} - -\begin{defi}{Definitheit} - Sei $A$ eine symmetrische Matrix $A \in \R^{n\times n}$. - - Dann gilt: - \begin{itemize} - \item $A$ heißt \emph{positiv definit}, wenn $\scalarprod{x, Ax} > 0 \forall x \in \R^n \setminus \{0\}$.\footnote{Häufig kürzt man \glqq symmetrisch positiv definit\grqq mit \emph{spd} ab.} - \item $A$ heißt \emph{negativ definit}, wenn $\scalarprod{x, Ax} < 0 \forall x \in \R^n \setminus \{0\}$. - \item $A$ heißt \emph{positiv semidefinit}, wenn $\scalarprod{x, Ax} \geq 0 \forall x \in \R^n \setminus \{0\}$. - \item $A$ heißt \emph{negativ semidefinit}, wenn $\scalarprod{x, Ax} \leq 0 \forall x \in \R^n \setminus \{0\}$. - \item $A$ heißt \emph{indefinit}, falls sie weder positiv noch negativ (semi-)definit ist, d.h. - $$ - \exists x, y \in \R^n \{0\} : \scalarprod{x, Ax} > 0 \land \scalarprod{y, Ay} < 0 - $$ - \end{itemize} - - Es gilt: - \begin{itemize} - \item Die Abbildung $(\cdot, \cdot)_A$ ist genau dann ein Skalarprodukt, wenn $A$ spd ist. - \end{itemize} - - Für eine reelle symmetrische Matrix $A$ sind äquivalent: - \begin{enumerate} - \item $A$ ist positiv definit. - \item $A$ besitzt nur positive Eigenwerte. - \item Alle Hauptminoren von $A$ sind positiv. - \end{enumerate} - - Weiter ist $A$ genau dann positiv semidefinit, wenn alle Eigenwerte von $A$ nicht negativ sind. - In diesem Fall sind alle Hauptminoren von $A$ nicht negativ. - - $A$ ist genau dann negativ (semi-)definit, wenn $-A$ positiv (semi-)definit ist. - - Für die Hauptminoren $D_k$ einer negativ definiten Matrix gilt, dass $D_k$ abwechselnd positiv und negativ sind, beginnend mit negativem Vorzeichen. -\end{defi} - -\printindex -\printindex[Beispiele] - +\documentclass[german]{../spicker} + +\usepackage{amsmath} +\usepackage{polynom} +\usepackage{nicefrac} +\usepackage{array} % for \newcolumntype macro +\usepackage{tikz} +\usepackage{pgfplots} +\usepackage{multirow,bigdelim} +\usepgfplotslibrary{fillbetween} + +\usetikzlibrary{positioning} + +\title{Lineare Algebra 2} +\author{Patrick Gustav Blaneck} +\makeindex[intoc] +\makeindex[intoc, name=Beispiele,title=Beispiele] + +\newcommand{\scalarprod}[1]{\left\langle #1 \right\rangle} +\newcommand{\vektor}[1]{\begin{pmatrix*}[c] #1 \end{pmatrix*}} +\renewcommand{\span}[1]{\operatorname{span}\left(#1\right)} + +\newcommand{\im}{\operatorname{im}} +\newcommand{\rg}{\operatorname{rg}} +\newcommand{\defect}{\operatorname{def}} +\newcommand{\Eig}{\operatorname{Eig}} + +\renewcommand{\d}{\,\mathrm{d}} + +\renewcommand{\abs}[1]{\left| #1 \right|} +\newcommand{\cis}[1]{\left( \cos\left( #1 \right) + i \sin\left( #1 \right) \right)} +\newcommand{\sgn}{\text{sgn}} +\newcommand{\diff}{\mathrm{d}} +\newcommand{\dx}{~\mathrm{d}x} +\newcommand{\du}{~\mathrm{d}u} +\newcommand{\dv}{~\mathrm{d}v} +\newcommand{\dw}{~\mathrm{d}w} +\newcommand{\dt}{~\mathrm{d}t} +\newcommand{\dn}{~\mathrm{d}n} +\newcommand{\dudx}{~\frac{\mathrm{d}u}{\mathrm{d}x}} +\newcommand{\dudn}{~\frac{\mathrm{d}u}{\mathrm{d}n}} +\newcommand{\dvdx}{~\frac{\mathrm{d}v}{\mathrm{d}x}} +\newcommand{\dwdx}{~\frac{\mathrm{d}w}{\mathrm{d}x}} +\newcommand{\dtdx}{~\frac{\mathrm{d}t}{\mathrm{d}x}} +\newcommand{\ddx}{\frac{\mathrm{d}}{\mathrm{d}x}} +\newcommand{\dFdx}{\frac{\mathrm{d}F}{\mathrm{d}x}} +\newcommand{\dfdx}{\frac{\mathrm{d}f}{\mathrm{d}x}} +\newcommand{\interval}[1]{\left[ #1 \right]} + +\newcolumntype{L}{>{$}l<{$}} % math-mode version of "l" column type +\newcolumntype{R}{>{$}r<{$}} % math-mode version of "r" column type +\newcolumntype{C}{>{$}c<{$}} % math-mode version of "c" column type +\newcolumntype{P}{>{$}p<{$}} % math-mode version of "l" column type + +\newenvironment{sysmatrix}[1] + {\left(\begin{array}{@{}#1@{}}} + {\end{array}\right)} + +\newcommand{\dvektor}[1]{\begin{vmatrix*}[r] #1 \end{vmatrix*}} + +\begin{document} +\maketitle +\tableofcontents +\newpage + +%\setcounter{section}{1} + +\section{Lineare Abbildungen} + +\subsection{Grundlegende Eigenschaften linearer Abbildungen} + +\begin{defi}{Homomorphismus} + Eine Abbildung $f : V \to W$ heißt \emph{linear} oder ein \emph{Homomorphismus}, falls $\forall x, y \in V, \forall \lambda \in K$ gilt: + \begin{itemize} + \item Additivität: $f(x + y) = f(x) + f(y)$ + \item Homogenität: $f(\lambda x) = \lambda f(x)$ + \end{itemize} + + Es gilt auch: + \begin{itemize} + \item Für eine lineare Funktion $f$ gilt $f(0) = 0$. + \item Die Funktion $f$ ist genau dann linear, wenn $\forall x, y \in V, \forall \lambda \in K$ gilt: + $$ + f(x + \lambda y) = f(x) + \lambda f(y) + $$ + \item Summen, Vielfache linearer Abbildungen und vektorwertige Abbildungen, deren Komponenten aus linearen Abbildungen bestehen, sind wiederum linear. + \end{itemize} +\end{defi} + +\begin{example}{Homomorphismus} + Gegeben sei die Abbildung $f : \R^3 \to \R^2$ mit $f(x_1, x_2, x_3) = (x_1-2x_3, 4x_2)$. + + Zeigen Sie: $f$ ist linear. + + \exampleseparator + + $f$ ist genau dann \emph{linear}, wenn $f$ \emph{homogen} und \emph{additiv} ist. + + \emph{Homogenität:} $\forall x \in \R^3, \lambda \in \R: f(\lambda x) = \lambda f(x)$ + $$ + \begin{aligned} + & f(\lambda x) & & = \lambda f(x) \\ + \equiv \quad & f(\lambda x_1, \lambda x_2, \lambda x_3) & & = \lambda f(x_1, x_2, x_3) \\ + \equiv \quad & (\lambda x_1-2 \lambda x_3, 4 \lambda x_2) & & = \lambda (x_1-2x_3, 4x_2) \\ + \equiv \quad & \lambda (x_1-2x_3, 4x_2) & & = \lambda (x_1-2x_3, 4x_2) \quad \checkmark + \end{aligned} + $$ + \emph{Additivität:} $\forall x, y \in \R^3: f(x + y) = f(x) + f_4(y)$ + $$ + \begin{aligned} + & f(x + y) & & = f(x) + f(y) \\ + \equiv \quad & f(x_1 + y_1, x_2 + y_2, x_3 + y_3) & & = f(x_1, x_2, x_3) + f(y_1, y_2, y_3) \\ + \equiv \quad & (x_1 + y_1-2(x_3 + y_3), 4(x_2 + y_2)) & & = (x_1-2x_3, 4x_2) + (y_1-2y_3, 4y_2) \\ + \equiv \quad & (x_1 + y_1-2 x_3 -2 y_3, 4 x_2 +4 y_2) & & = (x_1 + y_1-2 x_3 -2 y_3, 4 x_2 +4 y_2) \quad \checkmark + \end{aligned} + $$ + + Damit ist $f$ linear. \qed +\end{example} + +\begin{defi}{Kern} + Der \emph{Kern} einer linearen Abbildung $f : V \to W$ wird definiert durch + $$ + \ker (f) := f^{-1}(0) + $$ + + Dabei gilt: + \begin{itemize} + \item $\im (f)$\footnote{Bild von $f$} ist ein Untervektorraum von $W$. + \item $\ker (f)$ ist ein Untervektorraum von $V$. + \end{itemize} + + Eine lineare Abbildung ist genau dann injektiv, wenn $\ker (f) = \{0\}$ gilt. +\end{defi} + +\begin{bonus}{Defekt} + Für eine lineare Funktion $f: V\to W$ definiert man den \emph{Defekt} von $f$ durch + $$ + \defect (f) := \dim\ker (f) + $$ + + Eine lineare Abbildung ist genau dann injektiv, wenn $\defect (f) = 0$ gilt. +\end{bonus} + +\begin{example}{Kern} + Gegeben sei die Abbildung $f : \R^3 \to \R^2$ mit $f(x_1, x_2, x_3) = (x_1-2x_3, 4x_2)$. + + Bestimmen Sie den Kern von $f$ und geben Sie $\dim(\ker(f))$ an. + + \exampleseparator + + $$ + f(x_1, x_2, x_3) = 0 \iff + \begin{sysmatrix}{ccc|c} + 1 & 0 & -2 & 0 \\ + 0 & 4 & 0 & 0 + \end{sysmatrix} + \implies x_2 = 0 \quad \land \quad x_1 = 2x_3 + $$ + Daraus folgt: + $$ + \ker(f) = f^{-1}(0) = \left\{ (2\lambda, 0, \lambda) \mid \lambda \in \R \right\} \implies \defect(f) = \dim(\ker(f)) = 1 + $$\qed +\end{example} + +\begin{defi}{Rang} + Für eine lineare Funktion $f: V\to W$ definiert man den \emph{Rang} von $f$ durch + $$ + \rg (f) := \dim\im (f) + $$ + + Eine lineare Abbildung ist genau dann surjektiv, wenn $\rg (f) = \dim (W)$ gilt. +\end{defi} + +\begin{defi}{Dimensionsformel für lineare Abbildungen (Rangsatz)} + Es sei $f : V \to W$ linear. Dann gilt: + $$ + \defect (f) + \rg (f) = \dim V + $$ + bzw. äquivalent + $$ + \dim\ker (f) + \dim\im (f) = \dim V + $$ +\end{defi} + +\begin{defi}{Isomorphismus} + Sei $f : V \to W$ linear. + Dann ist $f$ ein \emph{Isomorphismus}, wenn $f$ bijektiv ist. + + Es gilt (für $f$ linear): + \begin{itemize} + \item $f$ ist genau dann ein Isomorphismus, wenn $\ker(f) = \{0\}$ und $\im(f) = W$ gilt. + \item Gelte $\dim (V) = \dim (W)$. Dann gilt $f$ ist injektiv $\iff$ $f$ ist surjektiv $\iff$ $f$ ist bijektiv. + \end{itemize} + + Es gilt (für $f$ Isomorphismus): + \begin{itemize} + \item $\dim(V) = \dim(W)$ + \item $f^{-1} : W \to V$ ist ebenfalls ein Isomorphismus. + \end{itemize} + + Sei $\dim(V) = \dim(W) = n$, $(v_1, \ldots, v_n)$ eine Basis von $V$ und $f : V \to W$ linear. + $f$ ist genau dann ein Isomorphismus, wenn $(f(v_1), \ldots, f(v_n))$ eine Basis von $W$ bildet. +\end{defi} + +\begin{bonus}{Isomorphie} + Seien $V$ und $W$ zwei $K$-Vektorräume + Dann heißen $V$ und $W$ \emph{isomorph}, Schreibweise $V \simeq W$, falls ein Isomorphismus von $V$ nach $W$ existiert. + + Gilt $\dim(V) = \dim(W) = n$, dann gilt direkt $K^n \simeq V \simeq W$. +\end{bonus} + +\begin{defi}{Automorphismus} + Sei $f : V \to W$ linear. + Dann ist $f$ ein \emph{Automorphismus}, wenn $f$ bijektiv ist und $V = W$. +\end{defi} + +\begin{defi}{Endomorphismus} + Eine lineare Abbildung $f : V \to V$ heißt \emph{Endomorphismus}. +\end{defi} + +\subsection{Matrizen und lineare Abbildungen} + +\begin{defi}{Abbildungsmatrix} + Sei $f : V \to W$ linear. Dann ist die \emph{Abbildungsmatrix} $A$ bzgl. $f$ gegeben mit + $$ + A = \vektor{f(e_1) & \ldots & f(e_n)} \ \text{mit} \ \forall x : f(x) = Ax + $$ + + Sei $(v_1, \ldots, v_n)$ eine Basis von $V$. Dann gilt: + \begin{itemize} + \item $\im(f) = \scalarprod{f(v_1), \ldots, f(v_n)}$ + \item $f$ ist injektiv $\iff$ $f(v_1), \ldots, f(v_n)$ sind linear unabhängig. + \end{itemize} +\end{defi} + +\begin{defi}{Darstellungsmatrix} + Sei $f : V \to W$ linear, $\mathcal{B}_V = (v_1, \ldots, v_n)$ eine Basis von $V$ und $\mathcal{B}_W = (w_1, \ldots, w_m)$ eine Basis von $W$. + Dann ist + $$ + M^{\mathcal{B}_V}_{\mathcal{B}_W} (f) = \vektor{K_{\mathcal{B}_W}(f(v_1)) & \ldots & K_{\mathcal{B}_W}(f(v_1))} + $$ + die \emph{Darstellungsmatrix} von $f$ bezüglich der Basen $\mathcal{B}_V$ und $\mathcal{B}_W$. + + $K_{\mathcal{B}_W}(f(v_i))$ bedeutet hier, dass das Bild von $v_i$ in der Basis $\mathcal{B}_W$ kodiert wird. + + Es gilt: + \begin{itemize} + \item Sind $\mathcal{B}_V$ und $\mathcal{B}_W$ die Standardbasen bez. $V$ und $W$, dann gilt $M^{\mathcal{B}_V}_{\mathcal{B}_W} (f) = A$. + \end{itemize} +\end{defi} + +\begin{example}{Abbildungsmatrix} + Sei + $$ + F\left(\vektor{x\\y\\z}\right) = \vektor{x + y + 2z \\ -3x + z \\ -x + 2y + 5z} + $$ + \begin{enumerate}[a)] + \item Geben Sie für obige Abbildung die Abbildungsmatrix an. + \item Bestimmen Sie $\ker(F)$ und dessen Dimension. + \item Bestimmen Sie mit Hilfe der Dimensionsformel $\dim(\im (F))$. + \item Geben Sie eine Basis des Bildes an. + \end{enumerate} + + \exampleseparator + + \begin{enumerate}[a)] + \item Sei $B$ die kanonische Einheitsbasis des $\R^3$. + Dann ist die Abbildungsmatrix gegeben mit + $$ + A = M^B_B (F) = \vektor{~ \\F(e_1) & F(e_2) & F(e_3)\\ ~} = \vektor{1 & 1 & 2\\ -3 & 0 & 1\\ -1 & 2 & 5} + $$\qed + \item $$ + M^B_B \cdot \vektor{x \\ y \\ z} = \vektor{1 & 1 & 2\\ -3 & 0 & 1\\ -1 & 2 & 5} \cdot \vektor{x \\ y \\ z} = \vektor{0 \\ 0 \\ 0} + $$ + + Wir erhalten also ein LGS, dessen Lösung eine Basis von $\ker(F)$ ist: + $$ + \begin{sysmatrix}{c c c | c} + 1 & 1 & 2 & 0 \\ -3 & 0 & 1 & 0 \\ -1 & 2 & 5 & 0 + \end{sysmatrix} + \sim + \begin{sysmatrix}{c c c | c} + 1 & 1 & 2 & 0 \\ 0 & 3 & 7 & 0 \\ 0 & 3 & 7 & 0 + \end{sysmatrix} + \sim + \begin{sysmatrix}{c c c | c} + 1 & 1 & 2 & 0 \\ 0 & 3 & 7 & 0 \\ 0 & 0 & 0 & 0 + \end{sysmatrix} + \sim + \begin{sysmatrix}{c c c | c} + -3 & 0 & 1 & 0 \\ 0 & \frac{3}{7} & 1 & 0 \\ 0 & 0 & 0 & 0 + \end{sysmatrix} + $$ + + Daraus können wir folgern, dass $\ker(F) = \scalarprod{\vektor{1 & -7 & 3}^T}$ und $\defect(F) = 1$. \qed + \item $\dim(\R^3) = \defect(F) + \rg(F) \implies \rg(F) = 2$\qed + \item Wegen $\rg(F) = 2$ wissen wir, dass wir zwei linear unabhängige Vektoren aus $M^B_B$ auswählen können, die dann automatisch eine Basis von $\im(F)$ ergeben. + + Wir wählen $\im(F) = \scalarprod{ \vektor{1 & 0 & 2}^T, \vektor{2 & 1 & 5}^T }$.\qed + \end{enumerate} +\end{example} + +\subsection{Abbildungsverkettung und Matrizenmultiplikation} + +\begin{defi}{Eigenschaften der Abbildungsverkettung} + Seien $U$, $V$, $W$ $K$-Vektorräume und $f : V \to W$ sowie $g : U \to V$ linear. + Dann ist auch $f \circ g : U \to W$ linear. + + Ist $f$ ein Isomorphismus und $\dim(V) = \dim(W)$, dann gilt: + $$ + \rg(f\circ g) = \rg(g) + $$ +\end{defi} + +\begin{defi}{Eigenschaften der Matrixmultiplikation} + Seien $A$, $B$, $C$ so, dass die nachfolgend vorkommenden Matrixmultiplikationen definiert sind. + Dann gilt: + \begin{itemize} + \item $A(BC) = (AB)C$ (Assoziativgesetz) + \item $A(B+C) = AB+AC$ und $(A+B)C = AC+BC$ (Distributivgesetz) + \item $(AB)^T = B^TA^T$ + \item Sei $A \in K^{m\times n}$ und $E_k \in K^{k\times k}$ die $(k\times k)$-Einheitsmatrix. Dann gilt: + $$ + AE_n = E_mA = A + $$ + \item Sei $A \in K^{m\times n}$ und $0_{kl} \in K^{k\times l}$ die $(k\times l)$-Nullmatrix. Dann gilt: + $$ + A0_{nl} = 0_{ml} \quad \text{und} \quad 0_{km}A = 0_{kn} + $$ + \item Das Matrixprodukt ist im Allgemeinen nicht kommutativ. + \item Seien $x, y \in K^n$. Dann gilt: + $$ + \scalarprod{x, y} = x^T \cdot y + $$ + \end{itemize} +\end{defi} + +\begin{example}{Matrixmultiplikation} + Gegeben sind die Matrizen + $$ + A = \vektor{10 & 2 & 3 \\ 8 & 5 & 3 \\ 2 & 3 & 2}, \quad + B = \vektor{7 & 3 \\ 1 & 5}, \quad + C = \vektor{4 & 5 \\ 2 & 7 \\ 3 & 6} + $$ + Welche der folgenden Matrixprodukte sind wohldefiniert? + + \begin{enumerate}[a)] + \item $A\cdot B$ + \item $C\cdot B$ + \item $C\cdot B \cdot A$ + \end{enumerate} + + \exampleseparator + + \begin{enumerate}[a)] + \item $$ + A\cdot B = \overset{3\times \pmb{3}}{\vektor{10 & 2 & 3 \\ 8 & 5 & 3 \\ 2 & 3 & 2}} \overset{\pmb{2}\times 2}{\vektor{7 & 3 \\ 1 & 5}} \quad \lightning \quad (3 \neq 2) + $$ + \item $$ + C\cdot B = \overset{3\times \pmb{2}}{\vektor{4 & 5 \\ 2 & 7 \\ 3 & 6}} \overset{\pmb{2}\times 2}{\vektor{7 & 3 \\ 1 & 5}} = \vektor{33 & 37 \\ 21 & 41 \\ 27 & 39} + $$ + \item $$ + C\cdot B \cdot A = \overset{3\times \pmb{2}}{\vektor{4 & 5 \\ 2 & 7 \\ 3 & 6}} \overset{\pmb{2}\times \pmb{2}}{\vektor{7 & 3 \\ 1 & 5}} \overset{\pmb{3}\times 3}{\vektor{10 & 2 & 3 \\ 8 & 5 & 3 \\ 2 & 3 & 2}} \quad \lightning \quad (2 \neq 3) + $$ + \end{enumerate} +\end{example} + +\begin{defi}{Inverse einer Matrix} + Sei $A$ eine quadratische Matrix. + Gibt es eine Matrix $A^{-1}$ mit + $$ + AA^{-1} = A^{-1}A = E + $$ + so heißt $A$ \emph{invertierbar} oder auch \emph{regulär}. + $A^{-1}$ wird als \emph{Inverse} von $A$ bezeichnet. + + Es gilt: + \begin{itemize} + \item Eine lineare Abbildung $f : V \to W$ ist genau dann invertierbar, wenn ihre Darstellungsmatrix invertierbar ist. + \item Jede invertierbare Matrix ist quadratisch. + \end{itemize} + + Seien $A, B \in K^{n\times n}$ invertierbar. + Dann gilt: + \begin{itemize} + \item $AB = E \iff BA = E \iff B = A^{-1}$ + \item $AB$ ist invertierbar, und es gilt $(AB)^{-1} = B^{-1}A^{-1}$. + \item $A^{-1}$ ist invertierbar, und es gilt $(A^{-1})^{-1} = A$. + \item $A^T$ ist invertierbar, und es gilt $(A^T)^{-1} = (A^{-1})^T$. + \item Für $\lambda \in K \setminus \{0\}$ ist $\lambda A$ invertierbar, und es gilt $(\lambda A)^{-1} = \frac{1}{\lambda}A^{-1}$. + \end{itemize} +\end{defi} + +\begin{example}{Inverse einer Matrix (Gauß-Algorithmus)} + Berechnen Sie mit Hilfe des Gauß-Algorithmus die Inverse zu folgender Matrix: + $$\vektor{0 & 0 & 2 & 0 \\ 1 & 0 & 0 & 1 \\ 0 & -1 & -3 & 0 \\ 2 & 1 & 5 & 3}$$ + + \exampleseparator + + $$ + \begin{sysmatrix}{cccr|cccr} + 0 & 0 & 2 & 0 & 1 & 0 & 0 & 0 \\ + 1 & 0 & 0 & 1 & 0 & 1 & 0 & 0 \\ + 0 & -1 & -3 & 0 & 0 & 0 & 1 & 0 \\ + 2 & 1 & 5 & 3 & 0 & 0 & 0 & 1 + \end{sysmatrix} + \sim + \begin{sysmatrix}{cccr|cccr} + 0 & 0 & 1 & 0 & \nicefrac{1}{2} & 0 & 0 & 0 \\ + 1 & 0 & 0 & 1 & 0 & 1 & 0 & 0 \\ + 0 & -1 & 0 & 0 & \nicefrac{3}{2} & 0 & 1 & 0 \\ + 2 & 1 & 0 & 3 & -\nicefrac{5}{2} & 0 & 0 & 1 + \end{sysmatrix} + $$ + $$ + \sim + \begin{sysmatrix}{cccr|cccr} + 0 & 0 & 1 & 0 & \nicefrac{1}{2} & 0 & 0 & 0 \\ + 1 & 0 & 0 & 1 & 0 & 1 & 0 & 0 \\ + 0 & 1 & 0 & 0 & -\nicefrac{3}{2} & 0 & -1 & 0 \\ + 0 & 1 & 0 & 1 & -\nicefrac{5}{2} & -2 & 0 & 1 + \end{sysmatrix} + \sim + \begin{sysmatrix}{cccr|cccr} + 0 & 0 & 1 & 0 & \nicefrac{1}{2} & 0 & 0 & 0 \\ + 1 & 0 & 0 & 1 & 0 & 1 & 0 & 0 \\ + 0 & 1 & 0 & 0 & -\nicefrac{3}{2} & 0 & -1 & 0 \\ + 0 & 0 & 0 & 1 & -1 & -2 & 1 & 1 + \end{sysmatrix} + $$ + $$ + \sim + \begin{sysmatrix}{cccr|cccr} + 0 & 0 & 1 & 0 & \nicefrac{1}{2} & 0 & 0 & 0 \\ + 1 & 0 & 0 & 0 & 1 & 3 & -1 & -1 \\ + 0 & 1 & 0 & 0 & -\nicefrac{3}{2} & 0 & -1 & 0 \\ + 0 & 0 & 0 & 1 & -1 & -2 & 1 & 1 + \end{sysmatrix} + \sim + \begin{sysmatrix}{cccr|cccr} + 1 & 0 & 0 & 0 & 1 & 3 & -1 & -1 \\ + 0 & 1 & 0 & 0 & -\nicefrac{3}{2} & 0 & -1 & 0 \\ + 0 & 0 & 1 & 0 & \nicefrac{1}{2} & 0 & 0 & 0 \\ + 0 & 0 & 0 & 1 & -1 & -2 & 1 & 1 + \end{sysmatrix} + $$ + + Damit ist + $$ + \vektor{0 & 0 & 2 & 0 \\ 1 & 0 & 0 & 1 \\ 0 & -1 & -3 & 0 \\ 2 & 1 & 5 & 3}^{-1} = \vektor{1 & 3 & -1 & -1 \\-\nicefrac{3}{2} & 0 & -1 & 0 \\ \nicefrac{1}{2} & 0 & 0 & 0 \\ -1 & -2 & 1 & 1} + $$\qed +\end{example} + +\begin{example}{Inverse von verketteten Abbildungen} + Ein sehr gutes (aber sperriges) Beispiel zum Finden von Inversen verketteter Abbildungen ist zu finden im \emph{Lineare Algebra Übungsblatt 05} (Aufgabe 6). + + Das Übungsblatt ist erreichbar unter \url{https://fh-aachen.paddel.xyz/#lineare-algebra-2}. +\end{example} + +\subsection{Koordinatentransformationen} + +\begin{defi}{Koordinatenabbildung} + Sei $V$ ein $K$-Vektorraum mit einer Basis $\mathcal{B} = (b_1, \ldots, b_n)$. + Dann existiert genau ein Isomorphismus $\varphi_{\mathcal{B}} : K^n \to V$ mit $\varphi_{\mathcal{B}}(e_i) = v_i$, $1 \leq i \leq n$. + + Der Isomorphismus $\varphi_{\mathcal{B}}$ heißt \emph{Koordinatenabbildung}. +\end{defi} + +\begin{defi}{Koordinaten eines Vektors} + Sei $V$ ein $K$-Vektorraum mit einer Basis $\mathcal{B} = (b_1, \ldots, b_n)$. + Die Abbildung $K_{\mathcal{B}}(v)$ mit + $$ + K_{\mathcal{B}} : V \to K^n , v = \sum^n_{i=1} \lambda_ib_i \longmapsto \vektor{\lambda_1 \\ \vdots \\ \lambda_n} + $$ + erzeugt die \emph{Koordinaten von v bezüglich der Basis} $\mathcal{B}$. + + Es gilt: + \begin{itemize} + \item $K_{\mathcal{B}}(v) = \varphi^{-1}_{\mathcal{B}}(v)$ + \end{itemize} +\end{defi} + +\begin{defi}{Transformationsmatrix} + Sei ein Vektorraum $V$ mit den Basen $\mathcal{A} = (a_1, \ldots, a_n)$ und $\mathcal{B} = (b_1, \ldots, b_n)$ gegeben. + + Für einen Vektor $v$ existieren die Darstellungen $K_{\mathcal{A}}(v)$ und $K_{\mathcal{B}}(v)$. + Es gilt: + + \begin{center} + \begin{tikzpicture} + \node (v) {$V$}; + \node [below left=of v] (k1) {$K^n$}; + \node [below right=of v] (k2) {$K^n$}; + + \draw [->] (k1) -- (v) node [midway, above left] {\small $\varphi_{\mathcal{A}}$}; + \draw [->] (k2) -- (v) node [midway, above right] {\small $\varphi_{\mathcal{B}}$}; + \draw [->] (k1) -- (k2) node [midway, below] {\small $T^{\mathcal{A}}_{\mathcal{B}} = \varphi_{\mathcal{B}}^{-1} \circ \varphi_{\mathcal{A}}$}; + \end{tikzpicture} + \end{center} + + + Die Matrix $T^{\mathcal{A}}_{\mathcal{B}}$ heißt \emph{Transformationsmatrix des Basiswechsels von} $\mathcal{A}$ \emph{nach} $\mathcal{B}$ + + Sei $v\in V$ beliebig, $K_{\mathcal{A}}(v) = \vektor{x_1 & \ldots & x_n}^T$ und $K_{\mathcal{B}}(v) = \vektor{y_1 & \ldots & y_n}^T$. Dann gilt: + $$ + \vektor{y_1 \\ \vdots \\ y_n} = T^{\mathcal{A}}_{\mathcal{B}} \vektor{x_1 \\ \vdots \\ x_n} + $$ + + Sind die Koordinaten von $v$ beqüglich $\mathcal{A}$ bekannt, kann man mithilfe der Matrix $T^{\mathcal{A}}_{\mathcal{B}}$ die Koordinaten von $v$ bezüglich $\mathcal{B}$ berechnen. + + Seien $A$ und $B$ die Matrizen der Basisvektoren von $\mathcal{A}$ bzw. $\mathcal{B}$. + Dann gilt: + + \begin{center} + \begin{tikzpicture} + \node (ka) {$K_{\mathcal{A}}(x)$}; + \node [right=of ka] (kb) {$K_{\mathcal{B}}(x)$}; + + \node [above=of ka] (x1) {$x$}; + \node [above=of kb] (x2) {$x$}; + + + \draw [->] (x1) -- (x2) node [midway, above] {\small $E$}; + \draw [->] (ka) -- (x1) node [midway, left] {\small $A$}; + \draw [->] (kb) -- (x2) node [midway, right] {\small $B$}; + \draw [->] (ka) -- (kb) node [midway, below] {\small $T^{\mathcal{A}}_{\mathcal{B}}$}; + \end{tikzpicture} + \end{center} + + Man erkennt: + $$ + T^{\mathcal{A}}_{\mathcal{B}} = B^{-1}A + $$ +\end{defi} + +\begin{example}{Transformationsmatrizen} + $\mathcal{A} = (e_1, e_2, e_3)$, $\mathcal{A}' = (a'_1, a'_2, a'_3)$ und $\mathcal{A}'' = (a''_1, a''_2, a''_3)$ bilden mit den kanonischen Einheitsvektoren $e_1, e_2, e_3$ sowie + $$ + a'_1 = \vektor{1\\0\\0}, a'_2 = \vektor{1\\1\\0}, a'_3 = \vektor{1\\1\\1} + \quad \text{bzw.} \quad + a''_1 = \vektor{1\\-1\\0}, a''_2 = \vektor{-1\\0\\1}, a''_3 = \vektor{0\\1\\1} + $$ + jeweils Basen des $\R^3$. + + Bestimmen Sie: + \begin{enumerate}[a)] + \item die Transformationsmatrizen $T^{\mathcal{A}'}_{\mathcal{A}}$ sowie $T^{\mathcal{A}}_{\mathcal{A}'}$. + \item die Transformationsmatrizen $T^{\mathcal{A}''}_{\mathcal{A}}$ sowie $T^{\mathcal{A}}_{\mathcal{A}''}$. + \item die Transformationsmatrizen $T^{\mathcal{A}'}_{\mathcal{A}''}$ sowie $T^{\mathcal{A}''}_{\mathcal{A}'}$. + \item die Koordinaten des Vektors $\vektor{1 & 0 & 1}^T$ bzgl. der Basen $\mathcal{A}'$ und $\mathcal{A}''$. + \end{enumerate} + + \exampleseparator + + \begin{enumerate}[a)] + \item Berechnen von $\mathcal{A}'^{-1}$: + $$ + \begin{sysmatrix}{rrr|rrr} + 1 & 1 & 1 & 1 & 0 & 0 \\ + 0 & 1 & 1 & 0 & 1 & 0 \\ + 0 & 0 & 1 & 0 & 0 & 1 + \end{sysmatrix} + \sim + \begin{sysmatrix}{rrr|rrr} + 1 & 1 & 0 & 1 & 0 & -1 \\ + 0 & 1 & 0 & 0 & 1 & -1 \\ + 0 & 0 & 1 & 0 & 0 & 1 + \end{sysmatrix} + \sim + \begin{sysmatrix}{rrr|rrr} + 1 & 0 & 0 & 1 & -1 & 0 \\ + 0 & 1 & 0 & 0 & 1 & -1 \\ + 0 & 0 & 1 & 0 & 0 & 1 + \end{sysmatrix} + $$ + + Damit gilt: + $$ + T^{\mathcal{A}'}_{\mathcal{A}} = \mathcal{A}^{-1}\mathcal{A}' = \vektor{1 & 0 & 0 \\ 0 & 1 & 0 \\ 0 & 0 & 1} \vektor{1 & 1 & 1 \\ 0 & 1 & 1 \\ 0 & 0 & 1} = \vektor{1 & 1 & 1 \\ 0 & 1 & 1 \\ 0 & 0 & 1} + $$ + und + $$ + T^{\mathcal{A}}_{\mathcal{A}'} = \mathcal{A}'^{-1}\mathcal{A} = \vektor{1 & -1 & 0 \\ 0 & 1 & -1 \\ 0 & 0 & 1} \vektor{1 & 0 & 0 \\ 0 & 1 & 0 \\ 0 & 0 & 1} = \vektor{1 & -1 & 0 \\ 0 & 1 & -1 \\ 0 & 0 & 1}. + $$\qed + \item Berechnen von $\mathcal{A}''^{-1}$: + $$ + \begin{sysmatrix}{rrr|rrr} + 1 & -1 & 0 & 1 & 0 & 0 \\ + -1 & 0 & 1 & 0 & 1 & 0 \\ + 0 & 1 & 1 & 0 & 0 & 1 + \end{sysmatrix} + \sim + \ldots + \sim + \begin{sysmatrix}{rrr|rrr} + 1 & 0 & 0 & \nicefrac{1}{2} & -\nicefrac{1}{2} & \nicefrac{1}{2} \\ + 0 & 1 & 0 & -\nicefrac{1}{2} & -\nicefrac{1}{2} & \nicefrac{1}{2}\\ + 0 & 0 & 1 & \nicefrac{1}{2} & \nicefrac{1}{2} & \nicefrac{1}{2} + \end{sysmatrix} + = + \frac{1}{2}\vektor{1 & -1 & 1 \\ -1 & -1 & 1 \\ 1 & 1 & 1} + $$ + Damit gilt: + $$ + T^{\mathcal{A}''}_{\mathcal{A}} = \mathcal{A}^{-1}\mathcal{A}'' = \vektor{1 & 0 & 0 \\ 0 & 1 & 0 \\ 0 & 0 & 1} \vektor{1 & -1 & 0 \\ -1 & 0 & 1 \\ 0 & 1 & 1} = \vektor{1 & -1 & 0 \\ -1 & 0 & 1 \\ 0 & 1 & 1} + $$ + und + $$ + T^{\mathcal{A}}_{\mathcal{A}''} = \mathcal{A}''^{-1}\mathcal{A} = \frac{1}{2}\vektor{1 & -1 & 1 \\ -1 & -1 & 1 \\ 1 & 1 & 1} \vektor{1 & 0 & 0 \\ 0 & 1 & 0 \\ 0 & 0 & 1} = \frac{1}{2}\vektor{1 & -1 & 1 \\ -1 & -1 & 1 \\ 1 & 1 & 1}. + $$\qed + \end{enumerate} + +\end{example} + +\begin{example}{Transformationsmatrizen (Fortsetzung)} + \begin{enumerate}[a)] + \setcounter{enumi}{2} + \item Mit den bisherigen Ergebnissen gilt: + $$ + T^{\mathcal{A}'}_{\mathcal{A}''} = \mathcal{A}''^{-1}\mathcal{A}' = \frac{1}{2}\vektor{1 & -1 & 1 \\ -1 & -1 & 1 \\ 1 & 1 & 1} \vektor{1 & 1 & 1 \\ 0 & 1 & 1 \\ 0 & 0 & 1} = \frac{1}{2}\vektor{1 & 0 & 1 \\ -1 & -2 & -1 \\ 1 & 2 & 3} + $$ + und + $$ + T^{\mathcal{A}''}_{\mathcal{A}'} = \mathcal{A}'^{-1}\mathcal{A}'' = \vektor{1 & -1 & 0 \\ 0 & 1 & -1 \\ 0 & 0 & 1} \vektor{1 & -1 & 0 \\ -1 & 0 & 1 \\ 0 & 1 & 1} = \vektor{2 & -1 & -1 \\ -1 & -1 & 0 \\ 0 & 1 & 1}. + $$\qed + \item Sei $x = \vektor{1 & 0 & 1}^T$. + + Dann gilt für $x$ bzgl. $\mathcal{A}'$: + $$ + x = K_{\mathcal{A}'}(x) = T^{\mathcal{A}}_{\mathcal{A}'} \cdot K_{\mathcal{A}}(x) = \vektor{1 & -1 & 0 \\ 0 & 1 & -1 \\ 0 & 0 & 1} \vektor{1 \\ 0 \\ 1} = \vektor{1 \\ -1 \\ 1}, + $$ + bzw. bzgl. $\mathcal{A}''$: + $$ + x = K_{\mathcal{A}''}(x) = T^{\mathcal{A}}_{\mathcal{A}''} \cdot K_{\mathcal{A}}(x) = \frac{1}{2}\vektor{1 & -1 & 1 \\ -1 & -1 & 1 \\ 1 & 1 & 1} \vektor{1 \\ 0 \\ 1} = \vektor{1 \\ 0 \\ 1}. + $$\qed + \end{enumerate} +\end{example} + +\begin{defi}{Darstellungsmatrix mit Basistransformation} + Seien $V$ und $W$ endlich erzeugt mit Basen $\mathcal{A}$ und $\mathcal{A}'$ bzw. $\mathcal{B}$ und $\mathcal{B}'$. + Sei weiter $f : V \to W$ linear. + Dann gilt: + $$ + M^{\mathcal{A}'}_{\mathcal{\mathcal{B}'}}(f) = T^{\mathcal{B}}_{\mathcal{B}'} \cdot M^{\mathcal{A}}_{\mathcal{\mathcal{B}}}(f) \cdot T^{\mathcal{A}'}_{\mathcal{A}} + $$ + + Zur Visualisierung dient folgendes kommutative Diagramm: + \begin{center} + \begin{tikzpicture} + \node (kn1) {$K^n$}; + \node [above right=of kn1] (v) {$V$}; + \node [above left=of v] (kn2) {$K^n$}; + \node [right=of v] (w) {$W$}; + \node [above right=of w] (km2) {$K^m$}; + \node [below right=of w] (km1) {$K^m$}; + + \draw [->] (kn1) -- (v) node [midway, above left] {\small $\varphi_{\mathcal{A}'}$}; + \draw [->] (kn2) -- (v) node [midway, above right] {\small $\varphi_{\mathcal{A}}$}; + \draw [->] (km1) -- (w) node [midway, above right] {\small $\varphi_{\mathcal{B}'}$}; + \draw [->] (km2) -- (w) node [midway, above left] {\small $\varphi_{\mathcal{B}}$}; + + \draw [->] (v) -- (w) node [midway, above] {\small $f$}; + + \draw [->] (kn2) -- (km2) node [midway, above] {\small $M^{\mathcal{A}}_{\mathcal{B}} (f)$}; + \draw [->] (kn1) -- (km1) node [midway, below] {\small $M^{\mathcal{A}'}_{\mathcal{B}'} (f)$}; + + \draw [->] (kn2) -- (kn1) node [midway, left] {\small $T^{\mathcal{A}}_{\mathcal{A}'}$}; + \draw [->] (km2) -- (km1) node [midway, right] {\small $T^{\mathcal{B}}_{\mathcal{B}'}$}; + \end{tikzpicture} + \end{center} +\end{defi} + +\section{Determinanten} + +\begin{defi}{Elementarmatrix} + Seien $1\leq i$, $j \leq n$ mit $i \neq j$ und $\lambda \in K \setminus \{0\}$ gegeben. + Dann sei + $$ + C1 := \vektor{1 & & & & \\ & \ddots & & & \\ & \lambda & \ddots & & \\ & & & \ddots & & \\ & & & & \ddots & \\ & & & & & 1} \in K^{n \times n} + $$ + wobei der $(i, j)$-te Eintrag den Wert $\lambda$ annehmen soll und alle anderen Einträge außerhalb der Hauptdiagonalen $0$ sein sollen. + + Sei $C2$ die Matrix, die man aus der Einheitsmatrix gewinnt, indem man die $i$-te und $j$-te Spalte vertauscht, also + $$ + C2 := \vektor{1 & & & & \\ & \ddots & & & \\ & & 0 & &1 \\ & & & \ddots & & \\ & & 1 & & 0 & \\ & & & & & 1} \in K^{n \times n} + $$ + + Zuletzt definieren wir + $$ + C3 := \vektor{1 & & & & \\ & \ddots & & & \\ & & \lambda & & \\ & & & \ddots & & \\ & & & & \ddots & \\ & & & & & 1} \in K^{n \times n} + $$ + + Matrizen der Gestalt $C1$, $C2$ oder $C3$ nennt man \emph{Elementarmatrizen}. + + Es gilt: + \begin{itemize} + \item Die Multiplikation einer Matrix $A$ von links mit einer Elementarmatrix entspricht der Anwendung einer elementaren Zeilenoperation des Gauß-Verfahrens auf $A$. + \subitem Notation: $Zi$ statt $Ci$ + \item Die Multiplikation einer Matrix $A$ von rechts mit einer Elementarmatrix entspricht der Anwendung einer elementaren Spaltenoperation auf $A$. + \subitem Notation: $Si$ statt $Ci$ + \end{itemize} + + \begin{itemize} + \item $C1$ entspricht dem Addieren von $\lambda$-mal Spalte bzw. Zeile $j$ auf Spalte bzw. Zeile $i$. + \item $C2$ entspricht dem Tauschen von Spalte bzw. Zeile $i$ mit Spalte bzw. Zeile $j$. + \item $C3$ entspricht dem Multiplizieren von Spalte bzw. Zeile $i$ mit $\lambda$. + \end{itemize} +\end{defi} + +\begin{example}{Elementarmatrizen} + Sei + $$ + A = \vektor{1 & 0 \\ -5 & 2} + $$ + Bestimmen Sie Elementarmatrizen $M_1$ und $M_2$ mit $M_1M_2A = E$. + + \exampleseparator + + Es gilt: + $$ + \begin{sysmatrix}{cc|cc} + 1 & 0 & 1 & 0 \\ + -5 & 2 & 0 & 1 + \end{sysmatrix} + \sim + \begin{sysmatrix}{cc|cc} + 1 & 0 & 1 & 0 \\ + 0 & 2 & 5 & 1 + \end{sysmatrix} + \sim + \begin{sysmatrix}{cc|cc} + 1 & 0 & 1 & 0 \\ + 0 & 1 & \frac{5}{2} & \frac{1}{2} + \end{sysmatrix} + $$ + Damit gilt: + $$ + A^{-1} = \vektor{1 & 0 \\ \frac{5}{2} & \frac{1}{2}} =\footnote{Das wird aus dem Kontext ersichtlich: Für $A^{-1}$ wird zuerst fünfmal \Rnum{1} auf \Rnum{2} addiert und anschließend wird \Rnum{2} mit $\frac{1}{2}$ skaliert.} \vektor{1 & 0 \\ 0 & \frac{1}{2}} \cdot \vektor{1 & 0 \\ 5 & 1} + $$ + und schlussendlich: + $$ + A^{-1} \cdot A = \vektor{1 & 0 \\ 0 & \frac{1}{2}} \cdot \vektor{1 & 0 \\ 5 & 1} \cdot A = M_1 M_2 A + $$\qed +\end{example} + +\begin{defi}{Eigenschaften der Determinante} + Für $A, B \in K^{n\times n}$ gilt: + \begin{itemize} + \item $S1$ und $Z1$ ändern die Determinante einer Matrix nicht. ($\det(C1) = 1$) + \item $S2$ und $Z2$ kehren das Vorzeichen der Determinante um. ($\det(C2) = -1$) + \item $S3$ und $Z3$ vervielfachen den Wert der Determinante um den Faktor $\lambda$. ($\det(C3) = \lambda$) + \end{itemize} + + \begin{itemize} + \item $\det(A) = \det(A^T)$ + \item Besitzt $A$ zwei gleiche Spalten bzw. Zeilen, so gilt $\det(A) = 0$. + \item $A$ invertierbar $\iff \det(A) \neq 0$ + \item $\det(AB) = \det(A)\det(B)$ + \item $A$ invertierbar $\implies \det(A^{-1}) = (\det(A))^{-1}$ + \end{itemize} +\end{defi} + +\subsection{Verfahren zur Berechnung der Determinante} + +\begin{defi}{Laplacescher Entwicklungssatz} + Für $A \in K^{n\times n}$ bezeichne $A_{ij}$ die Matrix in $K^{(n-1)\times (n-1)}$, die durch Streichen der $i$-ten Zeile und der $j$-ten Spalte aus $A$ hervorgeht. + + Es sei $A = (a_{ij}) \in K^{n\times n}$ und $j$ mit $1 \leq j \leq n$. + Dann gilt: + $$ + \det(A) = \sum^n_{i=1} (-1)^{i+j} a_{ij}\det(A_{ij}) + $$ + Man spricht von der \emph{Entwicklung der Determinante nach der j-ten Spalte}. + Ebenso ist eine \emph{Entwicklung der Determinante nach der i-ten Zeile} möglich: + $$ + \det(A) = \sum^n_{j=1} (-1)^{i+j} a_{ij}\det(A_{ij}) + $$ +\end{defi} + +\begin{defi}{Determinante mit Gauß-Algorithmus} + Zur Berechnung mit dem Gauß-Algorithmus bringt man die gegebene Matrix $A$ mittels äquivalenter Zeilen- oder Spaltenumformungen $Z1$-$Z3$ bzw. $S1$-$S3$ auf Stufenform $B$ und errechnet dann nach Folgerung $\det(A)$ leicht als Produkt der Hauptdiagonalelelemente von $B$, multipliziert mit den Determinanten der genutzten Elementarmatrizen. +\end{defi} + +\begin{example}{Determinante mit Gauß-Algorithmus} + Berechnen Sie die Determinante von $A = \vektor{4 & 5 & 6 \\ 2 & -2 & -1 \\ 0 & 1 & -3}$ mit Hilfe des Gauß-Algorithmus. + + \exampleseparator + + $$ + \vektor{4 & 5 & 6 \\ 2 & -2 & -1 \\ 0 & 1 & -3} + \underset{}{\xrightarrow{\text{\Rnum{2}: \Rnum{2} + 2 \Rnum{3}}}} + \vektor{4 & 5 & 6 \\ 2 & 0 & -7 \\ 0 & 1 & -3} + \underset{}{\xrightarrow{\text{\Rnum{1}: \Rnum{1} - 5 \Rnum{3}}}} + \vektor{4 & 0 & 21 \\ 2 & 0 & -7 \\ 0 & 1 & -3} + \underset{}{\xrightarrow{\text{\Rnum{1}: \Rnum{1} - 2 \Rnum{2}}}} + \vektor{0 & 0 & 35 \\ 2 & 0 & -7 \\ 0 & 1 & -3} + $$ + $$ + \vektor{0 & 0 & 35 \\ 2 & 0 & -7 \\ 0 & 1 & -3} + \underset{\nicefrac{1}{35} \cdot \det(A)}{\xrightarrow{\text{\Rnum{1}: \Rnum{1} - 2 \Rnum{2}}}} + \vektor{0 & 0 & 1 \\ 2 & 0 & -7 \\ 0 & 1 & -3} + \underset{}{\xrightarrow{\text{(\Rnum{2}: \Rnum{2} + 7 \Rnum{1})} \ \circ \ \text{(\Rnum{3}: \Rnum{3} + 3 \Rnum{1})}}} + \vektor{0 & 0 & 1 \\ 2 & 0 & 0 \\ 0 & 1 & 0} + $$ + $$ + \vektor{0 & 0 & 1 \\ 2 & 0 & 0 \\ 0 & 1 & 0} + \underset{(-1)\cdot(-1)\cdot \det A}{\xrightarrow{\text{(\Rnum{1}$\,\leftrightarrow\,$\Rnum{3})} \ \circ \ \text{(\Rnum{1}$\,\leftrightarrow\,$\Rnum{2})}}} + \vektor{2 & 0 & 0 \\ 0 & 1 & 0 \\ 0 & 0 & 1} + $$ + Damit gilt: + $$ + \det A = (-1) \cdot (-1) \cdot 35 \cdot \dvektor{2 & 0 & 0 \\ 0 & 1 & 0 \\ 0 & 0 & 1} = 35 \cdot 2 = 70 + $$\qed +\end{example} + +\begin{bonus}{Tipps zur Determinantenberechnung} + \begin{enumerate} + \item Für $(2\times 2)$- und $(3\times 3)$-Matrizen empfiehlt sich die Sarrus-Regel.\footnote{Siehe Lineare Algebra 1} + \item Die Laplace-Entwicklung ist dann vorzuziehen, wenn in einer Spalte oder Zeile nur wenige Nicht-Null-Einträge vorhanden sind, weil bei einer Entwicklung nach dieser Zeile bzw. Spalte die meisten Summanden erst gar nicht berechnet werden müssen. + \item Es können zur Berechnung der Determinanten mehrere Verfahren kombiniert werden, z.B. $(4\times 4)$-Matrizen zuerst nach Laplace entwickeln und die dann entstehenden Determinanten von $(3\times 3)$-Matrizen direkt mit der Sarrus-Regel berechnen. + \end{enumerate} +\end{bonus} + +\begin{bonus}{Inverse einer $(2\times 2)$-Matrix} + Sei $A$ definiert als $A = \vektor{a & b \\ c & d}$. Dann gilt: + $$ + A^{-1} = \frac{1}{\det(A)} \vektor{d & -b \\ -c & a} = \frac{1}{ad - bc} \vektor{d & -b \\ -c & a} + $$ +\end{bonus} + +\section{Lineare Gleichungssysteme} + +\subsection{Lösbarkeit eines linearen Gleichungssystems} + +\begin{defi}{Lineares Gleichungssystem} + Seien $A = (a_{ij}) \in K^{m\times n}$ und $b = \vektor{b_1 & \ldots & b_m}^T$. + Dann heißt + $$ + \begin{aligned} + & a_{11}x_1 & & + \ \ldots \ + & & a_{1n}x_n & & = & & b_1 \\ + & \ldots \\ + & a_{m1}x_1 & & + \ \ldots \ + & & a_{mn}x_n & & = & & b_m + \end{aligned} + $$ + \emph{lineares Gleichungssystem} bzgl. $(x_1, \ldots, x_n)$ mit Koeffizienten $a_{ij}$ in $K$. + Hierbei sind $x_1, \ldots, x_n$ die \emph{Unbekannten} des Systems. + + Für $b = 0_{m1}$ nennt man das lineare Gleichungssystem \emph{homogen}, sonst \emph{inhomogen}. + + Jedes lineare Gleichungssystem kann in der Form $Ax = b$ geschrieben werden. +\end{defi} + +\begin{defi}{Lösungsmenge} + Die \emph{Lösungsmenge} $L(A, b)$ des zu $(A, b)$ gehörigen Gleichungssystems ist festgelegt durch + $$ + L(A, b) := \{x \in K^n \mid Ax = b\} + $$ +\end{defi} + +\begin{defi}{Spaltenrang} + Die lineare Abbildung $L_A : K^n \to K^m$ sei gegeben durch $L_A(x) := Ax$. Dann sei $\rg(A) := \rg(L_A)$. + Der \emph{Spaltenrang} $\rg_S(A)$ sei die maximale Anzahl linear unabhängiger Spaltenvektoren von $A$. + + Es gilt $\rg(A) = \rg_S(A)$. +\end{defi} + +\begin{defi}{Zeilenrang} + Für $A \in K^{m\times n}$ sei die maximale Anzahl linear unabhängiger Zeilenvektoren von $A$ der \emph{Zeilenrang} $\rg_Z(A)$ von $A$. + + Es gilt: + $$ + \rg(A) = \rg_S(A) = \rg_Z(A) + $$ +\end{defi} + +\begin{defi}{Lösbarkeit von linearen Gleichungssystemen} + Das lineare Gleichungssystem $Ax = b$ ist genau dann lösbar, wenn gilt: + $$ + \rg(a_1, \ldots, a_n) = \rg(a_1, \ldots, a_n, b) + $$ + Kürzer schreibt man $\rg(A) = \rg(A, b)$. + + $Ax = b$ ist also genau dann eindeutig lösbar, falls $\ker(A) = \{0\} \iff \rg(A) = \rg(A, b) = n$. +\end{defi} + +\begin{bonus}{Äquivalente Bedingungen für eindeutige Lösbarkeit} + Sei $K \in \{\R, \C\}$. + Für $A \in K^{n\times n}$ und die dadurch gegebene lineare Abbildung $L_A$ sind folgende Bedingungen äquivalent: + \begin{enumerate} + \item $A$ ist invertierbar. + \item $Ax = 0$ hat nur die triviale Lösung $x=0$. + \item Durch Zeilen- und Spaltenumformungen kann $A$ auf die Einheitsmatrix transformiert werden. + \item $A$ ist darstellbar als Produkt von Elementarmatrizen. + \item $Ax = b$ besitzt für jedes $b \in K^n$ mindestens eine Lösung. + \item $Ax = b$ hat genau eine Lösung für jedes $b \in K^n$. + \item $\det(A) \neq 0$ + \item $\im(A) = K^n$ + \item $L_A$ ist bijektiv. + \item Die Spaltenvektoren von $A$ sind linear unabhängig. + \item Die Zeilenvektoren von $A$ sind linear unabhängig. + \item Die Spaltenvektoren von $A$ bilden eine Basis von $K^n$. + \item Die Zeilenvektoren von $A$ bilden eine Basis von $K^n$. + \item $\rg(A)=n$ + \item $\ker(L_A) = \{0\}$ + \item $(\ker(L_A))^\perp = K^n$ + \item Das orthogonale Komplement des von den Zeilen von $A$ aufgespannten Raums ist $\{0\}$. + \item $A^TA$ ist invertierbar. + \end{enumerate} +\end{bonus} + +\begin{defi}{Allgemeine Lösung eines linearen Gleichungssystems} + Sei $x_s \in K^n$ eine (spezielle) Lösung von $Ax = b$. + Dann gilt: + $$ + L(A, b) = x_s + \ker(A) = \{x_s + x \mid x \in \ker(A)\} + $$ + bzw., wenn $(v_1, \ldots, v_r)$ eine Basis von $\ker(A)$ ist: + $$ + L(A, b) = \{x + \lambda_1 v_1 + \ldots + \lambda_rv_r \mid \lambda_i \in K\} + $$ +\end{defi} + +\begin{example}{Allgemeine Lösung eines linearen Gleichungssystems} + Finden Sie die Lösung des linearen Gleichungssystems + $$ + \vektor{-1 & 1 & 0 \\ 0 & 1 & 1}x = \vektor{0 \\ 2} + $$ + mit Hilfe folgender Schritte: + \begin{enumerate}[a)] + \item Bestimmen Sie den Kern der Abbildungsmatrix. + \item Erraten Sie eine spezielle Lösung. + \item Bestimmen Sie die allgemeine Lösung. + \end{enumerate} + + \exampleseparator + + \begin{enumerate}[a)] + \item $$ + \begin{sysmatrix}{rrr|r} + -1 & 1 & 0 & 0 \\ + 0 & 1 & 1 & 0 + \end{sysmatrix} + \quad \implies \quad + \ker \vektor{-1 & 1 & 0 \\ 0 & 1 & 1} = \scalarprod{\vektor{1 \\ 1 \\ -1}} + $$\qed + \item $$ + x = \vektor{0\\0\\2} \quad \implies \quad \vektor{-1 & 1 & 0 \\ 0 & 1 & 1}\cdot \vektor{0\\0\\2} = \vektor{0 \\ 2} + $$\qed + \item Es gilt: + $$ + L \left({\vektor{-1 & 1 & 0 \\ 0 & 1 & 1}, \vektor{0 \\ 2}} \right) = \vektor{0\\0\\2} + \ker\vektor{-1 & 1 & 0 \\ 0 & 1 & 1} = \vektor{0\\0\\2} + \lambda \cdot \vektor{1 \\ 1 \\ -1}, \quad \lambda \in \R + $$\qed + \end{enumerate} +\end{example} + +\begin{defi}{Cramersche Regel} + Es seien $A = \vektor{a_1 & \ldots & a_n} \in K^{n\times n}$ und $x, b \in K^n$ sowie $Ax=b$ ein lineares Gleichungssystem, und es gelte $\det(A) \neq 0$. + Seien + $$ + A_i := \vektor{a_1 & \ldots & a_{i-1} & b & a_{i+1} & \ldots & a_n}, 1 \leq i \leq n + $$ + Dann gilt: + $$ + x_i = \frac{\det(A_i)}{\det(A)} + $$ +\end{defi} + +\begin{example}{Cramersche Regel} + In der Elektrotechnik ergeben sich eine Widerstandsmatrix $R$ und ein Quellspannungsvektor $U$: + $$ + R = \vektor{1 & 3 & 0 \\ 1 & 4 & 1 \\ 2 & 1 & 1}, \quad U = \vektor{5 \\ 9 \\ 8}. + $$ + Gesucht ist der Stromvektor $I$, der sich durch Lösen des linearen Gleichungssystems + $$ + R \cdot I = U + $$ + ergibt. + Bestimmen Sie die Lösung mithilfe der Cramerschen Regel. + + \exampleseparator + + Es gilt: + $$ + \vektor{1 & 3 & 0 \\ 1 & 4 & 1 \\ 2 & 1 & 1} \vektor{i_1 \\ i_2 \\ i_3} = \vektor{5 \\ 9 \\ 8} + $$ + + Nach der Cramerschen Regel gilt:\footnote{$\abs{R} = -1 \cdot (1-6) + 1 \cdot (4-3) = 6$} + $$ + i_1 = \frac{\dvektor{5 & 3 & 0 \\ 9 & 4 & 1 \\ 8 & 1 & 1}}{\abs{R}} = \frac{-1 \cdot (5-24) + 1 \cdot (20-27)}{6} = \frac{12}{6} = 2 + $$ + $$ + i_2 = \frac{\dvektor{1 & 5 & 0 \\ 1 & 9 & 1 \\ 2 & 8 & 1}}{\abs{R}} = \frac{-1 \cdot (8-10) + 1 \cdot (9-5)}{6} = \frac{6}{6} = 1 + $$ + $$ + i_3 = \frac{\dvektor{1 & 3 & 5 \\ 1 & 4 & 9 \\ 2 & 1 & 8}}{\abs{R}} = \frac{32+54+5-40-9-24}{6} = \frac{18}{6} = 3 + $$ + + Damit ist der Stromvektor $I$ gegeben mit $I = \vektor{2 & 1 & 3}^T$.\qed +\end{example} + +\subsection{Über- und unterbestimmte lineare Gleichungssysteme} + +\begin{defi}{Normalgleichung} + Sei $p_A(b)$ die Projektion eines Vektors $b \in \R^m$ auf den von den Vektoren $A = \vektor{a_1 & \ldots & a_n} \in \R^{m\times n}$ aufgespannten Unterraum $U$, also das Bild von $A$. + + Damit existiert ein $x \in \R^n$ mit + $$ + p_A(b) = \sum^n_{k=1} x_ka_k = Ax + $$ + Dann gilt + $$ + b - p_A(b) \iff \ldots \iff A^TAx = A^Tb + $$ + + Die Gleichungen $A^TAx = A^Tb$ heißen \emph{Normalgleichungen}. + + Die Normalgleichungen sind für jede relle Matrix $A \in \R^{m\times n}$ lösbar. + +\end{defi} + +\begin{defi}{Verallgemeinerte Inverse} + Gegeben ist ein lineares Gleichungssystem $Ax=b$ mit $A \in \R^{m\times n}$, $x \in \R^n$, $b \in \R^m$. + + Im Fall $\rg(A) = n$ (voller Spaltenrang) existiert mit + $$ + x = (A^TA)^{-1}A^Tb + $$ + eine eindeutige Lösung. + In diesem Fall heißt $(A^TA)^{-1}A^T$ \emph{verallgemeinerte Inverse} von $A$. + + Im Fall $\rg(A) = m$ (voller Zeilenrang) existiert mit + $$ + x = A^T(AA^T)^{-1}b + $$ + eine eindeutige Lösung. + In diesem Fall heißt $A^T(AA^T)^{-1}$ \emph{verallgemeinerte Inverse} von $A$. +\end{defi} + +\begin{algo}{Lösen von überbestimmten Gleichungssystemen (Methode der kleinsten Quadrate)} + Gegeben ist das \emph{überbestimmte} Gleichungssystem + $$ + Ax = b, \quad A \in \R^{m\times n}, \, b\in \R^m, \, m \geq n + $$ + Im Fall $\rg(A) = n$ (voller Spaltenrang) gilt mithilfe der verallgemeinerten Inverse für + $$ + x_s = (A^TA)^{-1}A^Tb + $$ + dass + $$ + \norm{b-Ax_s} = \min_{z\in\R^n} \norm{b-Az} + $$ + + Der Vektor $x_s$ heißt \emph{Näherungslösung nach der Methode der kleinsten Quadrate}. +\end{algo} + +\begin{example}{Methode der kleinsten Quadrate} + Eine Messreihe ergibt zu den Zeiten $t = 1,2,3,4,5$ in Sekunden folgende Temperaturwerte: + + \begin{center} + \begin{tabular}{l | CCCCC} + $t$ Sekunden & 1 & 2 & 3 & 4 & 5 \\ + \hline + $y(t)\si{\celsius}$ & 0.9 & 5.8 & 11.4 & 12.1 & 12.9 \\ + \end{tabular} + \end{center} + + Stellen Sie das überbestimmte Gleichungssystem für die unbekannten Parameter $a$ und $b$ auf und bestimmen Sie diese nach der Methode der kleinsten Quadrate, wenn folgende Beziehung zwischen $y$ und $t$ gilt: + $$ + y(t) = a \cdot t + b \cdot \sin\left( -t \cdot \frac{\pi}{2} \right) + $$ + \exampleseparator + + \begin{center} + \begin{tikzpicture}[scale=1] + \begin{axis}[ + %view={45}{15}, + width=15cm, + unit vector ratio*=1 1, + axis lines = middle, + grid=major, + ymin=-.5, + ymax=14, + xmin=0, + xmax=7, + %zmin=-1, + %zmax=10, + xlabel = $x$, + ylabel = $y$, + %zlabel = $z$, + %xtick style={draw=none}, + %ytick style={draw=none}, + %ztick style={draw=none}, + xtick distance={1}, + ytick distance={1}, + %ztick distance={1}, + %xticklabels=\empty, + %yticklabels=\empty, + %zticklabels=\empty, + disabledatascaling, + ] + + \addplot[domain=0:6, samples=100, color=red]{3.02308 * x - 2.22308 * sin(deg(x * pi/2))}; + + \node[label={315:{(1,0.9)}},circle,fill,inner sep=1pt] at (axis cs:1,0.9) {}; + \node[label={135:{(2,5.8)}},circle,fill,inner sep=1pt] at (axis cs:2,5.8) {}; + \node[label={135:{(3,11.4)}},circle,fill,inner sep=1pt] at (axis cs:3,11.4) {}; + \node[label={135:{(4,12.1)}},circle,fill,inner sep=1pt] at (axis cs:4,12.1) {}; + \node[label={315:{(5,12.9)}},circle,fill,inner sep=1pt] at (axis cs:5,12.9) {}; + \end{axis} + \end{tikzpicture} + \end{center} +\end{example} + +\begin{example}{Methode der kleinsten Quadrate (Fortsetzung)} + Mit den gegebenen Daten erhalten wir folgendes LGS: + $$ + Ax = b \quad \iff \quad \vektor{1 & -\sin \frac{\pi}{2} \\ 2 & -\sin \pi \\ 3 & -\sin \frac{3\pi}{2} \\ 4 & -\sin 2 \pi \\ 5 & -\sin \frac{5\pi}{2}}\vektor{a \\ b} = \vektor{0.9 \\ 5.8 \\ 11.4 \\ 12.1 \\ 12.9} \quad \iff \quad \vektor{1 & -1 \\ 2 & 0 \\ 3 & 1 \\ 4 & 0 \\ 5 & -1}\vektor{a \\ b} = \vektor{0.9 \\ 5.8 \\ 11.4 \\ 12.1 \\ 12.9} + $$ + mit + $$ + \rg(A) = 2 = n \quad \implies \quad A^TAx = A^Tb \quad \iff \quad x = \left(A^T A\right)^{-1} A^T b + $$ + Dann gilt nach der Methode der kleinsten Quadrate: + $$ + \begin{aligned} + x_s \quad = \quad & \left(A^T A\right)^{-1} A^T b \\ + = \quad & \left(\vektor{1 & 2 & 3 & 4 & 5 \\ -1 & 0 & 1 & 0 & -1} \vektor{1 & -1 \\ 2 & 0 \\ 3 & 1 \\ 4 & 0 \\ 5 & -1}\right)^{-1} \vektor{1 & 2 & 3 & 4 & 5 \\ -1 & 0 & 1 & 0 & -1} \vektor{0.9 \\ 5.8 \\ 11.4 \\ 12.1 \\ 12.9} \\ + = \quad & \vektor{55 & -3 \\ -3 & 3}^{-1} \vektor{1 & 2 & 3 & 4 & 5 \\ -1 & 0 & 1 & 0 & -1} \vektor{0.9 \\ 5.8 \\ 11.4 \\ 12.1 \\ 12.9} \\ + = \quad & \frac{1}{156}\vektor{3 & 3 \\ 3 & 55} \vektor{1 & 2 & 3 & 4 & 5 \\ -1 & 0 & 1 & 0 & -1} \vektor{0.9 \\ 5.8 \\ 11.4 \\ 12.1 \\ 12.9} \\ + = \quad & \frac{1}{156}\vektor{0 & 6 & 12 & 12 & 12 \\ -52 & 6 & 64 & 12 & -40} \vektor{0.9 \\ 5.8 \\ 11.4 \\ 12.1 \\ 12.9} \\ + = \quad & \frac{1}{156}\vektor{471.6 \\ 346.8} = \vektor{3.02308 \\ 2.22308} = \vektor{a \\ b} + \end{aligned} + $$ + + Damit gilt insgesamt: + $$ + y(t) = a \cdot t + b \cdot \sin\left( -t \cdot \frac{\pi}{2} \right) = 3.02308 \cdot t + 2.22308 \cdot \sin\left( -t \cdot \frac{\pi}{2} \right) + $$\qed +\end{example} + + +\begin{algo}{Lösen von unterbestimmten Gleichungssystemen} + Gegeben ist das \emph{unterbestimmte} Gleichungssystem + $$ + Ax = b, \quad A \in \R^{m\times n}, \, b\in \R^m, \, m \leq n + $$ + Im Fall $\rg(A) = m$ (voller Zeilenrang) gilt mithilfe der verallgemeinerten Inverse für + $$ + x_s = A^T(AA^T)^{-1}b + $$ + dass + $$ + \norm{x_s} = \min_{Ax=b} \norm{x} \quad \land \quad x_s \perp \ker(A) + $$ + + Der Vektor $x_s$ ist eine \emph{eindeutige Lösung mit minimaler Norm}. +\end{algo} + +\begin{example}{Lösen von unterbestimmten Gleichungssystemen} + Die Punkte $A(6;0;0)$, $B(2;1;3)$ und $C(-2;-2;2)$ liegen in einer Ebene $E$. + \begin{enumerate}[a)] + \item Stellen Sie die Hessesche Normalform der Ebene auf. + Wie groß ist der Abstand der Ebene zum Ursprung? + \item Welcher Punkt in der Ebene hat den kleinsten Abstand zum Ursprung? + Stellen Sie dazu das zugehörige unterbestimmte LGS auf und finden Sie die Lösung mit Hilfe der verallgemeinerten Inverse. + \end{enumerate} + + \exampleseparator + + \begin{enumerate}[a)] + \item Wir wählen uns $\vec{a}$ (Ortsvektor von $A$) als Stützvektor und die Vektoren $v = \vec{b} - \vec{a}$ und $w = \vec{c} - \vec{a}$ als Richtungsvektoren der Ebene. + Dann gilt: + $$ + v = \vektor{2\\1\\3} - \vektor{6\\0\\0} = \vektor{-4\\1\\3}, \qquad w = \vektor{-2\\-2\\2} - \vektor{6\\0\\0} = \vektor{-8\\-2\\2} + $$ + $$ + n = \frac{v \times w}{\abs{v \times w}} = \frac{1}{\abs{v \times w}} \vektor{8 \\ -16 \\ 16} = \frac{1}{24} \vektor{8 \\ -16 \\ 16} = \vektor{\nicefrac{1}{3} \\ -\nicefrac{2}{3} \\ \nicefrac{2}{3}} + $$ + + Mit $n$ als (normierten) Normalenvektor erhalten wir dann die Hessesche Normalform der Ebene mit + $$ + E: \scalarprod{x,n} = \scalarprod{\vec{a}, n} \quad \iff \quad \frac{1}{3} \cdot x - \frac{2}{3} \cdot y + \frac{2}{3} \cdot z = 2 + $$ + + Setzen wir den Nullpunkt in die Ebene ein, erhalten wir den Abstand mit $d = 2$.\qed + \item Mit der Ebenengleichung + $$ + E: \frac{1}{3} \cdot x - \frac{2}{3} \cdot y + \frac{2}{3} \cdot z = 2 + $$ + können wir folgendes unterbestimmte LGS aufstellen: + $$ + Ax = b \quad \iff \quad \vektor{\nicefrac{1}{3} & -\nicefrac{2}{3} & \nicefrac{2}{3}} \vektor{x \\ y \\ z} = \vektor{2} + $$ + mit + $$ + \rg(A) = 1 = m \quad \implies \quad x = A^T \left(AA^T\right)^{-1}b + $$ + + Dann gilt: + $$ + \begin{aligned} + x_s \quad = \quad & A^T \left(AA^T\right)^{-1}b \\ + = \quad & \vektor{\nicefrac{1}{3} \\ -\nicefrac{2}{3} \\ \nicefrac{2}{3}} \left( \vektor{\nicefrac{1}{3} & -\nicefrac{2}{3} & \nicefrac{2}{3}} \vektor{\nicefrac{1}{3} \\ -\nicefrac{2}{3} \\ \nicefrac{2}{3}} \right)^{-1} \cdot 2 \\ + = \quad & \vektor{\nicefrac{2}{3} \\ -\nicefrac{4}{3} \\ \nicefrac{4}{3}} = \vektor{x\\y\\z} + \end{aligned} + $$ + Damit ist dann $\vektor{\nicefrac{2}{3} & -\nicefrac{4}{3} & \nicefrac{4}{3}}^T$ der gesuchte Punkt in der Ebene mit dem geringsten Abstand.\qed + \end{enumerate} +\end{example} +\section{Geometrie linearer Abbildungen} + +\subsection{Orthogonale Abbildungen und Matrizen} + +\begin{defi}{Isometrie} + Eine \emph{Isometrie} ist eine lineare Abbildung, die zwei metrische Räume aufeinander abbildet und dabei die euklidische Länge eines Vektors erhält. + + Man spricht auch von einer abstandserhaltenden Abbildung. + + Sei $f : \R^n \to \R^n$ beliebig. Dann sind äquivalent: + \begin{enumerate} + \item $\forall x, y \in \R^n : \scalarprod{f(x), f(y)} = \scalarprod{x, y}$ + \item $f$ ist eine winkelerhaltende Isometrie. + \end{enumerate} +\end{defi} + +\begin{defi}{Orthogonalmatrix} + Eine Matrix $A\in \R^{n\times n}$ heißt \emph{orthogonal}, wenn ihre Spaltenvektoren eine Orthonormalbasis bilden. + + Die Menge aller orthogonalen Matrizen in $\R^{n\times n}$ heiße $O(n)$. + + Es gilt: + \begin{itemize} + \item $A \in O(n) \implies \abs{\det(A)} = 1$ + \end{itemize} + + Es sind äquivalent: + \begin{enumerate} + \item $A \in O(n)$ + \item $A$ ist invertierbar, und es gilt $A^{-1} = A^T$ + \item $A^T \in O(n)$ + \end{enumerate} +\end{defi} + +\begin{example}{Orthogonalmatrix} + Zeigen Sie, dass die Matrix + $$ + Q = \vektor{ + \cos \beta & -\sin\beta & 0 \\ + \cos \alpha \sin\beta & \cos\alpha \cos\beta & -\sin\alpha \\ + \sin\alpha \sin\beta & \sin\alpha \cos\beta & \cos\alpha + } + $$ + eine Orthogonalmatrix ist und bestimmen Sie ihre Inverse. + + \exampleseparator + + Genau dann, wenn $Q$ eine Orthogonalmatrix ist, ist $QQ^T = I$ und damit auch $Q^T = Q^{-1}$: + $$ + \begin{aligned} + QQ^T = \quad & + \vektor{ \cos \beta & -\sin\beta & 0 \\ \cos \alpha \sin\beta & \cos\alpha \cos\beta & -\sin\alpha \\ \sin\alpha \sin\beta & \sin\alpha \cos\beta & \cos\alpha } + \vektor{ \cos\beta & \cos\alpha \sin\beta & \sin\alpha \sin\beta \\ -\sin\beta & \cos\alpha \cos\beta & \sin\alpha \cos\beta \\ 0 & -\sin\alpha & \cos\alpha} \\ + = \quad & \vektor{\cos^2\beta + \sin^2\beta & 0 & 0 \\ 0 & \cos^2\alpha \left( \sin^2\beta + \cos^2\beta \right) + \sin^2\alpha & 0 \\ 0 & 0 & \sin^2\alpha \left( \sin^2\beta + \cos^2\beta \right) + \cos^2\alpha} \\ + = \quad & \vektor{\cos^2\beta + \sin^2\beta & 0 & 0 \\ 0 & \cos^2\alpha + \sin^2\alpha & 0 \\ 0 & 0 & \sin^2\alpha + \cos^2\alpha} \\ + = \quad & \vektor{1 & 0 & 0 \\ 0 & 1 & 0 \\ 0 & 0 & 1} + \end{aligned} + $$ + + Damit ist $Q$ eine Orthogonalmatrix und $Q^T$ die Inverse von $Q$.\qed +\end{example} + +\begin{algo}{QR-Zerlegung} + Sei $A = \vektor{a_1 & \ldots & a_n} \in \R^{m\times n}$ und $\rg(A) = n$. + Dann gibt es eine in den Spalten orthogonale Matrix $Q \in \R^{m\times n}$ und eine obere Dreiecksmatrix $R \in \R^{n\times n}$ mit $A = QR$. + Hierbei können die Spalten von $Q$ mithilfe des Verfahrens von Gram-Schmidt aus den Spalten von $A$ erzeugt werden, und es gilt $\rg(R) = n$. + + Mit $Q = \vektor{q_1 & \ldots & q_n}$ und $R = (\varrho_{ij})$ ergibt sich $R$ durch Lösen der $n$ linearen Gleichungen + $$ + \vektor{a_1 & \ldots & a_n} = \vektor{q_1 & \ldots & q_n} \vektor{ \varrho_{11} & \varrho_{12} & \ldots & \varrho_{1n} \\ & \varrho_{22} & \ldots & \varrho_{2n} \\ & & \ddots & \vdots \\ & & & \varrho_{nn}} + $$ + Hierbei kann bei $n > 1$ über die per Gram-Schmidt generierten Zwischenrechnungen durch Koeffizientenvergleich gelöst werden. +\end{algo} + +\begin{example}{QR-Zerlegung} + Wie lautet die QR-Zerlegung von + $$ + A = \vektor{3 & 1 \\ 4 & 5}? + $$ + Lösen Sie anschließend mit dieser Zerlegung das lineare Gleichungssystem $Ax = b$ mit $b = \vektor{2 & 3}^T$. + + \exampleseparator + + Wir wenden das Gram-Schmidt-Verfahren auf die Spaltenvektoren an:\footnote{Wir sehen, dass die Vektoren orthogonal sind.} + $$ + \begin{aligned} + v_1 \quad = \quad & \vektor{3 \\4} \\ + w_1 \quad = \quad & \frac{v_1}{\norm{v_1}} = \frac{1}{5}\vektor{3 \\4} = \vektor{\nicefrac{3}{5}\\\nicefrac{4}{5}} \\ + v_2 \quad = \quad & \vektor{1 \\5} \\ + r_2 \quad = \quad & v_2 - \scalarprod{v_2, w_1}w_1 \\ + = \quad & \vektor{1 \\ 5} - \left( \frac{1}{5} \right)^2\scalarprod{\vektor{1 \\ 5}, \vektor{3 \\ 4}}\vektor{3 \\ 4} = \vektor{-\nicefrac{44}{25} \\ \nicefrac{33}{25}}\\ + w_2 \quad = \quad & \frac{r_2}{\norm{r_2}} = \frac{5}{11} \vektor{-\nicefrac{44}{25} \\ \nicefrac{33}{25}} = \vektor{-\nicefrac{4}{5} \\ \nicefrac{3}{5}} + \end{aligned} + $$ + + Damit erhalten wir $Q$ mit + $$ + Q = \vektor{w_1 & w_2} = \vektor{\nicefrac{3}{5} & -\nicefrac{4}{5} \\ \nicefrac{4}{5} & \nicefrac{3}{5}} = \frac{1}{5} \vektor{3 & -4 \\ 4 & 3} + $$ + Da $A$ quadratisch ist\footnote{\ldots und damit auch $Q$}, gilt: + $$ + QR = A \quad \iff \quad R = Q^TA + $$ + womit $R$ gegeben ist, mit + $$ + R = Q^TA = \frac{1}{5}\vektor{3 & 4 \\ -4 & 3} \vektor{3 & 1 \\ 4 & 5} = \frac{1}{5} \vektor{25 & 23 \\ 0 & 11} + $$ +\end{example} + +\begin{example}{QR-Zerlegung (Fortsetzung)} + Für das gegebene lineare Gleichungssystem $Ax = b$ ergibt sich dann: + $$ + Ax = b \quad \iff \quad QRx = b \quad \iff \quad Rx = Q^Tb + $$ + $$ + \begin{aligned} + \iff \quad & \frac{1}{5} \vektor{25 & 23 \\ 0 & 11}x = \frac{1}{5}\vektor{3 & 4 \\ -4 & 3}\vektor{2\\3} \\ + \iff \quad & \vektor{25 & 23 \\ 0 & 11}x = \vektor{18 \\ 1} \\ + \implies \quad & 11x_2 = 1 \quad \land \quad 25x_1 + 23x_2 = 18 \\ + \iff \quad & x_2 = \frac{1}{11} \quad \land \quad x_1 = \frac{7}{11} \\ + \implies \quad & x = \vektor{\nicefrac{7}{11} \\ \nicefrac{1}{11}} + \end{aligned} + $$\qed +\end{example} + +\subsection{Eigenwerte und Eigenvektoren} + +\begin{defi}{Eigenwert, Eigenvektor und Eigenraum} + Existiert für einen Endomorphismus $f$ ein $\lambda \in \C$ und $v\in V \setminus \{0\}$ mit + $$ + f(v) = \lambda v + $$ + dann heißt $v$ \emph{Eigenvektor} von $f$ zum \emph{Eigenwert} $\lambda$. + + Sei $\lambda$ ein Eigenwert von $f$ und $v_1, \ldots, v_k$ Eigenvektoren von $f$ zu $\lambda$. + Dann ist auch $v \in L(v_1, \ldots, v_k) \setminus \{0\}$ ein Eigenvektor von $f$ zu $\lambda$. + + Für $\lambda \in \C$ ist $\Eig(f;\lambda) := \{v \in V \mid f(v) = \lambda v\}$, der \emph{Eigenraum} von $f$ zu $\lambda$, ein Untervektorraum von $V$. + + Es gilt: + \begin{itemize} + \item Für $\lambda \neq \gamma$ gilt $\Eig(f;\lambda) \cap \Eig(f;\gamma) = \{0\}$. + \item Eigenvektoren zu unterschiedlichen Eigenwerten sind linear unabhängig. + \item Die Eigenwerte einer Dreiecksmatrix sind die Werte auf der Hauptdiagonalen. + \item Eigenwerte reeller symmetrischer Matrizen sind immer reell. + \item Zu jedem Eigenwert einer reellen symmetrischen Matrix existieren reelle Eigenvektoren. + \item Sei $A \in \R^{n\times n}$ symmetrisch, $\lambda \neq \mu$ zwei Eigenwerte von $A$ mit Eigenvektoren $v$ bzw. $w$. Dann gilt $v \perp w$. + \end{itemize} + +\end{defi} + +\begin{defi}{Charakteristisches Polynom} + Sei $A \in \C^{n\times n}$. + Dann ist die Funktion + $$ + \chi_A(\lambda) := \det(A-\lambda E) + $$ + ein Polynom mit $\deg(\chi_A) = n$ und heißt \emph{charakteristisches Polynom}. + + Es gilt: + \begin{itemize} + \item $\lambda \in \C$ ist Eigenwert von $A$ $\iff \chi_A(\lambda) = 0$ + \item $A$ hat (mit Vielfachheit) genau $n$ Eigenwerte $\lambda_i \in \C$. + \item $\Eig(f;\lambda) = \ker(A-\lambda E)$ + \end{itemize} +\end{defi} + +\begin{example}{Eigenwerte und Eigenvektoren} + Gegeben sind + $$ + A_t = \vektor{1 & t \\ -2 & -1-t} \quad \text{und} \quad x_t = \vektor{-t \\ 2}, t \in \R + $$ + Zeigen Sie, dass der Vektor $x_t$ Eigenvektor der Matrix $A_t$ ist. + Wie lautet der zugehörige Eigenwert? + Bestimmen Sie auch den zweiten Eigenwert. + + \exampleseparator + + Berechnen des charakteristischen Polynoms von $A_t$: + $$ + \abs{A - \lambda I} = \abs{\vektor{1 - \lambda & t \\ -2 & -1-t-\lambda}} = (1-\lambda)(-1-t-\lambda) + 2t = \lambda^2 + t\lambda + t - 1 + $$ + + Nullstellen des charakteristischen Polynoms (Eigenwerte): + $$ + \lambda_{1,2} = -\frac{t}{2} \pm \sqrt{\left(\frac{t}{2}\right)^2 - t + 1} = -\frac{t}{2} \pm \sqrt{\frac{t^2-4t + 4}{4}} = -\frac{t}{2} \pm \frac{t-2}{2} + $$ + $$ + \lambda_1 = -1 \quad \land \quad \lambda_2 = -t +1 + $$ + + Bestimmen des Eigenraums/der Eigenvektoren zum Eigenwert $\lambda_1$: + $$ + \begin{sysmatrix}{cc|c} + 1-\lambda_1 & t & 0 \\ + -2 & -1-t-\lambda_1 & 0 + \end{sysmatrix} + \sim + \begin{sysmatrix}{cc|c} + 2 & t & 0 \\ + -2 & -t & 0 + \end{sysmatrix} + \sim + \begin{sysmatrix}{cc|c} + 2 & t & 0 \\ + 0 & 0 & 0 + \end{sysmatrix} + $$ + $$ + \begin{aligned} + \implies \quad & 2x_1 + tx_2 = 0 \iff x_1 = -\frac{tx_2}{2} \\ + \implies \quad & E(\lambda_1) = \ker(A-\lambda_1 I) = \scalarprod{\vektor{-t \\ 2}} \ni x_t + \end{aligned} + $$ + + Insgesamt sind also die Eigenwerte $\lambda_1 = -1$ und $\lambda_2 = -t+1$ und $x_t$ Eigenvektor zu $\lambda_1$.\qed +\end{example} + +\begin{bonus}{Eigenwerte und Determinanten} + Für $A = \vektor{a_1 & \ldots & a_n} \in \C^{n\times n}$ mit Eigenwerten $\lambda_i$, $1 \leq i \leq n$ gilt + $$ + \det(A) = \prod^n_{i=1}\lambda_i + $$ +\end{bonus} + +\subsection{Diagonalisierung linearer Abbildungen} + +\begin{defi}{Diagonalisierbarkeit} + Eine quadratische Matrix $A \in \C^{n\times n}$ heißt \emph{diagonalisierbar}, wenn es eine Diagonalmatrix $D$ und eine invertierbare Matrix $S$ existiert, sodass + $$ + A = SDS^{-1} + $$ + gilt. + Dabei ist $A$ genau dann diagonalisierbar, wenn eine Basis aus Eigenvektoren existiert. + Bildet man mit ihnen als Spalten eine Matrix $S$, dann ist $S$ genau die oben genannte Matrix\footnote{\ldots des Basiswechsels.}. + + Auf der Hauptdiagonalen von $D$ befinden sich die entsprechenden Eigenwerte von $A$. + + Es gilt: + \begin{itemize} + \item Zu jeder reellsymmetrischen Matrix $A$ gibt es eine Orthogonalmatrix $S$ und eine Diagonalmatrix $D$ wie oben. + \end{itemize} +\end{defi} + +\begin{example}{Diagonalmatrix} + Gesucht ist die Matrix $A$ mit den Eigenwerten $1$ und $4$ und den zugehörigen Eigenvektoren $\vektor{4\\1}$ und $\vektor{2\\1}$. + + \exampleseparator + + Wir wissen, dass $A$ diagonalisierbar ist. + Damit gilt + $$ + \begin{aligned} + A & \quad = SDS^{-1} \\ + & \quad = \vektor{4 & 2 \\ 1 & 1} \vektor{1 & 0 \\ 0 & 4} \vektor{4 & 2 \\ 1 & 1}^{-1} \\ + & \quad = \vektor{4 & 2 \\ 1 & 1} \vektor{1 & 0 \\ 0 & 4} \frac{1}{2} \vektor{1 & -2 \\ -1 & 4} \\ + & \quad = \frac{1}{2} \vektor{4 & 2 \\ 1 & 1} \vektor{1 & -2 \\ -4 & 16} \\ + & \quad = \frac{1}{2} \vektor{-4 & 24 \\ -3 & 14} + \end{aligned} + $$\qed +\end{example} + +\begin{defi}{Vielfachheit} + Sei $A \in \C^{n\times n}$ und $\lambda$ ein Eigenwert. + + Die Vielfachheit der Nullstelle $\lambda$ von $\chi_A$ heißte \emph{algebraische Vielfachheit} $a(\lambda)$. + + Weiter sei $g(\lambda) := \dim(\Eig(A;\lambda))$ die \emph{geometrische Vielfachheit} von $\lambda$. + + Es gilt: + \begin{itemize} + \item Existiert ein Eigenwert $\tilde{\lambda}$ mit $a(\tilde{\lambda}) > g(\tilde{\lambda})$, dann ist $A$ nicht diagonalisierbar. + \end{itemize} +\end{defi} + +\begin{bonus}{Normale Matrix} + Eine Matrix $A \in \C^{n\times n}$ heißt \emph{normal}, wenn gilt: + $$ + AA^{*} = A^{*}A \quad \iff \quad A\bar{A}^T = \bar{A}^TA + $$ + + $A^{*}$ heißt adjungierte Matrix von $A$. + + Sei $A \in \C^{n\times n}$. + Es gilt: + \begin{itemize} + \item Es existiert eine bzgl. des Standardskalarprodukts in $\C^n$ orthonormale Basis aus Eigenvektoren, d.h. $A$ ist diagonalisierbar. + \item Jede reelle symmetrische Matrix ist diagonalisierbar. Die Eigenwerte sind reell. + \item Jede reelle antisymmetrische Matrix (d.h. $A^T = -A$) ist diagonalisierbar. Die Eigenwerte sind rein imaginär oder 0. + \item Jede reelle orthogonale Matrix ist diagonalisierbar. + \end{itemize} +\end{bonus} + +\subsection{Definitheit und Skalarprodukte} + +\begin{defi}{Skalarprodukt} + Für ein \emph{Skalarprodukt} $(\cdot, \cdot) : \R^n \times \R^n \to \R$ müssen drei Bedingungen erfüllt sein: + \begin{enumerate} + \item $(\cdot, \cdot)$ ist linear in den Spalten. + \item $(\cdot, \cdot)$ ist symmetrisch. + \item $(x, x) > 0$ für $x \neq 0$. + \end{enumerate} + + Wir wählen eine beliebige Matrix $A \in \R^{n\times n}$ und betrachten die Abbildung + $$ + (\cdot, \cdot)_A : \R^n \times \R^n \to \R, \quad (x, y)_A := \scalarprod{x, Ay} + $$ + wobei $\scalarprod{\cdot, \cdot}$ für das Standardskalarprodukt steht. + + Die Abbildung $(\cdot, \cdot)_A$ ist genau dann symmetrisch, wenn $A$ symmetrisch ist. + + Nicht jede symmetrische Matrix definiert ein Skalarprodukt (z.B. die Nullmatrix). +\end{defi} + +\begin{defi}{Quadratische Form} + Sei $A$ eine symmetrische Matrix $A \in \R^{n\times n}$. + + Die Abbildung $x \to \scalarprod{x, Ax}$ wird \emph{quadratische Form} genannt. +\end{defi} + +\begin{defi}{Hauptminoren} + Für $A \in \R^{n\times n}$ seien $A_k$ die \emph{links oben} beginnenden $k \times k$-Untermatrizen $A_k = (a_{ij})^k_{i,j=1}$ von $A$. + + Dann heißen $D_k = \det(A_k)$ die \emph{Hauptunterdeterminanten} oder \emph{Hauptminoren} von $A$. +\end{defi} + +\begin{defi}{Definitheit} + Sei $A$ eine symmetrische Matrix $A \in \R^{n\times n}$. + + Dann gilt: + \begin{itemize} + \item $A$ heißt \emph{positiv definit}, wenn $\scalarprod{x, Ax} > 0 \forall x \in \R^n \setminus \{0\}$.\footnote{Häufig kürzt man \glqq symmetrisch positiv definit\grqq mit \emph{spd} ab.} + \item $A$ heißt \emph{negativ definit}, wenn $\scalarprod{x, Ax} < 0 \forall x \in \R^n \setminus \{0\}$. + \item $A$ heißt \emph{positiv semidefinit}, wenn $\scalarprod{x, Ax} \geq 0 \forall x \in \R^n \setminus \{0\}$. + \item $A$ heißt \emph{negativ semidefinit}, wenn $\scalarprod{x, Ax} \leq 0 \forall x \in \R^n \setminus \{0\}$. + \item $A$ heißt \emph{indefinit}, falls sie weder positiv noch negativ (semi-)definit ist, d.h. + $$ + \exists x, y \in \R^n \{0\} : \scalarprod{x, Ax} > 0 \land \scalarprod{y, Ay} < 0 + $$ + \end{itemize} + + Es gilt: + \begin{itemize} + \item Die Abbildung $(\cdot, \cdot)_A$ ist genau dann ein Skalarprodukt, wenn $A$ spd ist. + \end{itemize} + + Für eine reelle symmetrische Matrix $A$ sind äquivalent: + \begin{enumerate} + \item $A$ ist positiv definit. + \item $A$ besitzt nur positive Eigenwerte. + \item Alle Hauptminoren von $A$ sind positiv. + \end{enumerate} + + Weiter ist $A$ genau dann positiv semidefinit, wenn alle Eigenwerte von $A$ nicht negativ sind. + In diesem Fall sind alle Hauptminoren von $A$ nicht negativ. + + $A$ ist genau dann negativ (semi-)definit, wenn $-A$ positiv (semi-)definit ist. + + Für die Hauptminoren $D_k$ einer negativ definiten Matrix gilt, dass $D_k$ abwechselnd positiv und negativ sind, beginnend mit negativem Vorzeichen. +\end{defi} + +\printindex +\printindex[Beispiele] + \end{document} \ No newline at end of file diff --git a/or/or.bib b/or/or.bib index 7554751..9f03368 100644 --- a/or/or.bib +++ b/or/or.bib @@ -1,18 +1,18 @@ -@inproceedings{khachiyan1979, - title = {A polynomial algorithm in linear programming}, - author = {Khachiyan, Leonid Genrikhovich}, - booktitle = {Doklady Akademii Nauk}, - volume = {244}, - number = {5}, - pages = {1093--1096}, - year = {1979}, - organization = {Russian Academy of Sciences} -} - -@inproceedings{karmarkar1984, - title = {A new polynomial-time algorithm for linear programming}, - author = {Karmarkar, Narendra}, - booktitle = {Proceedings of the sixteenth annual ACM symposium on Theory of computing}, - pages = {302--311}, - year = {1984} +@inproceedings{khachiyan1979, + title = {A polynomial algorithm in linear programming}, + author = {Khachiyan, Leonid Genrikhovich}, + booktitle = {Doklady Akademii Nauk}, + volume = {244}, + number = {5}, + pages = {1093--1096}, + year = {1979}, + organization = {Russian Academy of Sciences} +} + +@inproceedings{karmarkar1984, + title = {A new polynomial-time algorithm for linear programming}, + author = {Karmarkar, Narendra}, + booktitle = {Proceedings of the sixteenth annual ACM symposium on Theory of computing}, + pages = {302--311}, + year = {1984} } \ No newline at end of file diff --git a/or/or.pdf b/or/or.pdf index ad782a4a5d56bc719e39794dd53cc845a878ae20..33ee8a1b7c8e97637ffd99a6452ca8547ed33af2 100644 GIT binary patch delta 68405 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,Iqn><N?ZQsZFOKcxo4w( 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 UT+1ZKZDM9%#-*z2>hHz{0Nc#_PXGV_ delta 68844 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 diff --git a/or/or.tex b/or/or.tex index a25901f..8e368e8 100644 --- a/or/or.tex +++ b/or/or.tex @@ -1,76 +1,76 @@ -\documentclass[english]{../spicker} - -\usepackage{amsmath} - -\usepackage{graphicx} -\usepackage{tabularx, multirow} - -\usepackage[style=numeric, backend=bibtex]{biblatex} -\addbibresource{or.bib} - -\title{Operations Research} -\author{Patrick Gustav Blaneck} - -\begin{document} -\maketitle -\tableofcontents -\newpage - -%\setcounter{section}{1} - -\section{Linear Programming} - -\begin{defi}{Linear Programming} - \emph{Linear Programming} is the problem of optimizing (maximizing or minimizing) a \emph{linear objective function} subject to a set of \emph{linear functional constraints}. - - \textbf{Given:} $A \in \R^{m\times n}, b \in \R^m, c\in R^n$ - - \textbf{Find:} $x^* \in \R^n$ where $x^* = \arg\max\{c^Tx \mid Ax \leq b\}$ -\end{defi} - -\begin{bonus}{Linear Programming Solvers} - Software that solves linear programs - \emph{linear programming solvers} - also generate lots of important auxiliary information (as well as the optimum): - \begin{itemize} - \item sensitivity analysis - \item shadow prices - \item alternative optima - \item \ldots - \end{itemize} -\end{bonus} - -\begin{theo}{Ellipsoid Method} - A LP of dimension $n$ can be solved in $\bigo(L^2 \cdot n^6)$ time \cite{khachiyan1979}, where $L =$ \# bits in the input. -\end{theo} - -\begin{theo}{Interior Point Method} - A LP of dimension $n$ can be solved in a \emph{numerically stable} way in $\bigo(L^2 \cdot n^{3.5})$ time \cite{karmarkar1984}. -\end{theo} - -\begin{defi}{Integer Linear Programs (ILP)} - \textbf{Given:} $A \in \R^{m\times n}, b \in \R^m, c\in R^n$ - - \textbf{Find:} $\underline{x^*\in\Z^n}$ where $x^* = \arg\max\{c^Tx \mid Ax \leq b\}$ -\end{defi} - -\begin{example}{Integer Linear Program for \textsc{Vertex Cover}} - \fbox{ - \parbox{0.95\textwidth}{ - \underline{\textsc{Vertex Cover}} - - - \textbf{Given:} Graph $G = (V, E)$\\ - \textbf{Find:} \textsc{Vertex Cover}, i.e. $V' \subseteq V$ such that every edge has at least one endpoint in $V'$. - } - } - - \textbf{Integer Linear Program:} - - For $v\in V$, let $x_v \in \{0, 1\}$. - - Goal: minimize $\sum_{v\in V}x_v$. - - Constraints: for every edge $uv \in E$, we require $x_u + x_v \geq 1$. -\end{example} - -\printbibliography -\end{document} +\documentclass[english]{../spicker} + +\usepackage{amsmath} + +\usepackage{graphicx} +\usepackage{tabularx, multirow} + +\usepackage[style=numeric, backend=bibtex]{biblatex} +\addbibresource{or.bib} + +\title{Operations Research} +\author{Patrick Gustav Blaneck} + +\begin{document} +\maketitle +\tableofcontents +\newpage + +%\setcounter{section}{1} + +\section{Linear Programming} + +\begin{defi}{Linear Programming} + \emph{Linear Programming} is the problem of optimizing (maximizing or minimizing) a \emph{linear objective function} subject to a set of \emph{linear functional constraints}. + + \textbf{Given:} $A \in \R^{m\times n}, b \in \R^m, c\in R^n$ + + \textbf{Find:} $x^* \in \R^n$ where $x^* = \arg\max\{c^Tx \mid Ax \leq b\}$ +\end{defi} + +\begin{bonus}{Linear Programming Solvers} + Software that solves linear programs - \emph{linear programming solvers} - also generate lots of important auxiliary information (as well as the optimum): + \begin{itemize} + \item sensitivity analysis + \item shadow prices + \item alternative optima + \item \ldots + \end{itemize} +\end{bonus} + +\begin{theo}{Ellipsoid Method} + A LP of dimension $n$ can be solved in $\bigo(L^2 \cdot n^6)$ time \cite{khachiyan1979}, where $L =$ \# bits in the input. +\end{theo} + +\begin{theo}{Interior Point Method} + A LP of dimension $n$ can be solved in a \emph{numerically stable} way in $\bigo(L^2 \cdot n^{3.5})$ time \cite{karmarkar1984}. +\end{theo} + +\begin{defi}{Integer Linear Programs (ILP)} + \textbf{Given:} $A \in \R^{m\times n}, b \in \R^m, c\in R^n$ + + \textbf{Find:} $\underline{x^*\in\Z^n}$ where $x^* = \arg\max\{c^Tx \mid Ax \leq b\}$ +\end{defi} + +\begin{example}{Integer Linear Program for \textsc{Vertex Cover}} + \fbox{ + \parbox{0.95\textwidth}{ + \underline{\textsc{Vertex Cover}} + + + \textbf{Given:} Graph $G = (V, E)$\\ + \textbf{Find:} \textsc{Vertex Cover}, i.e. $V' \subseteq V$ such that every edge has at least one endpoint in $V'$. + } + } + + \textbf{Integer Linear Program:} + + For $v\in V$, let $x_v \in \{0, 1\}$. + + Goal: minimize $\sum_{v\in V}x_v$. + + Constraints: for every edge $uv \in E$, we require $x_u + x_v \geq 1$. +\end{example} + +\printbibliography +\end{document} diff --git a/spicker.cls b/spicker.cls index f0328df..8c68801 100644 --- a/spicker.cls +++ b/spicker.cls @@ -1,227 +1,227 @@ -% Additional warnings for deprecated things -\RequirePackage[l2tabu, orthodox]{nag} - -\NeedsTeXFormat{LaTeX2e} -\ProvidesClass{spicker} - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% Optional 'english' language option -\newcommand{\InitSpickerLanguage}{\PassOptionsToPackage{english,ngerman}{babel}} -\DeclareOption{english}{\renewcommand{\InitSpickerLanguage}{\PassOptionsToPackage{english}{babel}}} -\ProcessOptions -\InitSpickerLanguage - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% Compact scrartcl format -\LoadClass[a4paper,parskip=half-,DIV=15,fontsize=11pt]{scrartcl} - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% Enable post-90s text processing -\usepackage[utf8]{inputenc} - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% Typesetting -\usepackage{babel} -\usepackage{microtype} -\usepackage{parskip} -\usepackage{microtype} -\usepackage{csquotes} -\usepackage{booktabs} -\usepackage{listings} - -\usepackage{lmodern} % upgrade default font -\usepackage[sc]{mathpazo} % pretty font for text - -\linespread{1.05} % more spacing -\setkomafont{disposition}{\fontseries{sbc}\sffamily} - -\usepackage[shortlabels]{enumitem} -\setlist{nosep} - -\makeatletter -% Re-enable paragraph spacing in minipages; -% we choose something smaller than what is used outside of minipages. -\newcommand{\@minipagerestore}{\setlength{\parskip}{0.8\medskipamount}} -\makeatother - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% Utilities -\usepackage{lipsum} - -\usepackage[svgnames]{xcolor} -% https://s3.amazonaws.com/edwardtufte.com/colorblind_palette.png -\definecolor{orange}{RGB}{230,159,0} -\definecolor{skyblue}{RGB}{86,180,233} -\definecolor{bluishgreen}{RGB}{0,158,115} -\definecolor{vermillion}{RGB}{213,94,0} -\definecolor{reddishpurple}{RGB}{204,121,167} -\definecolor{matse}{RGB}{11,102,168} -\definecolor{fhmint}{RGB}{0,177,172} -\definecolor{fhblue}{RGB}{0,141,208} -\definecolor{fhred}{RGB}{168,46,104} -\definecolor{fhpurple}{RGB}{147,81,159} - -% Show most recent revision number and date in date field -\makeatletter -\date{\small \IfLanguageName{ngerman}{Letzte Änderung:}{Last Change:} \filename@parse{\jobname}\IfFileExists{\filename@base.last-change}{\input{\filename@base.last-change}}{\today}} -\makeatother - -\subject{\normalfont{}\texttt{\href{https://matse.paddel.xyz/spicker}{https://matse.paddel.xyz/spicker}}} - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% Math & Symbols -\usepackage{mathtools} -\usepackage{amssymb} -\usepackage{amsmath} -\usepackage{amsthm} -\usepackage{stmaryrd} -\usepackage{braket} -\usepackage{cool} -\usepackage{siunitx} - -\DeclarePairedDelimiter\abs{\lvert}{\rvert} -\DeclarePairedDelimiter\norm{\lVert}{\rVert} -\DeclarePairedDelimiter\floor{\lfloor}{\rfloor} -\DeclarePairedDelimiter\ceil{\lceil}{\rceil} - -\DeclareMathOperator{\Exists}{\exists} -\DeclareMathOperator{\Forall}{\forall} -\DeclareMathOperator*{\argmin}{argmin} -\DeclareMathOperator*{\argmax}{argmax} - -\newcommand{\Nplus}{\mathbb{N}^+} -\newcommand{\N}{\mathbb{N}} -\newcommand{\Rnonneg}{\mathbb{R}^+_0} -\newcommand{\R}{\mathbb{R}} -\newcommand{\C}{\mathbb{C}} -\newcommand{\Z}{\mathbb{Z}} -\newcommand{\bigo}{\mathcal{O}} - -\newcommand{\Rnum}[1]{\uppercase\expandafter{\romannumeral #1\relax}} - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% Diagrams - -\usepackage{pgfplots} -\usepgfplotslibrary{fillbetween} -\pgfplotsset{compat=1.8} - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% Links and Metadata -\usepackage[ - colorlinks, - citecolor = fhmint, - linkcolor = matse, - urlcolor = matse -]{hyperref} -\usepackage{bookmark} - -\makeatletter -\AtBeginDocument{ - \hypersetup{ - pdftitle = {\@title}, - pdfauthor = {\@author} - } -} -\makeatother - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% Environments -\usepackage{todonotes} - -% Just like the 'center' block, but without spacing around it. -\newenvironment{tightcenter}{% - \setlength\topsep{0pt} - \setlength\parskip{0pt} - \begin{center} -}{% - \end{center} -} - -\usepackage{tcolorbox} - -\usepackage{array} % for \newcolumntype macro - -\newcolumntype{L}{>{$}l<{$}} % math-mode version of "l" column type -\newcolumntype{R}{>{$}r<{$}} % math-mode version of "r" column type -\newcolumntype{C}{>{$}c<{$}} % math-mode version of "c" column type -\newcolumntype{P}{>{$}p<{$}} % math-mode version of "l" column type - -%%%%%%%%%%%%%%%% -% Context Blocks - -\usepackage[]{imakeidx} - -\usepackage{iflang} -\newcommand{\SpickerAlgorithm}{\IfLanguageName{ngerman}{Algorithmus}{Algorithm}} -\newcommand{\SpickerCode}{\IfLanguageName{ngerman}{Code}{Code}} - -\tcbset{boxrule=0pt,toprule=1pt,parbox=false,on line} - -\newenvironment{algo}[1]{% -\index{#1}% -\setlist{nosep,leftmargin=*}% -\begin{tcolorbox}[colback=fhblue!5!white, colframe=fhblue!75!black, title={\sffamily \SpickerAlgorithm: #1}] -}{% -\end{tcolorbox}} - -\newenvironment{code}[1]{% -\index{#1}% -\begin{tcolorbox}[colback=fhpurple!5!white, colframe=fhpurple!75!black, title={\sffamily \SpickerCode: #1}] -}{% -\end{tcolorbox}} - -\newenvironment{defi}[1]{% -\index{#1}% -\begin{tcolorbox}[colback=fhmint!5!white, colframe=fhmint!75!black, title={\sffamily Definition: #1}] -}{% -\end{tcolorbox}} - -\newenvironment{bonus}[1]{% -\index{#1}% -\begin{tcolorbox}[colback=fhred!5!white, colframe=fhred!75!black, title={\sffamily Bonus: #1}] -}{% -\end{tcolorbox}} - -\newenvironment{example}[1]{% -\index[Beispiele]{#1}% -\begin{tcolorbox}[colback=fhred!5!white, colframe=fhred!75!black, title={\sffamily \IfLanguageName{ngerman}{Beispiel}{Example}: #1}] -}{% -\end{tcolorbox}} - -\newcommand{\exampleseparator}{\noindent\rule{\textwidth}{0.2pt}} - -%%%%%%%%%%%%%% -% Split Blocks - -\newenvironment{halfboxl}{% -\noindent -\begin{minipage}[t]{0.4875\textwidth} -%\vspace{0pt} -%\vspace{\dimexpr\ht\strutbox-\topskip} -}{% -\end{minipage}\hspace{0.025\textwidth}} -\newenvironment{halfboxr}{% -\begin{minipage}[t]{0.4875\textwidth} -\vspace{0pt} -}{% -\end{minipage}\bigbreak} - -\newenvironment{thirdboxl}{% -\begin{minipage}[t]{0.3166\textwidth} -}{% -\end{minipage}\hspace{0.025\textwidth}} -\newenvironment{thirdboxm}{% -\begin{minipage}[t]{0.3166\textwidth} -}{% -\end{minipage}\hspace{0.025\textwidth}} -\newenvironment{thirdboxr}{% -\begin{minipage}[t]{0.3166\textwidth} -}{% -\end{minipage}\bigbreak} - - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% Citations - +% Additional warnings for deprecated things +\RequirePackage[l2tabu, orthodox]{nag} + +\NeedsTeXFormat{LaTeX2e} +\ProvidesClass{spicker} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% Optional 'english' language option +\newcommand{\InitSpickerLanguage}{\PassOptionsToPackage{english,ngerman}{babel}} +\DeclareOption{english}{\renewcommand{\InitSpickerLanguage}{\PassOptionsToPackage{english}{babel}}} +\ProcessOptions +\InitSpickerLanguage + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% Compact scrartcl format +\LoadClass[a4paper,parskip=half-,DIV=15,fontsize=11pt]{scrartcl} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% Enable post-90s text processing +\usepackage[utf8]{inputenc} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% Typesetting +\usepackage{babel} +\usepackage{microtype} +\usepackage{parskip} +\usepackage{microtype} +\usepackage{csquotes} +\usepackage{booktabs} +\usepackage{listings} + +\usepackage{lmodern} % upgrade default font +\usepackage[sc]{mathpazo} % pretty font for text + +\linespread{1.05} % more spacing +\setkomafont{disposition}{\fontseries{sbc}\sffamily} + +\usepackage[shortlabels]{enumitem} +\setlist{nosep} + +\makeatletter +% Re-enable paragraph spacing in minipages; +% we choose something smaller than what is used outside of minipages. +\newcommand{\@minipagerestore}{\setlength{\parskip}{0.8\medskipamount}} +\makeatother + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% Utilities +\usepackage{lipsum} + +\usepackage[svgnames]{xcolor} +% https://s3.amazonaws.com/edwardtufte.com/colorblind_palette.png +\definecolor{orange}{RGB}{230,159,0} +\definecolor{skyblue}{RGB}{86,180,233} +\definecolor{bluishgreen}{RGB}{0,158,115} +\definecolor{vermillion}{RGB}{213,94,0} +\definecolor{reddishpurple}{RGB}{204,121,167} +\definecolor{matse}{RGB}{11,102,168} +\definecolor{fhmint}{RGB}{0,177,172} +\definecolor{fhblue}{RGB}{0,141,208} +\definecolor{fhred}{RGB}{168,46,104} +\definecolor{fhpurple}{RGB}{147,81,159} + +% Show most recent revision number and date in date field +\makeatletter +\date{\small \IfLanguageName{ngerman}{Letzte Änderung:}{Last Change:} \filename@parse{\jobname}\IfFileExists{\filename@base.last-change}{\input{\filename@base.last-change}}{\today}} +\makeatother + +\subject{\normalfont{}\texttt{\href{https://matse.paddel.xyz/spicker}{https://matse.paddel.xyz/spicker}}} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% Math & Symbols +\usepackage{mathtools} +\usepackage{amssymb} +\usepackage{amsmath} +\usepackage{amsthm} +\usepackage{stmaryrd} +\usepackage{braket} +\usepackage{cool} +\usepackage{siunitx} + +\DeclarePairedDelimiter\abs{\lvert}{\rvert} +\DeclarePairedDelimiter\norm{\lVert}{\rVert} +\DeclarePairedDelimiter\floor{\lfloor}{\rfloor} +\DeclarePairedDelimiter\ceil{\lceil}{\rceil} + +\DeclareMathOperator{\Exists}{\exists} +\DeclareMathOperator{\Forall}{\forall} +\DeclareMathOperator*{\argmin}{argmin} +\DeclareMathOperator*{\argmax}{argmax} + +\newcommand{\Nplus}{\mathbb{N}^+} +\newcommand{\N}{\mathbb{N}} +\newcommand{\Rnonneg}{\mathbb{R}^+_0} +\newcommand{\R}{\mathbb{R}} +\newcommand{\C}{\mathbb{C}} +\newcommand{\Z}{\mathbb{Z}} +\newcommand{\bigo}{\mathcal{O}} + +\newcommand{\Rnum}[1]{\uppercase\expandafter{\romannumeral #1\relax}} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% Diagrams + +\usepackage{pgfplots} +\usepgfplotslibrary{fillbetween} +\pgfplotsset{compat=1.8} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% Links and Metadata +\usepackage[ + colorlinks, + citecolor = fhmint, + linkcolor = matse, + urlcolor = matse +]{hyperref} +\usepackage{bookmark} + +\makeatletter +\AtBeginDocument{ + \hypersetup{ + pdftitle = {\@title}, + pdfauthor = {\@author} + } +} +\makeatother + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% Environments +\usepackage{todonotes} + +% Just like the 'center' block, but without spacing around it. +\newenvironment{tightcenter}{% + \setlength\topsep{0pt} + \setlength\parskip{0pt} + \begin{center} +}{% + \end{center} +} + +\usepackage{tcolorbox} + +\usepackage{array} % for \newcolumntype macro + +\newcolumntype{L}{>{$}l<{$}} % math-mode version of "l" column type +\newcolumntype{R}{>{$}r<{$}} % math-mode version of "r" column type +\newcolumntype{C}{>{$}c<{$}} % math-mode version of "c" column type +\newcolumntype{P}{>{$}p<{$}} % math-mode version of "l" column type + +%%%%%%%%%%%%%%%% +% Context Blocks + +\usepackage[]{imakeidx} + +\usepackage{iflang} +\newcommand{\SpickerAlgorithm}{\IfLanguageName{ngerman}{Algorithmus}{Algorithm}} +\newcommand{\SpickerCode}{\IfLanguageName{ngerman}{Code}{Code}} + +\tcbset{boxrule=0pt,toprule=1pt,parbox=false,on line} + +\newenvironment{algo}[1]{% +\index{#1}% +\setlist{nosep,leftmargin=*}% +\begin{tcolorbox}[colback=fhblue!5!white, colframe=fhblue!75!black, title={\sffamily \SpickerAlgorithm: #1}] +}{% +\end{tcolorbox}} + +\newenvironment{code}[1]{% +\index{#1}% +\begin{tcolorbox}[colback=fhpurple!5!white, colframe=fhpurple!75!black, title={\sffamily \SpickerCode: #1}] +}{% +\end{tcolorbox}} + +\newenvironment{defi}[1]{% +\index{#1}% +\begin{tcolorbox}[colback=fhmint!5!white, colframe=fhmint!75!black, title={\sffamily Definition: #1}] +}{% +\end{tcolorbox}} + +\newenvironment{bonus}[1]{% +\index{#1}% +\begin{tcolorbox}[colback=fhred!5!white, colframe=fhred!75!black, title={\sffamily Bonus: #1}] +}{% +\end{tcolorbox}} + +\newenvironment{example}[1]{% +\index[Beispiele]{#1}% +\begin{tcolorbox}[colback=fhred!5!white, colframe=fhred!75!black, title={\sffamily \IfLanguageName{ngerman}{Beispiel}{Example}: #1}] +}{% +\end{tcolorbox}} + +\newcommand{\exampleseparator}{\noindent\rule{\textwidth}{0.2pt}} + +%%%%%%%%%%%%%% +% Split Blocks + +\newenvironment{halfboxl}{% +\noindent +\begin{minipage}[t]{0.4875\textwidth} +%\vspace{0pt} +%\vspace{\dimexpr\ht\strutbox-\topskip} +}{% +\end{minipage}\hspace{0.025\textwidth}} +\newenvironment{halfboxr}{% +\begin{minipage}[t]{0.4875\textwidth} +\vspace{0pt} +}{% +\end{minipage}\bigbreak} + +\newenvironment{thirdboxl}{% +\begin{minipage}[t]{0.3166\textwidth} +}{% +\end{minipage}\hspace{0.025\textwidth}} +\newenvironment{thirdboxm}{% +\begin{minipage}[t]{0.3166\textwidth} +}{% +\end{minipage}\hspace{0.025\textwidth}} +\newenvironment{thirdboxr}{% +\begin{minipage}[t]{0.3166\textwidth} +}{% +\end{minipage}\bigbreak} + + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% Citations + \usepackage[style=numeric, backend=bibtex]{biblatex} \ No newline at end of file diff --git a/tgi/tgi.pdf b/tgi/tgi.pdf index 101e200d0604c4c8eb6c89e693c002fd17912888..b2654187c06419126bcc4592ab2d81dfe53c71cd 100644 GIT binary patch delta 29364 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 SGBPzYHZ|u`Rdw}u;{pH^glN71 delta 29355 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 T-Te)-0;h=um#V6(zZ(|-HP#IN diff --git a/tgi/tgi.tex b/tgi/tgi.tex index a45cf28..fca75f9 100644 --- a/tgi/tgi.tex +++ b/tgi/tgi.tex @@ -1,513 +1,513 @@ -\documentclass[german]{../spicker} - -\usepackage{amsmath} - -\usepackage{graphicx} -\usepackage{tabularx, multirow} - -\usetikzlibrary{arrows.meta,chains,decorations.pathreplacing,scopes,shapes.misc} - -\addbibresource{algo.bib} - -\title{Theoretische Grundlagen der Informatik} -\author{Patrick Gustav Blaneck} -\makeindex[intoc] -\makeindex[intoc, name=Beispiele,title=Beispiele] - -\newenvironment{allintypewriter}{\ttfamily}{\par} - - -\pgfmathsetmacro\twopi{2*pi} - -\pgfmathdeclarefunction{lngamma}{1}{% - \pgfmathsetmacro\lngammatmp{#1*#1*#1}% - \pgfmathparse{% - #1*ln(#1) - #1 - .5*ln(#1/\twopi) - + 1/12/#1 - 1/360/\lngammatmp + 1/1260/\lngammatmp/#1/#1 - }% -} - -\pgfmathdeclarefunction{facreal}{1}{% - \pgfmathparse{exp(lngamma(#1+1))}% -} - -\begin{document} -\maketitle -\tableofcontents -\newpage - -%\setcounter{section}{1} - -% ------------------------------------------------ -\section{Random Access Machine (RAM)} - -\begin{defi}{Algorithmus} - Ein \emph{Algorithmus} ist eine \textbf{Verarbeitungsvorschrift}, die angibt wie Eingabedaten schrittweise in Ausgabedaten umgewandelt werden. - - Wichtig für einen Algorithmus sind insbesondere: - \begin{itemize} - \item \textbf{Korrektheit:} berechnet der Algorithmus das gewünschte? - \item \textbf{Termination:} terminiert der Algorithmus immer? - \item \textbf{Geschwindigkeit:} wie lange läuft der Algorithmus? - \item \textbf{Speicherverbrauch:} wie viel Speicher verbraucht der Algorithmus? - \end{itemize} -\end{defi} - -\begin{defi}{Random Access Machine (RAM), informal} - Die \emph{Random Access Machine (RAM)} ist ein axiomatisch definiertes Rechnermodell. - - Die RAM besteht aus: - \begin{itemize} - \item Programmspeicher (lesen) - \item Befehlszähler - \item Hauptspeicher (lesen und schreiben) - \begin{itemize} - \item Speicherzelle 0 als \emph{Akkumulator} - \item Speicherzellen nehmen ganze Zahlen auf - \item keine Größenbeschränkung - \end{itemize} - \item Ein- und Ausgabeband - \begin{itemize} - \item beliebig viele ganze Zahlen - \item Zugriff nicht wahlfrei - \end{itemize} - \end{itemize} - - \begin{center} - \includegraphics[]{images/ram.pdf} - \end{center} -\end{defi} - -\begin{defi}{Befehlssatz der RAM} - Zugriff auf die Bänder: - \begin{itemize} - \item \texttt{READ} $n$: \\ - liest den Wert unter dem Lesekopf, schreibt ihn an Speicherstelle $n$ und bewegt den Lesekopf um eine Stelle nach rechts - \item \texttt{WRITE} $n$: \\ - schreibt den Wert aus Speicherstelle $n$ an die Position des Schreibkopfes auf das Ausgabeband und bewegt den Schreibkopf um eine Stelle nach rechts - \end{itemize} - - Akkumulator: - \begin{itemize} - \item \texttt{LOAD} $op_r$: \\ - beschreibt einen \emph{Wert} - \subitem Arten von Operanden $op_r$: - \begin{itemize} - \item $z$: \emph{unmittelbarer} Operand ($z \in \Z$) - \item $[n]$: \emph{direkt adressierter} Operand ($\sigma(n)$ - Inhalt an Speicheradresse $n\in \N_0$) - \item $[*n]$: \emph{indirekt adressierter} Operand ($\sigma(\sigma(n))$ - Inhalt der Speicheradresse $\sigma(n)$) - \end{itemize} - \end{itemize} - - \begin{itemize} - \item \texttt{STORE} $op_w$: \\ - beschreibt eine \emph{Speicheradresse} - \subitem Arten von Operanden $op_w$: - \begin{itemize} - \item $n$: \emph{unmittelbarer} Operand ($n \in \N_0$) - \item $[n]$: \emph{direkt adressierter} Operand ($\sigma(n)$ - Inhalt an Speicheradresse $n\in \N_0$) - \end{itemize} - \end{itemize} - - Arithmetik: - \begin{itemize} - \item \texttt{ADD} $op_r$: \\ - addiert den Operanden $op_r$ zum Akkumulator - \item \texttt{SUB} $op_r$: \\ - subtrahier den Operanden $op_r$ vom Akkumulator - \item \texttt{MUL} $op_r$: \\ - multipliziert den Akkumulator mit dem Operanden $op_r$ - \item \texttt{DIV} $op_r$: \\ - dividiert den Akkumulator durchden Operanden $op_r$ (Ganzzahldivision) - \end{itemize} - - Sprungbefehle: - \begin{itemize} - \item \texttt{GOTO} $p$: \\ - die Ausführung wird in Zeile $p$ fortgeführt - \item \texttt{JZ} $p$ (Jump Zero): \\ - falls der Akkumulator 0 enthält, wird die Ausführung in Zeile $p$ fortgeführt, ansonsten bei der folgenden Zeile - \item \texttt{JGTZ} $p$ (Jump Greater Than Zero): \\ - falls der Akkumulator einen Wert größer als 0 enthält, wird die Ausführung in Zeile $p$ fortgeführt, ansonsten bei der folgenden Zeile - \item \texttt{HALT}: \\ - RAM stoppt die Ausführung - \end{itemize} -\end{defi} - -\begin{bonus}{Adressierungsarten der RAM} - Unmittelbar: - \begin{center} - \begin{tikzpicture} - [ - % -{Stealth[length = 2.5pt]}, - start chain, - node distance = 0pt, - StackBlock/.style={draw, minimum width=2em, minimum height=2em, outer sep=0pt, on chain}, - ] - - \node [draw, minimum width=2em, minimum height=2em, outer sep=0pt] (ins) {\texttt{LOAD 2}}; - - { start chain = going right - \node [StackBlock,label=above:$0$, right=2cm of ins, fill=red!30] (0) {2}; - \node [StackBlock,label=above:$1$] (1) {4}; - \node [StackBlock,label=above:$2$] (2) {3}; - \node [StackBlock,label=above:$3$] (3) {1}; - \node [StackBlock,label=above:$4$] (4) {2}; - - \draw[->] (ins.east) [out=0, in=180] to (0.west); - } - \end{tikzpicture} - - \end{center} - Direkt: - \begin{center} - \begin{tikzpicture} - [ - % -{Stealth[length = 2.5pt]}, - start chain, - node distance = 0pt, - StackBlock/.style={draw, minimum width=2em, minimum height=2em, outer sep=0pt, on chain}, - ] - - \node [draw, minimum width=2em, minimum height=2em, outer sep=0pt] (ins) {\texttt{LOAD [2]}}; - - { start chain = going right - \node [StackBlock,label=above:$0$, right=2cm of ins, fill=red!30] (0) {3}; - \node [StackBlock,label=above:$1$] (1) {4}; - \node [StackBlock,label=above:$2$] (2) {3}; - \node [StackBlock,label=above:$3$] (3) {1}; - \node [StackBlock,label=above:$4$] (4) {2}; - - \draw[->,dashed] (ins.south) [out=-45, in=-135] to (2.south); - \draw[->] (2.south) [out=-90, in=-90] to (0.south); - } - \end{tikzpicture} - - \end{center} - Indirekt: - \begin{center} - \begin{tikzpicture} - [ - % -{Stealth[length = 2.5pt]}, - start chain, - node distance = 0pt, - StackBlock/.style={draw, minimum width=2em, minimum height=2em, outer sep=0pt, on chain}, - ] - - \node [draw, minimum width=2em, minimum height=2em, outer sep=0pt] (ins) {\texttt{LOAD [*2]}}; - - { start chain = going right - \node [StackBlock,label=above:$0$, right=2cm of ins, fill=red!30] (0) {1}; - \node [StackBlock,label=above:$1$] (1) {4}; - \node [StackBlock,label=above:$2$] (2) {3}; - \node [StackBlock,label=above:$3$] (3) {1}; - \node [StackBlock,label=above:$4$] (4) {2}; - - \draw[->,dashed] (ins.south) [out=-45, in=-135] to (2.south); - \draw[->,dashed] (2.south) [out=-90, in=-90] to (3.south); - \draw[->] (3.south) [out=-90, in=-90] to (0.south); - } - \end{tikzpicture} - \end{center} -\end{bonus} - -\begin{defi}{Speicher der RAM} - Ein \emph{Speicher} ist eine totale Funktion $\sigma : \N_0 \to \Z$, wobei Adresse $0$ \emph{Akkumulator} genannt wird. - - Die Funktion $\sigma_0$ mit $\forall i \in \N_0 : \sigma_0(i) = 0$ nennen wir den \emph{initialen Speicher}. - - Seien $n \in \N_0$ eine Speicheradresse und $c \in \Z$, dann ist $\sigma[n\to c] : \N_0 \to \Z$ definiert durch\footnote{Verbal: Der Speicheradresse $n$ wird der Wert $c$ zugeordnet. $\sigma(x)$ gibt dann den Wert an der Stelle $x$ zurück.} - $$ - \boxed{ - \sigma[n\to c](x) = \begin{cases} - c & \text{falls} \ x=n \\ - \sigma(x) & \text{sonst} - \end{cases} - } - $$ - - \textbf{Notation:} - Betrachte $\sigma[n_1\to c_1][n_2 \to c_2]\ldots [n_k\to c_k]$ - \begin{itemize} - \item Wir schreiben stattdessen auch $\sigma[n_1\to c_1,n_2 \to c_2,\ldots ,n_k\to c_k]$. - \item Für ein $n_i$ notieren wir immer nur das letzte Paar $n_i \to c_j$, da dieses alle vorangegangenen überschreibt - (z.B. $\sigma[0\to 1, 1\to 3]$ statt $\sigma[1\to 7, 0\to 1, 1\to 3]$) - \end{itemize} -\end{defi} - -\begin{defi}{Bänder der RAM} - Sei $N = \{1, \ldots, n\} \in \N$ eine endliche Menge, dann ist ein \emph{RAM-Band} eine Folge von $n$ ganzen Zahlen, die wir als Funktion $\alpha: N \to \Z$ modellieren. - - Bandoperationen: - \begin{itemize} - \item $\operatorname{read}(\alpha): (N \to \Z) \to (N - \{n\} \to \Z) \times \Z$ ist definiert durch\footnote{Verbal: $\operatorname{read}(\alpha)$ entfernt die erste Position des Bandes ($\alpha'$ entspricht $\alpha$ \glqq um eins nach links verschoben\grqq) und gibt das erste Element des alten Bandes $\alpha(1)$ zurück} - $$ - \boxed{ - \operatorname{read}(\alpha) = (\alpha', \alpha(1)) - } - \quad \text{mit} \quad \forall i \in \{1, \ldots, n-1\} : \alpha'(i) = \alpha(i+1) - $$ - \item $\operatorname{write}(\alpha, v): (N \to \Z) \times \Z \to (N \cup \{n+1\} \to \Z)$ ist definiert durch - $$ - \boxed{ - \operatorname{write}(\alpha, v) = \alpha' - } - \quad \text{mit} \quad \forall i \in \{1, \ldots, n+1\} : \alpha'(i) = \begin{cases} - v & \text{falls} \ i = n+1 \\ - \alpha(i) & \text{sonst} - \end{cases} - $$ - \end{itemize} - - \textbf{Beachte:} - $\operatorname{read}$ entfernt das erste Element einer Folge, $\operatorname{write}$ hängt ein Element an das Ende einer Folge an. -\end{defi} - -\begin{defi}{Random Access Machine (RAM), formal} - Eine \emph{Random Access Machine (RAM)} ist definiert durch eine endliche Folge von RAM-Befehlen $\mathcal{R}_{am} = (s_1, \ldots, s_n)$, wobei für jedes Sprungziel gilt, dass es im Bereich $\{1, \ldots, n\}$ liegt. -\end{defi} - -\begin{defi}{Konfiguration der RAM} - Sei $\mathcal{R}_{am} = (s_1, \ldots, s_n)$ eine RAM. - Eine \emph{Konfiguration} von $\mathcal{R}_{am}$ ist ein Quadrupel $(\pi, \alpha, \beta, \sigma)$, bestehend aus: - \begin{itemize} - \item $\pi$, dem Programmzähler mit $\pi \in \{0, \ldots, n\}$ - \item $\alpha$, dem Eingabeband, - \item $\beta$, dem Ausgabeband - \item $\sigma$, dem Speicher - \end{itemize} - - Für ein beliebiges $\alpha$ bezeichnet $1, \alpha, (), \sigma_0)$ die \emph{Startkonfiguration} einer RAM. - - Konfigurationen der Form $(0, (), \beta, \sigma)$ nennen wir \emph{Endkonfiguration} und mit $\operatorname{Conf}(\mathcal{R}_{am})$ bezeichnen wir die Menge aller Konfigurationen zu einer RAM $\mathcal{R}_{am}$. -\end{defi} - -\begin{defi}{Operandenfunktion} - Sei $\gamma = (\pi, \alpha, \beta, \sigma)$ eine RAM-Konfiguration, dann ist die \emph{Operandenfunktion} $\operatorname{eval}$ definiert durch: - \begin{itemize} - \item $\operatorname{eval}(\gamma, z) = z$ für $z \in \Z$ - \item $\operatorname{eval}(\gamma, [n]) = \sigma(n)$ für $n\in \N_0$ - \item $\operatorname{eval}(\gamma, [*n]) = \sigma(\sigma(n))$ für $n \in \N_0$ - \end{itemize} - - Anstelle von $\operatorname{eval}(\gamma, \chi) = z$ schreiben wir auch\footnote{Verbal: Unter der Konfiguration $\gamma$ hat der Operand $\chi$ den Wert $z$.} - $$ - \boxed{ - \gamma \vdash \chi = z - } - $$ -\end{defi} - -\begin{defi}{Deduktionssystem} - Die Rechenregeln der RAM werden wir in Form eines \emph{Deduktionssystems} angeben. - Darin haben die Regeln die Form: - $$ - \boxed{ - \frac{\text{Prämisse}_1 \cdots \text{Prämisse}_n}{\gamma \vdash \gamma'} \quad (\operatorname{NAME}) - } - $$ - - Die Regel mit Namen $\operatorname{NAME}$ beschreibt den - \begin{itemize} - \item den \emph{Konfigurationsübergang} von $\gamma$ nach $\gamma'$, der nur dann möglich ist, wenn - \item die Bedingungen aller Prämissen erfüllbar sind. - \end{itemize} - - Das Deduktionssystem beschreibt somit eine Relation - $$ - \vdash \ : \ \operatorname{Conf} (\mathcal{R}_{am}) \times \operatorname{Conf} (\mathcal{R}_{am}) - $$ - die wir \emph{Schrittrelation} nennen. -\end{defi} - -\begin{example}{Schrittrelationen (Bandoperationen)} - $$ - \frac{s_\pi = \operatorname{READ} \ n \quad \operatorname{read}(\alpha) = (\alpha', z)}{(\pi, \alpha, \beta, \sigma) \vdash (\pi + 1, \alpha', \beta, \sigma[n\to z])} \quad (\operatorname{READ}) - $$ - - $$ - \frac{s_\pi = \operatorname{WRITE} \ n \quad \sigma(n) = z}{(\pi, \alpha, \beta, \sigma) \vdash (\pi + 1, \alpha, \operatorname{write}(\beta, z), \sigma)} \quad (\operatorname{WRITE}) - $$ - - $$ - \frac{s_\pi = \operatorname{LOAD} \ op_r \quad (\pi, \alpha, \beta, \sigma) \vdash op_r = z}{(\pi, \alpha, \beta, \sigma) \vdash (\pi + 1, \alpha, \beta, \sigma[0\to z])} \quad (\operatorname{LOAD}) - $$ - - $$ - \frac{s_\pi = \operatorname{STORE} \ op_w \quad (\pi, \alpha, \beta, \sigma) \vdash op_w = n \quad n\in \N}{(\pi, \alpha, \beta, \sigma) \vdash (\pi + 1, \alpha, \beta, \sigma[n\to \sigma(0)])} \quad (\operatorname{STORE}) - $$ -\end{example} - -\begin{example}{Schrittrelationen (Arithmetik)} - $$ - \frac{s_\pi = \operatorname{ADD} \ op_r \quad (\pi, \alpha, \beta, \sigma) \vdash op_r = z_b \quad (\pi, \alpha, \beta, \sigma) \vdash [0] = z_a}{(\pi, \alpha, \beta, \sigma) \vdash (\pi + 1, \alpha, \beta, \sigma[0\to z_a + z_b])} \quad (\operatorname{ADD}) - $$ - - $$ - \frac{s_\pi = \operatorname{SUB} \ op_r \quad (\pi, \alpha, \beta, \sigma) \vdash op_r = z_b \quad (\pi, \alpha, \beta, \sigma) \vdash [0] = z_a}{(\pi, \alpha, \beta, \sigma) \vdash (\pi + 1, \alpha, \beta, \sigma[0\to z_a - z_b])} \quad (\operatorname{SUB}) - $$ - - $$ - \frac{s_\pi = \operatorname{MUL} \ op_r \quad (\pi, \alpha, \beta, \sigma) \vdash op_r = z_b \quad (\pi, \alpha, \beta, \sigma) \vdash [0] = z_a}{(\pi, \alpha, \beta, \sigma) \vdash (\pi + 1, \alpha, \beta, \sigma[0\to z_a \cdot z_b])} \quad (\operatorname{MUL}) - $$ - - $$ - \frac{s_\pi = \operatorname{DIV} \ op_r \quad (\pi, \alpha, \beta, \sigma) \vdash op_r = z_b \quad z_b \neq 0 \quad (\pi, \alpha, \beta, \sigma) \vdash [0] = z_a}{(\pi, \alpha, \beta, \sigma) \vdash \left(\pi + 1, \alpha, \beta, \sigma[0\to \left\lfloor \frac{z_a}{z_b} \right\rfloor ]\right)} \quad (\operatorname{DIV}) - $$ -\end{example} - -\begin{example}{Schrittrelationen (konditional)} - $$ - \frac{s_\pi = \operatorname{GOTO} \ p}{(\pi, \alpha, \beta, \sigma) \vdash (p, \alpha, \beta, \sigma)} \quad (\operatorname{GOTO}) - $$ - - $$ - \frac{s_\pi = \operatorname{JZ_1} \ p \quad \sigma(0) = 0}{(\pi, \alpha, \beta, \sigma) \vdash (p, \alpha, \beta, \sigma)} \quad (\operatorname{JZ}_1) - \qquad - \frac{s_\pi = \operatorname{JZ_2} \ p \quad \sigma(0) \neq 0}{(\pi, \alpha, \beta, \sigma) \vdash (\pi + 1, \alpha, \beta, \sigma)} \quad (\operatorname{JZ_2}_2) - $$ - - $$ - \frac{s_\pi = \operatorname{JGTZ_1} \ p \quad \sigma(0) > 0}{(\pi, \alpha, \beta, \sigma) \vdash (p, \alpha, \beta, \sigma)} \quad (\operatorname{JGTZ}_1) - \qquad - \frac{s_\pi = \operatorname{JGTZ_2} \ p \quad \sigma(0) \leq 0}{(\pi, \alpha, \beta, \sigma) \vdash (p, \alpha, \beta, \sigma)} \quad (\operatorname{JGTZ}_2) - $$ - $$ - \frac{s_\pi = \operatorname{HALT}}{(\pi, \alpha, \beta, \sigma) \vdash (0, \alpha, \beta, \sigma)} \quad (\operatorname{HALT}) - $$ -\end{example} - -\begin{defi}{Abschluss der Schrittrelation} - Sei $\mathcal{R}_{am} = (s_1, \ldots, s_n)$ eine RAM. - Wir definieren - $$ - \overset{*}{\vdash} \ : \ \operatorname{Conf} (\mathcal{R}_{am}) \times \operatorname{Conf} (\mathcal{R}_{am}) - $$ - als reflexiven und transitiven \emph{Abschluss der Schrittrelation}: - - $$ - \boxed{ - (\pi, \alpha, \beta, \sigma) \overset{*}{\vdash} (\pi_n, \alpha_n, \beta_n, \sigma_n) - } - $$ - falls - $$ - \exists (\pi_1, \alpha_1, \beta_1, \sigma_1), \ldots, (\pi_n, \alpha_n, \beta_n, \sigma_n) \in \operatorname{Conf} (\mathcal{R}_{am}) : - $$ - $$ - (\pi, \alpha, \beta, \sigma) \vdash (\pi_1, \alpha_1, \beta_1, \sigma_1) \vdash \ldots \vdash (\pi_n, \alpha_n, \beta_n, \sigma_n) - $$ -\end{defi} - -\begin{defi}{RAM-Berechenbarkeit} - Seien $\mathcal{R}_{am} = (s_1, \ldots, s_n)$ eine RAM und $f : \Z^k \to \Z^l$ eine Funktion. - - $\mathcal{R}_{am}$ \emph{berechnet f}, genau dann, wenn - $$ - \forall (z_1, \ldots, z_k) \in \Z^k : (1, (z_1, \ldots, z_k), (), \sigma_0) \overset{*}{\vdash} (0, (), f(z_1, \ldots, z_k), \sigma') - $$ - für ein geeignetes $\sigma'$. - - Eine Funktion heißt \emph{RAM-berechenbar}, wenn es eine RAM gibt, die sie berechnet. -\end{defi} - -\begin{bonus}{Modulo-Operator} - Der \emph{Modulo-Operator} $\operatorname{mod} : \Z \times \Z \setminus \{0\} \to Z$ ist definiert durch - $$ - a \operatorname{mod} b = a - \left\lfloor \frac{a}{b} \right\rfloor \cdot b - $$ -\end{bonus} - -\begin{bonus}{Kongruenz} - Sei $m \in \Z \setminus \{0\}$. - Zwei Zahlen $a, b \in \Z$ heißen \emph{kongruent modulo m}, genau dann, wenn - $$ - a \operatorname{mod} m = b \operatorname{mod} m - $$ - und wir schreiben - $$ - a \equiv b \ (\operatorname{mod} m) - $$ - Die Menge - $$ - [a]_m = \{z \in \Z \mid z \equiv a \operatorname{mod} m\} - $$ - nennen wir dann \emph{Kongruenzklasse} (auch Restklasse) von $a$ modulo $m$. -\end{bonus} - -\begin{defi}{Schleifeninvariante} - Eine \emph{Schleifeninvariante} ist eine Aussage, die vor und nach einer Schleife und jedem Durchlauf der Schleife gilt. - Sie ist damit unabhängig von der Zahl ihrer derzeitigen Durchläufe. - - Für die Korrektheit der Schleifeninvatiante muss gezeigt werden, dass - \begin{itemize} - \item die Invariante direkt vor Ausführung der Schleife und damit auch am Anfang des ersten Schleifendurchlaufs gilt (\emph{Initialisierung}) - \item falls die Invariante am Anfang eines Schleifendurchlaufs erfüllt ist, sie dann auch am Ende erfüllt ist (\emph{Erhaltung}), und - \item sie direkt nach Beendigung der Schleife gilt (\emph{Terminierung}). - \end{itemize} -\end{defi} - -\begin{defi}{Partielle Korrektheit} - Seien $P$ eine Vorbedingung und $Q$ eine Nachbedingung. - Ein Algorithmus heißt \emph{partiell korrekt}, wenn er für Eingaben, unter denen $P$ erfüllt ist, nur Ausgaben liefert, welche $Q$ erfüllen. - -\end{defi} - -\begin{defi}{Totale Korrektheit} - Seien $P$ eine Vorbedingung und $Q$ eine Nachbedingung. - Ein Algorithmus heißt \emph{total korrekt}, falls er partiell korrekt ist und auf jeder Eingabe, die $P$ erfüllt, terminiert. - - Zum Nachweis der Termination wird die \emph{Schleifenvariante} genutzt, für die gilt:\footnote{analog zu Zählvariablen} - \begin{itemize} - \item Ausdruck über Programmvariablen - \item liefert Zahl aus $\N_0$ - \item muss in jeder Iteration verringert werden - \end{itemize} -\end{defi} - -\begin{defi}{Speicherplatzverbrauch} - Der \emph{Speicherplatzverbrauch} $M$ wird in Abhängigkeit zur Größe der Eingabe angegeben. - - Einfacher Speicherplatzverbrauch: - \begin{itemize} - \item $M$ entspricht Anzahl der gespeicherten Zahlen - \item z.B. für $\operatorname{mod}$: $M(A, B) = 3$ - \end{itemize} - - Realistischerer Speicherplatzverbrauch: - \begin{itemize} - \item $M$ entspricht Anzahl der Bits der gespeicherten Zahlen - \item z.B. für $\operatorname{mod}$: $M(A, B) = 2 \cdot \lceil \log_2 A \rceil + \lceil \log_2 B \rceil$ - \end{itemize} -\end{defi} - -\begin{defi}{Laufzeit} - Laufzeit ist abhängig von Größe der Eingabe und entspricht der Anzahl der abgearbeiteten RAM-Kommandos. - - Einfache Laufzeit: - \begin{itemize} - \item $M$ entspricht genau der Anzahl der abgearbeiteten RAM-Kommandos - \item z.B. für $\operatorname{mod}$: $T(A, B) = 4 + \underbrace{\left\lfloor \frac{A}{B} \right\rfloor \cdot 7}_{\text{Schleife}} + 3$ - \end{itemize} - - Realistischere Laufzeit: - \begin{itemize} - \item logarithmisches Kostenmaß für arithmetische Operationen - \item z.B. Aufwand für Subtraktion: Anzahl Bits des größeren Operanden - \item damit gilt für $\operatorname{mod}$: $T(A, B) = 4 + \left\lfloor \frac{A}{B} \right\rfloor \cdot 6 + \underbrace{T_{\texttt{SUB}}(A, B)}_{\text{Alle Subtraktionen}} + 3$ - mit - $$ - T_{\texttt{SUB}}(x, y) = \begin{cases} - 0 & \text{falls} \ x < y \\ - T_{\texttt{SUB}}(x-y, y) + \max (\left\lceil \log_2 x \right\rceil, \left\lceil \log_2 y \right\rceil) & \text{sonst} - \end{cases} - $$ - \end{itemize} -\end{defi} - -% ------------------------------------------------ -\printindex -\printindex[Beispiele] - -\printbibliography -\end{document} +\documentclass[german]{../spicker} + +\usepackage{amsmath} + +\usepackage{graphicx} +\usepackage{tabularx, multirow} + +\usetikzlibrary{arrows.meta,chains,decorations.pathreplacing,scopes,shapes.misc} + +\addbibresource{algo.bib} + +\title{Theoretische Grundlagen der Informatik} +\author{Patrick Gustav Blaneck} +\makeindex[intoc] +\makeindex[intoc, name=Beispiele,title=Beispiele] + +\newenvironment{allintypewriter}{\ttfamily}{\par} + + +\pgfmathsetmacro\twopi{2*pi} + +\pgfmathdeclarefunction{lngamma}{1}{% + \pgfmathsetmacro\lngammatmp{#1*#1*#1}% + \pgfmathparse{% + #1*ln(#1) - #1 - .5*ln(#1/\twopi) + + 1/12/#1 - 1/360/\lngammatmp + 1/1260/\lngammatmp/#1/#1 + }% +} + +\pgfmathdeclarefunction{facreal}{1}{% + \pgfmathparse{exp(lngamma(#1+1))}% +} + +\begin{document} +\maketitle +\tableofcontents +\newpage + +%\setcounter{section}{1} + +% ------------------------------------------------ +\section{Random Access Machine (RAM)} + +\begin{defi}{Algorithmus} + Ein \emph{Algorithmus} ist eine \textbf{Verarbeitungsvorschrift}, die angibt wie Eingabedaten schrittweise in Ausgabedaten umgewandelt werden. + + Wichtig für einen Algorithmus sind insbesondere: + \begin{itemize} + \item \textbf{Korrektheit:} berechnet der Algorithmus das gewünschte? + \item \textbf{Termination:} terminiert der Algorithmus immer? + \item \textbf{Geschwindigkeit:} wie lange läuft der Algorithmus? + \item \textbf{Speicherverbrauch:} wie viel Speicher verbraucht der Algorithmus? + \end{itemize} +\end{defi} + +\begin{defi}{Random Access Machine (RAM), informal} + Die \emph{Random Access Machine (RAM)} ist ein axiomatisch definiertes Rechnermodell. + + Die RAM besteht aus: + \begin{itemize} + \item Programmspeicher (lesen) + \item Befehlszähler + \item Hauptspeicher (lesen und schreiben) + \begin{itemize} + \item Speicherzelle 0 als \emph{Akkumulator} + \item Speicherzellen nehmen ganze Zahlen auf + \item keine Größenbeschränkung + \end{itemize} + \item Ein- und Ausgabeband + \begin{itemize} + \item beliebig viele ganze Zahlen + \item Zugriff nicht wahlfrei + \end{itemize} + \end{itemize} + + \begin{center} + \includegraphics[]{images/ram.pdf} + \end{center} +\end{defi} + +\begin{defi}{Befehlssatz der RAM} + Zugriff auf die Bänder: + \begin{itemize} + \item \texttt{READ} $n$: \\ + liest den Wert unter dem Lesekopf, schreibt ihn an Speicherstelle $n$ und bewegt den Lesekopf um eine Stelle nach rechts + \item \texttt{WRITE} $n$: \\ + schreibt den Wert aus Speicherstelle $n$ an die Position des Schreibkopfes auf das Ausgabeband und bewegt den Schreibkopf um eine Stelle nach rechts + \end{itemize} + + Akkumulator: + \begin{itemize} + \item \texttt{LOAD} $op_r$: \\ + beschreibt einen \emph{Wert} + \subitem Arten von Operanden $op_r$: + \begin{itemize} + \item $z$: \emph{unmittelbarer} Operand ($z \in \Z$) + \item $[n]$: \emph{direkt adressierter} Operand ($\sigma(n)$ - Inhalt an Speicheradresse $n\in \N_0$) + \item $[*n]$: \emph{indirekt adressierter} Operand ($\sigma(\sigma(n))$ - Inhalt der Speicheradresse $\sigma(n)$) + \end{itemize} + \end{itemize} + + \begin{itemize} + \item \texttt{STORE} $op_w$: \\ + beschreibt eine \emph{Speicheradresse} + \subitem Arten von Operanden $op_w$: + \begin{itemize} + \item $n$: \emph{unmittelbarer} Operand ($n \in \N_0$) + \item $[n]$: \emph{direkt adressierter} Operand ($\sigma(n)$ - Inhalt an Speicheradresse $n\in \N_0$) + \end{itemize} + \end{itemize} + + Arithmetik: + \begin{itemize} + \item \texttt{ADD} $op_r$: \\ + addiert den Operanden $op_r$ zum Akkumulator + \item \texttt{SUB} $op_r$: \\ + subtrahier den Operanden $op_r$ vom Akkumulator + \item \texttt{MUL} $op_r$: \\ + multipliziert den Akkumulator mit dem Operanden $op_r$ + \item \texttt{DIV} $op_r$: \\ + dividiert den Akkumulator durchden Operanden $op_r$ (Ganzzahldivision) + \end{itemize} + + Sprungbefehle: + \begin{itemize} + \item \texttt{GOTO} $p$: \\ + die Ausführung wird in Zeile $p$ fortgeführt + \item \texttt{JZ} $p$ (Jump Zero): \\ + falls der Akkumulator 0 enthält, wird die Ausführung in Zeile $p$ fortgeführt, ansonsten bei der folgenden Zeile + \item \texttt{JGTZ} $p$ (Jump Greater Than Zero): \\ + falls der Akkumulator einen Wert größer als 0 enthält, wird die Ausführung in Zeile $p$ fortgeführt, ansonsten bei der folgenden Zeile + \item \texttt{HALT}: \\ + RAM stoppt die Ausführung + \end{itemize} +\end{defi} + +\begin{bonus}{Adressierungsarten der RAM} + Unmittelbar: + \begin{center} + \begin{tikzpicture} + [ + % -{Stealth[length = 2.5pt]}, + start chain, + node distance = 0pt, + StackBlock/.style={draw, minimum width=2em, minimum height=2em, outer sep=0pt, on chain}, + ] + + \node [draw, minimum width=2em, minimum height=2em, outer sep=0pt] (ins) {\texttt{LOAD 2}}; + + { start chain = going right + \node [StackBlock,label=above:$0$, right=2cm of ins, fill=red!30] (0) {2}; + \node [StackBlock,label=above:$1$] (1) {4}; + \node [StackBlock,label=above:$2$] (2) {3}; + \node [StackBlock,label=above:$3$] (3) {1}; + \node [StackBlock,label=above:$4$] (4) {2}; + + \draw[->] (ins.east) [out=0, in=180] to (0.west); + } + \end{tikzpicture} + + \end{center} + Direkt: + \begin{center} + \begin{tikzpicture} + [ + % -{Stealth[length = 2.5pt]}, + start chain, + node distance = 0pt, + StackBlock/.style={draw, minimum width=2em, minimum height=2em, outer sep=0pt, on chain}, + ] + + \node [draw, minimum width=2em, minimum height=2em, outer sep=0pt] (ins) {\texttt{LOAD [2]}}; + + { start chain = going right + \node [StackBlock,label=above:$0$, right=2cm of ins, fill=red!30] (0) {3}; + \node [StackBlock,label=above:$1$] (1) {4}; + \node [StackBlock,label=above:$2$] (2) {3}; + \node [StackBlock,label=above:$3$] (3) {1}; + \node [StackBlock,label=above:$4$] (4) {2}; + + \draw[->,dashed] (ins.south) [out=-45, in=-135] to (2.south); + \draw[->] (2.south) [out=-90, in=-90] to (0.south); + } + \end{tikzpicture} + + \end{center} + Indirekt: + \begin{center} + \begin{tikzpicture} + [ + % -{Stealth[length = 2.5pt]}, + start chain, + node distance = 0pt, + StackBlock/.style={draw, minimum width=2em, minimum height=2em, outer sep=0pt, on chain}, + ] + + \node [draw, minimum width=2em, minimum height=2em, outer sep=0pt] (ins) {\texttt{LOAD [*2]}}; + + { start chain = going right + \node [StackBlock,label=above:$0$, right=2cm of ins, fill=red!30] (0) {1}; + \node [StackBlock,label=above:$1$] (1) {4}; + \node [StackBlock,label=above:$2$] (2) {3}; + \node [StackBlock,label=above:$3$] (3) {1}; + \node [StackBlock,label=above:$4$] (4) {2}; + + \draw[->,dashed] (ins.south) [out=-45, in=-135] to (2.south); + \draw[->,dashed] (2.south) [out=-90, in=-90] to (3.south); + \draw[->] (3.south) [out=-90, in=-90] to (0.south); + } + \end{tikzpicture} + \end{center} +\end{bonus} + +\begin{defi}{Speicher der RAM} + Ein \emph{Speicher} ist eine totale Funktion $\sigma : \N_0 \to \Z$, wobei Adresse $0$ \emph{Akkumulator} genannt wird. + + Die Funktion $\sigma_0$ mit $\forall i \in \N_0 : \sigma_0(i) = 0$ nennen wir den \emph{initialen Speicher}. + + Seien $n \in \N_0$ eine Speicheradresse und $c \in \Z$, dann ist $\sigma[n\to c] : \N_0 \to \Z$ definiert durch\footnote{Verbal: Der Speicheradresse $n$ wird der Wert $c$ zugeordnet. $\sigma(x)$ gibt dann den Wert an der Stelle $x$ zurück.} + $$ + \boxed{ + \sigma[n\to c](x) = \begin{cases} + c & \text{falls} \ x=n \\ + \sigma(x) & \text{sonst} + \end{cases} + } + $$ + + \textbf{Notation:} + Betrachte $\sigma[n_1\to c_1][n_2 \to c_2]\ldots [n_k\to c_k]$ + \begin{itemize} + \item Wir schreiben stattdessen auch $\sigma[n_1\to c_1,n_2 \to c_2,\ldots ,n_k\to c_k]$. + \item Für ein $n_i$ notieren wir immer nur das letzte Paar $n_i \to c_j$, da dieses alle vorangegangenen überschreibt + (z.B. $\sigma[0\to 1, 1\to 3]$ statt $\sigma[1\to 7, 0\to 1, 1\to 3]$) + \end{itemize} +\end{defi} + +\begin{defi}{Bänder der RAM} + Sei $N = \{1, \ldots, n\} \in \N$ eine endliche Menge, dann ist ein \emph{RAM-Band} eine Folge von $n$ ganzen Zahlen, die wir als Funktion $\alpha: N \to \Z$ modellieren. + + Bandoperationen: + \begin{itemize} + \item $\operatorname{read}(\alpha): (N \to \Z) \to (N - \{n\} \to \Z) \times \Z$ ist definiert durch\footnote{Verbal: $\operatorname{read}(\alpha)$ entfernt die erste Position des Bandes ($\alpha'$ entspricht $\alpha$ \glqq um eins nach links verschoben\grqq) und gibt das erste Element des alten Bandes $\alpha(1)$ zurück} + $$ + \boxed{ + \operatorname{read}(\alpha) = (\alpha', \alpha(1)) + } + \quad \text{mit} \quad \forall i \in \{1, \ldots, n-1\} : \alpha'(i) = \alpha(i+1) + $$ + \item $\operatorname{write}(\alpha, v): (N \to \Z) \times \Z \to (N \cup \{n+1\} \to \Z)$ ist definiert durch + $$ + \boxed{ + \operatorname{write}(\alpha, v) = \alpha' + } + \quad \text{mit} \quad \forall i \in \{1, \ldots, n+1\} : \alpha'(i) = \begin{cases} + v & \text{falls} \ i = n+1 \\ + \alpha(i) & \text{sonst} + \end{cases} + $$ + \end{itemize} + + \textbf{Beachte:} + $\operatorname{read}$ entfernt das erste Element einer Folge, $\operatorname{write}$ hängt ein Element an das Ende einer Folge an. +\end{defi} + +\begin{defi}{Random Access Machine (RAM), formal} + Eine \emph{Random Access Machine (RAM)} ist definiert durch eine endliche Folge von RAM-Befehlen $\mathcal{R}_{am} = (s_1, \ldots, s_n)$, wobei für jedes Sprungziel gilt, dass es im Bereich $\{1, \ldots, n\}$ liegt. +\end{defi} + +\begin{defi}{Konfiguration der RAM} + Sei $\mathcal{R}_{am} = (s_1, \ldots, s_n)$ eine RAM. + Eine \emph{Konfiguration} von $\mathcal{R}_{am}$ ist ein Quadrupel $(\pi, \alpha, \beta, \sigma)$, bestehend aus: + \begin{itemize} + \item $\pi$, dem Programmzähler mit $\pi \in \{0, \ldots, n\}$ + \item $\alpha$, dem Eingabeband, + \item $\beta$, dem Ausgabeband + \item $\sigma$, dem Speicher + \end{itemize} + + Für ein beliebiges $\alpha$ bezeichnet $1, \alpha, (), \sigma_0)$ die \emph{Startkonfiguration} einer RAM. + + Konfigurationen der Form $(0, (), \beta, \sigma)$ nennen wir \emph{Endkonfiguration} und mit $\operatorname{Conf}(\mathcal{R}_{am})$ bezeichnen wir die Menge aller Konfigurationen zu einer RAM $\mathcal{R}_{am}$. +\end{defi} + +\begin{defi}{Operandenfunktion} + Sei $\gamma = (\pi, \alpha, \beta, \sigma)$ eine RAM-Konfiguration, dann ist die \emph{Operandenfunktion} $\operatorname{eval}$ definiert durch: + \begin{itemize} + \item $\operatorname{eval}(\gamma, z) = z$ für $z \in \Z$ + \item $\operatorname{eval}(\gamma, [n]) = \sigma(n)$ für $n\in \N_0$ + \item $\operatorname{eval}(\gamma, [*n]) = \sigma(\sigma(n))$ für $n \in \N_0$ + \end{itemize} + + Anstelle von $\operatorname{eval}(\gamma, \chi) = z$ schreiben wir auch\footnote{Verbal: Unter der Konfiguration $\gamma$ hat der Operand $\chi$ den Wert $z$.} + $$ + \boxed{ + \gamma \vdash \chi = z + } + $$ +\end{defi} + +\begin{defi}{Deduktionssystem} + Die Rechenregeln der RAM werden wir in Form eines \emph{Deduktionssystems} angeben. + Darin haben die Regeln die Form: + $$ + \boxed{ + \frac{\text{Prämisse}_1 \cdots \text{Prämisse}_n}{\gamma \vdash \gamma'} \quad (\operatorname{NAME}) + } + $$ + + Die Regel mit Namen $\operatorname{NAME}$ beschreibt den + \begin{itemize} + \item den \emph{Konfigurationsübergang} von $\gamma$ nach $\gamma'$, der nur dann möglich ist, wenn + \item die Bedingungen aller Prämissen erfüllbar sind. + \end{itemize} + + Das Deduktionssystem beschreibt somit eine Relation + $$ + \vdash \ : \ \operatorname{Conf} (\mathcal{R}_{am}) \times \operatorname{Conf} (\mathcal{R}_{am}) + $$ + die wir \emph{Schrittrelation} nennen. +\end{defi} + +\begin{example}{Schrittrelationen (Bandoperationen)} + $$ + \frac{s_\pi = \operatorname{READ} \ n \quad \operatorname{read}(\alpha) = (\alpha', z)}{(\pi, \alpha, \beta, \sigma) \vdash (\pi + 1, \alpha', \beta, \sigma[n\to z])} \quad (\operatorname{READ}) + $$ + + $$ + \frac{s_\pi = \operatorname{WRITE} \ n \quad \sigma(n) = z}{(\pi, \alpha, \beta, \sigma) \vdash (\pi + 1, \alpha, \operatorname{write}(\beta, z), \sigma)} \quad (\operatorname{WRITE}) + $$ + + $$ + \frac{s_\pi = \operatorname{LOAD} \ op_r \quad (\pi, \alpha, \beta, \sigma) \vdash op_r = z}{(\pi, \alpha, \beta, \sigma) \vdash (\pi + 1, \alpha, \beta, \sigma[0\to z])} \quad (\operatorname{LOAD}) + $$ + + $$ + \frac{s_\pi = \operatorname{STORE} \ op_w \quad (\pi, \alpha, \beta, \sigma) \vdash op_w = n \quad n\in \N}{(\pi, \alpha, \beta, \sigma) \vdash (\pi + 1, \alpha, \beta, \sigma[n\to \sigma(0)])} \quad (\operatorname{STORE}) + $$ +\end{example} + +\begin{example}{Schrittrelationen (Arithmetik)} + $$ + \frac{s_\pi = \operatorname{ADD} \ op_r \quad (\pi, \alpha, \beta, \sigma) \vdash op_r = z_b \quad (\pi, \alpha, \beta, \sigma) \vdash [0] = z_a}{(\pi, \alpha, \beta, \sigma) \vdash (\pi + 1, \alpha, \beta, \sigma[0\to z_a + z_b])} \quad (\operatorname{ADD}) + $$ + + $$ + \frac{s_\pi = \operatorname{SUB} \ op_r \quad (\pi, \alpha, \beta, \sigma) \vdash op_r = z_b \quad (\pi, \alpha, \beta, \sigma) \vdash [0] = z_a}{(\pi, \alpha, \beta, \sigma) \vdash (\pi + 1, \alpha, \beta, \sigma[0\to z_a - z_b])} \quad (\operatorname{SUB}) + $$ + + $$ + \frac{s_\pi = \operatorname{MUL} \ op_r \quad (\pi, \alpha, \beta, \sigma) \vdash op_r = z_b \quad (\pi, \alpha, \beta, \sigma) \vdash [0] = z_a}{(\pi, \alpha, \beta, \sigma) \vdash (\pi + 1, \alpha, \beta, \sigma[0\to z_a \cdot z_b])} \quad (\operatorname{MUL}) + $$ + + $$ + \frac{s_\pi = \operatorname{DIV} \ op_r \quad (\pi, \alpha, \beta, \sigma) \vdash op_r = z_b \quad z_b \neq 0 \quad (\pi, \alpha, \beta, \sigma) \vdash [0] = z_a}{(\pi, \alpha, \beta, \sigma) \vdash \left(\pi + 1, \alpha, \beta, \sigma[0\to \left\lfloor \frac{z_a}{z_b} \right\rfloor ]\right)} \quad (\operatorname{DIV}) + $$ +\end{example} + +\begin{example}{Schrittrelationen (konditional)} + $$ + \frac{s_\pi = \operatorname{GOTO} \ p}{(\pi, \alpha, \beta, \sigma) \vdash (p, \alpha, \beta, \sigma)} \quad (\operatorname{GOTO}) + $$ + + $$ + \frac{s_\pi = \operatorname{JZ_1} \ p \quad \sigma(0) = 0}{(\pi, \alpha, \beta, \sigma) \vdash (p, \alpha, \beta, \sigma)} \quad (\operatorname{JZ}_1) + \qquad + \frac{s_\pi = \operatorname{JZ_2} \ p \quad \sigma(0) \neq 0}{(\pi, \alpha, \beta, \sigma) \vdash (\pi + 1, \alpha, \beta, \sigma)} \quad (\operatorname{JZ_2}_2) + $$ + + $$ + \frac{s_\pi = \operatorname{JGTZ_1} \ p \quad \sigma(0) > 0}{(\pi, \alpha, \beta, \sigma) \vdash (p, \alpha, \beta, \sigma)} \quad (\operatorname{JGTZ}_1) + \qquad + \frac{s_\pi = \operatorname{JGTZ_2} \ p \quad \sigma(0) \leq 0}{(\pi, \alpha, \beta, \sigma) \vdash (p, \alpha, \beta, \sigma)} \quad (\operatorname{JGTZ}_2) + $$ + $$ + \frac{s_\pi = \operatorname{HALT}}{(\pi, \alpha, \beta, \sigma) \vdash (0, \alpha, \beta, \sigma)} \quad (\operatorname{HALT}) + $$ +\end{example} + +\begin{defi}{Abschluss der Schrittrelation} + Sei $\mathcal{R}_{am} = (s_1, \ldots, s_n)$ eine RAM. + Wir definieren + $$ + \overset{*}{\vdash} \ : \ \operatorname{Conf} (\mathcal{R}_{am}) \times \operatorname{Conf} (\mathcal{R}_{am}) + $$ + als reflexiven und transitiven \emph{Abschluss der Schrittrelation}: + + $$ + \boxed{ + (\pi, \alpha, \beta, \sigma) \overset{*}{\vdash} (\pi_n, \alpha_n, \beta_n, \sigma_n) + } + $$ + falls + $$ + \exists (\pi_1, \alpha_1, \beta_1, \sigma_1), \ldots, (\pi_n, \alpha_n, \beta_n, \sigma_n) \in \operatorname{Conf} (\mathcal{R}_{am}) : + $$ + $$ + (\pi, \alpha, \beta, \sigma) \vdash (\pi_1, \alpha_1, \beta_1, \sigma_1) \vdash \ldots \vdash (\pi_n, \alpha_n, \beta_n, \sigma_n) + $$ +\end{defi} + +\begin{defi}{RAM-Berechenbarkeit} + Seien $\mathcal{R}_{am} = (s_1, \ldots, s_n)$ eine RAM und $f : \Z^k \to \Z^l$ eine Funktion. + + $\mathcal{R}_{am}$ \emph{berechnet f}, genau dann, wenn + $$ + \forall (z_1, \ldots, z_k) \in \Z^k : (1, (z_1, \ldots, z_k), (), \sigma_0) \overset{*}{\vdash} (0, (), f(z_1, \ldots, z_k), \sigma') + $$ + für ein geeignetes $\sigma'$. + + Eine Funktion heißt \emph{RAM-berechenbar}, wenn es eine RAM gibt, die sie berechnet. +\end{defi} + +\begin{bonus}{Modulo-Operator} + Der \emph{Modulo-Operator} $\operatorname{mod} : \Z \times \Z \setminus \{0\} \to Z$ ist definiert durch + $$ + a \operatorname{mod} b = a - \left\lfloor \frac{a}{b} \right\rfloor \cdot b + $$ +\end{bonus} + +\begin{bonus}{Kongruenz} + Sei $m \in \Z \setminus \{0\}$. + Zwei Zahlen $a, b \in \Z$ heißen \emph{kongruent modulo m}, genau dann, wenn + $$ + a \operatorname{mod} m = b \operatorname{mod} m + $$ + und wir schreiben + $$ + a \equiv b \ (\operatorname{mod} m) + $$ + Die Menge + $$ + [a]_m = \{z \in \Z \mid z \equiv a \operatorname{mod} m\} + $$ + nennen wir dann \emph{Kongruenzklasse} (auch Restklasse) von $a$ modulo $m$. +\end{bonus} + +\begin{defi}{Schleifeninvariante} + Eine \emph{Schleifeninvariante} ist eine Aussage, die vor und nach einer Schleife und jedem Durchlauf der Schleife gilt. + Sie ist damit unabhängig von der Zahl ihrer derzeitigen Durchläufe. + + Für die Korrektheit der Schleifeninvatiante muss gezeigt werden, dass + \begin{itemize} + \item die Invariante direkt vor Ausführung der Schleife und damit auch am Anfang des ersten Schleifendurchlaufs gilt (\emph{Initialisierung}) + \item falls die Invariante am Anfang eines Schleifendurchlaufs erfüllt ist, sie dann auch am Ende erfüllt ist (\emph{Erhaltung}), und + \item sie direkt nach Beendigung der Schleife gilt (\emph{Terminierung}). + \end{itemize} +\end{defi} + +\begin{defi}{Partielle Korrektheit} + Seien $P$ eine Vorbedingung und $Q$ eine Nachbedingung. + Ein Algorithmus heißt \emph{partiell korrekt}, wenn er für Eingaben, unter denen $P$ erfüllt ist, nur Ausgaben liefert, welche $Q$ erfüllen. + +\end{defi} + +\begin{defi}{Totale Korrektheit} + Seien $P$ eine Vorbedingung und $Q$ eine Nachbedingung. + Ein Algorithmus heißt \emph{total korrekt}, falls er partiell korrekt ist und auf jeder Eingabe, die $P$ erfüllt, terminiert. + + Zum Nachweis der Termination wird die \emph{Schleifenvariante} genutzt, für die gilt:\footnote{analog zu Zählvariablen} + \begin{itemize} + \item Ausdruck über Programmvariablen + \item liefert Zahl aus $\N_0$ + \item muss in jeder Iteration verringert werden + \end{itemize} +\end{defi} + +\begin{defi}{Speicherplatzverbrauch} + Der \emph{Speicherplatzverbrauch} $M$ wird in Abhängigkeit zur Größe der Eingabe angegeben. + + Einfacher Speicherplatzverbrauch: + \begin{itemize} + \item $M$ entspricht Anzahl der gespeicherten Zahlen + \item z.B. für $\operatorname{mod}$: $M(A, B) = 3$ + \end{itemize} + + Realistischerer Speicherplatzverbrauch: + \begin{itemize} + \item $M$ entspricht Anzahl der Bits der gespeicherten Zahlen + \item z.B. für $\operatorname{mod}$: $M(A, B) = 2 \cdot \lceil \log_2 A \rceil + \lceil \log_2 B \rceil$ + \end{itemize} +\end{defi} + +\begin{defi}{Laufzeit} + Laufzeit ist abhängig von Größe der Eingabe und entspricht der Anzahl der abgearbeiteten RAM-Kommandos. + + Einfache Laufzeit: + \begin{itemize} + \item $M$ entspricht genau der Anzahl der abgearbeiteten RAM-Kommandos + \item z.B. für $\operatorname{mod}$: $T(A, B) = 4 + \underbrace{\left\lfloor \frac{A}{B} \right\rfloor \cdot 7}_{\text{Schleife}} + 3$ + \end{itemize} + + Realistischere Laufzeit: + \begin{itemize} + \item logarithmisches Kostenmaß für arithmetische Operationen + \item z.B. Aufwand für Subtraktion: Anzahl Bits des größeren Operanden + \item damit gilt für $\operatorname{mod}$: $T(A, B) = 4 + \left\lfloor \frac{A}{B} \right\rfloor \cdot 6 + \underbrace{T_{\texttt{SUB}}(A, B)}_{\text{Alle Subtraktionen}} + 3$ + mit + $$ + T_{\texttt{SUB}}(x, y) = \begin{cases} + 0 & \text{falls} \ x < y \\ + T_{\texttt{SUB}}(x-y, y) + \max (\left\lceil \log_2 x \right\rceil, \left\lceil \log_2 y \right\rceil) & \text{sonst} + \end{cases} + $$ + \end{itemize} +\end{defi} + +% ------------------------------------------------ +\printindex +\printindex[Beispiele] + +\printbibliography +\end{document} -- GitLab