== Algorithmen == - So könnte man einen Algorithmus einbinden: 1. Grobe Idee 2. ...endet mit Verweis auf Pseudocode ("... wie in Algorithmus~\ref{algo:myAlgo} beschrieben.") 3. Pseudocode 4. Detaillierte Beschreibung. Step-by-step, ggf. mit Verweisen auf einzelne Zeilen, z.B "Die zweite While-Schleife (Zeilen~\ref{line:while2begin}--\ref{line:while2end}) umfasst die Schritte..." Achtung: Den Algorithmus nicht einfach in Worten wiedergeben, sondern _erklären_. - Wenn der Algorithmus bereits im Vorfeld im Text entwickelt wurde muss er nicht nocheinmal detailliert erläutert werden. - Mathematische Notation - kann helfen: eindeutig, kurz - kann zu kryptisch sein - Nicht vergessen, dass es *Pseudo*code ist, d.h. Code, der vom Leser einfach verstanden werden soll und nicht von einem Kompiler. Z.B: Anstelle von: for (1<=i<=|s|) do { set c<-s[i]; set A_c<-A_c+1;} lieber: For each character c in string s, increment A_c - Es gibt keine einheitliche "Pseudocode-Sprache". - Also eigenen Stil finden. - Aber einheitlich bleiben, z.B. "inc(i)" oder "i++" oder "i=i+1" oder "i\longleftarrowi+1" etc. == Algorithmen in LaTeX == Für Pseudocode gibt es verschiedene Pakete. Zum Beispiel: algorithm2e. Details siehe: http://ctan.mackichan.com/macros/latex/contrib/algorithm2e/algorithm2e.pdf Pakete einbinden (vor \begin{document}): %Pseudocode-Paket \usepackage[ruled,linesnumbered,nofillcomment,vlined]{algorithm2e} Beispiel für Pseudocode (nach \begin{document}): %Some pseudo code \begin{algorithm}[ht]\DontPrintSemicolon %CAPTION \caption{\label{alg:hartigan}Fitch-Hartigan for Zero-One Instances} %IN AND OUTPUT \KwIn{A rooted tree $T=(V,E)$ with each leaf $l \in V$ labeled with $L(l) \subseteq \mathcal{C}$.} \KwOut{A labeling $L$ with minimal Wagner parsimony weight $W(T,L)$.} %ACTUAL CODE \ForEach{$c\in\mathcal{C}$}{ \tcc{Bottom-up phase} %COMMENT \ForEach{leaf $l$}{ $VU(l)\longleftarrow\{L_c(l)\}$\; $VL(l)\longleftarrow\emptyset$\; } \ForEach{unlabeled node $u$ whose children $v_1,\ldots,v_{l(u)}$ are labeled}{ \lFor{$b\in\{0,1\}$}{$k(b)\longleftarrow|\{v_i\mid b \in VU(v_i)\}|$}\; $K\longleftarrow\max\{k(0),k(1)\}$\; $VU(u)\longleftarrow\{b \mid k(b)=K\}$\; $VL(u)\longleftarrow\{b \mid k(b)=K-1\}$\; } \tcc{Top-down refinement} %COMMENT assign any $b \in VU(r)$ to the root node $r$: $L_c(r):=b$\;\label{line:root} \ForEach{\label{line:node}unrefined node $v$ whose parent node $u$ is already refined to $L_c(u)=a$}{ refine the labeling of $v$ to $L_c(v)\longleftarrow b$, with any $b \in B(v,a)$: $B(v,a):=\left\{\begin{array}{ll} \{a\} & \text{if }a \in VU(v),\\ \{a\}\cup VU(v) & \text{if } a \in VL(v),\\ VU(v) & \text{otherwise.} \end{array}\right.$ } } %RETURN \KwRet{$L$} %END OF ALGORITHM \end{algorithm} So refereziert man: Algorithmus~\ref{alg:hartigan} auf Seite~\pageref{alg:hartigan} zeigt ein Beispiel für Pseudocode. Bei einer detaillierten Beschreibung des Algorithmus kann man auch auf einzelne Zeilen, z.B.\ Zeile~\ref{line:root} oder~\ref{line:node}, verweisen.