\documentclass[a4paper]{article}

\usepackage{hyperref,color,float}
\usepackage[all]{xy}

\title{Compilerbouw - Take-home opgave 2}
\author{Tadde\"us Kroes (6054129)}
\date{14 december 2011}

% Paragraph indentation
\setlength{\parindent}{0pt}
\setlength{\parskip}{1ex plus 0.5ex minus 0.2ex}

\begin{document}

\maketitle

\setcounter{secnumdepth}{1}

\section*{1a}

\begin{displaymath}
\xygraph{
!{<0cm,0cm>;<2cm,0cm>:<0cm,2cm>::} 
!{(2,2)}*+{k}="k"
!{(1,2)}*+{j}="j"
!{(1,1)}*+{g}="g"
!{(2,1)}*+{h}="h"
!{(1,0)}*+{f}="f"
!{(2,0)}*+{e}="e"
!{(0,2)}*+{d}="d"
!{(3,1)}*+{c}="c"
"d"-"c" "d"-"j" "d"-"h" "d"-"g" "d"-"f"
"j"-"k" "j"-"c" "j"-"h" "j"-"g"
"k"-"g"
"g"-"h" "g"-"e" "g"-"f"
"h"-"c" "h"-"e" "h"-"f"
"c"-"f"
"f"-"e"
}
\end{displaymath}

\section*{1b}

We volgen het algoritme voor ``Coloring by simplification'':
\begin{enumerate}
	\item Find a node m with less than K neighbors
	\item Remove node m and its edges from G, resulting in G'.
	      Store m on a stack
	\item Color the graph G'
	\item Graph G can be colored since m has less than K neighbors
\end{enumerate}

In ons geval is K = 4 (er zijn immers 4 registers beschikbaar). We zoeken dus
eerst een node met minder dan 4 buren:

\begin{table}[H]
\begin{tabular}{l|l}
node & aantal buren \\
\hline
k    & 2 $\leftarrow$ \\
j    & 5 \\
g    & 6 \\
h    & 6 \\
f    & 5 \\
e    & 3 \\
d    & 5 \\
c    & 4 \\
\end{tabular}
\end{table}

We verwijderen k en zetten hem op de stack. De overgebleven graaf is:

\begin{table}[H]
\begin{tabular}{l|l}
node & aantal buren \\
\hline
j    & 4 \\
g    & 5 \\
h    & 6 \\
f    & 5 \\
e    & 3 $\leftarrow$ \\
d    & 5 \\
c    & 4 \\
\end{tabular}
\end{table}

We verwijderen e en zetten hem op de stack. De overgebleven graaf is:

\begin{table}[H]
\begin{tabular}{l|l}
node & aantal buren \\
\hline
j    & 4 \\
g    & 4 \\
h    & 5 \\
f    & 4 \\
d    & 5 \\
c    & 4 \\
\end{tabular}
\end{table}

Er zijn geen nodes meer met minder dan 4 buren, maar er is een ``redundant
move'' (namelijk ``j = f'', omdat er geen kant in de graaf is tussen j en f).
We kunnen j en f ``coalesceren'', hierna hebben we de volgende graaf G'
(nodes k en e zijn al verwijderd):

\begin{displaymath}
\xygraph{
!{<0cm,0cm>;<2cm,0cm>:<0cm,2cm>::} 
!{(1,2)}*+{j + f}="jf"
!{(1,1)}*+{g}="g"
!{(2,1)}*+{h}="h"
!{(0,2)}*+{d}="d"
!{(3,1)}*+{c}="c"
"d"-"c" "d"-"jf" "d"-"g" "d"-"h"
"jf"-"c" "jf"-"h" "jf"-"g"
"g"-"h"
"h"-"c"
}
\end{displaymath}

\begin{table}[H]
\begin{tabular}{l|l}
node  & aantal buren \\
\hline
j + f & 4 \\
g     & 3 $\leftarrow$ \\
h     & 4 \\
d     & 4 \\
c     & 3 \\
\end{tabular}
\end{table}

We verwijderen g en zetten hem op de stack. De overgebleven graaf is:

\begin{table}[H]
\begin{tabular}{l|l}
node & aantal buren \\
\hline
j + f & 3 \\
h     & 3 \\
d     & 3 \\
c     & 3 \\
\end{tabular}
\end{table}

Alle nodes hebben nu minder dan 4 buren, dus volgens het algoritme worden ze
\'e\'en voor \'e\'en op de stack gezet. De uiteindelijke stack is \{k, e, g,
j + f, h, d, c\}. Nu ``poppen'' we telkens een element van de stack en kleuren
hem met een kleur die niet wordt gebruikt door zijn buren: \\
\{k, e, g, j + f, h, d\} \textcolor{blue}{c} \\
\{k, e, g, j + f, h\} \textcolor{red}{d} \\
\{k, e, g, j + f\} \textcolor{green}{h} \\
\{k, e, g\} \textcolor{cyan}{j + f} \\
\{k, e\} \textcolor{blue}{g} \\
\{k\} \textcolor{red}{e} \\
\{\} \textcolor{red}{k}

De kleurenindeling van G is dus als volgt:

\begin{displaymath}
\xygraph{
!{<0cm,0cm>;<2cm,0cm>:<0cm,2cm>::} 
!{(2,2)}*+{\textcolor{red}{k}}="k"
!{(1,2)}*+{\textcolor{cyan}{j}}="j"
!{(1,1)}*+{\textcolor{blue}{g}}="g"
!{(2,1)}*+{\textcolor{green}{h}}="h"
!{(1,0)}*+{\textcolor{cyan}{f}}="f"
!{(2,0)}*+{\textcolor{red}{e}}="e"
!{(0,2)}*+{\textcolor{red}{d}}="d"
!{(3,1)}*+{\textcolor{blue}{c}}="c"
"d"-"c" "d"-"j" "d"-"h" "d"-"g" "d"-"f"
"j"-"k" "j"-"c" "j"-"h" "j"-"g"
"k"-"g"
"g"-"h" "g"-"e" "g"-"f"
"h"-"c" "h"-"e" "h"-"f"
"c"-"f"
"f"-"e"
}
\end{displaymath}

Dit komt neer op de volgende registerallocatie:

\begin{table}[H]
\begin{tabular}{l|l}
Register             & Variabelen \\
\hline
\textcolor{blue}{0}  & g, c \\
\textcolor{red}{1}   & d, k, e \\
\textcolor{green}{2} & h \\
\textcolor{cyan}{3}  & j, f \\
\end{tabular}
\end{table}

\end{document}