2
0
Fork 0
mirror of https://github.com/MartinThoma/LaTeX-examples.git synced 2025-04-19 11:38:05 +02:00

Move publications from /documents to /publications

This commit is contained in:
Martin Thoma 2015-11-23 14:55:45 +01:00
parent 9438adee4e
commit 114356002e
40 changed files with 0 additions and 0 deletions

View file

@ -0,0 +1,2 @@
data/cora
data/dblp

View file

@ -0,0 +1,41 @@
Für den DYCOS-Algorithmus wurde in \cite{aggarwal2011} bewiesen, dass sich nach
Ausführung von DYCOS für einen unbeschrifteten Knoten mit einer
Wahrscheinlichkeit von höchstens $(|\L_t|-1)\cdot e^{-l \cdot b^2 / 2}$ eine
Knotenbeschriftung ergibt, deren relative Häufigkeit weniger als $b$ der
häufigsten Beschriftung ist. Dabei ist $|\L_t|$ die Anzahl der Beschriftungen
und $l$ die Länge der Random-Walks.
Außerdem wurde experimentell anhand des DBLP-Datensatzes\footnote{http://dblp.uni-trier.de/}
und des CORA-Datensatzes\footnote{http://people.cs.umass.edu/~mccallum/data/cora-classify.tar.gz}
gezeigt (vgl. \cref{tab:datasets}), dass die Klassifikationsgüte nicht wesentlich von der Anzahl der Wörter mit
höchstem Gini-Koeffizient $m$ abhängt. Des Weiteren betrug die Ausführungszeit
auf einem Kern eines Intel Xeon $\SI{2.5}{\GHz}$ Servers mit
$\SI{32}{\giga\byte}$~RAM für den DBLP-Datensatz unter $\SI{25}{\second}$,
für den CORA-Datensatz sogar unter $\SI{5}{\second}$. Dabei wurde eine
für CORA eine Klassifikationsgüte von \SIrange{82}{84}{\percent} und
auf den DBLP-Daten von \SIrange{61}{66}{\percent} erreicht.
\begin{table}[htp]
\centering
\begin{tabular}{|l||r|r|r|r|}\hline
\textbf{Name} & \textbf{Knoten} & \textbf{davon beschriftet} & \textbf{Kanten} & \textbf{Beschriftungen} \\ \hline\hline
\textbf{CORA} & \num{19396} & \num{14814} & \num{75021} & 5 \\
\textbf{DBLP} & \num{806635} & \num{18999 } & \num{4414135} & 5 \\\hline
\end{tabular}
\caption{Datensätze, die für die experimentelle Analyse benutzt wurden}
\label{tab:datasets}
\end{table}
Obwohl es sich nicht sagen lässt, wie genau die Ergebnisse aus
\cite{aggarwal2011} zustande gekommen sind, eignet sich das
Kreuzvalidierungsverfahren zur Bestimmung der Klassifikationsgüte wie es in
\cite{Lavesson,Stone1974} vorgestellt wird:
\begin{enumerate}
\item Betrachte nur $V_{L,T}$.
\item Unterteile $V_{L,T}$ zufällig in $k$ disjunkte Mengen $M_1, \dots, M_k$.
\item \label{schritt3} Teste die Klassifikationsgüte, wenn die Knotenbeschriftungen
aller Knoten in $M_i$ für DYCOS verborgen werden für $i=1,\dots, k$.
\item Bilde den Durchschnitt der Klassifikationsgüten aus \cref{schritt3}.
\end{enumerate}
Es wird $k=10$ vorgeschlagen.

View file

@ -0,0 +1,80 @@
\documentclass[technote,a4paper,leqno]{IEEEtran}
\pdfoutput=1
%---- Sonderzeichen-------%
\usepackage[utf8]{inputenc} % this is needed for umlauts
\usepackage[ngerman]{babel} % this is needed for umlauts
\usepackage[T1]{fontenc} % this is needed for correct output of umlauts in pdf
%---- Codierung----%
\usepackage{graphicx}
\usepackage{url}
%----- Mathematischer Zeichenvorrat---%
\usepackage{amsmath}
\usepackage{amssymb}
\usepackage{enumerate}
% fuer die aktuelle Zeit
\usepackage{scrtime}
\usepackage{listings}
\usepackage{hyperref}
\usepackage{cite}
\usepackage{parskip}
\usepackage[framed,amsmath,thmmarks,hyperref]{ntheorem}
\usepackage{algorithm}
\usepackage[noend]{algpseudocode}
\usepackage{csquotes}
\usepackage{subfig} % multiple figures in one
\usepackage{caption}
\usepackage{tikz}
\let\labelindent\relax
\usepackage{enumitem}
\usepackage[german]{cleveref} % nameinlink - arxiv has too old LaTeX :-(
\usepackage{braket}
\allowdisplaybreaks
\usetikzlibrary{backgrounds}
\usepackage[binary-units=true]{siunitx}
\sisetup{range-phrase=--}
\usepackage{mystyle}
\usepackage{microtype}
\setcounter{tocdepth}{3}
\setcounter{secnumdepth}{3}
\hypersetup{
pdftitle = {Über die Klassifizierung von Knoten in dynamischen Netzwerken mit textuellen Inhalten},
pdfauthor = {Martin Thoma}, % ORCID: http://orcid.org/0000-0002-6517-1690
pdfkeywords = {DYCOS}
}
\begin{document}
\title{Über die Klassifizierung von Knoten in dynamischen Netzwerken mit Inhalt}
\author{Martin Thoma}
\date{17.01.2014}
\maketitle
\begin{abstract}%
\input{abstract}
\end{abstract}
\section{Einleitung}
\input{Einleitung}
\section{Related Work}
\input{Related-Work}
\section{DYCOS}
\input{DYCOS-Algorithmus}
\section{Analyse des DYCOS-Algorithmus}
\input{Analyse}
\section{Probleme des DYCOS-Algorithmus}
\input{SchwaechenVerbesserungen}
\section{Ausblick}
\input{Ausblick}
\bibliographystyle{IEEEtranSA}
\bibliography{literatur}
\end{document}

View file

@ -0,0 +1,22 @@
Den DYCOS-Algorithmus kann in einigen Aspekten erweitert werden. So könnte man
vor der Auswahl des Vokabulars jedes Wort auf den Wortstamm zurückführen. Dafür
könnte zum Beispiel der in \cite{porter} vorgestellte Porter-Stemming-Algorithmus verwendet werden. Durch diese Maßnahme wird das Vokabular kleiner
gehalten wodurch mehr Artikel mit einander durch Vokabular verbunden werden
können. Außerdem könnte so der Gini-Koeffizient ein besseres Maß für die
Gleichheit von Texten werden.
Eine weitere Verbesserungsmöglichkeit besteht in der Textanalyse. Momentan ist
diese noch sehr einfach gestrickt und ignoriert die Reihenfolge von Wörtern
beziehungsweise Wertungen davon. So könnte man den DYCOS-Algorithmus in einem
sozialem Netzwerk verwenden wollen, in dem politische Parteiaffinität von
einigen Mitgliedern angegeben wird um die Parteiaffinität der restlichen
Mitglieder zu bestimmen. In diesem Fall macht es jedoch einen wichtigen
Unterschied, ob jemand über eine Partei gutes oder schlechtes schreibt.
Eine einfache Erweiterung des DYCOS-Algorithmus wäre der Umgang mit mehreren
Beschriftungen.
DYCOS beschränkt sich bei inhaltlichen Zweifachsprüngen auf die
Top-$q$-Wortknoten, also die $q$ ähnlichsten Knoten gemessen mit der
Aggregatanalyse, allerdings wurde bisher noch nicht untersucht, wie der
Einfluss von $q \in \mathbb{N}$ auf die Klassifikationsgüte ist.

View file

@ -0,0 +1,168 @@
\subsection{Überblick}
DYCOS (\underline{DY}namic \underline{C}lassification algorithm with
c\underline{O}ntent and \underline{S}tructure) ist ein
Knotenklassifizierungsalgorithmus, der Ursprünglich in \cite{aggarwal2011}
vorgestellt wurde.
Ein zentrales Element des DYCOS-Algorithmus ist der sog. {\it Random Walk}:
\begin{definition}[Random Walk, Sprung]
Sei $G = (V, E)$ mit $E \subseteq V \times V$ ein Graph und
$v_0 \in V$ ein Knoten des Graphen.
Ein Random Walk der Länge $l$ auf $G$, startend bei $v_0$ ist nun der
zeitdiskrete stochastische Prozess, der $v_i$ auf einen zufällig gewählten
Nachbarn $v_{i+1}$ abbildet (für $i \in 0, \dots, l-1$). Die Abbildung $v_i
\mapsto v_{i+1}$ heißt ein Sprung.
\end{definition}
Der DYCOS-Algorithmus klassifiziert einzelne Knoten, indem $r$ Random Walks der
Länge $l$, startend bei dem zu klassifizierenden Knoten $v$ gemacht werden.
Dabei werden die Beschriftungen der besuchten Knoten gezählt. Die Beschriftung,
die am häufigsten vorgekommen ist, wird als Beschriftung für $v$ gewählt. DYCOS
nutzt also die sog. Homophilie, d.~h. die Eigenschaft, dass Knoten, die nur
wenige Hops von einander entfernt sind, häufig auch ähnlich sind \cite{bhagat}.
Der DYCOS-Algorithmus arbeitet jedoch nicht direkt auf dem Graphen, sondern
erweitert ihn mit Hilfe der zur Verfügung stehenden Texte. Wie diese
Erweiterung erstellt wird, wird im Folgenden erklärt.\\
Für diese Erweiterung wird zuerst wird Vokabular $W_t$ bestimmt, das
charakteristisch für eine Knotengruppe ist. Wie das gemacht werden kann und
warum nicht einfach jedes Wort in das Vokabular aufgenommen wird, wird in
\cref{sec:vokabularbestimmung} erläutert.\\
Nach der Bestimmung des Vokabulars wird für jedes Wort im Vokabular ein
Wortknoten zum Graphen hinzugefügt. Alle Knoten, die der Graph zuvor hatte,
werden nun \enquote{Strukturknoten} genannt.
Ein Strukturknoten $v$ wird genau dann mit einem Wortknoten $w \in W_t$
verbunden, wenn $w$ in einem Text von $v$ vorkommt. \Cref{fig:erweiterter-graph}
zeigt beispielhaft den so entstehenden, semi-bipartiten Graphen.
Der DYCOS-Algorithmus betrachtet also die Texte, die einem Knoten
zugeordnet sind, als eine Multimenge von Wörtern. Das heißt, zum einen
wird nicht auf die Reihenfolge der Wörter geachtet, zum anderen wird
bei Texten eines Knotens nicht zwischen verschiedenen
Texten unterschieden. Jedoch wird die Anzahl der Vorkommen
jedes Wortes berücksichtigt.
\begin{figure}[htp]
\centering
\input{figures/graph-content-and-structure.tex}
\caption{Erweiterter Graph}
\label{fig:erweiterter-graph}
\end{figure}
Entsprechend werden zwei unterschiedliche Sprungtypen unterschieden, die
strukturellen Sprünge und inhaltliche Zweifachsprünge:
\begin{definition}[struktureller Sprung]
Sei $G_{E,t} = (V_t, E_{S,t} \cup E_{W,t}, V_{L,t}, W_{t})$ der
um die Wortknoten $W_{t}$ erweiterte Graph.
Dann heißt das zufällige wechseln des aktuell betrachteten
Knoten $v \in V_t$ zu einem benachbartem Knoten $w \in V_t$
ein \textit{struktureller Sprung}.
\end{definition}
\goodbreak
Im Gegensatz dazu benutzten inhaltliche Zweifachsprünge tatsächlich die
Grapherweiterung:
\begin{definition}[inhaltlicher Zweifachsprung]
Sei $G_t = (V_t, E_{S,t} \cup E_{W,t}, V_{L,t}, W_{t})$ der um die
Wortknoten $W_{t}$ erweiterte Graph.
Dann heißt das zufällige wechseln des aktuell betrachteten Knoten $v \in
V_t$ zu einem benachbartem Knoten $w \in W_t$ und weiter zu einem
zufälligem Nachbar $v' \in V_t$ von $w$ ein inhaltlicher Zweifachsprung.
\end{definition}
Jeder inhaltliche Zweifachsprung beginnt und endet also in einem
Strukturknoten, springt über einen Wortknoten und ist ein Pfad der Länge~2.
Ob in einem Sprung der Random Walks ein struktureller Sprung oder ein
inhaltlicher Zweifachsprung gemacht wird, wird jedes mal zufällig neu
entschieden. Dafür wird der Parameter $0 \leq p_S \leq 1$ für den Algorithmus
gewählt. Mit einer Wahrscheinlichkeit von $p_S$ wird ein struktureller Sprung
durchgeführt und mit einer Wahrscheinlichkeit von $(1-p_S)$ ein modifizierter
inhaltlicher Zweifachsprung, wie er in \cref{sec:sprungtypen} erklärt wird,
gemacht. Der Parameter $p_S$ gibt an, wie wichtig die Struktur des Graphen im
Verhältnis zu den textuellen Inhalten ist. Bei $p_S = 0$ werden ausschließlich
die Texte betrachtet, bei $p_S = 1$ ausschließlich die Struktur des Graphen.
Die Vokabularbestimmung kann zu jedem Zeitpunkt $t$ durchgeführt werden, muss
es aber nicht.
In \cref{alg:DYCOS} steht der DYCOS-Algorithmus in Form von Pseudocode:
In \cref{alg1:l8} wird für jeden unbeschrifteten Knoten
durch die folgenden Zeilen eine Beschriftung gewählt.
\Cref{alg1:l10} führt $r$ Random Walks durch. In \cref{alg1:l11} wird eine
temporäre Variable für den aktuell betrachteten Knoten angelegt.
In \cref{alg1:l12} bis \cref{alg1:l21} werden einzelne Random Walks der Länge
$l$ durchgeführt, wobei die beobachteten Beschriftungen gezählt werden und mit
einer Wahrscheinlichkeit von $p_S$ ein struktureller Sprung durchgeführt wird.
\begin{algorithm}[ht]
\begin{algorithmic}[1]
\Require \\$G_{E,t} = (V_t, E_{S,t} \cup E_{W,t}, V_{L,t}, W_t)$ (Erweiterter Graph),\\
$r$ (Anzahl der Random Walks),\\
$l$ (Länge eines Random Walks),\\
$p_s$ (Wahrscheinlichkeit eines strukturellen Sprungs),\\
$q$ (Anzahl der betrachteten Knoten in der Clusteranalyse)
\Ensure Klassifikation von $V_t \setminus V_{L,t}$\\
\\
\ForAll{Knoten $v \in V_t \setminus V_{L,t}$}\label{alg1:l8}
\State $d \gets $ leeres assoziatives Array
\For{$i = 1, \dots,r$}\label{alg1:l10}
\State $w \gets v$\label{alg1:l11}
\For{$j= 1, \dots, l$}\label{alg1:l12}
\State $sprungTyp \gets \Call{random}{0, 1}$
\If{$sprungTyp \leq p_S$}
\State $w \gets$ \Call{SturkturellerSprung}{$w$}
\Else
\State $w \gets$ \Call{InhaltlicherZweifachsprung}{$w$}
\EndIf
\State $beschriftung \gets w.\Call{GetLabel}{ }$
\If{$!d.\Call{hasKey}{beschriftung}$}
\State $d[beschriftung] \gets 0$
\EndIf
\State $d[beschriftung] \gets d[beschriftung] + 1$
\EndFor\label{alg1:l21}
\EndFor
\If{$d$.\Call{isEmpty}{ }} \Comment{Es wurde kein beschrifteter Knoten gesehen}
\State $M_H \gets \Call{HäufigsteLabelImGraph}{ }$
\Else
\State $M_H \gets \Call{max}{d}$
\EndIf
\\
\State \Comment{Wähle aus der Menge der häufigsten Beschriftungen $M_H$ zufällig eine aus}
\State $label \gets \Call{Random}{M_H}$
\State $v.\Call{AddLabel}{label}$ \Comment{und weise dieses $v$ zu}
\EndFor
\State \Return Beschriftungen für $V_t \setminus V_{L,t}$
\end{algorithmic}
\caption{DYCOS-Algorithmus}
\label{alg:DYCOS}
\end{algorithm}
\subsection{Datenstrukturen}
Zusätzlich zu dem gerichteten Graphen $G_t = (V_t, E_t, V_{L,t})$ verwaltet der
DYCOS-Algorithmus zwei weitere Datenstrukturen:
\begin{itemize}
\item Für jeden Knoten $v \in V_t$ werden die vorkommenden Wörter,
die auch im Vokabular $W_t$ sind,
und deren Anzahl gespeichert. Das könnte z.~B. über ein
assoziatives Array (auch \enquote{dictionary} oder
\enquote{map} genannt) geschehen. Wörter, die nicht in
Texten von $v$ vorkommen, sind nicht im Array. Für
alle vorkommenden Wörter ist der gespeicherte Wert zum
Schlüssel $w \in W_t$ die Anzahl der Vorkommen von
$w$ in den Texten von $v$.
\item Für jedes Wort des Vokabulars $W_t$ wird eine Liste von
Knoten verwaltet, in deren Texten das Wort vorkommt.
Diese Liste wird bei den inhaltlichen Zweifachsprung,
der in \cref{sec:sprungtypen} erklärt wird,
verwendet.
\end{itemize}
\input{Sprungtypen}
\input{Vokabularbestimmung}

View file

@ -0,0 +1,47 @@
Im Folgenden werden in \cref{sec:Motivation} einige Beispiele, in denen
der DYCOS-Algorithmus Anwendung finden könnte, dargelegt. In
\cref{sec:Problemstellung} wird die Problemstellung formal definiert
und in \cref{sec:Herausforderungen} wird auf besondere Herausforderungen der
Aufgabenstellung hingewiesen.
\subsection{Motivation}\label{sec:Motivation}
Teilweise beschriftete Graphen sind allgegenwärtig. Publikationsdatenbanken mit
Publikationen als Knoten, Literaturverweisen und Zitaten als Kanten sowie von
Nutzern vergebene Beschriftungen (sog. {\it Tags}) oder Kategorien als
Knotenbeschriftungen; Wikipedia mit Artikeln als Knoten, Links als Kanten und
Kategorien als Knotenbeschriftungen sowie soziale Netzwerke mit Eigenschaften
der Benutzer als Knotenbeschriftungen sind drei Beispiele dafür. Häufig sind
Knotenbeschriftungen nur teilweise vorhanden und es ist wünschenswert die
fehlenden Knotenbeschriftungen automatisiert zu ergänzen.
\subsection{Problemstellung}\label{sec:Problemstellung}
Gegeben ist ein Graph, dessen Knoten teilweise beschriftet sind. Zusätzlich
stehen zu einer Teilmenge der Knoten Texte bereit. Gesucht sind nun
Knotenbeschriftungen für alle Knoten, die bisher noch nicht beschriftet sind.\\
\begin{definition}[Knotenklassifierungsproblem]\label{def:Knotenklassifizierungsproblem}
Sei $G_t = (V_t, E_t, V_{L,t})$ ein gerichteter Graph, wobei $V_t$ die
Menge aller Knoten, $E_t \subseteq V_t \times V_t$ die Kantenmenge und
$V_{L,t} \subseteq V_t$ die Menge der beschrifteten Knoten jeweils zum
Zeitpunkt $t$ bezeichne. Außerdem sei $L_t$ die Menge aller zum Zeitpunkt
$t$ vergebenen Knotenbeschriftungen und $f:V_{L,t} \rightarrow L_t$ die
Funktion, die einen Knoten auf seine Beschriftung abbildet.
Weiter sei für jeden Knoten $v \in V$ eine (eventuell leere) Textmenge
$T(v)$ gegeben.
Gesucht sind nun Beschriftungen für $V_t \setminus V_{L,t}$, also
$\tilde{f}: V_t \setminus V_{L,t} \rightarrow L_t$. Die Aufgabe, zu $G_t$
die Funktion $\tilde{f}$ zu finden heißt
\textit{Knotenklassifierungsproblem}.
\end{definition}
\subsection{Herausforderungen}\label{sec:Herausforderungen}
Die Graphen, für die dieser Algorithmus konzipiert wurde, sind viele
$\num{10000}$~Knoten groß und dynamisch. \enquote{Dynamisch} bedeutet in diesem
Kontext, dass neue Knoten und eventuell auch neue Kanten hinzu kommen bzw.
Kanten oder Knoten werden entfernt werden. Außerdem stehen textuelle Inhalte zu
den Knoten bereit, die bei der Klassifikation genutzt werden können. Bei
kleinen Änderungen sollte nicht alles nochmals berechnen werden müssen, sondern
basierend auf zuvor berechneten Knotenbeschriftungen sollte die Klassifizierung
angepasst werden.

View file

@ -0,0 +1,16 @@
SOURCE = Ausarbeitung-Thoma
make:
pdflatex $(SOURCE).tex -output-format=pdf # Referenzen erstellen
bibtex $(SOURCE)
pdflatex $(SOURCE).tex -output-format=pdf # Referenzen einbinden
pdflatex $(SOURCE).tex -output-format=pdf # Referenzen einbinden
make clean
ebook:
latexml --dest=$(SOURCE).xml $(SOURCE).tex
latexmlpost -dest=$(SOURCE).html $(SOURCE).xml
ebook-convert $(SOURCE).html $(SOURCE).epub --language de --no-default-epub-cover
clean:
rm -rf $(TARGET) *.class *.html *.log *.aux *.out *.thm *.idx *.toc *.ind *.ilg *.glg *.glo *.gls *.ist *.xdy *.blg *.bak

View file

@ -0,0 +1,29 @@
# About
The document in this folder is part of a proseminar at KIT. It is
written in German.
Ausarbeitung zum Proseminar "Netzwerkanalyse" am KIT.
Die Ausarbeitung soll 10-12 Seiten haben und die Präsentation 25-30 Minuten
dauern und 10-15 Minuten Diskussion.
Zu der Ausarbeitung gehört eine [Präsentation](https://github.com/MartinThoma/LaTeX-examples/tree/master/presentations/Proseminar-Netzwerkanalyse).
## Abstract - English
This paper explains the DYCOS-Algorithm as it was introduced in by Aggarwal and
Li in 2011. It operates on graphs whichs nodes are partially labeled and
automatically adds missing labels to nodes. To do so, the DYCOS algorithm makes
use of the structure of the graph as well as content which is assigned to the
node. Aggarwal and Li measured in an experimental analysis that DYCOS adds
the missing labels to a Graph with 19396 nodes of which 14814 are labeled and
another Graph with 806635 nodes of which 18999 are labeld on one core of an
Intel Xeon 2.5 GHz CPU with 32 G RAM within less than a minute.
Additionally, extensions of the DYCOS algorithm are proposed.
## Possible categories
* cs.LG - learning - http://arxiv.org/list/cs.LG/recent
* cs.CL - computation and language - http://arxiv.org/list/cs.CL/recent
* cs.SI - Social and Information Networks - http://arxiv.org/list/cs.SI/recent

View file

@ -0,0 +1,30 @@
%!TEX root = Ausarbeitung-Thoma.tex
Sowohl das Problem der Knotenklassifikation, als auch das der
Textklassifikation, wurde bereits in verschiedenen Kontexten analysiert. Jedoch
scheinen bisher entweder nur die Struktur des zugrundeliegenden Graphen oder
nur Eigenschaften der Texte verwendet worden zu sein.
So werden in \cite{bhagat,szummer} unter anderem Verfahren zur
Knotenklassifikation beschrieben, die wie der in \cite{aggarwal2011}
vorgestellte DYCOS-Algorithmus, um den es in dieser Ausarbeitung geht, auch auf
Random Walks basieren.
Obwohl es auch zur Textklassifikation einige Paper gibt
\cite{Zhu02learningfrom,Jiang2010302}, geht doch keines davon auf den
Spezialfall der Textklassifikation mit einem zugrundeliegenden Graphen ein.
Die vorgestellten Methoden zur Textklassifikation variieren außerdem sehr
stark. Es gibt Verfahren, die auf dem bag-of-words-Modell basieren
\cite{Ko:2012:STW:2348283.2348453} wie es auch im DYCOS-Algorithmus verwendet
wird. Aber es gibt auch Verfahren, die auf dem
Expectation-Maximization-Algorithmus basieren \cite{Nigam99textclassification}
oder Support Vector
Machines nutzen \cite{Joachims98textcategorization}.
Es wäre also gut Vorstellbar, die Art und Weise wie die Texte in die
Klassifikation des DYCOS-Algorithmus einfließen zu variieren. Allerdings ist
dabei darauf hinzuweisen, dass die im Folgenden vorgestellte Verwendung der
Texte sowohl einfach zu implementieren ist und nur lineare Vorverarbeitungszeit
in Anzahl der Wörter des Textes hat, als auch es erlaubt einzelne Knoten zu
klassifizieren, wobei der Graph nur lokal um den zu klassifizierenden Knoten
betrachten werden muss.

View file

@ -0,0 +1,81 @@
Bei der Anwendung des in \cite{aggarwal2011} vorgestellten Algorithmus auf
reale Datensätze könnten zwei Probleme auftreten, die im Folgenden erläutert
werden. Außerdem werden Verbesserungen vorgeschlagen, die es allerdings noch zu
untersuchen gilt.
\subsection{Anzahl der Knotenbeschriftungen}
So, wie der DYCOS-Algorithmus vorgestellt wurde, können nur Graphen bearbeitet
werden, deren Knoten jeweils höchstens eine Beschriftung haben. In vielen
Fällen, wie z.~B. Wikipedia mit Kategorien als Knotenbeschriftungen haben
Knoten jedoch viele Beschriftungen.
Auf einen ersten Blick ist diese Schwäche einfach zu beheben, indem man beim
zählen der Knotenbeschriftungen für jeden Knoten jedes Beschriftung zählt. Dann
wäre noch die Frage zu klären, mit wie vielen Beschriftungen der betrachtete
Knoten beschriftet werden soll.
Jedoch ist z.~B. bei Wikipedia-Artikeln auf den Knoten eine Hierarchie
definiert. So ist die Kategorie \enquote{Klassifikationsverfahren} eine
Unterkategorie von \enquote{Klassifikation}. Bei dem Kategorisieren von
Artikeln sind möglichst spezifische Kategorien vorzuziehen, also kann man nicht
einfach bei dem Auftreten der Kategorie \enquote{Klassifikationsverfahren}
sowohl für diese Kategorie als auch für die Kategorie \enquote{Klassifikation}
zählen.
\subsection{Überanpassung und Reklassifizierung}
Aggarwal und Li beschreiben in \cite{aggarwal2011} nicht, auf welche Knoten der
Klassifizierungsalgorithmus angewendet werden soll. Jedoch ist die Reihenfolge
der Klassifizierung relevant. Dazu folgendes Minimalbeispiel:
Gegeben sei ein dynamischer Graph ohne textuelle Inhalte. Zum Zeitpunkt $t=1$
habe dieser Graph genau einen Knoten $v_1$ und $v_1$ sei mit dem $A$
beschriftet. Zum Zeitpunkt $t=2$ komme ein nicht beschrifteter Knoten $v_2$
sowie die Kante $(v_2, v_1)$ hinzu.\\
Nun wird der DYCOS-Algorithmus auf diesen Knoten angewendet und $v_2$ mit $A$
beschriftet.\\
Zum Zeitpunkt $t=3$ komme ein Knoten $v_3$, der mit $B$ beschriftet ist, und
die Kante $(v_2, v_3)$ hinzu. \Cref{fig:Formen} visualisiert diesen Vorgang.
\begin{figure}[ht]
\centering
\subfloat[$t=1$]{
\input{figures/graph-t1.tex}
\label{fig:graph-t1}
}%
\subfloat[$t=2$]{
\input{figures/graph-t2.tex}
\label{fig:graph-t2}
}
\subfloat[$t=3$]{
\input{figures/graph-t3.tex}
\label{fig:graph-t3}
}%
\subfloat[$t=4$]{
\input{figures/graph-t4.tex}
\label{fig:graph-t4}
}%
\caption{Minimalbeispiel für den Einfluss früherer DYCOS-Anwendungen}
\label{fig:Formen}
\end{figure}
Würde man nun den DYCOS-Algorithmus erst jetzt, also anstelle von Zeitpunkt
$t=2$ zum Zeitpunkt $t=3$ auf den Knoten $v_2$ anwenden, so würde eine
\SI{50}{\percent}-Wahrscheinlichkeit bestehen, dass dieser mit $B$ beschriftet
wird. Aber in diesem Beispiel wurde der Knoten schon zum Zeitpunkt $t=2$
beschriftet. Obwohl es in diesem kleinem Beispiel noch keine Rolle spielt, wird
das Problem klar, wenn man weitere Knoten einfügt:
Wird zum Zeitpunkt $t=4$ ein unbeschrifteter Knoten $v_4$ und die Kanten
$(v_1, v_4)$, $(v_2, v_4)$, $(v_3, v_4)$ hinzugefügt, so ist die
Wahrscheinlichkeit, dass $v_4$ mit $A$ beschriftet wird bei $\frac{2}{3}$.
Werden die unbeschrifteten Knoten jedoch erst jetzt und alle gemeinsam
beschriftet, so ist die Wahrscheinlichkeit für $A$ als Beschriftung bei nur $50\%$.
Bei dem DYCOS-Algorithmus findet also eine Überanpassung an vergangene
Beschriftungen statt.
Das Reklassifizieren von Knoten könnte eine mögliche Lösung für dieses
Problem sein. Knoten, die durch den DYCOS-Algorithmus beschriftet wurden
könnten eine Lebenszeit bekommen (TTL, Time to Live). Ist diese
abgelaufen, wird der DYCOS-Algorithmus erneut auf den Knoten angewendet.

View file

@ -0,0 +1,113 @@
\subsection{Sprungtypen}\label{sec:sprungtypen}
Die beiden bereits definierten Sprungtypen, der strukturelle Sprung sowie der
inhaltliche Zweifachsprung werden im Folgenden erklärt.
\goodbreak
Der strukturelle Sprung entspricht einer zufälligen Wahl eines Nachbarknotens,
wie es in \cref{alg:DYCOS-structural-hop} gezeigt wird.
\begin{algorithm}[H]
\begin{algorithmic}[1]
\Procedure{SturkturellerSprung}{Knoten $v$, Anzahl $q$}
\State $n \gets v.\Call{NeighborCount}{}$ \Comment{Wähle aus der Liste der Nachbarknoten}
\State $r \gets \Call{RandomInt}{0, n-1}$ \Comment{einen zufällig aus}
\State $v \gets v.\Call{Next}{r}$ \Comment{Gehe zu diesem Knoten}
\State \Return $v$
\EndProcedure
\end{algorithmic}
\caption{Struktureller Sprung}
\label{alg:DYCOS-structural-hop}
\end{algorithm}
Bei inhaltlichen Zweifachsprüngen ist jedoch nicht sinnvoll so strikt nach der
Definition vorzugehen, also direkt von einem strukturellem Knoten $v \in V_t$
zu einem mit $v$ verbundenen Wortknoten $w \in W_t$ zu springen und von diesem
wieder zu einem verbundenem strukturellem Knoten $v' \in V_t$. Würde dies
gemacht werden, wäre zu befürchten, dass aufgrund von Homonymen die Qualität der
Klassifizierung verringert wird. So hat \enquote{Brücke} im Deutschen viele
Bedeutungen. Gemeint sein können z.~B. das Bauwerk, das Entwurfsmuster der
objektorientierten Programmierung oder ein Teil des Gehirns.
Deshalb wird für jeden Knoten $v$, von dem aus ein inhaltlicher
Zweifachsprung gemacht werden soll folgende Textanalyse durchgeführt:
\begin{enumerate}[label=C\arabic*,ref=C\arabic*]
\item \label{step:c1} Gehe alle in $v$ startenden Random Walks der Länge $2$ durch
und erstelle eine Liste $L$ der erreichbaren Knoten $v'$. Speichere
außerdem, durch wie viele Pfade diese Knoten $v'$ jeweils erreichbar
sind.
\item \label{step:c2} Betrachte im Folgenden nur die Top-$q$ Knoten bzgl.
der Anzahl der Pfade von $v$ nach $v'$, wobei $q \in \mathbb{N}$
eine zu wählende Konstante des DYCOS-Algorithmus ist.\footnote{Sowohl für den DBLP, als auch für den
CORA-Datensatz wurde in \cite[S. 364]{aggarwal2011} $q=10$ gewählt.}
Diese Knotenmenge heiße im Folgenden $T(v)$ und $p(v, v')$ sei die
Anzahl der Pfade von $v$ über einen Wortknoten nach $v'$.
\item \label{step:c3} Wähle mit Wahrscheinlichkeit
$\frac{p(v, v')}{\sum_{w \in T(v)} p(v, w)}$ den Knoten $v' \in T(v)$
als Ziel des Zweifachsprungs.
\end{enumerate}
Konkret könnte also ein inhaltlicher Zweifachsprung sowie wie in
\cref{alg:DYCOS-content-multihop} beschrieben umgesetzt werden.
Der Algorithmus bekommt einen Startknoten $v \in V_T$ und
einen $q \in \mathbb{N}$ als Parameter. $q$ ist ein Parameter der
für den DYCOS-Algorithmus zu wählen ist. Dieser Parameter beschränkt
die Anzahl der möglichen Zielknoten $v' \in V_T$ auf diejenigen
$q$ Knoten, die $v$ bzgl. der Textanalyse am ähnlichsten sind.
In \cref{alg:l2} bis \cref{alg:l5} wird \cref{step:c1} durchgeführt und alle
erreichbaren Knoten in $reachableNodes$ mit der Anzahl der Pfade, durch die sie
erreicht werden können, gespeichert.
In \cref{alg:l6} wird \cref{step:c2} durchgeführt. Ab hier gilt
\[ |T| = \begin{cases}q &\text{falls } |reachableNodes|\geq q\\
|reachableNodes| &\text{sonst }\end{cases}\]
Bei der Wahl der Datenstruktur von $T$ ist zu beachten, dass man in
\cref{alg:21} über Indizes auf Elemente aus $T$ zugreifen können muss.
In \cref{alg:l8} bis \ref{alg:l13} wird ein assoziatives Array erstellt, das
von $v' \in T(v)$ auf die relative Häufigkeit bzgl. aller Pfade von $v$ zu
Knoten aus den Top-$q$ abbildet.
In allen folgenden Zeilen wird \cref{step:c3} durchgeführt. In \cref{alg:15}
bis \cref{alg:22} wird ein Knoten $v' \in T(v)$ mit einer Wahrscheinlichkeit,
die seiner relativen Häufigkeit am Anteil der Pfaden der Länge 2 von $v$ nach
$v'$ über einen beliebigen Wortknoten entspricht ausgewählt und schließlich
zurückgegeben.
\begin{algorithm}
\caption{Inhaltlicher Zweifachsprung}
\label{alg:DYCOS-content-multihop}
\begin{algorithmic}[1]
\Procedure{InhaltlicherZweifachsprung}{Knoten $v \in V_T$, $q \in \mathbb{N}$}
\State $erreichbareKnoten \gets$ leeres assoziatives Array\label{alg:l2}
\ForAll{Wortknoten $w$ in $v.\Call{getWordNodes}{ }$}
\ForAll{Strukturknoten $x$ in $w.\Call{getStructuralNodes}{ }$}
\If{$!erreichbareKnoten.\Call{hasKey}{x}$}
\State $erreichbareKnoten[x] \gets 0$
\EndIf
\State $erreichbareKnoten[x] \gets erreichbareKnoten[x] + 1$
\EndFor
\EndFor\label{alg:l5}
\State \label{alg:l6} $T \gets \Call{max}{erreichbareKnoten, q}$
\\
\State \label{alg:l8} $s \gets 0$
\ForAll{Knoten $x \in T$}
\State $s \gets s + erreichbareKnoten[x]$
\EndFor
\State $relativeHaeufigkeit \gets $ leeres assoziatives Array
\ForAll{Knoten $x \in T$}
\State $relativeHaeufigkeit \gets \frac{erreichbareKnoten[x]}{s}$
\EndFor\label{alg:l13}
\\
\State \label{alg:15} $random \gets \Call{random}{0, 1}$
\State $r \gets 0.0$
\State $i \gets 0$
\While{$s < random$}
\State $r \gets r + relativeHaeufigkeit[i]$
\State $i \gets i + 1$
\EndWhile
\State $v \gets T[i-1]$ \label{alg:21}
\State \Return $v$ \label{alg:22}
\EndProcedure
\end{algorithmic}
\end{algorithm}

View file

@ -0,0 +1,89 @@
\subsection{Vokabularbestimmung}\label{sec:vokabularbestimmung}
Da die Größe des Vokabulars die Datenmenge signifikant beeinflusst,
liegt es in unserem Interesse so wenig Wörter wie möglich ins
Vokabular aufzunehmen. Insbesondere sind Wörter nicht von Interesse,
die in fast allen Texten vorkommen, wie im Deutschen z.~B.
\enquote{und}, \enquote{mit} und die Pronomen. Es ist wünschenswert Wörter zu
wählen, die die Texte möglichst stark voneinander Unterscheiden. Der
DYCOS-Algorithmus wählt die Top-$m$ dieser Wörter als Vokabular, wobei
$m \in \mathbb{N}$ eine festzulegende Konstante ist. In \cite[S. 365]{aggarwal2011}
wird der Einfluss von $m \in \Set{5,10, 15,20}$ auf die Klassifikationsgüte
untersucht und festgestellt, dass die Klassifikationsgüte mit größerem $m$
sinkt, sie also für $m=5$ für den DBLP-Datensatz am höchsten ist. Für den
CORA-Datensatz wurde mit $m \in \set{3,4,5,6}$ getestet und kein signifikanter
Unterschied festgestellt.
Nun kann man manuell eine Liste von zu beachtenden Wörtern erstellen
oder mit Hilfe des Gini-Koeffizienten automatisch ein Vokabular erstellen.
Der Gini-Koeffizient ist ein statistisches Maß, das die Ungleichverteilung
bewertet. Er ist immer im Intervall $[0,1]$, wobei $0$ einer
Gleichverteilung entspricht und $1$ der größtmöglichen Ungleichverteilung.
Sei nun $n_i(w)$ die Häufigkeit des Wortes $w$ in allen Texten mit der $i$-ten
Knotenbeschriftung.
\begin{align}
p_i(w) &:= \frac{n_i(w)}{\sum_{j=1}^{|\L_t|} n_j(w)} &\text{(Relative Häufigkeit des Wortes $w$)}\\
G(w) &:= \sum_{j=1}^{|\L_t|} p_j(w)^2 &\text{(Gini-Koeffizient von $w$)}
\end{align}
In diesem Fall ist $G(w)=0$ nicht möglich, da zur Vokabularbestimmung nur
Wörter betrachtet werden, die auch vorkommen.
Ein Vorschlag, wie die Vokabularbestimmung implementiert werden kann, ist als
Pseudocode mit \cref{alg:vokabularbestimmung} gegeben. In \cref{alg4:l6} wird
eine Teilmenge $S_t \subseteq V_{L,t}$ zum Generieren des Vokabulars gewählt.
In \cref{alg4:l8} wird ein Array $cLabelWords$ erstellt, das $(|\L_t|+1)$
Felder hat. Die Elemente dieser Felder sind jeweils assoziative Arrays, deren
Schlüssel Wörter und deren Werte natürliche Zahlen sind. Die ersten $|\L_t|$
Elemente von $cLabelWords$ dienen dem Zählen der Häufigkeit der Wörter von
Texten aus $S_t$, wobei für jede Beschriftung die Häufigkeit einzeln gezählt
wird. Das letzte Element aus $cLabelWords$ zählt die Summe der Wörter. Diese
Datenstruktur wird in \cref{alg4:l10} bis \ref{alg4:l12} gefüllt.
In \cref{alg4:l17} bis \ref{alg4:l19} wird die relative Häufigkeit der Wörter
bzgl. der Beschriftungen bestimmt. Daraus wird in \cref{alg4:l20} bis
\ref{alg4:l22} der Gini-Koeffizient berechnet. Schließlich werden in
\cref{alg4:l23} bis \ref{alg4:l24} die Top-$q$ Wörter mit den
höchsten Gini-Koeffizienten zurückgegeben.
\begin{algorithm}[ht]
\begin{algorithmic}[1]
\Require \\
$V_{L,t}$ (beschriftete Knoten),\\
$\L_t$ (Menge der Beschriftungen),\\
$f:V_{L,t} \rightarrow \L_t$ (Beschriftungsfunktion),\\
$m$ (Gewünschte Vokabulargröße)
\Ensure $\M_t$ (Vokabular)\\
\State $S_t \gets \Call{Sample}{V_{L,t}}$\label{alg4:l6} \Comment{Wähle $S_t \subseteq V_{L,t}$ aus}
\State $\M_t \gets \emptyset$ \Comment{Menge aller Wörter}
\State $cLabelWords \gets$ Array aus $(|\L_t|+1)$ assoziativen Arrays\label{alg4:l8}
\ForAll{$v \in S_t$} \label{alg4:l10}
\State $i \gets \Call{getLabel}{v}$
\State \Comment{$w$ ist das Wort, $c$ ist die Häufigkeit}
\ForAll{$(w, c) \in \Call{getTextAsMultiset}{v}$}
\State $cLabelWords[i][w] \gets cLabelWords[i][w] + c$
\State $cLabelWords[|\L_t|][w] \gets cLabelWords[i][|\L_t|] + c$
\State $\M_t = \M_t \cup \Set{w}$
\EndFor
\EndFor\label{alg4:l12}
\\
\ForAll{Wort $w \in \M_t$}
\State $p \gets $ Array aus $|\L_t|$ Zahlen in $[0, 1]$\label{alg4:l17}
\ForAll{Label $i \in \L_t$}
\State $p[i] \gets \frac{cLabelWords[i][w]}{cLabelWords[i][|\L_t|]}$
\EndFor\label{alg4:l19}
\State $w$.gini $\gets 0$ \label{alg4:l20}
\ForAll{$i \in 1, \dots, |\L_t|$}
\State $w$.gini $\gets$ $w$.gini + $p[i]^2$
\EndFor\label{alg4:l22}
\EndFor
\State $\M_t \gets \Call{SortDescendingByGini}{\M_t}$\label{alg4:l23}
\State \Return $\Call{Top}{\M_t, m}$\label{alg4:l24}
\end{algorithmic}
\caption{Vokabularbestimmung}
\label{alg:vokabularbestimmung}
\end{algorithm}
Die Menge $S_t$ kann aus der Menge aller Dokumente, deren Knoten beschriftet
sind, mithilfe des in \cite{Vitter} vorgestellten Algorithmus bestimmt werden.

View file

@ -0,0 +1,15 @@
In dieser Arbeit wird der DYCOS-Algorithmus, wie er in \cite{aggarwal2011}
vorgestellt wurde, erklärt. Er arbeitet auf Graphen, deren Knoten teilweise mit
Beschriftungen versehen sind und ergänzt automatisch Beschriftungen für Knoten,
die bisher noch keine Beschriftung haben. Dieser Vorgang wird
\enquote{Klassifizierung} genannt. Dazu verwendet er die Struktur des Graphen
sowie textuelle Informationen, die den Knoten zugeordnet sind. Die in
\cite{aggarwal2011} beschriebene experimentelle Analyse ergab, dass er auch auf
dynamischen Graphen mit 19\,396 bzw. 806\,635 Knoten, von denen nur
14\,814 bzw. 18\,999 beschriftet waren, innerhalb von weniger als
einer Minute auf einem Kern einer Intel Xeon 2.5\,GHz~CPU mit 32\,G~RAM
ausgeführt werden kann.\\
Zusätzlich wird \cite{aggarwal2011} kritisch Erörtert und und es werden
mögliche Erweiterungen des DYCOS-Algorithmus vorgeschlagen.
\textbf{Keywords:} DYCOS, Label Propagation, Knotenklassifizierung

View file

@ -0,0 +1,37 @@
\tikzstyle{vertex}=[draw,black,circle,minimum size=10pt,inner sep=0pt]
\tikzstyle{edge}=[very thick]
\begin{tikzpicture}[scale=1.3]
\node (a)[vertex] at (0,0) {};
\node (b)[vertex] at (0,1) {};
\node (c)[vertex] at (0,2) {};
\node (d)[vertex] at (1,0) {};
\node (e)[vertex] at (1,1) {};
\node (f)[vertex] at (1,2) {};
\node (g)[vertex] at (2,0) {};
\node (h)[vertex] at (2,1) {};
\node (i)[vertex] at (2,2) {};
\node (x)[vertex] at (4,0) {};
\node (y)[vertex] at (4,1) {};
\node (z)[vertex] at (4,2) {};
\draw[edge] (a) -- (d);
\draw[edge] (b) -- (d);
\draw[edge] (b) -- (c);
\draw[edge] (c) -- (d);
\draw[edge] (d) -- (e);
\draw[edge] (d) edge[bend left] (f);
\draw[edge] (d) edge[bend right] (x);
\draw[edge] (g) edge (x);
\draw[edge] (h) edge (x);
\draw[edge] (h) edge (y);
\draw[edge] (h) edge (e);
\draw[edge] (e) edge (z);
\draw[edge] (i) edge (y);
\draw [dashed] (-0.3,-0.3) rectangle (2.3,2.3);
\draw [dashed] (2.5,2.3) rectangle (5, -0.3);
\node (struktur)[label={[label distance=0cm]0:Sturkturknoten $V_t$}] at (-0.1,2.5) {};
\node (struktur)[label={[label distance=0cm]0:Wortknoten $W_t$}] at (2.7,2.5) {};
\end{tikzpicture}

View file

@ -0,0 +1,7 @@
\tikzstyle{vertex}=[draw,black,circle,minimum size=10pt,inner sep=0pt]
\tikzstyle{edge}=[very thick]
\begin{tikzpicture}[scale=1,framed]
\node (a)[vertex,label=$A$] at (0,0) {$v_1$};
\node (b)[vertex, white] at (1,0) {$v_2$};
\node (struktur)[label={[label distance=-0.2cm]0:$t=1$}] at (-2,1) {};
\end{tikzpicture}

View file

@ -0,0 +1,8 @@
\tikzstyle{vertex}=[draw,black,circle,minimum size=10pt,inner sep=0pt]
\tikzstyle{edge}=[very thick]
\begin{tikzpicture}[scale=1,framed]
\node (a)[vertex,label=$A$] at (0,0) {$v_1$};
\node (b)[vertex,label={\color{blue}$A$}] at (1,0) {$v_2$};
\draw[->] (b) -- (a);
\node (struktur)[label={[label distance=-0.2cm]0:$t=2$}] at (-2,1) {};
\end{tikzpicture}

View file

@ -0,0 +1,10 @@
\tikzstyle{vertex}=[draw,black,circle,minimum size=10pt,inner sep=0pt]
\tikzstyle{edge}=[very thick]
\begin{tikzpicture}[scale=1,framed]
\node (a)[vertex,label=$A$] at (0,0) {$v_1$};
\node (b)[vertex,label={\color{blue}$A$}] at (1,0) {$v_2$};
\node (c)[vertex,label=$B$] at (2,0) {$v_3$};
\draw[->] (b) -- (a);
\draw[->] (b) -- (c);
\node (struktur)[label={[label distance=-0.2cm]0:$t=3$}] at (-1,1) {};
\end{tikzpicture}

View file

@ -0,0 +1,15 @@
\tikzstyle{vertex}=[draw,black,circle,minimum size=10pt,inner sep=0pt]
\tikzstyle{edge}=[very thick]
\begin{tikzpicture}[scale=1,framed]
\node (a)[vertex,label=$A$] at (0,0) {$v_1$};
\node (b)[vertex,label=45:{\color{blue}$A$}] at (1,0) {$v_2$};
\node (c)[vertex,label=$B$] at (2,0) {$v_3$};
\node (d)[vertex] at (1,1) {$v_4$};
\draw[->] (b) -- (a);
\draw[->] (b) -- (c);
\draw[->] (d) -- (a);
\draw[->] (d) -- (b);
\draw[->] (d) -- (c);
\node (struktur)[label={[label distance=-0.2cm]0:$t=3$}] at (-1,1) {};
\end{tikzpicture}

View file

@ -0,0 +1,283 @@
% This file was created with JabRef 2.3.1.
% Encoding: Cp1252
@Online{zappella,
author = {Giovanni Zappella},
title = {A Scalable Multiclass Algorithm for Node Classification},
version = {1},
date = {2011-12-19},
year = {2011},
eprinttype = {arxiv},
eprintclass = {cs.LG, cs.GT},
eprint = {http://arxiv.org/abs/1112.4344v1}
}
@inproceedings{aggarwal2011,
author = {Charu C. Aggarwal AND Nan Li},
title = {On Node Classification in Dynamic Content-based Networks},
booktitle = {SDM},
year = {2011},
pages = {355-366},
ee = {http://siam.omnibooksonline.com/2011datamining/data/papers/033.pdf\#page=1},
bibsource = {DBLP, http://dblp.uni-trier.de}
}
@book{DBLP:series/ads/2010-40,
editor = {Charu C. Aggarwal AND Haixun Wang},
title = {Managing and Mining Graph Data},
booktitle = {Managing and Mining Graph Data},
publisher = {Springer},
series = {Advances in Database Systems},
volume = {40},
year = {2010},
isbn = {978-1-4419-6044-3},
ee = {http://dx.doi.org/10.1007/978-1-4419-6045-0},
bibsource = {DBLP, http://dblp.uni-trier.de}
}
@inproceedings{DBLP:conf/kdd/BhagatCR07,
author = {Smriti Bhagat AND Graham Cormode AND Irina Rozenbaum},
title = {Applying Link-Based Classification to Label Blogs},
booktitle = {WebKDD/SNA-KDD},
year = {2007},
pages = {97-117},
ee = {http://dx.doi.org/10.1007/978-3-642-00528-2_6},
crossref = {DBLP:conf/kdd/2007web},
bibsource = {DBLP, http://dblp.uni-trier.de}
}
@article{DBLP:journals/corr/abs-1101-3291,
author = {Smriti Bhagat AND Graham Cormode AND S. Muthukrishnan},
title = {Node Classification in Social Networks},
journal = {CoRR},
volume = {abs/1101.3291},
year = {2011},
ee = {http://arxiv.org/abs/1101.3291},
bibsource = {DBLP, http://dblp.uni-trier.de}
}
@proceedings{DBLP:conf/kdd/2007web,
editor = {Haizheng Zhang AND
Myra Spiliopoulou AND
Bamshad Mobasher AND
C. Lee Giles AND
Andrew McCallum AND
Olfa Nasraoui AND
Jaideep Srivastava AND
John Yen},
title = {Advances in Web Mining and Web Usage Analysis, 9th International
Workshop on Knowledge Discovery on the Web, WebKDD 2007,
and 1st International Workshop on Social Networks Analysis,
SNA-KDD 2007, San Jose, CA, USA, August 12-15, 2007. Revised
Papers},
booktitle = {WebKDD/SNA-KDD},
publisher = {Springer},
series = {Lecture Notes in Computer Science},
volume = {5439},
year = {2009},
isbn = {978-3-642-00527-5},
ee = {http://dx.doi.org/10.1007/978-3-642-00528-2},
bibsource = {DBLP, http://dblp.uni-trier.de}
}
@Online{bhagat,
author = {Smriti Bhagat AND Graham Cormode AND S. Muthukrishnan},
title = {Node Classification in Social Networks},
year = {2011},
version = {1},
date = {2011-01-17},
eprinttype = {arxiv},
eprintclass = {cs.SI, physics.soc-ph},
eprint = {http://arxiv.org/abs/1101.3291v1}
}
@article{Vitter,
author = {Vitter, Jeffrey S.},
title = {Random Sampling with a Reservoir},
journal = {ACM Trans. Math. Softw.},
volume = {11},
number = {1},
year = {1985},
issn = {0098-3500},
pages = {37--57},
numpages = {21},
url = {http://doi.acm.org/10.1145/3147.3165},
doi = {10.1145/3147.3165},
acmid = {3165},
publisher = {ACM},
address = {New York, NY, USA},
}
@MASTERSTHESIS{heck,
AUTHOR = {Heck, Michael},
TITLE = {Unsupervised Acoustic Model Training for Simultaneous Lecture Translation in Incremental and Batch Mode},
SCHOOL = {Karlsruhe Institute of Technology},
TYPE = {Diploma Thesis},
ADDRESS = {Germany},
MONTH = DEC,
YEAR = 2012,
PDF = {http://isl.anthropomatik.kit.edu/cmu-kit/downloads/Diplomarbeit_Heck_Michael.pdf}
}
@MASTERSTHESIS{Lavesson,
AUTHOR = {Lavesson, Niklas},
TITLE = {Evaluation and analysis of supervised learning algorithms and classifiers},
SCHOOL = {Blekinge Institute of Technology},
TYPE = {Diploma Thesis},
ADDRESS = {Sweden},
MONTH = DEC,
YEAR = 2006,
PDF = {http://www.bth.se/fou/Forskinfo.nsf/Sok/c655a0b1f9f88d16c125714c00355e5d/$file/Lavesson_lic.pdf}
}
@article{Stone1974,
abstract = {{A generalized form of the cross-validation criterion is applied to the choice and assessment of prediction using the data-analytic concept of a prescri
ption. The examples used to illustrate the application are drawn from the problem areas of univariate estimation, linear regression and analysis of variance.}},
author = {Stone, M.},
citeulike-article-id = {6758792},
citeulike-linkout-0 = {http://dx.doi.org/10.2307/2984809},
citeulike-linkout-1 = {http://www.jstor.org/stable/2984809},
doi = {10.2307/2984809},
issn = {00359246},
journal = {Journal of the Royal Statistical Society. Series B (Methodological)},
keywords = {biomarker, cross\_validation},
number = {2},
pages = {111--147},
posted-at = {2011-08-02 14:22:37},
priority = {2},
publisher = {Blackwell Publishing for the Royal Statistical Society},
title = {{Cross-Validatory Choice and Assessment of Statistical Predictions}},
url = {http://dx.doi.org/10.2307/2984809},
volume = {36},
year = {1974}
}
@incollection{porter,
author = {Porter, M. F.},
chapter = {An Algorithm for Suffix Stripping},
title = {Readings in Information Retrieval},
editor = {Sparck Jones, Karen and Willett, Peter},
year = {1997},
isbn = {1-55860-454-5},
pages = {313--316},
numpages = {4},
url = {http://dl.acm.org/citation.cfm?id=275537.275705},
acmid = {275705},
publisher = {Morgan Kaufmann Publishers Inc.},
address = {San Francisco, CA, USA},
}
@incollection{szummer,
title = {Partially labeled classification with Markov random walks},
author = {Martin Szummer and Jaakkola, Tommi},
booktitle = {Advances in Neural Information Processing Systems 14},
editor = {T.G. Dietterich and S. Becker and Z. Ghahramani},
pages = {945--952},
year = {2001},
url = {http://media.nips.cc/nipsbooks/nipspapers/paper_files/nips14/AA36.pdf},
}
@incollection{dynamic,
title ={Dynamic Label Propagation in Social Networks},
author ={Du, Juan AND Zhu, Feida AND Lim, Ee-Peng},
booktitle ={Database Systems for Advanced Applications},
editor ={Meng, Weiyi AND Feng, Ling AND Bressan, Stéphane AND Winiwarter, Werner AND Song, Wei},
pages ={194-209},
year ={2013},
isbn ={978-3-642-37449-4},
volume ={7826},
series ={Lecture Notes in Computer Science},
doi ={10.1007/978-3-642-37450-0_14},
url ={http://dx.doi.org/10.1007/978-3-642-37450-0_14},
publisher ={Springer Berlin Heidelberg},
}
@TECHREPORT{Zhu02learningfrom,
author = {Xiaojin Zhu and Zoubin Ghahramani},
title = {Learning from Labeled and Unlabeled Data with Label Propagation},
institution = {Carnegie Mellon University},
year = {2002}
}
@TECHREPORT{Seeger01learningwith,
author = {Matthias Seeger},
title = {Learning with Labeled and Unlabeled Data},
institution = {University of Edinburgh},
year = {2001}
}
@article{Kazienko2012199,
title = "Label-dependent node classification in the network ",
journal = "Neurocomputing ",
volume = "75",
number = "1",
pages = "199 - 209",
year = "2012",
note = "Brazilian Symposium on Neural Networks (SBRN 2010) International Conference on Hybrid Artificial Intelligence Systems (HAIS 2010) ",
issn = "0925-2312",
doi = "http://dx.doi.org/10.1016/j.neucom.2011.04.047",
url = "http://www.sciencedirect.com/science/article/pii/S092523121100508X",
author = "Przemyslaw Kazienko and Tomasz Kajdanowicz",
keywords = "Classification",
keywords = "Node classification",
keywords = "Label-dependent classification",
keywords = "Label-dependent features",
keywords = "Collective classification",
keywords = "Classification in networks",
keywords = "\{LDBootstrapping\}",
keywords = "\{LDGibbs\}",
keywords = "Bootstrapping",
keywords = "Gibbs sampling "
}
@MISC{Joachims98textcategorization,
author = {Thorsten Joachims},
title = {Text Categorization with Support Vector Machines: Learning with Many Relevant Features},
year = {1998}
}
@INPROCEEDINGS{Nigam99textclassification,
author = {Kamal Nigam and Andrew Kachites Mccallum and Sebastian Thrun and Tom Mitchell},
title = {Text Classification from Labeled and Unlabeled Documents using EM},
booktitle = {Machine Learning},
year = {1999},
pages = {103--134}
}
@article{Jiang2010302,
title = "Text classification using graph mining-based feature extraction ",
journal = "Knowledge-Based Systems ",
volume = "23",
number = "4",
pages = "302 - 308",
year = "2010",
note = "Artificial Intelligence 2009 AI-2009 The 29th \{SGAI\} International Conference on Artificial Intelligence ",
issn = "0950-7051",
doi = "http://dx.doi.org/10.1016/j.knosys.2009.11.010",
url = "http://www.sciencedirect.com/science/article/pii/S095070510900152X",
author = "Chuntao Jiang and Frans Coenen and Robert Sanderson and Michele Zito",
keywords = "Text classification",
keywords = "Graph representation",
keywords = "Graph mining",
keywords = "Weighted graph mining",
keywords = "Feature extraction "
}
@inproceedings{Ko:2012:STW:2348283.2348453,
author = {Ko, Youngjoong},
title = {A Study of Term Weighting Schemes Using Class Information for Text Classification},
booktitle = {Proceedings of the 35th International ACM SIGIR Conference on Research and Development in Information Retrieval},
series = {SIGIR '12},
year = {2012},
isbn = {978-1-4503-1472-5},
location = {Portland, Oregon, USA},
pages = {1029--1030},
numpages = {2},
url = {http://doi.acm.org/10.1145/2348283.2348453},
doi = {10.1145/2348283.2348453},
acmid = {2348453},
publisher = {ACM},
address = {New York, NY, USA},
keywords = {idf, term weighting, text classification},
}

View file

@ -0,0 +1,25 @@
\usepackage{siunitx}
\sisetup{
group-digits=true,
group-separator={\,},
}
\DeclareUnicodeCharacter{00A0}{~}
\theoremstyle{definition}
\theoremindent20pt
\theoremheaderfont{\normalfont\bfseries\hspace{-\theoremindent}}
\newtheorem{definition}{Definition}
\def\L{\ensuremath{\mathcal{L}}}
\def\T{\ensuremath{\mathcal{T}}}
\def\M{\ensuremath{\mathcal{M}}}
\renewcommand{\algorithmicrequire}{\textbf{Input:}}
\renewcommand{\algorithmicensure}{\textbf{Output:}}
\renewcommand{\algorithmicforall}{\textbf{for each}}
\renewcommand{\algorithmicprocedure}{\textbf{function}}
\renewcommand{\ALG@name}{Algorithmus}
%Hyphenation
\hyphenation{Graph}

View file

@ -0,0 +1,3 @@
\section{Anhang}
\inputminted[linenos, numbersep=5pt, tabsize=4]{pascal}{Factoring.ari}

View file

@ -0,0 +1,11 @@
# Gegebener Öffentlicher Schlüssel N = p*q und e sowie Geheimtext y
N := 6593724735903381194175738064212775889771.
e := 47.
y := 6508724329196926526021005674657658127499.
p := ec_factorize(N). # 6890701303127411
q := N div p. # 956207997714884457630761
phi := (p-1)*(q-1). #6588943695914805815679579653627015131600
d := mod_inverse(e, phi).
cc := byte_string(y).
z := y**d mod N.
string(byte_string(z)).

View file

@ -0,0 +1,9 @@
\section{Prinzip der asymmetrischen Verschlüsselung}
Bereits im 5. Jahrhundert v. Chr. war ein Verfahren zur geheimen Weitergabe an Informationen bekannt: Die Skytale\footnote{[Wrixon], S. 21f}. Man wickelte Papier spiralförmig um einen Stab, die Skytale, und schrieb die Nachricht längs der Skytale auf das Papier. Dann wurde das Papier dem Empfänger gebracht, der mit einer gleichen Skytale diese Nachricht entschlüsseln konnte.
Verfahren, die den gleichen Schlüssel zur Ver- als auch zur Entschlüsselung verwenden nennt man symmetrisch\footnote{[Birthälmer], S. 4}. In dem Beispiel ist die Skytale der Schlüssel. Es ist unüblich die Skytale als symmetrische Verschlüsselung zu bezeichnen, normalerweise sind Block- oder Stromchiffren damit gemeint. Diese sind jedoch schwerer zu beschreiben.
Nach Kerckhoffs' Prinzip darf ein Verschlüsselungssystem keine Geheimhaltung erfordern\footnote{[Petitcolas]}, also muss der Schlüssel für die Sicherheit sorgen. Wollen allerdings zwei Personen miteinander geheim kommunizieren, so muss dieser Schlüssel übertragen werden. Bei der Übertragung könnte er abgefangen werden.
Asymmetrische Verschlüsselungsverfahren benutzen einen öffentlichen Schlüssel zum verschlüsseln und einen privaten Schlüssel zum entschlüsseln. Will Alice eine geheime Nachricht von Bob empfangen, so schickt sie Bob ihren öffentlichen Schlüssel. Bob verschlüsselt seine Nachricht mit diesem Schlüssel und schickt die Nachricht an Alice. Der private Schlüssel wird nicht übertragen. In dieser Hinsicht sind asymmetrische Verschlüsselungsverfahren sicherer als symmetrische.
Mithilfe von asymmetrischen Verschlüsselungen kann man auch digitale Signaturen erstellen und sich damit authentifizieren. Im RSA-Verfahren sind privater und öffentlicher Schlüssel austauschbar. Das heißt, wenn eine Nachricht mit dem privaten Schlüssel verschlüsselt wird, kann sie mit dem öffentlichen Schlüssel entschlüsselt werden. Da jedoch nur der Besitzer des privaten Schlüssels eine Nachricht erstellen kann, die man mit dem öffentlichen Schlüssel entschlüsseln kann, ist es so möglich den Absender einer Nachricht zu authentifizieren.

View file

@ -0,0 +1,19 @@
\section{Einwegfunktionen}
Eine Einwegfunktion ist in der Mathematik eine Beziehung zwischen
zwei Mengen, die "`komplexitätstheoretisch "`schwer"' umzukehren ist"'\footnote{[Beutelspacher], S. 114}.
Ein Beispiel für eine Einwegfunktion ist die Multiplikation zweier
Zahlen. Die Laufzeit des Schönhage-Strassen-Algorithmus zur
Multiplikation zweier $n$-stelliger ganzer Zahlen ist mit
$\mathcal{O}(n \cdot \log(n) \cdot \log(log(n)))$\footnote{[Pethö], S. 25}
deutlich kleiner als die Laufzeit von des Zahlkörpersiebs
$\mathcal{O}(e^{(1,92+o(1)) \sqrt[3]{\ln n} \sqrt[3]{(\ln \ln n)^2}})$\footnote{[Rothe], S. 384},
das der Faktorisierung dient.
Die Sicherheit des RSA-Verfahrens zur asymmetrischen
Verschlüsselung basiert auf der Annahme, dass die Faktorisierung
einer großen Zahl deutlich länger dauert als das Multiplizieren der
Primfaktoren. Falls es keinen besseren Algorithmus zur Faktorisierung
als zur Multiplikation gibt, ist diese Annahme korrekt. Nach dem
Stand von 2009 ist dies der Fall.
Weitere Hinweise zur Sicherheit des RSA-Kryptosystems sind in \cref{sec:Security} zu finden.

View file

@ -0,0 +1,16 @@
\section{Restklassen}
Teilt man eine ganze Zahl $a$ durch eine ganze Zahl $m \neq 0$, so
bleibt ein Rest $r \in \mathbb{N}_0$. Anhand aller möglichen Reste
$0 \leq r < m$ teilt man nun alle Zahlen in $|m|$ Teilmengen ein.
Diese Teilmengen nennt man Restklassen. Man sagt, alle Zahlen, die
den selben Rest $r$ beim Teilen durch $m$ lassen, gehören der selben
Restklasse modulo $m$ an\footnote{[Forster], S. 45}.
Ein Beispiel aus dem Alltag sind Zeitangaben. Man schreibt nicht 348
Minuten, sondern 5 Stunden und 48 Minuten. Es wird also modulo 60
gerechnet. Auch in der Grund-schule rechnet man mit Restklassen
modulo 10, wenn man ganze Zahlen in Einer, Zehner und Hunderter
unterteilt.\\
Ein weiteres Beispiel ist die Einteilung in gerade und ungerade
Zahlen. Bleibt bei einer Zahl kein Rest beim Teilen durch zwei, so
wird sie als "`gerade"' bezeichnet und ist in einer Restklasse
modulo 2 mit allen anderen geraden Zahlen.

View file

@ -0,0 +1,17 @@
\section{Eulersche $\varphi$-Funktion}\label{sec:Eulersche-Phi-Funktion}
Die Eulersche $\varphi$-Funktion gibt für jede natürliche Zahl $n$ an,
wie viele positive ganze Zahlen $a \leq n $ zu ihr relativ prim sind\footnote{[Brill], S. 148}.
$a$ ist zu $n$ relativ prim, wenn $ggT(a,n) = 1$ gilt, also wenn $a$
und $n$ keinen größeren gemeinsamen Teiler als $1$ haben. Man sagt
auch "`a und b sind teilerfremd"'.
$\varphi(n)$ ist zugleich die Ordnung der multiplikativen Gruppe $(\mathbb{Z}/n \mathbb{Z})^*$.
$\varphi(n)$ gibt also an, wie viele Zahlen im Restklassenring modulo $n$ ein multiplikativ Inverses haben. Mehr dazu in \cref{sec:Multiplikativ-Inverses}
Für Primzahlen gilt $\varphi(p) = p - 1$ , da eine Primzahl nur
durch sich und eins teilbar ist. Sei $A$ die multiplikative Gruppe
einer Primzahl $p$, $B$ die multiplikative Gruppe einer Primzahl $q$
und $C$ die multiplikative Gruppe von $p \cdot q$. Dann ist $|C| = |A| \cdot |B|$ und
$\varphi(p \cdot q) = |C|$, $\varphi(p) = |A|$ sowie $\varphi(q) = |B|$.
Daraus folgt, dass $\varphi(pq) = \varphi(p) \cdot \varphi(q) = (p-1) \cdot (q - 1)$ für zwei Primzahlen $p \neq q$ gilt.

View file

@ -0,0 +1,91 @@
\section{Lineare Kongruenzen}
\subsection{Allgemeine Informationen}
Zwei Zahlen $a, b \in \mathbb{Z}$ heißen kongruent modulo $m \in \mathbb{N}$,
falls $a$ und $b$ bei der Division durch $m$ den den gleichen Rest lassen.
Man schreibt $a \equiv b \imod{m}$\footnote{[Reiss], S. 179f}.
Gilt $ax \equiv b \imod{m}$, für $a, b, x \in \mathbb{Z}$ und $m \in \mathbb{N}$,
dann bedeutet das, dass $m | (ax - b)$ für ein passendes $x$.
Man nennt $ax \equiv b \imod{m}$ ein lineares Kongruenzsystem.
\clearpage
\subsection{Chinesischer Restsatz}
Der Chinesische Restsatz sagt, ob lineare Kongruenzsysteme lösbar
sind und wie diese Lösungen aussehen:
\begin{mdframed}[tikzsetting={draw=red,ultra thick}, innertopmargin=0.6cm]
Seien $m_1, m_2, ..., m_n$ paarweise teilerfremde natürliche Zahlen und
$a_1, a_2, \dots, a_n$ ganze Zahlen.
Dann ist das System linearer Kongruenzen
\vspace{-0.4cm}
\[x \equiv a_1 \imod{m_1},\;\;\; x \equiv a_2 \imod{m_2},\;\;\;\dots,\;\;\; x \equiv a_n \imod{m_n}\]
lösbar. Alle Lösungen des Systems liegen in einer gemeinsamen
Restklasse modulo $M=\prod_{i = 1}^n m_i$
\end{mdframed}
\textbf{Beweis nach [Reiss], S. 221f:}
\begin{enumerate}[label=(\Roman{*}),labelsep=0.5em,noitemsep]
\item $M_j = \frac{M}{m_j}$ für $j = 1, \dots, n$
\item $y_j \cdot M_j \equiv 1 \imod{m_j}$, $y_j$ mit dem erweitertem Euklidischem Algorithmus bestimmen
\item $a_j \cdot y_j \cdot M_j \equiv a_j \imod{m_j}$ für $j = 1, \dots, n$\\
Weil $m_j$ für $i \neq j$ ein Teiler von $M_i$ ist, gilt auch:
\item $a_i \cdot y_i \cdot M_i \equiv 0 \imod{m_j}$ für alle $i, j = 1, \dots, n$ mit $i \neq j$
\end{enumerate}
Da alle Summanden bis auf Einen ($j = i$) gleich Null sind, stimmt dieser Ausdruck:
\begin{align*}
a_i \cdot y_i \cdot M_i &\equiv \sum_{j=1}^n {a_j \cdot y_j \cdot M_j} \imod{m_i}\\
a_i &\equiv \sum_{j=1}^n {a_j \cdot y_j \cdot M_j} \imod{m_i}\text{, da }y_i \cdot M_i \equiv 1 \imod{m_i}
\end{align*}
$a_i$ ist die Lösung des Kongruenzsystems. Alle Lösungen liegen in dieser Restklasse.
\subsubsection*{Beispielaufgabe}
Folgende Aufgabe wurde [Berendt] entnommen:
\hangindent2em
\hangafter=0
17 chinesische Piraten erbeuten eine Truhe mit Goldstücken. Beim Versuch, diese gleichmäßig zu verteilen, bleiben 7 Goldstücke übrig. Um diese entbrennt ein heftiger Streit, bei dem einer der Piraten das Leben lässt. Die verbleibenden 16 versuchen erneut, die Goldstücke gerecht zu verteilen, behalten jedoch elf Stücke übrig. Bei der folgenden Auseinandersetzung geht wieder einer der Streitenden über Bord. Den 15 Überlebenden gelingt dann die Teilung. Wie viele Goldstücke müssen es mindestens gewesen sein?
\subsubsection*{Restklassensystem} % This should semantically rather be subsubsubsection
\begin{align*}
x &:= \text{Anzahl der Goldstücke}\\
x &\equiv 7 \imod{17}\\
x &\equiv 11 \imod{16}\\
x &\equiv 0 \imod{15}
\end{align*}
\subsubsection*{Lösung}
I Produkte
\begin{align*}
M &= 17 \cdot 16 \cdot 15 = 4080\\
M_1 &= \frac{4080}{17} = 240\\
M_2 &= \frac{4080}{16} = 255\\
M_3 &= \frac{4080}{15} = 272
\end{align*}
II Multiplikativ Inverses der Restklassensysteme
\begin{align*}
9 \cdot 240 &\equiv 1 \imod{17}\\
15 \cdot 255 &\equiv 1 \imod{16}\\
8 \cdot 272 &\equiv 1 \imod{15}
\end{align*}
III Multiplikation der Restklassensysteme mit $a_j$
\begin{align*}
7 \cdot 9 \cdot 240 &\equiv 7 \imod{17}\\
11 \cdot 15 \cdot 255 &\equiv 11 \imod{16}\\
8 \cdot 272 &\equiv 0 \imod{15}
\end{align*}
IV Berechnung der Lösung des Restklassensystem
\begin{align*}
x = \sum_{j = 1}^3 a_j \cdot y_j \cdot M_j \imod{15 \cdot 16 \cdot 17} = 7 \cdot 240 \cdot 9 + 11 \cdot 255 \cdot 15 = 57195\\
57195 \equiv 75 \imod{4080}\\
75 \text{ ist die kleinste positive Lösung des Kongruenzsystems.}
\end{align*}
\subsubsection*{Antwort:}
Die Anzahl der von den Piraten erbeuteten Goldstücken muss mindestens $75$ betragen, kann aber auch $75 + 1 \cdot 4080$, $75 + 2 \cdot 4080$ oder ein beliebiger anderer positiver Vertreter dieser Restklasse$\imod{4080}$ sein.

View file

@ -0,0 +1,77 @@
\section{Multiplikativ inverses Element}\label{sec:Multiplikativ-Inverses}
\subsection{Definition und Beispiele}
Das multiplikativ inverse Element $d$ von $e$ ergibt bei der
Multiplikation mit $e$ das neutrale Element der Multiplikation, also
die Eins: $d \cdot e = 1$
In $\mathbb{R} \setminus \Set{0}$ hat jedes Element ein multiplikativ
Inverses, den Kehrbruch. In $\mathbb{Z}/7 \mathbb{Z}$ ist das
multiplikativ Inverse von zwei in der Restgruppe von vier, da
$2 \cdot 4 = 8$ und $8 \equiv 1 \imod{7}$.
Mit dem erweitertem euklidischem Algorithmus kann man das
multiplikativ Inverse von $a$ in $\mathbb{Z}/n \mathbb{Z}$ finden.
\subsection{Erweiterter euklidischer Algorithmus}
Sind zwei Zahlen $a > b$ gegeben und will deren größten gemeinsamen
Teiler berechnen, so kann man den erweiterten euklidischen
Algorithmus anwenden:
\begin{enumerate}
\item Größtmögliches $q$ wählen, so dass gilt $a = q_1 \cdot b + r_1$
\item $b = q_2 \cdot r_1 + r_2$
\item $r_1 = q_3 \cdot r_2 + r_3$
\item \dots
\item bis $r_{n-2} = q_n \cdot r_{n-1} + r_n$ mit $r_n = 0$
\end{enumerate}
Dann ist $r_{n-1} = ggT(a,b)$
Mit diesem Algorithmus kann man nun das multiplikativ Inverse von $a$
in $\mathbb{Z}/n \mathbb{Z}$ finden, wenn der größte gemeinsame Teiler von $a$ und
$n$ gleich 1 ist. Da im vorletzten Schritt $r_{n - 1} = 1$ ist, kann man 1 als
Linearkombination der Reste von $r_{n - 3}$ und $r_{n - 2}$
darstellen. Diese Reste kann man wiederum als Linearkombination
vorhergehender Reste darstellen. Dies setzt man so lange fort,
bis man eine Linearkombination mit $a$ und $n$ von 1 hat. Da wir im
Restklassenring $n$ sind, muss man nur das Produkt mit $a$ betrachten
und kann das multiplikativ Inverse zu $a$ im Restklassenring
$\mathbb{Z}/n \mathbb{Z}$ ablesen.
Hier ein Beispiel zur Veranschaulichung:
Sei $a = (\text{Primzahl}_1 - 1) \cdot (\text{Primzahl}_2 - 1) =(3 - 1) \cdot (47 - 1) = 92$ und $b=71$
Gesucht ist das multiplikativ Inverse $b \in \mathbb{Z} / a \mathbb{Z}$ von $x \cdot 71 \equiv 1 \imod{92}$:
\begin{tabular}{lll}
\textbf{Schritt 1}: euklidischer Algorithmus & & \textbf{Schritt 2}: nach Rest auflösen\\
$91=1 \cdot 71 + 21$ \myDownArrow & $\rightarrow$ & $21 = 92 - 71$ \myUpArrow\\
$71=3 \cdot 21 + 8$ & $\rightarrow$ & $8 = 71 - 3 \cdot 21$\\
$21=2 \cdot 8 + 5$ & $\rightarrow$ & $5 = 21 - 2 \cdot 8$\\
$ 8=1 \cdot 5 + 3$ & $\rightarrow$ & $3 = 8 - 1 \cdot 5$\\
$ 5=1 \cdot 3 + 2$ & $\rightarrow$ & $2 = 5 - 1 \cdot 3$\\
$ 3=1 \cdot 2 + 1$ & $\rightarrow$ & $1 = 3 - 1 \cdot 2$
\end{tabular}
\textbf{Schritt 3}: so lange Reste einsetzen, bis eine Linearkombination der Form
$1 = x \cdot 92 + y \cdot 71$ gefunden ist:
\begin{align*}
1 &= 3 - (5 - 3) &&= 2 \cdot 3 - 5 \\
1 &= 2 \cdot (8 - 5) - (21 - 2 \cdot 8) &&= 4 \cdot 8 - 2 \cdot 5 - 21 \\
1 &= 4 \cdot 8 - 2 \cdot (21 - 2 \cdot 8) - 21 &&= 8 \cdot 8 - 3 \cdot 21 \\
1 &= 8 \cdot (71 - 3 \cdot 21) - 3 \cdot (92 - 71) &&= 11 \cdot 71 - 24 \cdot 21 - 3 \cdot 92 \\
1 &= 11 \cdot 71 - 3 \cdot 92 - 24 \cdot (92 - 71) &&= 35 \cdot 71 - 27 \cdot 92
\end{align*}
Das bedeutet 35 ist das multiplikativ Inverse zu 71 in
$ \mathbb{Z} / 92 \mathbb{Z}$ und erfüllt damit die Kongruenzgleichung
$35 \cdot 71 \equiv 1 \imod{92}$.
Zusätzlich hat man damit weitere multiplikativ Inverse gefunden:
\begin{itemize}
\item $-27 \cdot 92 \equiv 1 \imod{71}$
\item $-27 \cdot 92 \equiv 1 \imod{35}$
\item $35 \cdot 71 \equiv 1 \imod{27}$
\end{itemize}

View file

@ -0,0 +1,281 @@
\section{RSA-Verfahren}\label{sec:RSA-Verfahren}
Das RSA-Verfahren ist ein asymmetrisches Kryptosystem, das von
Ronald Linn \textbf{R}ivest, Adi \textbf{S}hamir und Leonard
\textbf{A}dleman entwickelt und im August 1977 veröffentlicht wurde\footnote{[msri], S. 2}.
Da das RSA-Verfahren asymmetrisch ist, wird sowohl ein öffentlicher
Schlüssel als auch ein privater Schlüssel benötigt. Der öffentliche
Schlüssel dient der Verschlüsselung und besteht aus dem RSA-Modul $N$
und dem Verschlüsselungsexponenten $e$. Der private Schlüssel
besteht aus dem Entschlüsselungsexponenten $d$ und dem selben RSA-Modul $N$.
Die Erzeugung dieser drei Zahlen $N$, $e$ und $d$ für das RSA-Verfahren
kann, in An-lehnung an [wiki-RSA], in fünf Schritte unterteilt werden:
\begin{description}
\item[Schritt 1:] Als erstes werden zwei große Primzahlen gewählt.
Je größer diese Primzahlen sind, desto sicherer
ist die Verschlüsselung.
(vgl. \cref{sec:Security})
\item[Schritt 2:] In diesem Schritt wird RSA-Modul $N = p \cdot q$
berechnet, das ein Teil des öffentlichen
Schlüssels ist.
\item[Schritt 3:] Schritt 3: Nun wird der Wert der Eulerschen
$\varphi$-Funktion bei $N$ berechnet. Da $p$
und $q$ Primzahlen sind, gilt $\varphi(N) = (p-1) \cdot (q-1)$ (vgl. \cref{sec:Eulersche-Phi-Funktion})
\item[Schritt 4:] Nachdem $\varphi(N)$ ermittelt wurde, kann der
zweite Teil des öffentlichen Schlüssel, der
Verschlüsselungsexponent $e$, ermittelt werden.
Folgende Bedingungen müssen für $e$ gelten:
$1 < e < \varphi(N) $ und $ggT(e, \varphi(N)) = 1$
\item[Schritt 5:] Es folgt die Berechnung des Entschlüsselungsexponenten
$d$ als multiplikativ Inverses von $e$
bezüglich des Modules $\varphi(N)$. Es soll
also folgende Kongruenz gelten:
$e \cdot d \equiv 1 \imod{\varphi(N)}$
\end{description}
\subsection{Verschlüsselung mit dem öffentlichen Schlüssel}
Ein Text wird verschlüsselt, indem er in Zahlen umgewandelt wird. Für
diese Umwandlung kann der ASCII-Code verwendet werden. Sobald man
Zahlen hat, kann man den unverschlüsselten Klartext $K$ mit folgender
Kongruenzgleichung in den verschlüsselten Geheimtext $G$ umwandeln: $G \equiv K^e \imod{N}$.\\
Die Zahl $N$ sollte deutlich größer sein als K\footnote{vgl. [Reiss], S. 288}.
In folgendem Beispiel wird der Klartext "`12"' verschlüsselt. Dazu
werden als Erstes alle benötigten Variablen erzeugt oder berechnet:
\begin{description}
\item[Schritt 1:] $p := 347$ und $q := 379$
\item[Schritt 2:] $N = p \cdot q = 347 \cdot 379 = 131513$
\item[Schritt 3:] $\varphi(N) = \varphi(131513) = (347 - 1) \cdot (379 - 1) = 346 \cdot 378 = 130788$
\item[Schritt 4:] $1 < (e := 877) < \varphi(N) $
\item[Schritt 5:] $877 \cdot d \equiv 1 \imod{130788}$
\end{description}
Um ein $d$ zu finden, das diese Kongruenz erfüllt, wird der
erweiterte euklidische Algorithmus angewendet:
\begin{tabular}{lll}
\textbf{Schritt 1}: euklidischer Algorithmus & & \textbf{Schritt 2}: nach Rest auflösen\\
$130788 = 149 \cdot 877 + 115$ \myDownArrowB & $\rightarrow$ & $115 = 130788 - 149 \cdot 877$ \myUpArrowB\\
$877= 7 \cdot 115 + 72$ & $\rightarrow$ & $72 = 877 - 7 \cdot 115$\\
$115= 1 \cdot 72 + 43$ & $\rightarrow$ & $43 = 115 - 72$\\
$72= 1 \cdot 43 + 29$ & $\rightarrow$ & $29 = 72 - 43$\\
$43= 1 \cdot 29 + 14$ & $\rightarrow$ & $14 = 43 - 29$\\
$29= 2 \cdot 14 + 1$ & $\rightarrow$ & $1 = 29 - 2 \cdot 14$
\end{tabular}
\textbf{Schritt 3}: so lange Reste einsetzen, bis eine Linearkombination der Form
$1 = x \cdot 877 + y \cdot 130788$ gefunden ist:
\begin{align*}
1 &= 29- 2 \cdot (43-29) \\
1 &= 3 \cdot 29 - 2 \cdot (115 - 72) \\
1 &= 3 \cdot (72 - 43) - 2 (130788-149 \cdot 877) + 2 \cdot (877 - 7 \cdot 115) \\
1 &= 3 \cdot (877 - 7 \cdot 115) -3 \cdot (115 - 72) - 2 \cdot 130788 + 300 \cdot 877 -14 \cdot 155 \\
1 &= 303 \cdot 877 - 2 \cdot 130788 - 38 \cdot 115 + 3 \cdot 72 \\
1 &= 303 \cdot 877 - 2 \cdot 130788 - 38 \cdot (130788-149 \cdot 877) + 3 \cdot (877 - 7 \cdot 115) \\
1 &= 5968 \cdot 877 - 40 \cdot 130788 - 21 \cdot (130788-149 \cdot 877) = 9097 \cdot 877 - 61 \cdot 130788
\end{align*}
$\rightarrow d = 9097$
Probe:
\[\frac{d \cdot e - 1}{\varphi(N)} = \frac{877 \cdot 9097 - 1}{130788} = 61\]
Nun wird der Geheimtext $G$ mit dem Verschlüsselungsexponenten $e$
aus dem Klartext $K$ berechnet:
\begin{align*}
G &\equiv K^e \imod{N}\\
G &\equiv 12^877 \equiv 12 \cdot (12^6)^{2 \cdot 73} \equiv 12 \cdot 92698^{2 \cdot 73} \equiv 12 \cdot 122810^{73} \imod{131513} \\
G &\equiv 12 \cdot 122810 \cdot 122810^{2 \cdot 2 \cdot 2 \cdot 3 \cdot 3} \equiv 27077 \cdot 122234^{2 \cdot 2 \cdot 3 \cdot 3} \equiv 27077 \cdot 90339^{2 \cdot 3 \cdot 3} \imod{131513} \\
G &\equiv 27077 \cdot 95706^{9} \equiv 27077 \cdot 9189^{3} \equiv 27077 \cdot 56590 \imod{131513} \\
G &\equiv 29467 \imod{131513}
\end{align*}
\subsection{Entschlüsselung mit dem privaten Schlüssel}\label{sec:Decryption}
\subsubsection{Entschlüsselung ohne den Chinesischen Restsatz}
Der Geheimtext wird entschlüsselt, indem man ihn mit $d$ potenziert
und dann denn kleinsten positiven Repräsentanten der Restklasse $N$
berechnet: $K \equiv G^d \imod{N}$
Im Folgenden wird die Entschlüsselung auf das vorhergehende Beispiel
angewendet:
\begin{align*}
G &= 29467 ~~~ N= 131513 ~~~ d = 9097 \\
K &\equiv G^d \imod{N}\\
K &\equiv 29467^{9097} \imod{131513}\\
K &\equiv 29467 \cdot (29467^2)^{2 \cdot 2 \cdot 3 \cdot 379} \equiv 29467 \cdot (55263^2)^{2 \cdot 3 \cdot 379} \equiv 29467 \cdot 4283^{2 \cdot 3 \cdot 379} \imod{131513} \\
K &\equiv 29467 \cdot 89937^{2 \cdot 3} \equiv 29467 \cdot 88417^3 \equiv 29467 \cdot 24587 \imod{131513} \\
K &\equiv 12 \imod{131513}
\end{align*}
\subsubsection{Entschlüsselung mit dem Chinesischen Restsatz}
Falls der Entschlüsselungsexponent $d$ sehr groß ist, kann das
Potenzieren lange dauern. Dies kann mit dem Chinesischem Restsatz
beschleunigt werden\footnote{[Paixão], S. 1}.
Diese Idee wurde [Paixão] entnommen:
Der Geheimtext $G$ und der Exponent $d$ wird folgendermaßen geteilt:
\begin{tabular}{llll}
$\begin{aligned}
G_p &\equiv G \imod{p} \\
G_q &\equiv G \imod{q}
\end{aligned}$ & und &
$\begin{aligned}
d_p &\equiv d \imod{p-1} \\
d_q &\equiv d \imod{q-1}
\end{aligned}$ &, da $e \cdot d \equiv 1 \imod{(p-1) \cdot (q-1))}$
\end{tabular}
Dies funktioniert, da der folgende Hilfssatz gilt:
\begin{mdframed}[tikzsetting={draw=red,ultra thick}, innertopmargin=0.6cm]
$K^ed \equiv G \imod{p \cdot q} \Leftrightarrow K^{ed} \equiv G \imod{p} \land K^{ed} \equiv G \imod{q}$
\end{mdframed}
Nun wird dieser kleinere Teil von G mit den kleineren Exponenten "`entschlüsselt"':
\begin{align*}
K_p &\equiv {G_p} ^ {d_p} \imod{p}\\
K_q &\equiv {G_q} ^ {d_q} \imod{q}
\end{align*}
Der Chinesische Restsatz ermöglicht es nun, eine Lösung $K$ für die
folgenden Kongruenzen zu finden:
\begin{align*}
K &\equiv K_p \imod{p}\\
K &\equiv K_q \imod{q}
\end{align*}
Dazu müssen die multiplikativ inversen Elemente ermittelt werden:
\begin{align*}
y_p \cdot p \equiv 1 \imod{q}\\
y_q \cdot q \equiv 1 \imod{p}
\end{align*}
Nun wird der Klartext zusammengesetzt:
\[K \equiv (K_p \cdot y_p \cdot q + K_q \cdot y_q \cdot p) \imod{N}\]
Diese Methode ist etwa vier mal schneller als die Entschlüsselung mit $d$\footnote{[Paixão], S. 2}.
\subsection{Entschlüsselung ohne den privaten Schlüssel}
Ist der Entschlüsselungsexponent $d$ unbekannt, so kann dieser durch
Faktorisierung von $N$ zurückgewonnen werden. Faktorisiert man $N$, so
kann $\varphi(N)$ berechnet werden und die Kongruenz $e \cdot d \equiv 1 \imod{\varphi(N)}$ gelöst werden.
Als praktische Arbeit wurde mir folgende Aufgabe gestellt:
\begin{mdframed}[tikzsetting={draw=black,very thick}, innertopmargin=0.6cm]
\begin{verbatim}
N := 65937_24735_90338_11941_75738_06421_27758_89771;
e := 47;
# geheime Botschaft:
y := 65087_24329_19692_65260_21005_67465_76581_27499;
\end{verbatim}
Wie lautet die Botschaft im Klartext?
\end{mdframed}
Um diese Aufgabe zu lösen, versucht man den privaten Schlüssel mit
Hilfe des öffentlichen Schlüssels wiederherzustellen.
Der private Schlüssel $d$ muss die Kongruenzgleichung
$e \cdot d \equiv 1 \imod{\varphi(N)}$ erfüllen, allerdings sind
$\varphi(N)$ und $d$ nicht bekannt. Um $\varphi(N)$ zu berechnen,
werden die Primfaktoren $p$ und $q$, aus denen $N$ besteht, benötigt.
$N$ muss also faktorisiert werden. Sobald ein Faktor von $N$ bekannt
ist, kann man $N$ durch diesen Faktor teilen und man erhält den
zweiten Faktor. Dann kann man wie in \cref{sec:RSA-Verfahren} vorgehen und $d$
berechnen. Mit $d$ kann man wie in \cref{sec:Decryption} beschrieben die
Geheimbotschaft entschlüsseln.
Wird das Aribas-Skript im Anhang ausgeführt, das diese Schritte
ausführt, erhält man den Klartext "`\textbf{RSAribas}"'.
\subsection{Sicherheit des RSA-Algorithmus}\label{sec:Security}
Der RSA-Algorithmus kann, wie oben beschrieben, "`geknackt"' werden,
indem der öffentliche Schlüssel faktorisiert wird. Allerdings ist das
bei großen Zahlen nahezu unmöglich, da die Algorithmen sehr lange
Laufzeiten haben\footnote{[RSA-2190]}.
Wie lange die Faktorisierung dauert hängt einerseits vom Algorithmus,
andererseits von der Hardware ab.
Um ein Gefühl dafür zu bekommen was "`sehr lange"' bedeutet, kann man
die "`RSA Factoring Challenge"' als Beispiel betrachten. Eine
193-stellige Zahl sollte Faktorisiert werden. Für diese Aufgabe
wurde am 18. März 1991 ein Preisgeld von 20.000 US-Dollar
ausgeschrieben. Ein Team des Instituts für Experimentelle Mathematik
in Essen hat am 2. November 2005 diese Aufgabe gelöst und dafür
über fünf Monate benötigt. Der Rechenaufwand betrug etwa 30
2.2GHz-Opteron-CPU Jahre\footnote{[RSA-2964]}.
Das Faktorisieren wird zwar immer schneller, da man über bessere und
billigere Computer sowie effizientere Algorithmen verfügt, allerdings
steigt mit den Hardwareverbesserungen die Sicherheit des
RSA-Algorithmus. Mit einer besseren Hardware können deutlich größere
Primzahlen erzeugt werden und damit auch ein deutlich längerer
öffentlicher Schlüssel generiert werden, der zur Verschlüsselung der
Nachricht dient.
Ein verbesserter Faktorisierungsalgorithmus würde die Sicherheit des
RSA-Kryptosystems gefährden. Es ist jedoch unwahrscheinlich, dass ein
solcher Algorithmus gefunden wird, da das Problem als schwer
angesehen wird.\footnote{[RSA-2191]}
Ein weiterer möglicher Angriff auf das RSA-Kryptosystem wäre die
$e$-te Wurzel $\imod{n}$ zu finden. Da $G \equiv K^e \imod{N}$ ist,
wäre $K \equiv \sqrt[e]{K^e} \imod{N}$. Allerdings ist kein Angriff,
der so funktioniert, bekannt4. Um zu veranschaulichen, dass bei einer
Kongruenzgleichung nicht wie gewohnt die Wurzel gezogen werden kann,
betrachte man folgendes Beispiel: $4 \equiv 16 \imod{3}$, aber
$\sqrt{4} \neq \sqrt{16} \imod{3}$.
\subsection{Warum der RSA-Algorithmus funktioniert}
Der Geheimtext $G$ wird durch potenzieren mit $e$ gewonnen ($G \equiv K^e \imod{N}$)
und der Klartext durch potenzieren mit $d$ ($K \equiv G^d \imod{N}$).
Zu zeigen ist, dass
$K \equiv K^{e \cdot d} \imod{N}$ mit $ed \equiv 1 \imod{\varphi(N)}$ gilt.
Es kann folgende Umformung durchgeführt werden:
\begin{align*}
ed &\equiv 1 \imod{\varphi(N)}\\
ed &= 1 + x \cdot \varphi(N) \text{mit } x \in \mathbb{Z}
\end{align*}
Daraus folgt:
\[K^{e \cdot d} = K^{1 + x \cdot \varphi(N)} = K \cdot K^{x \cdot \varphi(N)}\]
Nun wird der \textbf{Satz von Fermat-Euler} als Hilfssatz eingeführt:
\begin{mdframed}[tikzsetting={draw=red,ultra thick}, innertopmargin=0.6cm]
$K^{\varphi(N)} \equiv 1 \imod{N}$ für $K, N \in \mathbb{N}$ und $ggT(N, K) = 1$
\end{mdframed}
Beweis nach [Reiss], S. 218 f.:
\hangindent2em
\hangafter=0
Es gibt $\varphi(N)$ verschiedene, zu $N$ teilerfremde Reste. Da $K$
zu $N$ teilerfremd ist, muss auch jedes der Produkte
$K \cdot r_1 , K \cdot r_2 , \dots, K \cdot r_{\varphi(N)}$ zu $N$
teilerfremd sein.
Es gilt:
\begin{align*}
\prod_{i=1}^{n=\varphi(N)} K \cdot r_i &\equiv \prod_{i=1}^{n=\varphi(N)} r_i \imod{N}\\
K^{\varphi(N)} \prod_{i=1}^{n=\varphi(N)} r_i &\equiv \prod_{i=1}^{n=\varphi(N)} r_i \imod{N}
\end{align*}
Da alle $r_i$ teilerfremd zu N sind, kann man durch das Produkt teilen. Daraus ergibt sich:
\[K^{\varphi(N)} \equiv 1 \imod{N}\]
Das bedeutet für den RSA-Algorithmus:
\[K \cdot K^{x \cdot \varphi(N)} \equiv K \cdot (K^{\varphi(N)})^x \equiv K \cdot 1^x \equiv K \imod{N}\]

View file

@ -0,0 +1,28 @@
@BOOK{Beutelspacher,
AUTHOR = {Beutelspacher, Albrecht AND Neumann, Heike B. AND Schwarzpaul, Thomas},
YEAR = {2005},
TITLE = {Kryptografie in Theorie und Praxis},
%EDITION = {2. Aufl. 2010},
%ISBN = {978-3-834-80977-3},
PUBLISHER = {Vieweg+Teubner Verlag},
ADDRESS = {Wiesbaden},
}
@BOOK{Brill,
AUTHOR = {Brill, Manfred},
YEAR = {2004},
TITLE = {Mathematik für Informatiker},
%EDITION = {2. vollständig überarbeitete Auflage},
%ISBN = {344-6-228-020-},
PUBLISHER = {Hanser Verlag},
ADDRESS = {Wien},
}
@BOOK{,
AUTHOR = "Otto Forster",
YEAR = "1996",
TITLE = "Algorithmische Zahlentheorie",
PUBLISHER = "Vieweg Braunschweig/Wiesbaden",
ISBN = {978-3528065805}
ADDRESS = "Wiesbaden",
}

View file

@ -0,0 +1,86 @@
\section{Literaturverzeichnis}
\textbf{Beutelspacher, A., Neumann, H. B. und Schwarzpaul, T.:}\\
Kryptografie in Theorie und Praxis.\\
Wiesbaden, Vieweg+Teubner Verlag, 2005.
\textbf{Brill, M.:}\\
Mathematik für Informatiker.\\
Wien, Hanser Verlag, 2004.
\textbf{Forster, O.:}\\
Algorithmische Zahlentheorie.\\
Wiesbaden, Vieweg Braunschweig/Wiesbaden, 1996.
\textbf{Pethö, A. und Pohst, M.:}\\
Algebraische Algorithmen.\\
Wiesbaden, Vieweg+Teubner Verlag, 1999.
\textbf{Reiss, K. und Schmieder, G.:}\\
Basiswissen Zahlentheorie.\\
Berlin Heidelberg, Springer-Verlag, 2007.
\textbf{Rothe, J.:}\\
Komplexitätstheorie und Kryptologie.\\
Berlin, Springer, 2008.
\textbf{Wrixon, F. B.:}\\
Geheimsprachen.\\
Königswinter, Tandem Verlag GmbH, 2006.
\newpage
\subsection*{Internetadressen}
{\footnotesize
\begin{tabular}{lp{12cm}}
{[Berendt]} &
Berendt, Gerhard.\newline
Seminar über Zahlentheorie/Kryptographie.\hfill10.04.2008\newline
URL: http://userpage.fu-berlin.de/$\sim$berendt/lehre2008\_neu.html\newline
{[Stand: 09.01.2010]} \\
{[Birthälmer]} &
Birthälmer, Melita.\newline
Kryptografie\hfill13.04.2008\newline
URL: http://www.birthaelmer.com/fileadmin/birthaelmer/portfolio/Kryptografie\_web.pdf\newline
{[Stand: 09.01.2010]} \\
{[msri]} &
SIAM News.\newline
Still Guarding Secrets after Years of Attacks, RSA Earns Accolades for its Founders.\hfill17.06.2003\newline
URL: http://www.msri.org/people/members/sara/articles/rsa.pdf\newline
{[Stand: 09.01.2010]} \\
{[Paixão]} &
Paixão, Cesar A. M.. \newline
An efficient variant of the RSA cryptosystem.\hfill11.08.2009\newline
URL: http://eprint.iacr.org/2003/159.pdf\newline
{[Stand: 26.11.2009]} \\
{[Petitcolas]} &
Petitcolas, Fabien. \newline
DESIDERATA DE LA CRYPTOGRAPHIE MILITAIRE.\hfill20.06.2009\newline
URL: http://www.petitcolas.net/fabien/kerckhoffs/la\_cryptographie\_militaire\_i.htm\#desiderata \newline
{[Stand: 09.01.2010]} \\
{[RSA-2190]} &
RSA Laboratories.\newline
What are the best factoring methods in use today?\hfill03.11.2009\newline
URL: http://www.rsa.com/rsalabs/node.asp?id=2190\newline
{[Stand: 09.01.2010]} \\
{[RSA-2191]} &
RSA Laboratories.\newline
What improvements are likely in factoring capability?\hfill03.11.2009\newline
URL: http://www.rsa.com/rsalabs/node.asp?id=2191\newline
{[Stand: 09.01.2010]} \\
{[RSA-2216]} &
RSA Laboratories.\newline
What would it take to break the RSA cryptosystem?\hfill03.11.2009\newline
URL: http://www.rsa.com/rsalabs/node.asp?id=2216\newline
{[Stand: 09.01.2010]} \\
{[RSA-2964]} &
RSA Laboratories.\newline
RSA-640 factored!\hfill03.01.2010\newline
URL: http://www.rsa.com/rsalabs/node.asp?id=2964\newline
{[Stand: 09.01.2010]} \\
{[wiki-RSA]} &
Ladenthin, Bernhard.\newline
RSA-Kryptosystem.\hfill08.01.2010\newline
URL: http://de.wikipedia.org/wiki/RSA-Kryptosystem\#Erzeugung\_des\_öffentlichen\_und\_privaten\_Schlüssels\newline
{[Stand: 09.01.2010]}
\end{tabular}
}

View file

@ -0,0 +1,8 @@
SOURCE = facharbeit-rsa
make:
pdflatex -shell-escape $(SOURCE).tex -output-format=pdf
pdflatex -shell-escape $(SOURCE).tex -output-format=pdf
make clean
clean:
rm -rf $(TARGET) *.class *.html *.log *.aux *.out *.toc *.bbl *.blg *.pyg

View file

@ -0,0 +1,11 @@
Dies ist eine LaTeX-Version meiner Facharbeit. Die Original
OpenOffice-Facharbeit ist unter `Facharbeit-Martin-Thoma-2.odt` zu
finden. Damals wurde es wie in `Facharbeit-Martin-Thoma-2.pdf`
angezeigt.
Bekannte Probleme:
-----------------
* Internetadressen werde nicht gut angezeigt
* Internetadressen sind nicht direkt verlinkt
* Anhang wurde nicht richtig geparst (minted issue 85)[https://code.google.com/p/minted/issues/detail?id=85]
* Selbststaendigkeitserklaerung schaut nicht so schön aus

View file

@ -0,0 +1,9 @@
\vspace{10cm}
Ich erkläre, dass ich die Facharbeit ohne fremde Hilfe angefertigt
und nur die im Literaturverzeichnis angeführten Quellen und
Hilfsmittel benützt habe.
\vspace{10cm}
\titledate{Ort, Datum}

View file

@ -0,0 +1,28 @@
\thispagestyle{empty}
\begin{center}
{\Huge Paul-Klee-Gymnasium}
Facharbeit aus der Mathematik
Thema:
Asymmetrische Verschlüsselungsverfahren
am Beispiel des RSA-Kryptosystems
\begin{tabular}{lll}
Verfasser &:& Martin Andreas Thoma\\
Kursleiter &:& Claudia Wenninger\\
Abgegeben am &:& 20.01.2010 (verändert am 06.04.2010)\\
\\
\\
Erzielte Note &:& \line(1,0){120}\\
Erzielte Punkteanzahl &:& \line(1,0){120}\\
\end{tabular}
\end{center}

Binary file not shown.

View file

@ -0,0 +1,115 @@
\documentclass[a4paper,12pt]{scrartcl}
\usepackage{amssymb, amsmath} % needed for math
\usepackage[utf8]{inputenc} % this is needed for umlauts
\usepackage[ngerman]{babel} % this is needed for umlauts
\usepackage[T1]{fontenc} % this is needed for correct output of umlauts in pdf
\usepackage[top=3cm, bottom=3cm, left=4cm, right=2cm]{geometry} %layout
\usepackage{hyperref} % links im text
\usepackage{color}
\usepackage{framed}
\usepackage{enumerate} % for advanced numbering of lists
\usepackage{pdfpages} % Signatureinbingung und includepdf
\usepackage{parskip} % spaces instead of intendation between paragraphs
\usepackage{cite}
\usepackage[scaled=.90]{helvet}% Helvetica, served as a model for arial
\linespread{1.45} % 1,45-Facher Zeilenabstand
\usepackage{titlesec}
%\titlespacing{command}{left spacing}{before spacing}{after spacing}[right]
\titlespacing\section{0pt}{12pt plus 3pt minus 2pt}{0pt plus 2pt minus 1pt}
\usepackage[framemethod=tikz,xcolor=true]{mdframed}
\usepackage{enumitem}
\usepackage{braket} % needed for nice printing of sets
\usepackage{fancyhdr} % needed for the footer
\usepackage{lastpage} % needed for the footer
\usepackage{tikz} % needed for arrow in document
\usetikzlibrary{shapes.arrows} % needed for arrow in document
\clubpenalty = 10000 % Schusterjungen verhindern
\widowpenalty = 10000 % Hurenkinder verhindern
\hypersetup{
pdfauthor = {Martin Thoma},
pdfkeywords = {Asymmetrische Verschlüsselungsverfahren; RSA-Kryptosystems},
pdftitle = {Asymmetrische Verschlüsselungsverfahren am Beispiel des RSA-Kryptosystems},
pdfborder = {0 0 0} % remove red box around hyperlinks
}
\usepackage[german,nameinlink]{cleveref}
\crefname{section}{Kapitel}{Kapitel}
\pagestyle{fancy}
\fancyhf{}
\renewcommand{\headrulewidth}{0pt}
\renewcommand{\footrulewidth}{0pt}
\fancyfoot[R]{Seite~\thepage~von \pageref{LastPage}}
% From http://www.matthewflickinger.com/blog/archives/2005/02/20/latex_mod_spacing.asp
% Thanks!
\makeatletter
\def\imod#1{\allowbreak\mkern10mu({\operator@font mod}\,\,#1)}
\makeatother
\usepackage{minted} % needed for the inclusion of source code
\newcommand{\titledate}[2][2.5in]{%
\noindent%
\begin{tabular}{@{}p{#1}@{}}
\\ \hline \\[-.75\normalbaselineskip]
#2
\end{tabular} \hspace{1in}
\begin{tabular}{@{}p{#1}@{}}
\\ \hline \\[-.75\normalbaselineskip]
Unterschrift
\end{tabular}
}
\begin{document}
\def\myDownArrow{\smash{\begin{tikzpicture}[baseline=6mm]\useasboundingbox (-2,0);\node[single arrow,draw=black,fill=black!10,minimum height=4cm,minimum width=1.2cm,shape border rotate=270] at (0,-1) {};\end{tikzpicture}}}
\def\myUpArrow{\smash{\begin{tikzpicture}[baseline=6mm]\useasboundingbox (-2,0);\node[single arrow,draw=black,fill=black!10,minimum height=4cm,minimum width=1.2cm,shape border rotate=90] at (0,-1) {};\end{tikzpicture}}}
\def\myDownArrowB{\smash{\begin{tikzpicture}[baseline=6mm]\useasboundingbox (-1,0);\node[single arrow,draw=black,fill=black!10,minimum height=4cm,minimum width=1.2cm,shape border rotate=270] at (0,-1) {};\end{tikzpicture}}}
\def\myUpArrowB{\smash{\begin{tikzpicture}[baseline=6mm]\useasboundingbox (-1,0);\node[single arrow,draw=black,fill=black!10,minimum height=4cm,minimum width=1.2cm,shape border rotate=90] at (0,-1) {};\end{tikzpicture}}}
\setcounter{page}{0}
\pagenumbering{roman}
%\input{Titelseite}
\includepdf[pages=1]{Titelseite.pdf}
\clearpage
\thispagestyle{empty}
\tableofcontents
\clearpage
\pagenumbering{arabic}
\setcounter{page}{2}
% Start der eigentlichen Arbeit
\input{Kapitel-1}
\clearpage
\input{Kapitel-2}
\input{Kapitel-3}
\clearpage
\input{Kapitel-4}
\input{Kapitel-5}
\clearpage
\input{Kapitel-6}
\clearpage
\input{Kapitel-7}
\clearpage
\input{Literatur}
\clearpage
\input{Anhang}
\clearpage
\newpage
\input{Selbststaendigkeitserklaerung}
\end{document}

View file

@ -0,0 +1,2 @@
This example is now in a private repository. If you want to get access, please
ask info@martin-thoma.de