]> mj.ucw.cz Git - saga.git/commitdiff
Introduction to dynamic algorithms.
authorMartin Mares <mj@ucw.cz>
Mon, 7 Apr 2008 16:56:16 +0000 (18:56 +0200)
committerMartin Mares <mj@ucw.cz>
Mon, 7 Apr 2008 16:56:16 +0000 (18:56 +0200)
Makefile
dyn.tex [new file with mode: 0644]
mst.tex
saga.tex

index 13a9679e6013850db63bac7924dd035a12a809f9..a6eb55950319d124d9b162c779fbe2e77493c921 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -1,6 +1,6 @@
 all: saga.ps
 
-CHAPTERS=cover mst ram adv opt rank notation
+CHAPTERS=cover mst ram adv opt dyn rank notation
 
 %.dvi: %.tex macros.tex biblio.bib
        tex $< && bibtex $* && tex $< && tex $<
diff --git a/dyn.tex b/dyn.tex
new file mode 100644 (file)
index 0000000..b16f43a
--- /dev/null
+++ b/dyn.tex
@@ -0,0 +1,45 @@
+\ifx\endpart\undefined
+\input macros.tex
+\fi
+
+\chapter{Dynamic Spanning Trees}\id{dynchap}%
+
+\section{Dynamic graph algorithms}
+
+In many applications, we often need to solve a~certain graph problem for a~sequence
+of graphs that differ only a~little, so recomputing the solution from scratch for
+every graph would be a~waste of time. In such cases, we usually turn our attention
+to \df{dynamic graph algorithms.} A~dynamic algorithm is in fact a~data structure
+that remembers a~graph and offers operations that modify the structure of the graph
+(let's say by insertion and deletion of edges) and also operations that query the
+result of the problem for the current state of the graph.
+A~typical example of a~problem solved by such algorithms is dynamic maintenance of
+connected components:
+
+\problemn{Dynamic connectivity}
+Maintain an~undirected graph under a~sequence of the following operations:
+\itemize\ibull
+\:$\<Init>(n)$ --- create a~graph with $n$~isolated vertices,\foot{%
+The structure could support dynamic additional and removal of vertices, too,
+but this is easy to add and infrequently used, so we will rather use a~fixed
+set of vertices for clarity.}
+\:$\<Insert>(G,u,v)$ --- insert an~edge $uv$ to~$G$ and return its unique
+identifier (assuming that the edge did not exist yet),
+\:$\<Delete>(G,e)$ --- delete an~edge specified by its identifier from~$G$,
+\:$\<Connected>(G,u,v)$ --- test if $u$ and~$v$ are in the same connected component of~$G$.
+\endlist
+
+\para
+We have already encountered a~special case of dynamic connectivity when implementing the
+Kruskal's algorithm in Section \ref{classalg}. At that time, we did not need to delete
+any edges from the graph (this is sometimes called a~\df{semidynamic graph algorithm}),
+which makes the problem substantially easier. We mentioned the Union-Find data structure
+of Tarjan and van Leeuwen ....
+
+
+%--------------------------------------------------------------------------------
+
+\section{Sleator-Tarjan trees}
+
+
+\endpart
diff --git a/mst.tex b/mst.tex
index 00d818f79368c4e5a891c78ebb15db8e3dec4551..f054c1e977349492ae6c3d4dc65764c8ce6c9b1d 100644 (file)
--- a/mst.tex
+++ b/mst.tex
@@ -317,7 +317,7 @@ Theorem \ref{mstthm}), so it is the heaviest edge on the cycle $T_{min}[e]+e$.
 
 %--------------------------------------------------------------------------------
 
-\section{Classical algorithms}
+\section{Classical algorithms}\id{classalg}%
 
 The three classical MST algorithms can be easily stated in terms of the Red-Blue meta-algorithm.
 For each of them, we first show the general version of the algorithm, then we prove that
@@ -466,6 +466,7 @@ can be maintained in $\O(\alpha(n))$ time amortized per operation.
 
 \proof
 Proven by Tarjan and van Leeuwen in \cite{tarjan:setunion}.
+See Chapter~\ref{dynchap} for more context.
 \qed
 
 \FIXME{Define Ackermann's function. Use $\alpha(m,n)$?}
index 42243a80d160b523e1008d4419714ca78e379262..6fbc7fc34dd64bd7a6fd86c5f9a7bf50dd5e6c0a 100644 (file)
--- a/saga.tex
+++ b/saga.tex
@@ -6,6 +6,7 @@
 \input ram.tex
 \input adv.tex
 \input opt.tex
+\input dyn.tex
 \input rank.tex
 
 \input notation.tex