Corrections
This commit is contained in:
parent
5ab9105861
commit
37b767b135
82
luku19.tex
82
luku19.tex
|
@ -1,6 +1,6 @@
|
||||||
\chapter{Paths and circuits}
|
\chapter{Paths and circuits}
|
||||||
|
|
||||||
This chapter focuses on two types of paths in a graph:
|
This chapter focuses on two types of paths in graphs:
|
||||||
\begin{itemize}
|
\begin{itemize}
|
||||||
\item An \key{Eulerian path} is a path that
|
\item An \key{Eulerian path} is a path that
|
||||||
goes through each edge exactly once.
|
goes through each edge exactly once.
|
||||||
|
@ -12,9 +12,9 @@ similar concepts at first glance,
|
||||||
the computational problems related to them
|
the computational problems related to them
|
||||||
are very different.
|
are very different.
|
||||||
It turns out that there is a simple rule that
|
It turns out that there is a simple rule that
|
||||||
determines whether a graph contains an Eulerian path,
|
determines whether a graph contains an Eulerian path
|
||||||
and there is also an efficient algorithm for
|
and there is also an efficient algorithm to
|
||||||
finding a path if it exists.
|
find a such path if it exists.
|
||||||
On the contrary, checking the existence of a Hamiltonian path is a NP-hard
|
On the contrary, checking the existence of a Hamiltonian path is a NP-hard
|
||||||
problem and no efficient algorithm is known for solving the problem.
|
problem and no efficient algorithm is known for solving the problem.
|
||||||
|
|
||||||
|
@ -154,16 +154,16 @@ so there is an Eulerian path between nodes 2 and 5,
|
||||||
but the graph does not contain an Eulerian circuit.
|
but the graph does not contain an Eulerian circuit.
|
||||||
|
|
||||||
In a directed graph,
|
In a directed graph,
|
||||||
we should focus on indegrees and outdegrees
|
we focus on indegrees and outdegrees
|
||||||
of the nodes in the graph.
|
of the nodes of the graph.
|
||||||
A directed graph contains an Eulerian path
|
A directed graph contains an Eulerian path
|
||||||
if all the edges belong to the same strongly
|
if all the edges belong to the same strongly
|
||||||
connected component and
|
connected component and
|
||||||
\begin{itemize}
|
\begin{itemize}
|
||||||
\item each node has the same indegree and outdegree \emph{or}
|
\item in each node, the indegree equals the outdegree, \emph{or}
|
||||||
\item in one node, indegree is one larger than outdegree,
|
\item in one node, the indegree is one larger than the outdegree,
|
||||||
in another node, outdegree is one larger than indegree,
|
in another node, the outdegree is one larger than the indegree,
|
||||||
and all other nodes have the same indegree and outdegree.
|
and all other nodes, the indegree equals the outdegree.
|
||||||
\end{itemize}
|
\end{itemize}
|
||||||
|
|
||||||
In the first case, each Eulerian path in the graph
|
In the first case, each Eulerian path in the graph
|
||||||
|
@ -223,11 +223,13 @@ from node 2 to node 5:
|
||||||
\index{Hierholzer's algorithm}
|
\index{Hierholzer's algorithm}
|
||||||
|
|
||||||
\key{Hierholzer's algorithm} is an efficient
|
\key{Hierholzer's algorithm} is an efficient
|
||||||
method for constructing an Eulerian circuit
|
method for constructing
|
||||||
for an undirected graph.
|
an Eulerian circuit.
|
||||||
The algorithm assumes that all edges belong to
|
The algorithm consists of several rounds,
|
||||||
the same connected component,
|
each of which adds new edges to the circuit.
|
||||||
and the degree of each node is even.
|
Of course, we assume that the graph contains
|
||||||
|
an Eulerian circuit; otherwise Hierholzer's
|
||||||
|
algorithm cannot find it.
|
||||||
|
|
||||||
First, the algorithm constructs a circuit that contains
|
First, the algorithm constructs a circuit that contains
|
||||||
some (not necessarily all) of the edges in the graph.
|
some (not necessarily all) of the edges in the graph.
|
||||||
|
@ -236,22 +238,26 @@ step by step by adding subcircuits to it.
|
||||||
The process continues until all edges have been added
|
The process continues until all edges have been added
|
||||||
to the circuit.
|
to the circuit.
|
||||||
|
|
||||||
The algorithm extends the circuit by always choosing
|
The algorithm extends the circuit by always finding
|
||||||
a node $x$ that belongs to the circuit but has
|
a node $x$ that belongs to the circuit but has
|
||||||
some edges that are not included in the circuit.
|
an outgoing edge that is not included in the circuit.
|
||||||
The algorithm constructs a new path from node $x$
|
The algorithm constructs a new path from node $x$
|
||||||
that only contains edges that are not in the circuit.
|
that only contains edges that are not yet in the circuit.
|
||||||
Since the degree of each node is even,
|
Sooner or later,
|
||||||
the path will return to the node $x$ sooner or later,
|
the path will return to the node $x$,
|
||||||
which creates a subcircuit.
|
which creates a subcircuit.
|
||||||
|
|
||||||
If the graph contains two odd-degree nodes,
|
If the graph only contains an Eulerian path,
|
||||||
Hierholzer's algorithm can also be used to
|
we can still use Hierholzer's algorithm
|
||||||
construct an Eulerian path by adding an
|
to find it by adding an extra edge to the graph
|
||||||
extra edge between the odd-degree nodes.
|
and removing the edge after the circuit
|
||||||
After this, we can first construct an Eulerian circuit
|
has been constructed.
|
||||||
and then remove the extra edge,
|
For example, in an undirected graph,
|
||||||
which yields an Eulerian path in the original graph.
|
we add the extra edge between the two
|
||||||
|
odd-degree nodes.
|
||||||
|
|
||||||
|
Next we will see how Hierholzer's algorithm
|
||||||
|
constructs an Eulerian circuit in an undirected graph.
|
||||||
|
|
||||||
\subsubsection{Example}
|
\subsubsection{Example}
|
||||||
|
|
||||||
|
@ -282,7 +288,7 @@ Let us consider the following graph:
|
||||||
\end{samepage}
|
\end{samepage}
|
||||||
|
|
||||||
\begin{samepage}
|
\begin{samepage}
|
||||||
Suppose the algorithm first creates a circuit
|
Suppose that the algorithm first creates a circuit
|
||||||
that begins at node 1.
|
that begins at node 1.
|
||||||
A possible circuit is
|
A possible circuit is
|
||||||
$1 \rightarrow 2 \rightarrow 3 \rightarrow 1$:
|
$1 \rightarrow 2 \rightarrow 3 \rightarrow 1$:
|
||||||
|
@ -486,9 +492,9 @@ is at least $n$,
|
||||||
the graph contains a Hamiltonian path.
|
the graph contains a Hamiltonian path.
|
||||||
\end{itemize}
|
\end{itemize}
|
||||||
|
|
||||||
A common feature in these theorems and other results is
|
A common property in these theorems and other results is
|
||||||
that they guarantee that a Hamiltonian path exists
|
that they guarantee the existence of a Hamiltonian
|
||||||
if the graph has \emph{a lot} of edges.
|
if the graph has \emph{a large number} of edges.
|
||||||
This makes sense, because the more edges the graph contains,
|
This makes sense, because the more edges the graph contains,
|
||||||
the more possibilities there is to construct a Hamiltonian graph.
|
the more possibilities there is to construct a Hamiltonian graph.
|
||||||
|
|
||||||
|
@ -522,7 +528,7 @@ It is possible to implement this solution in $O(2^n n^2)$ time.
|
||||||
A \key{De Bruijn sequence} is a string that contains
|
A \key{De Bruijn sequence} is a string that contains
|
||||||
every string of length $n$
|
every string of length $n$
|
||||||
exactly once as a substring, for a fixed
|
exactly once as a substring, for a fixed
|
||||||
alphabet that consists of $k$ characters.
|
alphabet of $k$ characters.
|
||||||
The length of such a string is
|
The length of such a string is
|
||||||
$k^n+n-1$ characters.
|
$k^n+n-1$ characters.
|
||||||
For example, when $n=3$ and $k=2$,
|
For example, when $n=3$ and $k=2$,
|
||||||
|
@ -537,7 +543,7 @@ corresponds to an Eulerian circuit in a graph.
|
||||||
The idea is to construct the graph so that
|
The idea is to construct the graph so that
|
||||||
each node contains a combination of $n-1$ characters
|
each node contains a combination of $n-1$ characters
|
||||||
and each edge adds one character to the string.
|
and each edge adds one character to the string.
|
||||||
The following graph corresponds to the example case:
|
The following graph corresponds to the above example:
|
||||||
|
|
||||||
\begin{center}
|
\begin{center}
|
||||||
\begin{tikzpicture}
|
\begin{tikzpicture}
|
||||||
|
@ -559,10 +565,10 @@ The following graph corresponds to the example case:
|
||||||
\end{tikzpicture}
|
\end{tikzpicture}
|
||||||
\end{center}
|
\end{center}
|
||||||
|
|
||||||
An Eulerian path in this graph produces a string
|
An Eulerian path in this graph corresponds to a string
|
||||||
that contains all strings of length $n$.
|
that contains all strings of length $n$.
|
||||||
The string contains the characters in the starting node
|
The string contains the characters of the starting node
|
||||||
and all character in the edges.
|
and all characters in the edges.
|
||||||
The starting node has $n-1$ characters
|
The starting node has $n-1$ characters
|
||||||
and there are $k^n$ characters in the edges,
|
and there are $k^n$ characters in the edges,
|
||||||
so the length of the string is $k^n+n-1$.
|
so the length of the string is $k^n+n-1$.
|
||||||
|
@ -613,13 +619,13 @@ For example, here is an open knight's tour on a $5 \times 5$ board:
|
||||||
\end{center}
|
\end{center}
|
||||||
|
|
||||||
A knight's tour corresponds to a Hamiltonian path in a graph
|
A knight's tour corresponds to a Hamiltonian path in a graph
|
||||||
whose nodes represent the squares of the board,
|
whose nodes represent the squares of the board
|
||||||
and two nodes are connected with an edge if a knight
|
and two nodes are connected with an edge if a knight
|
||||||
can move between the squares according to the rules of chess.
|
can move between the squares according to the rules of chess.
|
||||||
|
|
||||||
A natural way to construct a knight's tour is to use backtracking.
|
A natural way to construct a knight's tour is to use backtracking.
|
||||||
The search can be made more efficient by using
|
The search can be made more efficient by using
|
||||||
\key{heuristics} that attempts to guide the knight so that
|
\key{heuristics} that attempt to guide the knight so that
|
||||||
a complete tour will be found quickly.
|
a complete tour will be found quickly.
|
||||||
|
|
||||||
\subsubsection{Warnsdorff's rule}
|
\subsubsection{Warnsdorff's rule}
|
||||||
|
|
Loading…
Reference in New Issue