summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/algorithms/algorithms.dtx
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
committerNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
commite0c6872cf40896c7be36b11dcc744620f10adf1d (patch)
tree60335e10d2f4354b0674ec22d7b53f0f8abee672 /macros/latex/contrib/algorithms/algorithms.dtx
Initial commit
Diffstat (limited to 'macros/latex/contrib/algorithms/algorithms.dtx')
-rw-r--r--macros/latex/contrib/algorithms/algorithms.dtx1272
1 files changed, 1272 insertions, 0 deletions
diff --git a/macros/latex/contrib/algorithms/algorithms.dtx b/macros/latex/contrib/algorithms/algorithms.dtx
new file mode 100644
index 0000000000..f90ef4799d
--- /dev/null
+++ b/macros/latex/contrib/algorithms/algorithms.dtx
@@ -0,0 +1,1272 @@
+% \iffalse meta-comment
+%
+% Copyright (C) 1994-2004 Peter Williams <pwil3058@bigpond.net.au>
+% Copyright (C) 2005-2009 Rogério Brito <rbrito@ime.usp.br>
+%
+% This document file is free software; you can redistribute it and/or
+% modify it under the terms of the GNU Lesser General Public License as
+% published by the Free Software Foundation; either version 2 of the
+% License, or (at your option) any later version.
+%
+% This document file is distributed in the hope that it will be useful, but
+% WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser
+% General Public License for more details.
+%
+% You should have received a copy of the GNU Lesser General Public License
+% along with this document file; if not, write to the Free Software
+% Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301
+% USA.
+%
+% \fi
+%
+% \iffalse
+%<algorithm>\NeedsTeXFormat{LaTeX2e}[1999/12/01]
+%<algorithm>\ProvidesPackage{algorithm}
+%<algorithm> [2009/08/24 v0.1 Document Style `algorithm' - floating environment]
+%
+%<algorithmic>\NeedsTeXFormat{LaTeX2e}[1999/12/01]
+%<algorithmic>\ProvidesPackage{algorithmic}
+%<algorithmic> [2009/08/24 v0.1 Document Style `algorithmic']
+%
+%
+%<*driver>
+\documentclass{ltxdoc}
+\usepackage[latin1]{inputenc}
+\usepackage[T1]{fontenc}
+\usepackage[sc]{mathpazo}
+\usepackage[pdfstartview={FitH}]{hyperref}
+\usepackage{algorithm}
+\usepackage{algorithmic}
+\usepackage{multicol}
+\EnableCrossrefs
+\CodelineIndex
+\RecordChanges
+\begin{document}
+ \DocInput{algorithms.dtx}
+\end{document}
+%</driver>
+% \fi
+%
+%\CheckSum{0}
+% \CharacterTable
+% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z
+% Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z
+% Digits \0\1\2\3\4\5\6\7\8\9
+% Exclamation \! Double quote \" Hash (number) \#
+% Dollar \$ Percent \% Ampersand \&
+% Acute accent \' Left paren \( Right paren \)
+% Asterisk \* Plus \+ Comma \,
+% Minus \- Point \. Solidus \/
+% Colon \: Semicolon \; Less than \<
+% Equals \= Greater than \> Question mark \?
+% Commercial at \@ Left bracket \[ Backslash \\
+% Right bracket \] Circumflex \^ Underscore \_
+% Grave accent \` Left brace \{ Vertical bar \|
+% Right brace \} Tilde \~}
+%
+% \changes{v0.1}{2009/08/24}{Migrated the package to .ins and .dtx format}
+%
+% \GetFileInfo{algorithm.sty}
+% \GetFileInfo{algorithmic.sty}
+% \DoNotIndex{\#,\$,\%,\&,\@,\\,\{,\},\^,\_,\~,\ }
+% \DoNotIndex{\@ne}
+% \DoNotIndex{\advance,\begingroup,\catcode,\closein}
+% \DoNotIndex{\closeout,\day,\def,\edef,\else,\empty,\endgroup}
+%
+% \title{The \textsf{algorithms} bundle\thanks{This document
+% corresponds to \textsf{algorithms}~\fileversion,
+% dated~\filedate.}}
+% \author{Rogério Brito\\ \href{mailto:rbrito@ime.usp.br}{\texttt{rbrito@ime.usp.br}}}
+%
+% \newcommand{\keyword}[1]{\texttt{#1}}
+% \newcommand{\nameoffile}[1]{\texttt{#1}}
+%
+% \setcounter{tocdepth}{2}
+%
+% \addtocontents{toc}{\protect\begin{multicols}{2}}
+% \maketitle
+% \tableofcontents
+% \listofalgorithms
+%
+% % \newtheorem{warning}{Warning}
+% \renewcommand{\thewarning}{}
+%
+% \section{Introduction}
+%
+% This package provides two environments, \keyword{algorithmic} and
+% \keyword{algorithm}, which are designed to be used together but may,
+% depending on the necessities of the user, be used separately.
+%
+% The \keyword{algorithmic} environment provides an environment for
+% describing algorithms and the \keyword{algorithm} environment provides
+% a ``float'' wrapper for algorithms (implemented using
+% \keyword{algorithmic} or some other method at the users's option).
+% The reason for two environments being provided is to allow the user
+% maximum flexibility.
+%
+% This work may be distributed and/or modified under the conditions of
+% the GNU Lesser General Public License, either version 2 of the
+% License, or (at your option) any later version, as published by the
+% Free Software Foundation. See the file \nameoffile{COPYING} included
+% in this package for further details.
+%
+% Currently, this package consists of the following files:
+% \begin{itemize}
+% \item \nameoffile{algorithms.ins}: the driver file
+% \item \nameoffile{algorithms.dtx}: the source file
+% \item \nameoffile{COPYING}: the license file
+% \item \nameoffile{README}: remarks about the package
+% \item \nameoffile{THANKS}: mentions of thanks for contributors to
+% the package
+% \end{itemize}
+%
+% Starting with with the 2009-08-24 release, the package is now
+% versioned and this document corresponds to version~\fileversion.
+%
+% If you use this package, the author would kindly appreciate if you
+% mentioned it in your documents, so as to let the package be better
+% known and have more contributors, to make it better for the community
+% itself. This is \emph{not} required by the license: it's just a
+% friendly request.
+%
+%\section{Installation}
+%
+% The installation procedure of \textsf{algorithms} follows the usual
+% practice of packages shipped with a pair of
+% \nameoffile{.ins}/\nameoffile{.dtx}---simply type the comand:
+% \begin{quote}
+% \texttt{latex algorithms.ins}
+% \end{quote}
+% and the \nameoffile{.sty} files will be generated. Copy them to a
+% place that is referenced by your \LaTeX{} distribution. To generate
+% the documentation, type:
+% \begin{quote}
+% \texttt{latex algorithms.dtx}
+% \end{quote}
+%
+% \section[Environment: \keyword{algorithmic}]%
+% {The \keyword{algorithmic} Environment}
+% \label{sec:algorithmic-envir}
+% Within an \keyword{algorithmic} a number of commands for typesetting
+% popular algorithmic constructs are available. In general, the
+% commands provided can be arbitrarily nested to describe quite complex
+% algorithms. An optional argument to the \verb+\begin{algorithmic}+
+% statement can be used to turn on line numbering by giving a positive
+% integer indicating the required frequency of line numbering. For
+% example, \verb+\begin{algorithmic}[5]+ would cause every fifth line
+% to be numbered.
+%
+% \subsection{The Simple Statement}
+%
+% The simple statement takes the form
+% \begin{verbatim}
+% \STATE <text>
+% \end{verbatim}
+% and is used for simple statements. For example,
+% \begin{verbatim}
+% \begin{algorithmic}
+% \STATE $S \leftarrow 0$
+% \end{algorithmic}
+% \end{verbatim}
+% would produce
+% \begin{algorithmic}
+% \STATE $S \leftarrow 0$
+% \end{algorithmic}
+% With line numbering selected for every line, using,
+% \begin{verbatim}
+% \begin{algorithmic}[1]
+% \STATE $S \leftarrow 0$
+% \end{algorithmic}
+% \end{verbatim}
+% we would get
+% \begin{algorithmic}[1]
+% \STATE $S \leftarrow 0$
+% \end{algorithmic}
+%
+% \begin{warning}
+% For users of earlier versions of \keyword{algorithmic} this
+% construct is a cause of an incompatibility. In the earlier version,
+% instead of starting simple statements with the \verb+\STATE+
+% command, simple statements were entered as free text and terminated
+% with \verb+\\+ command. Unfortunately, this simpler method failed
+% to survive the modifications necessary for statement numbering.
+% However, the \verb+\\+ command can still be used to force a line
+% break within a simple statement.
+% \end{warning}
+%
+%\subsection{The \emph{if-then-else} Statement}
+%
+% The \emph{if-then-else} construct takes the forms:
+% \begin{verbatim}
+% \IF{<condition>} <text> \ENDIF
+% \IF{<condition>} <text1> \ELSE <text2> \ENDIF
+% \IF{<condition1>} <text1> \ELSIF{<condition2>} <text2> \ELSE <text3> \ENDIF
+% \end{verbatim}
+%
+% In the third of these forms there is no limit placed on the number of
+% \verb+\ELSIF{<condition>}+ that may be used. For example,
+% \begin{verbatim}
+% \begin{algorithmic}
+% \IF{some condition is true}
+% \STATE do some processing
+% \ELSIF{some other condition is true}
+% \STATE do some different processing
+% \ELSIF{some even more bizarre condition is met}
+% \STATE do something else
+% \ELSE
+% \STATE do the default actions
+% \ENDIF
+% \end{algorithmic}
+% \end{verbatim}
+% would produce
+% \begin{algorithmic}
+% \IF{some condition is true}
+% \STATE do some processing
+% \ELSIF{some other condition is true}
+% \STATE do some different processing
+% \ELSIF{some even more bizarre condition is met}
+% \STATE do something else
+% \ELSE
+% \STATE do the default actions
+% \ENDIF
+% \end{algorithmic}
+% with appropriate indentations.
+%
+% \subsection{The \emph{for} Loop}
+%
+% The \emph{for} loop takes two forms. Namely:
+% \begin{verbatim}
+% \FOR{<condition>} <text> \ENDFOR
+% \FORALL{<condition>} <text> \ENDFOR
+% \end{verbatim}
+%
+% \noindent For example,
+% \begin{verbatim}
+% \begin{algorithmic}
+% \FOR{$i=0$ to $10$}
+% \STATE carry out some processing
+% \ENDFOR
+% \end{algorithmic}
+% \end{verbatim}
+% produces
+% \begin{algorithmic}
+% \FOR{$i=0$ to $10$}
+% \STATE carry out some processing
+% \ENDFOR
+% \end{algorithmic}
+% and
+% \begin{verbatim}
+% \begin{algorithmic}[1]
+% \FORALL{$i$ such that $0\leq i\leq 10$}
+% \STATE carry out some processing
+% \ENDFOR
+% \end{algorithmic}
+% \end{verbatim}
+% produces
+% \begin{algorithmic}[1]
+% \FORALL{$i$ such that $0\leq i\leq 10$}
+% \STATE carry out some processing
+% \ENDFOR
+% \end{algorithmic}
+%
+% \subsubsection{The \emph{to} Connective}
+% As may be clear from the usage of loops above, we usually want to
+% specify ranges over which a variable will assume values. To help make
+% this typographically distinct, the \keyword{algorithmic} package now
+% supports the \algorithmicto{} connective, which can be used like:
+% \begin{verbatim}
+% \begin{algorithmic}
+% \FOR{$i=0$ \TO $10$}
+% \STATE carry out some processing
+% \ENDFOR
+% \end{algorithmic}
+% \end{verbatim}
+% to produce the output
+% \begin{algorithmic}
+% \FOR{$i=0$ \TO $10$}
+% \STATE carry out some processing
+% \ENDFOR
+% \end{algorithmic}
+%
+% \subsection{The \emph{while} Loop}
+%
+% The \emph{while} loop takes the form
+% \begin{verbatim}
+% \WHILE{<condition>} <text> \ENDWHILE
+% \end{verbatim}
+% For example,
+% \begin{verbatim}
+% \begin{algorithmic}
+% \WHILE{some condition holds}
+% \STATE carry out some processing
+% \ENDWHILE
+% \end{algorithmic}
+% \end{verbatim}
+% produces
+% \begin{algorithmic}
+% \WHILE{some condition holds}
+% \STATE carry out some processing
+% \ENDWHILE
+% \end{algorithmic}
+%
+% \subsection{The \emph{repeat-until} Loop}
+%
+% The \emph{repeat-until} loop takes the form.
+% \begin{verbatim}
+% \REPEAT <text> \UNTIL{<condition>}
+% \end{verbatim}
+% For example,
+% \begin{verbatim}
+% \begin{algorithmic}
+% \REPEAT
+% \STATE carry out some processing
+% \UNTIL{some condition is met}
+% \end{algorithmic}
+% \end{verbatim}
+% produces
+% \begin{algorithmic}
+% \REPEAT
+% \STATE carry out some processing
+% \UNTIL{some condition is met}
+% \end{algorithmic}
+%
+% \subsection{The Infinite Loop}
+%
+% The infinite loop takes the form.
+% \begin{verbatim}
+% \LOOP <text> \ENDLOOP
+% \end{verbatim}
+% For example,
+% \begin{verbatim}
+% \begin{algorithmic}
+% \LOOP
+% \STATE this processing will be repeated forever
+% \ENDLOOP
+% \end{algorithmic}
+% \end{verbatim}
+% produces
+% \begin{algorithmic}
+% \LOOP
+% \STATE this processing will be repeated forever
+% \ENDLOOP
+% \end{algorithmic}
+%
+% \subsection{The Logical Connectives}
+%
+% The connectives \algorithmicand, \algorithmicor, \algorithmicxor{} and
+% \algorithmicnot{} can be used in boolean expressions in the familiar,
+% expected way:
+% \begin{verbatim}
+% <expression> \AND <expression>
+% <expression> \OR <expression>
+% <expression> \XOR <expression>
+% \NOT <expression>
+% \end{verbatim}
+% according to their arity.\footnote{But there is nothing that prevents
+% the user from violating the arity, from a syntatic point of view.}
+% For example,
+% \begin{verbatim}
+% \begin{algorithmic}
+% \IF{\NOT ($year \bmod 400$ \XOR $year \bmod 100$ \XOR $year \bmod 4$)}
+% \STATE $year$ does not represent a leap year.
+% \ENDIF
+% \end{algorithmic}
+% \end{verbatim}
+% produces
+% \begin{algorithmic}
+% \IF{\NOT ($year \bmod 400$ \XOR $year \bmod 100$ \XOR $year \bmod 4$)}
+% \STATE $year$ does not represent a leap year.
+% \ENDIF
+% \end{algorithmic}
+%
+% \subsection{The Precondition}
+%
+% The precondition (that must be met if an algorithm is to correctly
+% execute) takes the form:
+% \begin{verbatim}
+% \REQUIRE <text>
+% \end{verbatim}
+% For example,
+% \begin{verbatim}
+% \begin{algorithmic}
+% \REQUIRE $x \neq 0$ and $n \geq 0$
+% \end{algorithmic}
+% \end{verbatim}
+% produces
+% \begin{algorithmic}
+% \REQUIRE $x \neq 0$ and $n \geq 0$
+% \end{algorithmic}
+%
+% \subsection{The Postcondition}
+%
+% The postcondition (that must be met after an algorithm has correctly
+% executed) takes the form:
+% \begin{verbatim}
+% \ENSURE <text>
+% \end{verbatim}
+% For example,
+% \begin{verbatim}
+% \begin{algorithmic}
+% \ENSURE $x \neq 0$ and $n \geq 0$
+% \end{algorithmic}
+% \end{verbatim}
+% produces
+% \begin{algorithmic}
+% \ENSURE $x \neq 0$ and $n \geq 0$
+% \end{algorithmic}
+%
+% \subsection{Returning Values}
+%
+% The \keyword{algorithmic} environment offers a special statement for
+% explicitly returning values in algorithms. It has the syntax:
+% \begin{verbatim}
+% \RETURN <text>
+% \end{verbatim}
+% For example,
+% \begin{verbatim}
+% \begin{algorithmic}
+% \RETURN $(x+y)/2$
+% \end{algorithmic}
+% \end{verbatim}
+% produces
+% \begin{algorithmic}
+% \RETURN $(x+y)/2$
+% \end{algorithmic}
+%
+%
+% \subsubsection{The ``true'' and ``false'' Values}
+%
+% Since many algorithms have the necessity of returning \emph{true} or
+% \emph{false} values, \keyword{algorithms}, starting with version
+% 2006-06-02, includes the keywords \verb+\TRUE+ and \verb+\FALSE+,
+% which are intented to print the values in a standard fashion, like the
+% following snippet of an algorithm to decide if an integer $n$ is even or
+% odd:
+% \begin{verbatim}
+% \begin{algorithmic}
+% \IF{$n$ is odd}
+% \RETURN \TRUE
+% \ELSE
+% \RETURN \FALSE
+% \ENDIF
+% \end{algorithmic}
+% \end{verbatim}
+% The code above produces the following output:
+% \begin{algorithmic}
+% \IF{$n$ is odd}
+% \RETURN \TRUE
+% \ELSE
+% \RETURN \FALSE
+% \ENDIF
+% \end{algorithmic}
+%
+% \subsection{Printing Messages}
+%
+% Another feature of the \keyword{algorithmic} environment is that it
+% currently provides a standard way of printing values (which is an
+% operation used enough to merit its own keyword). It has the syntax:
+% \begin{verbatim}
+% \PRINT <text>
+% \end{verbatim}
+% For example,
+% \begin{verbatim}
+% \begin{algorithmic}
+% \PRINT \texttt{``Hello, World!''}
+% \end{algorithmic}
+% \end{verbatim}
+% produces
+% \begin{algorithmic}
+% \PRINT \texttt{``Hello, World!''}
+% \end{algorithmic}
+%
+% \subsection{Comments}
+%
+% Comments may be inserted at most points in an algorithm using the form:
+% \begin{verbatim}
+% \COMMENT{<text>}
+% \end{verbatim}
+% For example,
+% \begin{verbatim}
+% \begin{algorithmic}
+% \STATE do something \COMMENT{this is a comment}
+% \end{algorithmic}
+% \end{verbatim}
+% produces
+% \begin{algorithmic}
+% \STATE do something \COMMENT{this is a comment}
+% \end{algorithmic}
+% Because the mechanisms used to build the various algorithmic structures
+% make it difficult to use the above mechanism for placing comments at the
+% end of the first line of a construct, the commands \verb+\IF+,
+% \verb+\ELSIF+, \verb+\ELSE+, \verb+\WHILE+, \verb+\FOR+, \verb+\FORALL+,
+% \verb+\REPEAT+ and \verb+\LOOP+ all take an optional argument which will
+% be treated as a comment to be placed at the end of the line on which
+% they appear. For example,
+% \begin{algorithmic}
+% \REPEAT[this is comment number one]
+% \IF[this is comment number two]{condition one is met}
+% \STATE do something
+% \ELSIF[this is comment number three]{condition two is met}
+% \STATE do something else
+% \ELSE[this is comment number four]
+% \STATE do nothing
+% \ENDIF
+% \UNTIL{hell freezes over}
+% \end{algorithmic}
+%
+% \subsection{An Example}
+%
+% The following example demonstrates the use of the \keyword{algorithmic}
+% environment to describe a complete algorithm. The following input
+% \begin{verbatim}
+% \begin{algorithmic}
+% \REQUIRE $n \geq 0$
+% \ENSURE $y = x^n$
+% \STATE $y \leftarrow 1$
+% \STATE $X \leftarrow x$
+% \STATE $N \leftarrow n$
+% \WHILE{$N \neq 0$}
+% \IF{$N$ is even}
+% \STATE $X \leftarrow X \times X$
+% \STATE $N \leftarrow N / 2$
+% \ELSE[$N$ is odd]
+% \STATE $y \leftarrow y \times X$
+% \STATE $N \leftarrow N - 1$
+% \ENDIF
+% \ENDWHILE
+% \end{algorithmic}
+% \end{verbatim}
+% will produce
+% \begin{algorithmic}
+% \REQUIRE $n \geq 0$
+% \ENSURE $y = x^n$
+%
+% \STATE $y \leftarrow 1$
+% \STATE $X \leftarrow x$
+% \STATE $N \leftarrow n$
+% \WHILE{$N \neq 0$}
+% \IF{$N$ is even}
+% \STATE $X \leftarrow X \times X$
+% \STATE $N \leftarrow N / 2$
+% \ELSE[$N$ is odd]
+% \STATE $y \leftarrow y \times X$
+% \STATE $N \leftarrow N - 1$
+% \ENDIF
+% \ENDWHILE
+% \end{algorithmic}
+% which is an algorithm for finding the value of a number taken to a
+% non-negative power.
+%
+% \subsection[Options/Customization]%
+% {Options and Customization}
+%
+% There is a single option, \keyword{noend}\label{kwd:noend} that may be
+% invoked when the \texttt{algorithmic} package is loaded. With this
+% option invoked the \emph{end} statements are omitted in the output.
+% This allows space to be saved in the output document when this is an
+% issue.
+%
+% \subsubsection{Changing Indentation}
+% \label{sec:changing-indentation}
+% In the spirit of saving vertical space (which is especially important
+% when submitting a paper for a journal, where space is frequently limited
+% for authors), the \keyword{algorithmic} environment offers, beginning
+% with the version released in 2005-05-08, a way to control the amount of
+% indentation that is used by a given algorithm.
+%
+% The amount of indentation to be used is given by the command
+% \begin{verbatim}
+% \algsetup{indent=lenght}
+% \end{verbatim}
+% where \emph{length} is any valid length used by \TeX. The default value
+% of the indentation used by the \keyword{algorithmic} environment is $1$
+% em (for ``backward compatibility reasons''), but a value of $2$ em or
+% more is recommended, depending on the publication. For example, the
+% snippet
+% \begin{verbatim}
+% \algsetup{indent=2em}
+% \begin{algorithmic}[1]
+% \STATE $a \leftarrow 1$
+% \IF{$a$ is even}
+% \PRINT ``$a$ is even''
+% \ELSE
+% \PRINT ``$a$ is odd''
+% \end{algorithmic}
+% \end{verbatim}
+% produces
+% \algsetup{indent=2em}
+% \begin{algorithmic}[1]
+% \STATE $a \leftarrow 1$
+% \IF{$a$ is even}
+% \PRINT ``$a$ is even''
+% \ELSE
+% \PRINT ``$a$ is odd''
+% \ENDIF
+% \end{algorithmic}
+% while
+% \begin{verbatim}
+% \algsetup{indent=5em}
+% \begin{algorithmic}[1]
+% \STATE $a \leftarrow 1$
+% \IF{$a$ is even}
+% \PRINT ``$a$ is even''
+% \ELSE
+% \PRINT ``$a$ is odd''
+% \end{algorithmic}
+% \end{verbatim}
+% would produce
+% \algsetup{indent=5em}
+% \begin{algorithmic}[1]
+% \STATE $a \leftarrow 1$
+% \IF{$a$ is even}
+% \PRINT ``$a$ is even''
+% \ELSE
+% \PRINT ``$a$ is odd''
+% \ENDIF
+% \end{algorithmic}
+% \algsetup{indent=1em}
+%
+% The intended use of this option is to allow the author to omit the
+% \emph{end} (see Section~\ref{kwd:noend} for details) statements without
+% loosing readability, by increasing the amount of indentation to a
+% suitable level.
+%
+% \subsubsection{Changing Line Numbering}
+%
+% As mentioned in Section~\ref{sec:algorithmic-envir} and illustrated in
+% Section~\ref{sec:changing-indentation}, \keyword{algorithms} already
+% provides you with the possibility of numbering lines.
+%
+% Starting with the version released in 2005-07-05, you can now change two
+% aspects of line numbering: the size of the line numbers (which, by
+% default, is \verb+\footnotesize+) and the delimiter used to separate the
+% line number from the code (which, by default, is \verb+:+, i.e., a
+% colon).
+%
+% You can change the size of the line numbers using the command:
+% \begin{verbatim}
+% \algsetup{linenosize=size}
+% \end{verbatim}
+% where \emph{size} is any of the various commands provided by \LaTeX\ to
+% change the size of the font to be used. Among others, useful values are
+% \verb+\tiny+, \verb+\scriptsize+, \verb+\footnotesize+ and
+% \verb+\small+. Please see the complete list of sizes in your \LaTeX\
+% documentation.
+%
+% As another frequently requested feature, you can change the delimiter
+% used with the line numbers by issuing the command:
+% \begin{verbatim}
+% \algsetup{linenodelimiter=delimiter}
+% \end{verbatim}
+% where \emph{delimiter} is any ``well-formed'' string, including the
+% empty string. With this command, you can change the colon to a period
+% (\verb+.+) by issuing the command
+% \begin{verbatim}
+% \algsetup{linenodelimiter=.}
+% \end{verbatim}
+% or even omit the delimiter, by specifying the empty string or a space
+% (\verb+\ +), whatever seems best for your document.
+%
+% As an example of such commands, the code produced by
+% \begin{verbatim}
+% \algsetup{
+% linenosize=\small,
+% linenodelimiter=.
+% }
+% \begin{algorithmic}[1]
+% \STATE $i \leftarrow 10$
+% \RETURN $i$
+% \end{algorithmic}
+% \end{verbatim}
+% would be something like
+%
+% \algsetup{
+% linenosize=\small,
+% linenodelimiter=.
+% }
+% \begin{algorithmic}[1]
+% \STATE $i \leftarrow 10$
+% \RETURN $i$
+% \end{algorithmic}
+% \algsetup{linenosize=\footnotesize,
+% linenodelimiter=:}
+%
+% \subsubsection{Customization}
+%
+% In order to facilitate the use of this package with foreign languages,
+% all of the words in the output are produced via redefinable macro
+% commands. The default definitions of these macros are:
+% \begin{verbatim}
+% \newcommand{\algorithmicrequire}{\textbf{Require:}}
+% \newcommand{\algorithmicensure}{\textbf{Ensure:}}
+% \newcommand{\algorithmicend}{\textbf{end}}
+% \newcommand{\algorithmicif}{\textbf{if}}
+% \newcommand{\algorithmicthen}{\textbf{then}}
+% \newcommand{\algorithmicelse}{\textbf{else}}
+% \newcommand{\algorithmicelsif}{\algorithmicelse\ \algorithmicif}
+% \newcommand{\algorithmicendif}{\algorithmicend\ \algorithmicif}
+% \newcommand{\algorithmicfor}{\textbf{for}}
+% \newcommand{\algorithmicforall}{\textbf{for all}}
+% \newcommand{\algorithmicdo}{\textbf{do}}
+% \newcommand{\algorithmicendfor}{\algorithmicend\ \algorithmicfor}
+% \newcommand{\algorithmicwhile}{\textbf{while}}
+% \newcommand{\algorithmicendwhile}{\algorithmicend\ \algorithmicwhile}
+% \newcommand{\algorithmicloop}{\textbf{loop}}
+% \newcommand{\algorithmicendloop}{\algorithmicend\ \algorithmicloop}
+% \newcommand{\algorithmicrepeat}{\textbf{repeat}}
+% \newcommand{\algorithmicuntil}{\textbf{until}}
+% \newcommand{\algorithmicprint}{\textbf{print}}
+% \newcommand{\algorithmicreturn}{\textbf{return}}
+% \newcommand{\algorithmictrue}{\textbf{true}}
+% \newcommand{\algorithmicfalse}{\textbf{false}}
+% \end{verbatim}
+%
+% If you would like to change the definition of these commands to another
+% content, then you should use, in your own document, the standard
+% \LaTeX{} command \keyword{renewcommand}, with an usage like this:
+% \begin{verbatim}
+% \renewcommand{\algorithmicrequire}{\textbf{Input:}}
+% \renewcommand{\algorithmicensure}{\textbf{Output:}}
+% \end{verbatim}
+%
+% \paragraph{About the Way Comments Are Formatted}
+%
+% The formatting of comments is implemented via a single argument command
+% macro which may also be redefined. The default definition is
+% \begin{verbatim}
+% \newcommand{\algorithmiccomment}[1]{\{#1\}}
+% \end{verbatim}
+% and another option that may be interesting for users familiar with
+% C-like languages is to redefine the comments to be
+% \begin{verbatim}
+% \renewcommand{\algorithmiccomment}[1]{// #1}
+% \end{verbatim}
+% Comments produced this way would be like this:
+% \renewcommand{\algorithmiccomment}[1]{// #1}
+% \begin{algorithmic}
+% \STATE $i \leftarrow i + 1$ \COMMENT{Increments $i$}
+% \end{algorithmic}
+% This second way to present comments may become the default in a future
+% version of this package.
+%
+% \section[Environment: \keyword{algorithm}]%
+% {The \keyword{algorithm} Environment}
+%
+% \subsection{General}
+%
+% When placed within the text without being encapsulated in a floating
+% environment \texttt{algorithmic} environments may be split over a page
+% boundary, greatly detracting from their appearance.\footnote{This is the
+% expected behaviour for floats in \LaTeX. If you don't care about
+% having your algorithm split between pages, then one option that you
+% have is to ignore the \texttt{algorithm} environment.} In addition, it
+% is useful to have algorithms numbered for reference and for lists of
+% algorithms to be appended to the list of contents. The
+% \texttt{algorithm} environment is meant to address these concerns by
+% providing a floating environment for algorithms.
+%
+% \subsection{An Example}
+% To illustrate the use of the \texttt{algorithm} environment, the
+% following text
+% \begin{verbatim}
+% \begin{algorithm}
+% \caption{Calculate $y = x^n$}
+% \label{alg1}
+% \begin{algorithmic}
+% \REQUIRE $n \geq 0 \vee x \neq 0$
+% \ENSURE $y = x^n$
+% \STATE $y \leftarrow 1$
+% \IF{$n < 0$}
+% \STATE $X \leftarrow 1 / x$
+% \STATE $N \leftarrow -n$
+% \ELSE
+% \STATE $X \leftarrow x$
+% \STATE $N \leftarrow n$
+% \ENDIF
+% \WHILE{$N \neq 0$}
+% \IF{$N$ is even}
+% \STATE $X \leftarrow X \times X$
+% \STATE $N \leftarrow N / 2$
+% \ELSE[$N$ is odd]
+% \STATE $y \leftarrow y \times X$
+% \STATE $N \leftarrow N - 1$
+% \ENDIF
+% \ENDWHILE
+% \end{algorithmic}
+% \end{algorithm}
+% \end{verbatim}
+% produces Algorithm~\ref{alg1} which is a slightly modified version of
+% the earlier algorithm for determining the value of a number taken to an
+% integer power. In this case, provided the power may be negative
+% provided the number is not zero.
+%
+% \begin{algorithm}[H]
+% \caption{Calculate $y = x^n$}
+% \label{alg1}
+% \begin{algorithmic}
+% \REQUIRE $n \geq 0 \vee x \neq 0$
+% \ENSURE $y = x^n$
+%
+% \STATE $y \leftarrow 1$
+% \IF{$n < 0$}
+% \STATE $X \leftarrow 1 / x$
+% \STATE $N \leftarrow -n$
+% \ELSE
+% \STATE $X \leftarrow x$
+% \STATE $N \leftarrow n$
+% \ENDIF
+%
+% \WHILE{$N \neq 0$}
+% \IF{$N$ is even}
+% \STATE $X \leftarrow X \times X$
+% \STATE $N \leftarrow N / 2$
+% \ELSE[$N$ is odd]
+% \STATE $y \leftarrow y \times X$
+% \STATE $N \leftarrow N - 1$
+% \ENDIF
+% \ENDWHILE
+% \end{algorithmic}
+% \end{algorithm}
+%
+% The command \verb+\listofalgorithms+ may be used to produce a list of
+% algorithms as part of the table contents as shown at the beginning of
+% this document. An auxiliary file with a suffix of \texttt{.loa} is
+% produced when this feature is used.
+%
+% \subsection{Options}
+%
+% The appearance of the typeset algorithm may be changed by use of the
+% options: \texttt{plain}, \texttt{boxed} or \texttt{ruled} during the
+% loading of the \texttt{algorithm} package. The default option is
+% \texttt{ruled}.
+%
+% The numbering of algorithms can be influenced by providing the name of
+% the document component within which numbering should be recommenced.
+% The legal values for this option are: \texttt{part}, \texttt{chapter},
+% \texttt{section}, \texttt{subsection}, \texttt{subsubsection} or
+% \texttt{nothing}. The default value is \texttt{nothing} which causes
+% algorithms to be numbered sequentially throughout the document.
+%
+% \subsection{Customization}
+%
+% In order to facilitate the use of this package with foreign languages,
+% methods have been provided to facilitate the necessary modifications.
+%
+% The title used in the caption within \texttt{algorithm} environment can
+% be set by use of the standard \verb+\floatname+ command which is
+% provided as part of the \texttt{float} package which was used to
+% implement this package. For example,
+% \begin{verbatim}
+% \floatname{algorithm}{Procedure}
+% \end{verbatim}
+% would cause \textbf{Procedure} to be used instead of \textbf{Algorithm}
+% within the caption of algorithms.
+%
+% In a manner analogous to that available for the built in floating
+% environments, the heading used for the list of algorithms may be changed
+% by redefining the command \verb+listalgorithmname+. The default
+% definition for this command is
+% \begin{verbatim}
+% \newcommand{\listalgorithmname}{List of Algorithms}
+% \end{verbatim}
+%
+% \subsubsection{Placement of Algorithms}
+%
+% One important fact that many users may not have noticed is that the
+% \texttt{algorithm} environment is actually built with the \texttt{float}
+% package and \texttt{float}, in turn, uses David Carlisle's \textsf{here}
+% style option. This means that the floats generated by the
+% \texttt{algorithm} environment accept a special option, namely,
+% \textbf{[H]}, with a capital `H', instead of the usual `h' offered by
+% plain \LaTeX.
+%
+% This option works as a stronger request of ``please put the float
+% here'': instead of just a suggestion for \LaTeX, it actually means ``put
+% this float HERE'', which is something desired by many. The two
+% algorithms typeset in this document use this option.
+%
+% \medskip
+% \begin{warning}
+% You \emph{can't} use the `H' positioning option together with the
+% usual `h' (for ``here''), `b' (for ``bottom'') etc. This is a
+% limitation (as far as I know) of the \texttt{float.sty} package.
+% \end{warning}
+%
+% \section[References in Algorithms]%
+% {Labels and References in Algorithms}
+%
+% With the release of 2005-07-05, now \keyword{algorithmic} accepts labels
+% and references to specific lines of a given algorithm, so you don't have
+% to hardcode the line numbers yourself when trying to explain what the
+% code does in your texts. Thanks to Arnaud Legrand for the suggestion
+% and patch for this highly missed feature.
+%
+% An example of its use is shown in Algorithm~\ref{alg2}.
+% \begin{algorithm}[H]
+% \caption{Calculate $y = x^n$}
+% \label{alg2}
+% \begin{algorithmic}[1]
+% \REQUIRE $n \geq 0 \vee x \neq 0$
+% \ENSURE $y = x^n$
+% \STATE $y \leftarrow 1$
+% \IF{$n < 0$}
+% \STATE $X \leftarrow 1 / x$
+% \STATE $N \leftarrow -n$
+% \ELSE
+% \STATE $X \leftarrow x$
+% \STATE $N \leftarrow n$
+% \ENDIF
+% \WHILE{$N \neq 0$}
+% \IF{$N$ is even}\label{alg:n-is-even}
+% \STATE $X \leftarrow X \times X$
+% \STATE $N \leftarrow N / 2$
+% \ELSE\label{alg:n-is-odd}
+% \STATE $y \leftarrow y \times X$
+% \STATE $N \leftarrow N - 1$
+% \ENDIF
+% \ENDWHILE
+% \end{algorithmic}
+% \end{algorithm}
+% See that, in line~\ref{alg:n-is-even}, we deal with the case of $N$
+% being even, while, in line~\ref{alg:n-is-odd}, we give treatment to the
+% case of $N$ being odd. The numbers you see on this document were
+% generated automatically from the source document.
+%
+%
+% \section[Known Issues]{Issues Between \texttt{algorithms} and
+% \href{http://www.ctan.org/tex-archive/help/Catalogue/entries/tocbibind.html}{\texttt{tocbibind}}
+% or \href{http://www.ctan.org/tex-archive/help/Catalogue/entries/memoir.html}{\texttt{memoir}}}
+%
+% It
+% \href{http://groups.google.com/group/comp.text.tex/browse_thread/thread/4094e0c4f4fbd83e/a80a3f4666c794f0?fwc=1}{has
+% been discussed} in late 2005 that \texttt{algorithms} may have bad
+% interactions with the
+% \href{http://www.ctan.org/tex-archive/help/Catalogue/entries/tocbibind.html}{\texttt{tocbibind}}
+% or the
+% \href{http://www.ctan.org/tex-archive/help/Catalogue/entries/memoir.html}{\texttt{memoir}}
+% package (which includes \texttt{tocbibind}).
+%
+% A workaround has been suggested for the problem. After including
+% something like
+% \begin{verbatim}
+% \usepackage[nottoc]{tocbibind}
+% \end{verbatim}
+% in the preamble of your document, you can put, after
+% \verb+\begin{document}+, the following snippet of code:
+% \begin{verbatim}
+% \renewcommand{\listofalgorithms}{\begingroup
+% \tocfile{List of Algorithms}{loa}
+% \endgroup}
+%
+% \makeatletter
+% \let\l@algorithm\l@figure
+% \makeatother
+% \end{verbatim}
+% which should make the command \verb+\listofalgorithms+ work as expected.
+%
+% \section[General Hints]{Hints for Typesetting Algorithms}
+%
+% Here are some short hints on typesetting algorithms:
+% \begin{itemize}
+% \item Don't overcomment your pseudo-code. If you feel that you need to
+% comment too much, then you are probably doing something wrong: you should
+% probably detail the inner workings of the algorithm in regular text
+% rather than in the pseudo-code;
+% \item Similarly, don't regard pseudo-code as a low-level programming
+% language: \emph{don't pollute your algorithms} with punctuation marks
+% like semi-colons, which are necessary in C, C++ and Java, but not in
+% pseudo-code. Remember: your readers \emph{are not} compilers;
+% \item Always document what the algorithm receives as an input and what it
+% returns as a solution. Don't care to say in the \verb+\REQUIRE+ or in the
+% \verb+\ENSURE+ commands \emph{how} the algorithm does what it does. Put
+% this in the regular text of your book/paper/lecture notes;
+% \item If you feel that your pseudo-code is getting too big, just break it
+% into sub-algorithms, perhaps abstracting some tasks. Your readers will
+% probably thank you.
+% \end{itemize}
+%
+% Of course, you should follow those hints with common sense. Well, anything
+% should be done with common sense.
+%
+% \addtocontents{toc}{\protect\end{multicols}}
+% \end{document}
+%
+%\StopEventually{}
+%<algorithm>\RequirePackage{float}
+%<algorithm>\RequirePackage{ifthen}
+%<algorithm>\newcommand{\ALG@within}{nothing}
+%<algorithm>\newboolean{ALG@within}
+%<algorithm>\setboolean{ALG@within}{false}
+%<algorithm>\newcommand{\ALG@floatstyle}{ruled}
+%<algorithm>\newcommand{\ALG@name}{Algorithm}
+%<algorithm>\newcommand{\listalgorithmname}{List of \ALG@name s}
+%
+%<algorithm>% Declare Options:
+%<algorithm>% * first: appearance
+%<algorithm>\DeclareOption{plain}{
+%<algorithm> \renewcommand{\ALG@floatstyle}{plain}
+%<algorithm>}
+%<algorithm>\DeclareOption{ruled}{
+%<algorithm> \renewcommand{\ALG@floatstyle}{ruled}
+%<algorithm>}
+%<algorithm>\DeclareOption{boxed}{
+%<algorithm> \renewcommand{\ALG@floatstyle}{boxed}
+%<algorithm>}
+%<algorithm>% * then: numbering convention
+%<algorithm>\DeclareOption{part}{
+%<algorithm> \renewcommand{\ALG@within}{part}
+%<algorithm> \setboolean{ALG@within}{true}
+%<algorithm>}
+%<algorithm>\DeclareOption{chapter}{
+%<algorithm> \renewcommand{\ALG@within}{chapter}
+%<algorithm> \setboolean{ALG@within}{true}
+%<algorithm>}
+%<algorithm>\DeclareOption{section}{
+%<algorithm> \renewcommand{\ALG@within}{section}
+%<algorithm> \setboolean{ALG@within}{true}
+%<algorithm>}
+%<algorithm>\DeclareOption{subsection}{
+%<algorithm> \renewcommand{\ALG@within}{subsection}
+%<algorithm> \setboolean{ALG@within}{true}
+%<algorithm>}
+%<algorithm>\DeclareOption{subsubsection}{
+%<algorithm> \renewcommand{\ALG@within}{subsubsection}
+%<algorithm> \setboolean{ALG@within}{true}
+%<algorithm>}
+%<algorithm>\DeclareOption{nothing}{
+%<algorithm> \renewcommand{\ALG@within}{nothing}
+%<algorithm> \setboolean{ALG@within}{true}
+%<algorithm>}
+%<algorithm>\DeclareOption*{\edef\ALG@name{\CurrentOption}}
+%
+%<algorithm>% ALGORITHM
+%<algorithm>%
+%<algorithm>\ProcessOptions
+%<algorithm>\floatstyle{\ALG@floatstyle}
+%<algorithm>\ifthenelse{\boolean{ALG@within}}{
+%<algorithm> \ifthenelse{\equal{\ALG@within}{part}}
+%<algorithm> {\newfloat{algorithm}{htbp}{loa}[part]}{}
+%<algorithm> \ifthenelse{\equal{\ALG@within}{chapter}}
+%<algorithm> {\newfloat{algorithm}{htbp}{loa}[chapter]}{}
+%<algorithm> \ifthenelse{\equal{\ALG@within}{section}}
+%<algorithm> {\newfloat{algorithm}{htbp}{loa}[section]}{}
+%<algorithm> \ifthenelse{\equal{\ALG@within}{subsection}}
+%<algorithm> {\newfloat{algorithm}{htbp}{loa}[subsection]}{}
+%<algorithm> \ifthenelse{\equal{\ALG@within}{subsubsection}}
+%<algorithm> {\newfloat{algorithm}{htbp}{loa}[subsubsection]}{}
+%<algorithm> \ifthenelse{\equal{\ALG@within}{nothing}}
+%<algorithm> {\newfloat{algorithm}{htbp}{loa}}{}
+%<algorithm>}{
+%<algorithm> \newfloat{algorithm}{htbp}{loa}
+%<algorithm>}
+%<algorithm>\floatname{algorithm}{\ALG@name}
+%
+%<algorithm>\newcommand{\listofalgorithms}{\listof{algorithm}{\listalgorithmname}}
+%
+%
+%<algorithmic>% The algorithmic.sty package:
+%
+%<algorithmic>\RequirePackage{ifthen}
+%<algorithmic>\RequirePackage{keyval}
+%<algorithmic>\newboolean{ALC@noend}
+%<algorithmic>\setboolean{ALC@noend}{false}
+%<algorithmic>\newcounter{ALC@unique} % new counter to make lines numbers be internally
+%<algorithmic>\setcounter{ALC@unique}{0} % different in different algorithms
+%<algorithmic>\newcounter{ALC@line} % counter for current line
+%<algorithmic>\newcounter{ALC@rem} % counter for lines not printed
+%<algorithmic>\newcounter{ALC@depth}
+%<algorithmic>\newlength{\ALC@tlm}
+%<algorithmic>%
+%<algorithmic>\DeclareOption{noend}{\setboolean{ALC@noend}{true}}
+%<algorithmic>%
+%<algorithmic>\ProcessOptions
+%<algorithmic>%
+%<algorithmic>% For keyval-style options
+%<algorithmic>\def\algsetup{\setkeys{ALG}}
+%<algorithmic>%
+%<algorithmic>% For indentation of algorithms
+%<algorithmic>\newlength{\algorithmicindent}
+%<algorithmic>\setlength{\algorithmicindent}{0pt}
+%<algorithmic>\define@key{ALG}{indent}{\setlength{\algorithmicindent}{#1}}
+%<algorithmic>\ifthenelse{\lengthtest{\algorithmicindent=0pt}}%
+%<algorithmic> {\setlength{\algorithmicindent}{1em}}{}
+%<algorithmic>%
+%<algorithmic>% For line numbers' delimiters
+%<algorithmic>\newcommand{\ALC@linenodelimiter}{:}
+%<algorithmic>\define@key{ALG}{linenodelimiter}{\renewcommand{\ALC@linenodelimiter}{#1}}
+%
+%<algorithmic>%
+%<algorithmic>% For line numbers' size
+%<algorithmic>\newcommand{\ALC@linenosize}{\footnotesize}
+%<algorithmic>\define@key{ALG}{linenosize}{\renewcommand{\ALC@linenosize}{#1}}
+%
+%<algorithmic>%
+%<algorithmic>% ALGORITHMIC
+%<algorithmic>\newcommand{\algorithmicrequire}{\textbf{Require:}}
+%<algorithmic>\newcommand{\algorithmicensure}{\textbf{Ensure:}}
+%<algorithmic>\newcommand{\algorithmiccomment}[1]{\{#1\}}
+%<algorithmic>\newcommand{\algorithmicend}{\textbf{end}}
+%<algorithmic>\newcommand{\algorithmicif}{\textbf{if}}
+%<algorithmic>\newcommand{\algorithmicthen}{\textbf{then}}
+%<algorithmic>\newcommand{\algorithmicelse}{\textbf{else}}
+%<algorithmic>\newcommand{\algorithmicelsif}{\algorithmicelse\ \algorithmicif}
+%<algorithmic>\newcommand{\algorithmicendif}{\algorithmicend\ \algorithmicif}
+%<algorithmic>\newcommand{\algorithmicfor}{\textbf{for}}
+%<algorithmic>\newcommand{\algorithmicforall}{\textbf{for all}}
+%<algorithmic>\newcommand{\algorithmicdo}{\textbf{do}}
+%<algorithmic>\newcommand{\algorithmicendfor}{\algorithmicend\ \algorithmicfor}
+%<algorithmic>\newcommand{\algorithmicwhile}{\textbf{while}}
+%<algorithmic>\newcommand{\algorithmicendwhile}{\algorithmicend\ \algorithmicwhile}
+%<algorithmic>\newcommand{\algorithmicloop}{\textbf{loop}}
+%<algorithmic>\newcommand{\algorithmicendloop}{\algorithmicend\ \algorithmicloop}
+%<algorithmic>\newcommand{\algorithmicrepeat}{\textbf{repeat}}
+%<algorithmic>\newcommand{\algorithmicuntil}{\textbf{until}}
+%<algorithmic>\newcommand{\algorithmicprint}{\textbf{print}}
+%<algorithmic>\newcommand{\algorithmicreturn}{\textbf{return}}
+%<algorithmic>\newcommand{\algorithmicand}{\textbf{and}}
+%<algorithmic>\newcommand{\algorithmicor}{\textbf{or}}
+%<algorithmic>\newcommand{\algorithmicxor}{\textbf{xor}}
+%<algorithmic>\newcommand{\algorithmicnot}{\textbf{not}}
+%<algorithmic>\newcommand{\algorithmicto}{\textbf{to}}
+%<algorithmic>\newcommand{\algorithmicinputs}{\textbf{inputs}}
+%<algorithmic>\newcommand{\algorithmicoutputs}{\textbf{outputs}}
+%<algorithmic>\newcommand{\algorithmicglobals}{\textbf{globals}}
+%<algorithmic>\newcommand{\algorithmicbody}{\textbf{do}}
+%<algorithmic>\newcommand{\algorithmictrue}{\textbf{true}}
+%<algorithmic>\newcommand{\algorithmicfalse}{\textbf{false}}
+%<algorithmic>\def\ALC@item[#1]{%
+%<algorithmic>\if@noparitem \@donoparitem
+%<algorithmic> \else \if@inlabel \indent \par \fi
+%<algorithmic> \ifhmode \unskip\unskip \par \fi
+%<algorithmic> \if@newlist \if@nobreak \@nbitem \else
+%<algorithmic> \addpenalty\@beginparpenalty
+%<algorithmic> \addvspace\@topsep \addvspace{-\parskip}\fi
+%<algorithmic> \else \addpenalty\@itempenalty \addvspace\itemsep
+%<algorithmic> \fi
+%<algorithmic> \global\@inlabeltrue
+%<algorithmic>\fi
+%<algorithmic>\everypar{\global\@minipagefalse\global\@newlistfalse
+%<algorithmic> \if@inlabel\global\@inlabelfalse \hskip -\parindent \box\@labels
+%<algorithmic> \penalty\z@ \fi
+%<algorithmic> \everypar{}}\global\@nobreakfalse
+%<algorithmic>\if@noitemarg \@noitemargfalse \if@nmbrlist \refstepcounter{\@listctr}\fi \fi
+%<algorithmic>\sbox\@tempboxa{\makelabel{#1}}%
+%<algorithmic>\global\setbox\@labels
+%<algorithmic> \hbox{\unhbox\@labels \hskip \itemindent
+%<algorithmic> \hskip -\labelwidth \hskip -\ALC@tlm
+%<algorithmic> \ifdim \wd\@tempboxa >\labelwidth
+%<algorithmic> \box\@tempboxa
+%<algorithmic> \else \hbox to\labelwidth {\unhbox\@tempboxa}\fi
+%<algorithmic> \hskip \ALC@tlm}\ignorespaces}
+%<algorithmic>%
+%<algorithmic>\newenvironment{algorithmic}[1][0]{
+%<algorithmic>\setcounter{ALC@depth}{\@listdepth}%
+%<algorithmic>\let\@listdepth\c@ALC@depth%
+%<algorithmic>\let\@item\ALC@item%
+%<algorithmic> \newcommand{\ALC@lno}{%
+%<algorithmic>\ifthenelse{\equal{\arabic{ALC@rem}}{0}}
+%<algorithmic>{{\ALC@linenosize \arabic{ALC@line}\ALC@linenodelimiter}}{}%
+%<algorithmic>}
+%<algorithmic>\let\@listii\@listi
+%<algorithmic>\let\@listiii\@listi
+%<algorithmic>\let\@listiv\@listi
+%<algorithmic>\let\@listv\@listi
+%<algorithmic>\let\@listvi\@listi
+%<algorithmic>\let\@listvii\@listi
+%<algorithmic> \newenvironment{ALC@g}{
+%<algorithmic> \begin{list}{\ALC@lno}{ \itemsep\z@ \itemindent\z@
+%<algorithmic> \listparindent\z@ \rightmargin\z@
+%<algorithmic> \topsep\z@ \partopsep\z@ \parskip\z@\parsep\z@
+%<algorithmic> \leftmargin \algorithmicindent%1em
+%<algorithmic> \addtolength{\ALC@tlm}{\leftmargin}
+%<algorithmic> }
+%<algorithmic> }
+%<algorithmic> {\end{list}}
+%<algorithmic> \newcommand{\ALC@it}{%
+%<algorithmic> \stepcounter{ALC@rem}%
+%<algorithmic> \ifthenelse{\equal{\arabic{ALC@rem}}{#1}}{\setcounter{ALC@rem}{0}}{}%
+%<algorithmic> \stepcounter{ALC@line}%
+%<algorithmic> \refstepcounter{ALC@unique}%
+%<algorithmic> \item\def\@currentlabel{\theALC@line}%
+%<algorithmic> }
+%<algorithmic> \newcommand{\ALC@com}[1]{\ifthenelse{\equal{##1}{default}}%
+%<algorithmic>{}{\ \algorithmiccomment{##1}}}
+%<algorithmic> \newcommand{\REQUIRE}{\item[\algorithmicrequire]}
+%<algorithmic> \newcommand{\ENSURE}{\item[\algorithmicensure]}
+%<algorithmic> \newcommand{\PRINT}{\ALC@it\algorithmicprint{} \ }
+%<algorithmic> \newcommand{\RETURN}{\ALC@it\algorithmicreturn{} \ }
+%<algorithmic> \newcommand{\TRUE}{\algorithmictrue{}}
+%<algorithmic> \newcommand{\FALSE}{\algorithmicfalse{}}
+%<algorithmic> \newcommand{\AND}{\algorithmicand{} }
+%<algorithmic> \newcommand{\OR}{\algorithmicor{} }
+%<algorithmic> \newcommand{\XOR}{\algorithmicxor{} }
+%<algorithmic> \newcommand{\NOT}{\algorithmicnot{} }
+%<algorithmic> \newcommand{\TO}{\algorithmicto{} }
+%<algorithmic> \newcommand{\STATE}{\ALC@it}
+%<algorithmic> \newcommand{\STMT}{\ALC@it}
+%<algorithmic> \newcommand{\COMMENT}[1]{\algorithmiccomment{##1}}
+%<algorithmic> \newenvironment{ALC@inputs}{\begin{ALC@g}}{\end{ALC@g}}
+%<algorithmic> \newenvironment{ALC@outputs}{\begin{ALC@g}}{\end{ALC@g}}
+%<algorithmic> \newenvironment{ALC@globals}{\begin{ALC@g}}{\end{ALC@g}}
+%<algorithmic> \newenvironment{ALC@body}{\begin{ALC@g}}{\end{ALC@g}}
+%<algorithmic> \newenvironment{ALC@if}{\begin{ALC@g}}{\end{ALC@g}}
+%<algorithmic> \newenvironment{ALC@for}{\begin{ALC@g}}{\end{ALC@g}}
+%<algorithmic> \newenvironment{ALC@whl}{\begin{ALC@g}}{\end{ALC@g}}
+%<algorithmic> \newenvironment{ALC@loop}{\begin{ALC@g}}{\end{ALC@g}}
+%<algorithmic> \newenvironment{ALC@rpt}{\begin{ALC@g}}{\end{ALC@g}}
+%<algorithmic> \renewcommand{\\}{\@centercr}
+%<algorithmic> \newcommand{\INPUTS}[1][default]{\ALC@it\algorithmicinputs\ \ALC@com{##1}\begin{ALC@inputs}}
+%<algorithmic> \newcommand{\ENDINPUTS}{\end{ALC@inputs}}
+%<algorithmic> \newcommand{\OUTPUTS}[1][default]{\ALC@it\algorithmicoutputs\ \ALC@com{##1}\begin{ALC@outputs}}
+%<algorithmic> \newcommand{\ENDOUTPUTS}{\end{ALC@outputs}}
+%<algorithmic> \newcommand{\GLOBALS}{\ALC@it\algorithmicglobals\ }
+%<algorithmic> \newcommand{\BODY}[1][default]{\ALC@it\algorithmicbody\ \ALC@com{##1}\begin{ALC@body}}
+%<algorithmic> \newcommand{\ENDBODY}{\end{ALC@body}}
+%<algorithmic> \newcommand{\IF}[2][default]{\ALC@it\algorithmicif\ ##2\ \algorithmicthen%
+%<algorithmic>\ALC@com{##1}\begin{ALC@if}}
+%<algorithmic> \newcommand{\ELSE}[1][default]{\end{ALC@if}\ALC@it\algorithmicelse%
+%<algorithmic>\ALC@com{##1}\begin{ALC@if}}
+%<algorithmic> \newcommand{\ELSIF}[2][default]%
+%<algorithmic>{\end{ALC@if}\ALC@it\algorithmicelsif\ ##2\ \algorithmicthen%
+%<algorithmic>\ALC@com{##1}\begin{ALC@if}}
+%<algorithmic> \newcommand{\FOR}[2][default]{\ALC@it\algorithmicfor\ ##2\ \algorithmicdo%
+%<algorithmic>\ALC@com{##1}\begin{ALC@for}}
+%<algorithmic> \newcommand{\FORALL}[2][default]{\ALC@it\algorithmicforall\ ##2\ %
+%<algorithmic>\algorithmicdo%
+%<algorithmic>\ALC@com{##1}\begin{ALC@for}}
+%<algorithmic> \newcommand{\WHILE}[2][default]{\ALC@it\algorithmicwhile\ ##2\ %
+%<algorithmic>\algorithmicdo%
+%<algorithmic>\ALC@com{##1}\begin{ALC@whl}}
+%<algorithmic> \newcommand{\LOOP}[1][default]{\ALC@it\algorithmicloop%
+%<algorithmic>\ALC@com{##1}\begin{ALC@loop}}
+%<algorithmic> \newcommand{\REPEAT}[1][default]{\ALC@it\algorithmicrepeat%
+%<algorithmic>\ALC@com{##1}\begin{ALC@rpt}}
+%<algorithmic> \newcommand{\UNTIL}[1]{\end{ALC@rpt}\ALC@it\algorithmicuntil\ ##1}
+%<algorithmic> \ifthenelse{\boolean{ALC@noend}}{
+%<algorithmic> \newcommand{\ENDIF}{\end{ALC@if}}
+%<algorithmic> \newcommand{\ENDFOR}{\end{ALC@for}}
+%<algorithmic> \newcommand{\ENDWHILE}{\end{ALC@whl}}
+%<algorithmic> \newcommand{\ENDLOOP}{\end{ALC@loop}}
+%<algorithmic> }{
+%<algorithmic> \newcommand{\ENDIF}{\end{ALC@if}\ALC@it\algorithmicendif}
+%<algorithmic> \newcommand{\ENDFOR}{\end{ALC@for}\ALC@it\algorithmicendfor}
+%<algorithmic> \newcommand{\ENDWHILE}{\end{ALC@whl}\ALC@it\algorithmicendwhile}
+%<algorithmic> \newcommand{\ENDLOOP}{\end{ALC@loop}\ALC@it\algorithmicendloop}
+%<algorithmic> }
+%<algorithmic> \renewcommand{\@toodeep}{}
+%<algorithmic> \begin{list}{\ALC@lno}{\setcounter{ALC@rem}{0}\setcounter{ALC@line}{0}%
+%<algorithmic> \itemsep\z@ \itemindent\z@ \listparindent\z@%
+%<algorithmic> \partopsep\z@ \parskip\z@ \parsep\z@%
+%<algorithmic> \labelsep 0.5em \topsep 0.2em%
+%<algorithmic>\ifthenelse{\equal{#1}{0}}
+%<algorithmic> {\labelwidth 0.5em }
+%<algorithmic> {\labelwidth 1.2em }
+%<algorithmic>\leftmargin\labelwidth \addtolength{\leftmargin}{\labelsep}
+%<algorithmic> \ALC@tlm\labelsep
+%<algorithmic> }
+%<algorithmic>}
+%<algorithmic>{\end{list}}
+%\Finale
+%\PrintChanges
+%\PrintIndex