Ver código fonte

git Merge branch 'master' of gitea:christian/uni

master
christian 6 anos atrás
pai
commit
27c35974d7
7 arquivos alterados com 462 adições e 0 exclusões
  1. BIN
      ws2019/ana/lectures/analysis8.pdf
  2. +228
    -0
      ws2019/ana/lectures/analysis8.tex
  3. +18
    -0
      ws2019/ipi/uebungen/binomial.cpp
  4. +25
    -0
      ws2019/ipi/uebungen/binomial_fast.cpp
  5. BIN
      ws2019/ipi/uebungen/ipi3.pdf
  6. +177
    -0
      ws2019/ipi/uebungen/ipi3.tex
  7. +14
    -0
      ws2019/ipi/uebungen/uebung3.cpp

BIN
ws2019/ana/lectures/analysis8.pdf Ver arquivo


+ 228
- 0
ws2019/ana/lectures/analysis8.tex Ver arquivo

@@ -0,0 +1,228 @@
\documentclass{../../../lecture}

\begin{document}

\begin{bem}[Organisatorisches]
Nächsten Mittwoch (20. November) findet keine Vorlesung und auch keine Plenarübung statt. Aber Mittwoch (27.11.) Vorlesung
statt Plenarübung im großen Hörsaal Chemie
\end{bem}

\begin{satz}[Wichtiger Satz]
Der Körper $\R$ ist vollständig, d.h. jede
Cauchy Folge in $\R$ hat einen Limes
\end{satz}

\begin{proof}
Sei $(a_n)_{n\in\N}$ eine Cauchy Folge reeller Zahlen, d.h. $a_n \in \R$.
\[
a_n \in \R: \forall n \in \N: \exists \text{ C.F. } (a_{n, m})
.\]
\[
a_{n,m} \in \Q \forall n, m \in \N, a_n = \lim_{m \to \infty} a_{n,m}
.\]

$\forall n \in \N$ wähle Index $k_n \in \N$ mit
\[
|a_n - a_{n,kn}| < \frac{1}{n}
.\]

$k_n$ existiert, weil $\lim_{m \to \infty} a_{n,m} = a_n$ und damit $|a_n - a_{n,m}| \to 0$ also $\exists \epsilon |a_n - a_{n.m}| < \epsilon < \frac{1}{n}$
und Archimedisches Axiom.

Ziel: zu zeigen $\left( a_{n, k_{n}} \right)_{n \in \N}$ rationaler Zahlen ist Cauchy Folge.

Sei $\epsilon > 0$. Dann $\exists n_{\epsilon} \in \N$ s.d. $\forall n, m \ge n_\epsilon$ :
\begin{align*}
|a_n - a_m| < \frac{1}{3} \epsilon, |a_n - a_{n,k_n}| < \frac{1}{3} \epsilon \\
(a_n)_{n \in \N} \text{C.F.} \\
|a_m - a_{m,k_m}| < \frac{1}{3} \epsilon \text{(AA)}
.\end{align*}

und folglich
\[
|a_{n, k_n} - a_{m, k_m}| \le |a_{n, k_n} - a_n + a_n - a_m + a_m - a_{m, k_m}| \le |a_{n, k_n} - a_n| + | a_n - a_m| + |a_m - a_{m, k_m}| < \epsilon
.\]
$\implies (a_{n, k_n})_{n \in \N}$ Cauchy Folge
$\implies$ Nach Konstruktion der $\R$ folgt, dass $\exists $ ,,limes' $a \in \R$, s.d.
\[
\forall \epsilon > 0, \exists n_\epsilon \in \N, \forall n \ge n_\epsilon: |a_{n, k_n} - a| < \epsilon
.\]
Dann gilt für die Folge $(a_n)_{n\in\N}$:
\[
|a_n - a| \le |a_n - a_{n, k_n}| + |a_{n, k_n} - a| \le \frac{1}{n} + |a_{n, k_n} - a| \to 0
.\]
$\implies a = \lim_{n \to \infty} a_n$

$\Q$ ist dicht in $\R$, d.h.
\[
\forall a \in \R \text{ gilt } \forall \epsilon > 0 \exists q_\epsilon
\in \Q \text{ s.d. } |a - q_\epsilon| \le \epsilon
.\]

Nach Konstruktion von $\R$ folgt:
\begin{align*}
\forall \text{C.F.} (a_n)_{n\in\N} a_n \in \Q: \\
\exists a \in \R: a = \lim_{n \to \infty} a_n
.\end{align*}
$\implies \forall \epsilon > 0$ $\exists n_\epsilon$ $|a_n - a| < \epsilon \forall n \ge n_\epsilon$
\end{proof}

\begin{bem}[Archimedisches Axiom]
\begin{align*}
\forall a \in \R: \exists n \in \N: \text{s.d.} n - a > 0 \\
\implies \forall \epsilon > 0 \exists n \in \N \text{s.d. } n - \frac{1}{\epsilon} > 0 \\
\implies \frac{1}{n} < \epsilon
.\end{align*}
\end{bem}

\subsection{Wichtige Aussage}

$\R$ ist vollständig, da alle C.F. in $\R$ haben einen Grenzwert in $\R$.

\subsection{Weitere Möglichkeiten, die Vollständigkeit von $\R$ zu charakterisieren}

\begin{definition}[Maximum, Minimum, obere/untere Schranke, Supremum, Infimum]
Sei $M \subset \R, M \neq \emptyset$.

Maximum:
\[
\text{max} M := b \in M: b \ge x, \forall x \in M
.\]
Minimum:
\[
\text{min} M := a \in M: x \ge a, \forall x \in M
.\]
Obere Schranke:
\[
b \in \R, \text{ s.d. } b \ge x, \forall x \in M
.\]
Untere Schranke:
\[
a \in \R, \text{ s.d. } x \ge a, \forall x \in M
.\]
Eine Menge $M$ heißt nach oben (unten) beschränkt, falls eine obere (untere) Schranke von $M$ existiert.

Supremum: kleinste obere Schranke

Infimum: größte untere Schranke
\end{definition}

\begin{bsp}
\begin{itemize}
\item $\N$ ist von unten beschränkt, z.B. mit 0. $\text{min} \N = 1$, von oben unbeschränkt.
\item $M = \{x \in \R \mid x^2 < 2\} $: obere Schranke ist $\sqrt{2} $ und untere Schranke ist
$ - \sqrt{2} $, aber $M$ besitzt kein Maximum bzw. Minimum.
$\sqrt{2}$ ist Supremum und $-\sqrt{2} $ ist Infimum
\end{itemize}
\end{bsp}

\begin{bem}
Falls $b = \text{sup} M \iff$:
\begin{enumerate}
\item $b$ ist eine obere Schranke von $M$, d.h. $\forall x \in M: x \le b$ und
\item Jede Zahl $c < b$ ist keine obere Schranke von M, d.h. $\forall c \in M, c < b, \exists x \in M$: $c < x$
(oder $\forall \epsilon > 0 \exists x \in M\colon x > b - \epsilon$)
\end{enumerate}

Analog für $a = \text{inf}M$
\end{bem}

\begin{bsp}
\[
I = (a, b) := \{x \in \R \mid a < x < b\}
.\] dann gilt $\text{sup} I = b, \text{inf} I = a$.
\end{bsp}

\begin{bem}
Das Supremum (Infimum) muss nicht zur Menge $M$ gehören, aber falls
$\text{sup}M \in M$, dann $\text{sup}M = \text{max} M$.
\end{bem}

\begin{satz}[Vollständigkeit in $\R$ Nr. 2]
$\R$ vollständig $\iff$ jede nichtleere beschränkte Teilmenge $M \in \R$ besitzt ein Supremum bzw. Infimum
\end{satz}

\begin{definition}[Intervalle]
\[
[a, b] := \{x \in \R \mid a \le x \le b\} \text{ abgeschlossenes Intervall}
.\]
\[
(a, b) := \{x \in \R \mid a < x < b\} \text{ offenes Intervall}
.\]
\[
(a, b] := \{x \in \R \mid a < x \le b\} \text{ halboffenes Interval}
.\]
\[
[a, b) \text{ analog}
.\]
\end{definition}

\begin{definition}[Intervallschachtelung]
ist eine Folge von abgeschlossenen Intervallen $I_n := [a_n, b_n] := \{ x \in \R \mid a_n \le x \le b_n\}, n \in \N $
mit Eigenschaften.
1) $I_{n+1} \subset I_n n \in \N$ (bedeutet $a_n \le a_{n+1} \le b_{n+1} \le b_n$
2) $\forall \epsilon > 0, \exists I_{n}$ mit der Länge
\[
|b_n - a_n| < \epsilon \text{ d.h. } |b_n - a_n| \to 0, n \to \infty
.\]
\end{definition}

\begin{satz}[Vollständigkeit in $\R$ Nr. 3]
Vollständigkeit in $\R$ $\iff$ Intervallschachtelungseigenschaft d.h. für jede Intervallschachtelung.
\[
(I_n)_{n\in\N} \in \R, \exists c \in \R
\] so dass
\[
{c} = \bigcap_{n = 1}^{\infty} I_n := \{x \in \R | x \in I_n \forall n \in \N\}
.\]
Diese Aussage ist verwandt mit dem Axiom vom Dedekindischen Schnitt
\end{satz}

\begin{satz}[Trennungseigenschaft]
Seien $A, B \subset \R, A \neq \emptyset, B \neq \emptyset$ mit
$a < b \forall a \in A, b \in B$

Dann existiert immer ein $c \in \R$, welches A und B trennt:
\[
\forall a \in A, b \in B \text{ gilt } a \le c \le b
.\]
Dies ist ebenfalls $\iff$ zur Vollständigkeit in $\R$
\end{satz}

\begin{lemma}[Existenz der $k$-ten Wurzel einer positiven reellen Zahl]
$\forall a \in \R^{+}$ $\forall k \in \N$: existiert eine positive $k$-te Wurzel.
Das heißt die Lösung der Gleichung
\[
x^{k} = a
.\] ist $\sqrt[k]{a}$ (Bezeichnung).
\end{lemma}

\begin{proof}
1) Die Eindeutigkeit der $\sqrt[k]{a}$ (falls sie existiert)
Seien $x_1, x_2 \in \R$ zwei $k$-te Wurzeln des $a \in R^{+}$ :
\[
x_1^{k} = a = x_2^{k}
.\]
Dann gilt:
\[
0 = x_1^{k} - x_2^{k} = (x_1 - x_2) \underbrace{\sum_{m=0}^{k-1} x_1^{k-1-m} x_2^{m}}_{> 0}
.\] mit dieser Hilfsformel
\[
x^{n} - y^{n} = (x - y) \sum_{k=0}^{n-1} x^{n-1-k}y^{k}
.\] $\implies$ $x_1 - x_2 = 0 \implies x_1 = x_2$

2) Existenz:
$a = 1 \implies \sqrt[k]{1} = 1$ ($1^{k} = 1$ )
Sei $a > 1$ und Annahme, dass $\exists$ Wurzel für $0 < a' < 1$
Dann definiere:
\[
\sqrt[k]{a} := \frac{1}{\sqrt[k]{\frac{1}{a}} }
.\]
\[
\left( \sqrt[k]{a} \right) ^{k} = \left( \frac{1}{\sqrt[k]{a'} } \right)^{k} = \frac{1}{\sqrt[k]{a'}^{k} } = \frac{1}{a'} = a
.\]
Es bleibt zu zeigen: $\exists \sqrt[k]{a} $ für $0 < a < 1$.
\end{proof}

\end{document}

+ 18
- 0
ws2019/ipi/uebungen/binomial.cpp Ver arquivo

@@ -0,0 +1,18 @@
#include "cpp_headers/fcpp.hh"

// Berechnet den Binomialkoeffizienten (n ueber k) rekursiv
int binomial(int n, int k) {
return cond(k > n,
// Falls k > n: n ueber k = 0
0,
cond(k == 0 || n == k,
// Falls k = 0 oder n = k: n ueber k = 1
1,
// sonst rekursiv berechnen
binomial(n-1, k-1) + binomial(n-1, k)));
}

int main(int argc, char **argv) {
return print(binomial(readarg_int(argc, argv, 1),
readarg_int(argc, argv, 2)));
}

+ 25
- 0
ws2019/ipi/uebungen/binomial_fast.cpp Ver arquivo

@@ -0,0 +1,25 @@
#include "cpp_headers/fcpp.hh"

// Helper Funktion fuer Fakultaet
// berechnet Fakultaet linear iterativ
int fakIter(int produkt, int zaehler, int ende) {
return cond(zaehler>ende,
produkt,
fakIter(produkt*zaehler,zaehler+1,ende));
}

// Berechnet die Fakulaet einer Zahl
int fakultaet(int n) {
return fakIter(1,1,n);
}

// Berechnet den Binomial Koeffizienten (n ueber k) durch seine explizite
// Darstellung
int binomial_fast(int n, int k) {
return fakultaet(n)/(fakultaet(k) * fakultaet(n-k));
}

int main(int argc, char **argv) {
return print(binomial_fast(readarg_int(argc, argv, 1),
readarg_int(argc, argv, 2)));
}

BIN
ws2019/ipi/uebungen/ipi3.pdf Ver arquivo


+ 177
- 0
ws2019/ipi/uebungen/ipi3.tex Ver arquivo

@@ -0,0 +1,177 @@
\documentclass{../../../lecture}

\usepackage{enumerate}

\begin{document}

\begin{aufgabe} Algorithmische Komplexität
\begin{enumerate}[a)]
\item Laufzeiten der verschiedenen algorithmischen Komplexitäten $f(n)$ für $2n$ in Abhängigkeit von
der Ausgangslaufzeit für $n$.

\begin{tabular}{|l|l|l|l|}
\hline
$f(n)$ & 4 Sekunden & 10 Sekunden & 100 Sekunden \\ \hline
$\text{ld}(2n)$ & 5s & 11s & 101s \\ \hline
$2n$ & 8s & 20s & 200s \\ \hline
$2n \text{ ld}(2n)$ & 13,49s & 29,13s & 244,64s\\ \hline
$(2n)^{3}$ & 32s & 80s & 800s \\ \hline
$2^{2n}$ & 16s & 100s & 10000s\\ \hline
\end{tabular}

\item
\begin{enumerate}[1.]
\item $1$
\item $\log \log n$
\item $\log n$
\item $n^{\epsilon}$
\item $n^{c}$
\item $n^{\log n}$
\item $c^{n}$
\item $n^{n}$
\item $c^{\left( c^{n} \right) }$
\end{enumerate}

\item Beweisen Sie folgende Behauptungen
\begin{enumerate}
\item $x^{a} = O(x^{b}) \iff a -b \le 0$
\begin{proof}
Seien $a, b, x \in \R$ mit $x > 1 $

Zu zeigen: $\exists c \in \R$: $x^{a} \le c x^{b} \iff a \le b$

Wegen $x > 1$ ist $\ln(x) > 0$ und $\ln(x)$ streng monoton steigend, wähle $c \ge 1$, dann
folgt:
\begin{align*}
&a \le b \\
\iff &\ln(x) \cdot a \le \ln(x) \cdot b \le \ln(c) + \ln(x) \cdot b \\
\iff &\ln(x^{a}) \le \ln(c\cdot b^{x})\\
\iff & x^{a} \le c x^{b}
.\end{align*}
\end{proof}
\item $\log_a(x) = \Theta(\log_b(x))$ $\forall a, b \in \R^{+}$
\begin{proof}
Seien $a, b, x \in \R^{+}$.

Zu zeigen: $\exists c \in \R$: $\log_a(x) = c \cdot \log_b(x)$.
\begin{align*}
&\log_a(x) = \log_a(x) \\
\implies & \log_a(x) = \log_a(b) \cdot \frac{\log_a(x)}{\log_a(b)} \\
\implies & \log_a(x) = \log_a(b) \cdot \log_b(x)
.\end{align*}
Mit $c := \log_a(b)$ folgt damit:
\[
\log_a(x) = c \cdot \log_b(x)
.\]
\end{proof}
\item $a^{x} = O(b^{x}) \iff 0 \le a \le b$
\begin{proof}
Seien $a, b, x \in \R$ mit $x \ge 0$

Zu zeigen: $\exists c \in \R$: $a^{x} \le c b^{x} \iff 0 \le a \le b$
\begin{align*}
&0 \le a \le b \\
\iff &a^{x} \le b^{x} \le b^{x+1} = b \cdot b^{x}
.\end{align*}
Mit $c := b$ folgt damit:
\[
a^{x} \le c \cdot b^{x} \iff 0 \le a \le b
.\]
\end{proof}
\end{enumerate}
\end{enumerate}
\end{aufgabe}

\begin{aufgabe} Klassischer Euklidischer Algorithmus

Sei $a, b \in \N_0, a+b > 0$ gegeben.
\[
\text{ggT}(a, b) = \begin{cases}
a & b =0 \\
\text{ggT}(b,a) & a < b \\
\text{ggT}(a - b, b) & a \ge b \\
\end{cases}
.\]

\begin{enumerate}
\item Für $a \ge b > 0$ gilt:
\[
\text{ggT}(a,b) = \text{ggT}(a -b, b)
.\]
\begin{proof}
Wegen $b \neq 0$ und $a \ge b$ folgt nach Definition:
\[
\text{ggT}(a, b) = \text{ggT}(a -b, b)
.\]
\end{proof}
\item Der klassische Euklidische Algorithmus terminiert.
\begin{proof}
Seien $(a_n)_{n\in\N} \in \N_0$ und $(b_n)_{n\in\N} \in \N_0$ Folgen mit $a_1 = a$ und
$b_1 = b$.

Sei $n \in \N$ beliebig.
\begin{itemize}
\item Falls $b_n = 0$ terminiert der Algorithmus direkt.
\item
Falls $a_n < b_n$, folgt nach Definition:
\[
a_{n+1} = b_n \text{ und } b_{n+1} = a_n < b_n
.\] Damit folgt:
\[
b_{n+1} < b_n
.\]
\item Falls $a_n \ge b_n$ folgt nach Definition:
\[
a_{n+1} = (a_n - b_n) \in \N_0 \text{ und } b_{n+1} = b_n
.\] Wegen $a_{n+1} < a_n $ folgt, dass $\exists k \in \N$: $a_{n+k} < b_n$. Dann
tritt wieder der zweite Fall ein, d.h.
\[
b_{n+k+1} < b_n
.\]
\end{itemize}

Damit folgt, dass $(b_n)_{n\in\N}$ für fast alle $n \in \N$ streng monoton fällt.
Da $(b_n)_{n \in \N} \in \N_0$, folgt:
\[
\exists k \in \N\text{: } b_k = 0
.\]
Damit terminiert der \textit{klassische Euklidische Algorithmus} immer.
\end{proof}
\end{enumerate}
\end{aufgabe}

\begin{aufgabe}
Binomialkoeffizient
\begin{enumerate}[a)]
\item Programm siehe \textit{binomial.cc}

Für $n = 35$ und $k = 18$ benötigt das Programm mehr als 20 Sekunden für die Berechnung.

Für $n = 34$ und $k = 18$ liefert das Programm $-2091005866$. Das liegt an der
begrenzten Größe des Datentyps \textbf{int}. Bei Überschreitung der maximalen Größe
beginnt der Wert erneut bei dem Minimalwert des Datentyps \textbf{int}. Deshalb können
wir dann negative Ergebnisse erhalten.
\item Der Rechenaufwand für die rekursive Berechnung des Binomialkoeffizienten ist:
\begin{align*}
A_{n, 0} = A_{n, n} = A_{n, k>n} = 1 \\
A_{n,k} = A_{n-1, k-1} + A_{n-1, k}
.\end{align*}
\item Programm siehe \textit{binomial\_fast.cc}

Die schnellere Variante hat die Komplexität $O(n)$, da die Komplexität der Fakultätsfunktion
$O(n)$ ist und diese einfach dreimal ausgeführt wird.

Programm (c) ist deutlich schneller als Programm (a) für größere Zahlen $n$ und $k$. Aufgrund
der Verwendung der Fakultät, wird allerdings schneller die maximale Größe eines \textbf{int}'s
erreicht. Dadurch erhalten wir bereits für recht kleine Werte für $n$ und $k$ falsche Ergebnisse.
\item Ein effizienter Algorithmus berechnet jede Zeile linear iterativ, aus der vorhergehenden
Zeile, damit ist die Komplexität $O(n)$.

Der Unterschied entsteht daraus, dass bei (a) einzelne Binomialkoeffizienten mehrfach
ausgerechnet werden müssen und bei (d) jeder Binomialkoeffizient genau einmal ausgerechnet wird.
\end{enumerate}
\end{aufgabe}

\end{document}

+ 14
- 0
ws2019/ipi/uebungen/uebung3.cpp Ver arquivo

@@ -0,0 +1,14 @@
#include "cpp_headers/fcpp.hh"

int binomial(int n, int k) {
return cond(k > n,
0,
cond(k == 0 || n == k,
1,
binomial(n-1, k-1) + binomial(n-1, k)));
}

int main(int argc, char **argv) {
return print(binomial(readarg_int(argc, argv, 1),
readarg_int(argc, argv, 2)));
}

Carregando…
Cancelar
Salvar