\ifx\endpart\undefined
\input macros.tex
\fi

\unchapter{Preface}

This thesis tells the story of two well-established problems of algorithmic
graph theory: the minimum spanning trees and ranks of permutations. At distance,
both problems seem to be simple, boring and already solved, because we have poly\-nom\-ial-time
algorithms for them since ages. But when we come closer and seek algorithms that
are really efficient, the problems twirl and twist and withstand many a~brave
attempt at the optimum solution. They also reveal a~vast and diverse landscape
of a~deep and beautiful theory. Still closer, this landscape turns out to be interwoven
with the intricate details of various models of computation and even of arithmetics
itself.

I have tried to cover all known important results on both problems and unite them
in a~single coherent theory. At many places, I have tried to contribute my own
little stones to this mosaic: several new results, simplifications of existing
ones, and last, but not least filling in important details where the original
authors have missed some.

When compared with the earlier surveys on the minimum spanning trees, most
notably Graham and Hell \cite{gh:history} and Eisner \cite{eisner:tutorial},
this work includes many of the recent advances, the dynamic algorithms and
also the relationship with computational models. No previous work covering
the ranking problems in entirety is known.

The early parts of this thesis also served as a~basis for the course on graph
algorithms which I was teaching at our faculty during 2006 and~2007. They are
included in the textbook \cite{mm:ga} which I have written for this course.

\def\ss#1{\medskip\>{\bo #1}\enspace\eatspaces}

\ss{My original results}

\itemize\ibull
\:The lower bound in Section \ref{contalg}. Not published yet.
\:The tree isomorphism algorithm in Section \ref{bucketsort}. Not published yet.
\:Both algorithms for minor-closed graph classes in Section \ref{minorclosed}. Published in \cite{mm:mst}.
\:The linear-time verification algorithm in Section \ref{verifysect} is a~simplification
  of the algorithm of King \cite{king:verify} and it corrects many omissions
  in the original paper. Not published yet.
\:The ranking algorithms in Sections \ref{ranksect} to \ref{kpranksect} are results of joint research with Milan Straka.
  Published in \cite{mm:rank}.
\:The remaining sections of Chapter \ref{rankchap} contain unpublished original research.
\endlist

\ss{Other minor contributions}

\itemize\ibull
\:The flattening procedure in Section \ref{bucketsort}. Published in \cite{mm:mst}.
\:The unified view of vector computations in Section \ref{bitsect}. Published
  in the textbook \cite{mm:ga}. The main ideas of this section were also published
  in the yearbook of the Czech Mathematical Olympiad \cite{horak:mofivefour}.
\:Several simplifications of the soft heaps in Section \ref{shsect}.
\:The dynamic MST algorithm for graphs with limited edge weights in Section \ref{dynmstsect}.
\endlist

\vfill\eject

\ss{Acknowledgements}

First of all, I~would like to thank my supervisor, Jaroslav Ne\v{s}et\v{r}il, for
introducing me to the world of discrete mathematics and gently guiding my attempts
to explore it with his deep insight. I~am very grateful to all members of the
Department of Applied Mathematics and of the Institute for Theoretical Computer
Science for the work environment which was both friendly and highly inspiring.
I~also send my acknowledgements to the members of the Math department at ETH Z\"urich and of DIMACS
at the Rutgers University (especially to J\'anos Koml\'os) where I~spent several
pleasant months working on what finally become a~part of this thesis.

I~also thank to my family for supporting me during the plentiful years of my study,
to my girlfriend Ani\v{c}ka for lots of patience when I~was caught up by my work and
hardly speaking, to all the polar bears of Kobylisy for their furry presence, and
finally to our cats Minuta and Dami\'an for their mastership in hiding my
papers, which has frequently forced me to think of new ways of looking at problems
when the old ones were impossible to find.

\ss{Notation}

I~have tried to stick to the usual notation except where it was too inconvenient.
Most symbols are defined at the place where they are used for the first time.
A~complete index of symbols with pointers to their definitions is then available
in Appendix~\ref{notapp}. This appendix also describes the formalism of
multigraphs and of the Ackermann's function, both of which are not defined
consistently in the common literature.

To avoid piling up too many symbols at places that speak about a~single fixed graph,
this graph is always called~$G$, its set of vertices and edges are denoted by $V$
and~$E$ respectively, and I~also use~$n$ for the number of its vertices and $m$~for
the number of edges. At places where there is a~danger of confusion, the usual explicit notation
is used instead.


\bigskip

So, my gentle reader, let us nestle deep in an~ancient wing armchair. The saga of the
graph algorithms begins~\dots

\endpart
