LaTeX/Algorithms 伪代码

来源:互联网 发布:大数据优化 编辑:程序博客网 时间:2024/04/28 02:37

这段时间在上算法课,有些作业题目要求写出伪代码。正好这段时间在学习latex,于是就收集整理了下latex描写算法的包。latex下描写算法的包主要有algorithmic, algorithmicx和algorithm2e

algorithmic和algorithmicx

介绍下algorithmic和algorithmicx,这两个包很像,很多命令都是一样的,只是algorithmic的命令都是大写,algorithmicx的命令都是首字母大写,其他小写(EndFor两个大写)。下面是algorithmic的基本命令

\STATE <text>

\IF{<condition>} \STATE{<text>} \ENDIF

\FOR{<condition>} \STATE{<text>} \ENDFOR

\FOR{<condition> \TO <condition> } \STATE{<text>} \ENDFOR

\FORALL{<condition>} \STATE{<text>} \ENDFOR

\WHILE{<condition>} \STATE{<text>} \ENDWHILE

\REPEAT \STATE{<text>} \UNTIL{<condition>}

\LOOP \STATE{<text>} \ENDLOOP

\REQUIRE <text>

\ENSURE <text>

\RETURN <text>

\PRINT <text>

\COMMENT{<text>}

\AND\OR\XOR\NOT\TO\TRUE\FALSE

对比看一下,下面是algorithmicx包的基本命令

\State <text>

\If{<condition>} <text> \EndIf

\If{<condition>} <text> \Else <text> \EndIf

\If{<condition>} <text> \ElsIf{<condition> <text> \Else <text> \EndIf

\For{<condition>} <text> \EndFor

\ForAll{<condition><text> \EndFor

\While{<condition>} <text> \EndWhile

\Repeat <text> \Until{<condition>}

\Loop <text> \EndLoop

\Require <text>

\Ensure <text>

\Function{<name>}{<params>} <body> \EndFunction

\State \Return <text>

\Comment{<text>}

另外,还有3个修改algorithm标签,require标签,ensure标签显示的三个命令:

\floatname{algorithm}{算法}

\renewcommand{\algorithmicrequire}{\textbf{输入:}} 

\renewcommand{\algorithmicensure}{\textbf{输出:}}

algorithmicx例子

正好学着用algorithmicx写了下归并排序求逆序数,代码如下

 

\documentclass[11pt]{article}\usepackage{CJK}\usepackage[top=2cm, bottom=2cm, left=2cm, right=2cm]{geometry}\usepackage{algorithm}\usepackage{algorithmicx}\usepackage{algpseudocode}\usepackage{amsmath} \floatname{algorithm}{算法}\renewcommand{\algorithmicrequire}{\textbf{输入:}}\renewcommand{\algorithmicensure}{\textbf{输出:}} \begin{document}\begin{CJK*}{UTF8}{gkai}    \begin{algorithm}        \caption{用归并排序求逆序数}        \begin{algorithmic}[1] %每行显示行号            \Require $Array$数组,$n$数组大小            \Ensure 逆序数            \Function {MergerSort}{$Array, left, right$}                \State $result \gets 0$                \If {$left < right$}                    \State $middle \gets (left + right) / 2$                    \State $result \gets result +$ \Call{MergerSort}{$Array, left, middle$}                    \State $result \gets result +$ \Call{MergerSort}{$Array, middle, right$}                    \State $result \gets result +$ \Call{Merger}{$Array,left,middle,right$}                \EndIf                \State \Return{$result$}            \EndFunction            \State            \Function{Merger}{$Array, left, middle, right$}                \State $i\gets left$                \State $j\gets middle$                \State $k\gets 0$                \State $result \gets 0$                \While{$i<middle$ \textbf{and} $j<right$}                    \If{$Array[i]<Array[j]$}                        \State $B[k++]\gets Array[i++]$                    \Else                        \State $B[k++] \gets Array[j++]$                        \State $result \gets result + (middle - i)$                    \EndIf                \EndWhile                \While{$i<middle$}                    \State $B[k++] \gets Array[i++]$                \EndWhile                \While{$j<right$}                    \State $B[k++] \gets Array[j++]$                \EndWhile                \For{$i = 0 \to k-1$}                    \State $Array[left + i] \gets B[i]$                \EndFor                \State \Return{$result$}            \EndFunction        \end{algorithmic}    \end{algorithm}\end{CJK*}\end{document}


?

最后的排版结果如下

效果还是不错的。。哈哈

0 0
原创粉丝点击