LaTeX 算法伪代码基本格式排版

时间:2024-11-20 22:41:05

目录

一、算法排版基本用法

1、参数与语法说明

(1)算法排版框架

(2)标题与标签

(3)设置输入和输出

(4)算法内容框架

(5)输入输出

(6)算法内容

2、算法的引用

3、算法改名

二、算法常用语句

1、IF 条件判断语句

2、FOR 循环语句

3、while 循环语句

三、算法排版初体验


一、算法排版基本用法

1、参数与语法说明

(1)算法排版框架

\begin{algorithm}[!t]
...
\end{algorithm}

整体大框架明确了伪代码或算法结构的开始(\begin)和结束(\end)的位置,而 algorithm 说明插入的内容是算法。[!h] 是算法的摆放格式:在当前位置(hear),所有的格式和图片、表格相同。

(2)标题与标签

\caption{Algor of ABC}
\label{alg:AOA}

caption 是算法的标题。{ }中就是标题展示的具体内容,标题也会有编号,一般都是自动编号。label 是标签,标签主要是在引用的时候会用到。

说明:有时候,我们喜欢强调标签是属于算法标签,所以这里使用 alg:AOA,而不是直接使用 AOA 作为标签。

(3)设置输入和输出

\renewcommand{\algorithmicrequire}{\textbf{Input:}}
\renewcommand{\algorithmicensure}{\textbf{Output:}}

算法一般是需要输入和输出的,我们重新替换掉上面定义的两个命令:

\algorithmicrequire
\algorithmicensure

所以修改之后,应该明白上面两行命令的含义了。我们使用的命令:\renewcommand{}{},第一个大括号是修改前的命令,第二个大括号是修改后的命令。\textbf是命令文本的格式(加粗)。

如果这条语句适用于所有的算法,那么我们就可以把这条语句和引用包的命令放在一起:

这就是全局设定的命令,所有用到该命令的算法都要遵守这个设定。在每个具体的算法中,我们就不需要使用这个命令了。但如果在算法中使用了这个命令,就会优先按照这个命令来。而其他没有使用这个命令,就是用前面全局设定的命令。

(4)算法内容框架

\begin{algorithmic}[1]        
     
\end{algorithmic}

这一对是算法内容的框架,表示算法的具体实现以伪代码的形式写在这里。

后面有个参数,参数中一般都写1,这个1表示具体算法内容前面的序号是每几行语句标一次序号,一般我们都是每一行算法语句都要,所以是1。

(5)输入输出

\REQUIRE $A$, $B$, $C$  %%input
\ENSURE EEEEE  %%output

这一整块就是输入参数和输出参数。其中,\REQUIRE 命令表示输入,\ENSURE 命令表示输出。

(6)算法内容

如果算法中不需要输入和输出这两条语句,那我们这两条语句就不用写在算法中,显示的效果就只有算法的内容了。

\STATE AAAAA
      
\WHILE{$A=B$}
	\STATE BBBBB
\ENDWHILE

\FOR{each $i \in [1,10]$}
	\IF {$C = 0$}          
		\STATE CCCCC
	\ELSE 
		\STATE DDDDD
	\ENDIF
\ENDFOR

\RETURN EEEEE

这一整块就是算法的内容了。每一条独立的语句,前面都要添加命令\STATE。除此之外,我们最常用的还有判断语句循环语句返回语句

2、算法的引用

算法的引用要用到的命令 /ref,如果要调用上面的算法,就可以这样调用:

As show in algorithm \ref{alg:AOA}

命令大括号中的就是算法的标签,执行结果如下:

3、算法改名

有些时候,我们想用的不是 algorithm ,例如我们想写智能合约,就希望是下面这种样式:

只需要在使用前添加一行:\floatname{algorithm}{Contract}

\floatname{algorithm}{Contract}
\begin{algorithm}[!h]
    \caption{Cont of ABC}
    \label{alg:AOA}
    
    \begin{algorithmic}[1]
        \STATE  AAAAA
    \end{algorithmic}
\end{algorithm}

二、算法常用语句

在算法的伪代码书写模式中有一些常用的语句,比如:条件分支、循环结构等。这些语法的使用要用到 algorithmic 宏包,即:\usepackage{algorithmic}

1、IF 条件判断语句

IF 条件判断的结构如下:

\IF {条件}          
	\STATE 语句1
\ELSE
    \STATE 语句2
\ENDIF

这个语句块的含义就是:如果条件成立,则执行语句1,否则执行语句2。

如果我们不用考虑条件不成立,那么我们就可以省略 ELSE,直接写如下的语句块:

\IF {条件}          
	\STATE 语句1
\ENDIF

有两个以上的情况分支,就需要用到嵌套功能,即在一个判断语句中再写一个判断语句,例如:

\IF {条件1}          
    \STATE 语句1
\ELSE
	\IF{条件2} \STATE 语句2
    \ELSE \STATE 语句3
    \ENDIF
\ENDIF

2、FOR 循环语句

for循环语句主要用于那些具有明确循环次数和范围的循环语句,例如有如下的几种情况:

\FOR{循环条件}
	\STATE  循环语句
\ENDFOR

这里以 1 到 100 以内所有整数之和为例:

\STATE $Sum = 0$
	\FOR{each $i \in [1,100]$}
	
		\STATE $Sum = Sum + i$

\ENDFOR

执行结果如下:

3、while 循环语句

while循环主要用于那些循环次数不确定的,直到满足某个条件退出的,while循环格式如下:

\WHILE{条件}
	\STATE 循环语句
\ENDWHILE

举个例子:计算 1 到 2021 的整数和。

\begin{algorithm}[!h]
	\caption{Sum}
    \label{alg:Sum}
    \begin{algorithmic}[1]
    
    	\STATE $s = 0$, $i = 1$
      	\WHILE{$s<2021$}
        	\STATE $s = s+i$
        	\STATE $i++$
      	\ENDWHILE
    
    \end{algorithmic}
\end{algorithm}

上面实例的执行效果如下所示:

三、算法排版初体验

LaTeX 的所有宏包文件都要写在 \documentclass 命令之后和\begin{document} 之前。在本文中,我们主要会用到如下的两个宏包:

\usepackage{algorithmic}
\usepackage{algorithm}

在论文写作的过程中,对于计算机专业的学生,在论文中插入伪代码描述所用的算法还是比较常见的。这里我们先体验一下伪代码算法插入模板的效果,然后在后面详细讲解模板的中的每个细节。

我们比较通用的模板如下:

\begin{algorithm}[!h]
    \caption{algorithm of SUM}
    \label{alg:AOA}
    \renewcommand{\algorithmicrequire}{\textbf{Input:}}
    \renewcommand{\algorithmicensure}{\textbf{Output:}}
    \begin{algorithmic}[1]
        \REQUIRE $A$, $B$, $C$  %%input
        \ENSURE EEEEE    %%output
        
        \STATE  AAAAA
        \WHILE{$A=B$}
            \STATE BBBBB
        \ENDWHILE
        
        \FOR{each $i \in [1,10]$}
            \IF {$C = 0$}
                \STATE CCCCC
            \ELSE
                \STATE DDDDD
            \ENDIF
        \ENDFOR
        
        \RETURN EEEEE
    \end{algorithmic}
\end{algorithm}

上述模板的展示效果如下: