Zuletzt geändert: Fr, 29.12.2006

«K12/K13» Vortragsfolien.latexs «PDF», «POD»



Download
% Komprimierung ist allgegenwärtig. Beispielsweise findet eine andauernde
% Komprimierung bei den natürlichen Sprachen statt: Oft benutzte Wörter
% verkürzen sich im Laufe der Zeit: "Haus", "Geld", "Tisch".
% Dieser Vortrag erklärt anschaulich die Grundprinzipien der Komprimierung
% anhand dreier einfacher Kompressionsverfahren. Auch vergleichen wir die
% Effektivität der behandelten Verfahren.
\documentclass[12pt,compress]{beamer}
\usepackage{amsmath}
\usepackage{url}
\usepackage{ucs}
\usepackage[utf8x]{inputenc}
\usepackage[ngerman]{babel}
\usepackage{ulem}  % sout
\usepackage{multicol}
\usepackage{comment}
\usepackage{setspace}

% Manual syntax highlighting
\newcommand{\synfunc}   [1]{\color{blue!50!black}#1\color{black}}
\newcommand{\synstr}    [1]{\color{red!50!black}#1\color{black}}
\newcommand{\synvar}    [1]{\color{purple!50!black}#1\color{black}}
\newcommand{\synclass}  [1]{\color{green!50!black}#1\color{black}}
\newcommand{\syncomment}[1]{\color{blue!20!black}#1\color{black}}
\newcommand{\syncool}   [1]{\color{beamer@blendedblue}#1\color{black}}
\newcommand{\synoder}      {\ \ \color{black}$\vee$\ \ }
\newcommand{\hr}        {\rule[4pt]{\textwidth}{0.1pt}\\}
\newcommand{\hicolor}   [1]{\color[rgb]{0.6,0.2,0.8}#1\color{black}}
\newcommand{\synhilight}[1]{\hicolor{\textbf{#1}}}

\newcommand{\doofcomment}{\ \ \syncomment{\# :-(}}
\newcommand{\gutcomment} {\ \ \syncomment{\# :)}}

\title{Komprimierung}
\author{Ingo~Blechschmidt, \\ Michael~Hartmann}
\date{6. Dezember 2006}

\usetheme{Warsaw}  %Warsaw, Berkeley?
\usecolortheme{seahorse}
\usefonttheme{serif}
\useinnertheme{rectangles}
\usepackage{bookman}
\setbeamercovered{transparent}

\begin{document}

\frame{\titlepage}

\frame[t]{
  \frametitle{Inhalt}
  \tableofcontents
}

\section[RLE]{Laufl"angenkodierung}
\frame[t]{
  \frametitle{Lauflängenkodierung (RLE)}

  \begin{itemize}
    \item Idee: Ersetzung von sich direkt wiederholenden Zeichen durch eine
          Anweisung
    \item Beispiel: \\
	  \texttt{aaabbccccccde} → \\
	  3 a, bb, 6 c, de
    \item Sehr leicht umsetzbar
    \item Effizient nur in Spezialfällen, beispspielsweise großen einfarbigen Bereichen
	  in Bildern
    \end{itemize}
}

\section[Arithm.]{Arithmetische Kodierung}
  \frame[t]{
  \frametitle{Arithmetische Kodierung}

  \begin{enumerate}
    \item Unterteilung eines Einheitsintervalls entsprechend den relativen Häufigkeiten der
	  Zeichen des Texts
    \item Weitere Unterteilung bis alle Zeichen genutzt
    \item Kodierung einer beliebigen Zahl des schärfsten Intervalls
  \end{enumerate}
}

\frame{
  \begin{center}
    \includegraphics[scale=0.45]{images/intervallunterteilung.png}
  \end{center}
}

\section[Shannon--Fano]{Shannon--Fano-Kodierung}
\subsection{Grundideen}
\frame[t]{
  \frametitle{Shannon--Fano-Kodierung}
  
  \begin{block}{Shannon--Fano-Kodierung}
    Entropiekodierung ("`Kompressionsverfahren"')
  \end{block}

  %Grundidee: Möglichst hohe Entropie durch effiziente Darstellung

  \begin{itemize}
    \item
      \begin{tabbing}
	Darstellung \= \textsl{häufiger} \= Zeichen durch \= \textsl{kurze} \= Bitfolgen \kill
	Darstellung \> \textsl{häufiger} \> Zeichen durch \> \textsl{kurze} \> Bitfolgen; \\
	Darstellung \> \textsl{seltener} \> Zeichen durch \> \textsl{lange} \> Bitfolgen
      \end{tabbing}
    \item Eindeutigkeit der Bitfolgen ("`Präfixfreiheit"')
  \end{itemize}
  
  Problembeispiel:
  $A \mapsto 10 \quad B \mapsto 01 \quad C \mapsto 0$ \bigskip

  $\left.\begin{array}{@{}l}
    ABC \mapsto 10010 \\
    ACA \mapsto 10010
  \end{array}\right\}$ nicht eindeutig
}

\subsection{Algorithmus}
\frame[t]{
  \frametitle{Algorithmus}
  \begin{enumerate}
    \item Sortierung der Zeichen nach rel. Häufigkeit
    \item Einteilung der Zeichen in zwei Gruppen, sodass Summen der
          Häufigkeiten etwa gleich
    \item So lange fortfahren, bis Entsprechung jedes Zeichens durch einen Pfad
	  im Baum
  \end{enumerate}
}

\subsection{Beispiel}
\frame[t]{
  \frametitle{Beispiel}
  Text (39 Zeichen): \\
  {\small ABADDCCAABABEDAECBDDDAAAABAAAABBCAECECE}
  \medskip

  \begin{tabular}{@{}l|rrrrr}
    Zeichen         &  A & B & C & D & E \\\hline
    Abs. Häufigkeit & 15 & 7 & 6 & 6 & 5
  \end{tabular}

  \vspace*{5mm}%
  \includegraphics[scale=0.3]{images/shannon-baum.png} % ausprobieren? wie meinst? kompilieren und anschauen. nein, auf keinen fall, wer weiss, was da nicht alles kaputt gehen kann. try 'n error
  % wollen wir das bild um 90° grad drehen (geht einfach) aber dann muss man halt den kopf neigen
  % oder wir schneiden die folie aus
}

\frame[t]{
  \frametitle{Beispiel}

  \hspace*{-1cm}%
  \begin{minipage}{1.1\textwidth}\begin{multicols}{2}
    \scriptsize
    \begin{itemize}
      \item Original \\ ($117 \,\mathrm{bit}$; Entropie $\approx 0{,}82 \,\mathrm{bit}$): \\
	    {\tiny
	      00000100001101101001000000000
	      10000011000110001000100010110
	      11011000000000000001000000000
	      000001001010000100010100010100
	    }\bigskip

	    \begin{tabular}{@{}l|rrrrr}
	      Zeichen         &  A & B & C & D & E \\\hline
	      Abs. Häufigkeit & 15 & 7 & 6 & 6 & 5 \\\hline
	      Benötigte Bits  &  3 & 3 & 3 & 3 & 3
	    \end{tabular}\bigskip

	    \begin{tabular}{@{}l|rr}
	      Bit             & 0  & 1 \\\hline
	      Abs. Häufigkeit & 87 & 30
	    \end{tabular}\bigskip

	    $A \mapsto 000$ \\
	    $B \mapsto 001$ \\
	    $C \mapsto 010$ \\
	    $D \mapsto 011$ \\
	    $E \mapsto 100$

            \columnbreak

      \item Komprimiert \\ ($89 \,\mathrm{bit}$; Entropie $\approx 0{,}99261 \,\mathrm{bit}$ (!)): \\
	    {\tiny
	      1110110010010101111110
	      1110000001110000110001
	      0010011111111110111111
	      11101001110000100001000
	    }\bigskip

	    \begin{tabular}{@{}l|rrrrr}
	      Zeichen         &  A & B & C & D & E \\\hline
	      Abs. Häufigkeit & 15 & 7 & 6 & 6 & 5 \\\hline
	      Benötigte Bits  &  2 & 2 & 2 & 3 & 3
	    \end{tabular}\bigskip

	    % 11101100100101011111101110000001110000110001001001111111111011111111101001110000100001000 (0.99 WOW! fast 1!!!) die entropie koennte doch 8 sein? nicht bei einem alphabet von nur zwei zeichen, dort ist die maximale entropie ld 2 = 1 optimal
	    % 40/89*-l(40/89)/l(2) + 49/89*-l(49/89)/l(2) =
	    % .99261088987494049154
	    \begin{tabular}{@{}l|rr}
	      Bit             & 0  & 1 \\\hline
	      Abs. Häufigkeit & 40 & 49
	    \end{tabular}\bigskip

	    % 11  B 10  C 01  D 001  E 000 
	    $A \mapsto 11$ \\
	    $B \mapsto 10$ \\
	    $C \mapsto 01$ \\
	    $D \mapsto 001$ \\
	    $E \mapsto 000$

    \end{itemize}
  \end{multicols}\end{minipage}
}

\section[Huffman]{Huffman-Kodierung}
\subsection{Algorithmus}
\frame[t]{
  \frametitle{Huffman-Kodierung: Algorithmus}

  \begin{enumerate}
    \item Wald erstellen mit allen vorkommenden Zeichen
    \item Neuen Baum erstellen; die beiden Bäume mit geringster Häufigkeit als
	  Blätter nutzen
    \item So lange fortfahren, bis nur noch ein Baum vorhanden
  \end{enumerate}
}

\subsection{Beispiel}
\frame[t]{
  \frametitle{Beispiel}
  Text (39 Zeichen): \\
  {\small ABADDCCAABABEDAECBDDDAAAABAAAABBCAECECE}
  \medskip

  \begin{tabular}{@{}l|rrrrr}
    Zeichen         &  A & B & C & D & E \\\hline
    Abs. Häufigkeit & 15 & 7 & 6 & 6 & 5
  \end{tabular}

  \vspace*{5mm}%
  \includegraphics[scale=0.35]{images/huffman-baum.png}
}

\frame[t]{
  \frametitle{Beispiel}

  \hspace*{-1cm}%
  \begin{minipage}{1.1\textwidth}\begin{multicols}{2}
    \scriptsize
    \begin{itemize}
      \item Original \\ ($117 \,\mathrm{bit}$; Entropie $\approx 0{,}82 \,\mathrm{bit}$): \\
	    {\tiny
	      00000100001101101001000000000
	      10000011000110001000100010110
	      11011000000000000001000000000
	      000001001010000100010100010100
	    }\bigskip

	    \begin{tabular}{@{}l|rrrrr}
	      Zeichen         &  A & B & C & D & E \\\hline
	      Abs. Häufigkeit & 15 & 7 & 6 & 6 & 5 \\\hline
	      Benötigte Bits  &  3 & 3 & 3 & 3 & 3
	    \end{tabular}\bigskip

	    \begin{tabular}{@{}l|rr}
	      Bit             & 0  & 1 \\\hline
	      Abs. Häufigkeit & 87 & 30
	    \end{tabular}\bigskip

	    $A \mapsto 000$ \\
	    $B \mapsto 001$ \\
	    $C \mapsto 010$ \\
	    $D \mapsto 011$ \\
	    $E \mapsto 100$

            \columnbreak

      \item Komprimiert \\ ($87 \,\mathrm{bit}$; Entropie $\approx 0{,}99762 \,\mathrm{bit}$ (!!!)): \\

	    {\tiny
              0100011011010110100100
	      0100111110011110110011
	      0110110000010000001001
	      001010111101111101111
	    }\bigskip

	    \begin{tabular}{@{}l|rrrrr}
	      Zeichen         &  A & B & C & D & E \\\hline
	      Abs. Häufigkeit & 15 & 7 & 6 & 6 & 5 \\\hline
	      Benötigte Bits  &  1 & 3 & 3 & 3 & 3
	    \end{tabular}\bigskip

	    \begin{tabular}{@{}l|rr}
	      Bit             & 0  & 1 \\\hline
	      Abs. Häufigkeit & 41 & 46
	    \end{tabular}\bigskip

	    % 0  B 100  C 101  D 110  E 111
	    $A \mapsto 0$ \\
	    $B \mapsto 100$ \\
	    $C \mapsto 101$ \\
	    $D \mapsto 110$ \\
	    $E \mapsto 111$

    \end{itemize}
  \end{multicols}\end{minipage}
}

\subsection{Verwendung}

\frame[t]{
  \frametitle{Verwendung}

  Verwendung von Deflate (LZ77 kombiniert mit Huffman-Kodierung):

  \begin{itemize}
    \item zip
    \item gzip
    \item png
    \item tiff
    \item pdf
    \item cab
  \end{itemize}
}


\section[Grenzen]{Grenzen der Komprimierbarkeit}
\frame[t]{
  \frametitle{Grenzen der Komprimierbarkeit}

  \begin{itemize}
    \item Entropie als untere Schranke der Komprimierbarkeit
    \item Beweis der Nichtexistenz \\
	  eines Perfekten Verfahrens™:
	  \begin{itemize}
	    \item \textsl{Annahme:} Existenz eines Verfahrens, dass jeden beliebigen
		  Text um ein Bit verkürzt
	    \item \textsl{Dann:} Rekursive Anwendung denkbar
	    \item \textsl{Schluss:} Komprimierung jedes beliebigen Texts auf ein Bit
	    \item \textsl{Aber:} $256 < \infty$!
	  \end{itemize}
  \end{itemize}
}

\frame{
  \begin{center}
    \Huge Fragen?
  \end{center}
}

\appendix
\section{Bildquellen}
\frame[t]{
  \frametitle{Bildquellen}

  \scriptsize
  \begin{itemize}
    \item \url{http://upload.wikimedia.org/wikipedia/de/d/db/ShannonCodeAlg.png}
    \item \url{http://upload.wikimedia.org/wikipedia/de/d/d8/HuffmanCodeAlg.png}
    \item \url{http://upload.wikimedia.org/wikipedia/de/5/56/ArithmetischesCodierenBeispiel.png}
  \end{itemize}
}

\end{document}