diff --git a/latex b/latex index 4be2f5e..5f66b9e 160000 --- a/latex +++ b/latex @@ -1 +1 @@ -Subproject commit 4be2f5ed0d92c58b0ca00fa475f0e11cd9569246 +Subproject commit 5f66b9e1dbb88e17a21deb5ba22d0b59ae867e17 diff --git a/semester3/ti/parts/languages-problems/alphabet.tex b/semester3/ti/parts/languages-problems/alphabet.tex index 4728927..a8906db 100644 --- a/semester3/ti/parts/languages-problems/alphabet.tex +++ b/semester3/ti/parts/languages-problems/alphabet.tex @@ -3,7 +3,7 @@ \begin{definition}[]{Alphabet} Eine endliche, nicht leere Menge $\Sigma$. Elemente sind Buchstaben (Zeichen \& Symbole). - Beispiele: $\Sigma_{\text{bool}}$, $\Sigma_{\text{lat}}$ latin characters, $\Sigma_{\text{Tastatur}}$, $\Sigma_m$ $m$-adische Zahlen ($m$-ary numbers, zero index) + Beispiele: $\alphabets{bool}$, $\alphabets{lat}$ latin characters, $\alphabets{Tastatur}$, $\Sigma_m$ $m$-adische Zahlen ($m$-ary numbers, zero index) \end{definition} \begin{definition}[]{Wort} @@ -36,7 +36,7 @@ Das Problem hierbei ist jedoch, dass dies nicht so effizient ist, besonders nich \begin{definition}[]{Umkehrung} - Sei $a = a_1 a_2 \ldots a_n$, wobei $a_i \in \Sigma$ für $i \in \{1, 2, \ldots, n\}$, dann ist die Umkehrung von $a$, $a^{\text{R}} = a_n a_{n - 1} \ldots a_1$ + Sei $a = a_1 a_2 \ldots a_n$, wobei $a_i \in \Sigma$ für $i \in \{1, 2, \ldots, n\}$, dann ist die Umkehrung von $a$, $a^\tR = a_n a_{n - 1} \ldots a_1$ \end{definition} @@ -99,12 +99,12 @@ Um das Ganze einfacher zu machen, teilen wir auf: Wir zeigen also erst $L_1 L_2 Für Sprachen $L_1, L_2$ und $L_3$ über $\Sigma$ gilt: $L_1 (L_2 \cap L_3) \subseteq L_1 L_2 \cap L_1 L_3$ \end{lemma} -\shortlemma Es existieren $U_1, U_2, U_3 \in (\Sigma_{\text{bool}})^*$, so dass $U_1 (U_2 \cap U_3) \subsetneq U_1 U_2 \cap U_1 U_3$ +\shortlemma Es existieren $U_1, U_2, U_3 \in \wordbool$, so dass $U_1 (U_2 \cap U_3) \subsetneq U_1 U_2 \cap U_1 U_3$ \begin{definition}[]{Homomorphismus} - $\Sigma_1, \Sigma_2$ beliebige Alphabete. Ein \bi{Homomorphismus} von $\Sigma^*_1$ nach $\Sigma^*_2$ ist jede Funktion $h: \Sigma_1^* \rightarrow \Sigma_2^*$ mit: + $\Sigma_1, \Sigma_2$ beliebige Alphabete. Ein \bi{Homomorphismus} von $\wordm{1}$ nach $\wordm{2}$ ist jede Funktion $h: \Sigma_1^* \rightarrow \Sigma_2^*$ mit: \begin{enumerate}[label=\textit{(\roman*)}] \item $h(\lambda) = \lambda$ \item $h(uv) = h(u) \cdot h(v) \smallhspace \forall u, v \in \Sigma_1^*$ diff --git a/semester3/ti/parts/languages-problems/kolmogorov-complexity.tex b/semester3/ti/parts/languages-problems/kolmogorov-complexity.tex index d65cf63..34cd04f 100644 --- a/semester3/ti/parts/languages-problems/kolmogorov-complexity.tex +++ b/semester3/ti/parts/languages-problems/kolmogorov-complexity.tex @@ -1,3 +1,43 @@ \newpage \subsection{Kolmogorov-Komplexität} -Die Idee hinter der Kolmogorov-Komplextät ist zu quanitifizieren, wie viele +Falls ein Wort $x$ eine kürzere Darstellung hat, wird es \bi{komprimierbar genannt} und wir nennen die Erzeugung dieser Darstellung eine \bi{Komprimierung} von $x$. + +Eine mögliche Idee, um den Informationsgehalt eines Wortes zu bestimmen, wäre einem komprimierbaren Wort einen kleinen Informationsgehalt zuzuordnen und einem unkomprimierbaren Wort einen grossen Informationsgehalt zuzuordnen. + +Wenn wir also das Wort $011011011011011011011011$ haben, so kann man es auch als $(011)^8$ darstellen und hat so also einen kleineren Informationsgehalt als bspw. $0101101000101101001110110010$. + +Die Idee mit der Komprimierung den Informationsgehalt zu bestimmen ist jedoch nicht ideal, da für jede Komprimierung bei unendlich langen Wörtern immer eine weitere Komprimierung existiert, die für unendlich viele Wörter besser geeignet ist. + +Hier kommt die Kolmogorov-Komplexit zum Zuge: Sie bietet eine breit Gültige Definition des Komplexitätsmasses. + + +\begin{definition}[]{Kolmogorov-Komplexität} + Für jedes Wort $x \in \wordbool$ ist die \bi{Kolmogorov-Komplexität $K(x)$ des Wortes $x$} das Minimum der binären Längen der Pascal-Programme, die $x$ generieren. +\end{definition} + +Hierbei ist mit der binären Länge die Anzahl Bits gemeint, die beim Übersetzen des Programms in einen vordefinierten Maschinencode entsteht. + +Ein Pascal-Programm in diesem Kurs ist zudem nicht zwingend ein Programm in der effektiven Programmiersprache Pascal, sondern eine Abwandlung davon, worin es auch erlaubt ist, gewisse Prozesse zu beschreiben und nicht als Code auszuformulieren, da das nicht das Ziel dieses Kurses ist. + + +\begin{lemma}[]{Kolmogorov-Komplexität} + Für jedes Wort $x \in \wordbool$ existiert eine Konstante $d$ so dass $K(x) \leq |x| + d$ +\end{lemma} +\inlineproof Für jedes $x \in \wordbool$ kann folgendes Programm $A_x$ verwendet werden: + +\begin{minted}{pascal} +A_x: begin + write(x); + end +\end{minted} +Alle Teile, ausser $x$ sind dabei von konstanter Länge, also ist die Länge der Bit-repräsentation des Programms ausschliesslich von der binären Länge des Wortes $x$ abhängig. + +\proven + + +Für regelmässige Wörter gibt es natürlich Programme, bei denen das Wort nicht als komplette Variable vorkommt. +Deshalb haben diese Wörter auch (meist) eine kleinere Kolmogorov-Komplexität. + + +\fancydef{$K(n)$ für $n \in \N$} Die \bi{Kolmogorov-Komplexität einer natürlichen Zahl $n$} ist $K(n) = K(\text{Bin}(n))$, +wobei $\text{Bin}(x) = \ceil{\log_2(x + 1)}$ % TODO: Verify correctness here diff --git a/semester3/ti/ti-summary.pdf b/semester3/ti/ti-summary.pdf index 9bf7677..4e4e4a3 100644 Binary files a/semester3/ti/ti-summary.pdf and b/semester3/ti/ti-summary.pdf differ diff --git a/semester3/ti/ti-summary.tex b/semester3/ti/ti-summary.tex index d84e78a..e8f6f59 100644 --- a/semester3/ti/ti-summary.tex +++ b/semester3/ti/ti-summary.tex @@ -2,7 +2,7 @@ \newcommand{\dir}{~/projects/latex} \input{\dir/include.tex} -\load{recommended} +\load{full} \setLang{de} \setup{Theoretische Informatik}