latex伪代码

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}

最后的排版结果如下



LaTeX 中算法有关宏包和命令的使用


•  宏包
首先,需要使用以下宏包,
\usepackage{algorithm}
\usepackage{algorithmic}

•  输入、输出和返回值
此外如果算法有标准的输入和输出,以及返回值,可以使用相应的输入、输出、返回值命令,输入、输出、返回值命令依次分别为:

% 该命令为输入参数说明的命令,至于命令的 "~~",具体作用也不清楚,参考的链接中是这样给的,
\REQUIRE ~~ \\

% 以下命令为输出参数说明的命令
\ENSURE ~~ \\

% 使用返回值格式命令
\RETURN

•  命令重命名
当然,如果不喜欢宏包中默认的命令,则可以使用以下latex命令将原有的默认命令进行重命名,
\renewcommand{\algorithmrequire}{\textbf{Input:}}
\renewcommand{\algorithmensure}{\textbf{Output:}}
按照以上两句代码重定义后,就可以用 "Input:" 和 "Output:" 来分别表示输入和输出了。
• for 循环的使用例子
∘ 例子,  for 格式
\FOR {each $i \in [1,9]$}
    \STATE initialize a tree $T_{i}$ with only a leaf (the root); \\
    \STATE $T = T\bigcup $_{i};$ \\
\ENDFOR


∘ 例子2, forall 格式
\FORALL {forall 循环条件} \label{alg:code:tag:1}
    \STATE forall 循环体算法伪代码行一    \label{alg:code:tag:2}
    \STATE forall 循环体算法伪代码行二    \label{alg:code:tag:3}
\ENDFOR


•  while 循环的使用例子
\WHILE {while循环条件}
    \STATE while循环体算法伪代码行一
    \STATE while 循环体算法伪代码行二
\ENDWHILE


 if
\IF {if条件描述}
    \STATE if代码描述一
    \STATE if代码描述二
\ENDIF


 if ... else ...
\IF {if条件描述}
    \STATE if伪代码描述一
    \STATE if伪代码描述二
\ELSE
    \STATE else伪代码描述一
    \STATE else伪代码描述二
\ENDIF


•  if ... else if ...
\IF {if条件描述}
    \STATE if伪代码描述
\ELSIF {elseif条件描述一}
    \STATE elseif伪代码描述一
\ELSIF {elseif条件描述二}
    \STATE elseif伪代码描述二
\ELSE
    \STATE else伪代码描述
\ENDIF


•  repeat until  ,这里的条件描述,描述的是退出条件,也就是在条件满足时,循环退出
\REPEAT
    \STATE 伪代码描述
\UNTIL {条件描述}


•  ininite loops ,无限循环,循环体中应该是具备退出条件的
\LOOP
    \STATE 伪代码描述
\ENDLOOP


• 变量打印
\PRINT 打印内容描述


• 算法部分循环使用总结
∘ \IF {"condition"}  "text"   \ENDIF
∘ \IF  {"condition"}   "text"   \ELSE   "text"    \ENDIF
∘ \IF  {"condition"}    "text"   \ELSIF   "text"     \ELSIF  "text"    \ELSE  "text"  \ENDIF
∘ \FOR {"condition"}  "text" \ENDFOR
∘ \FORALL {"condition"}  "text"  \ENDFOR
∘ \WHILE {"condition"}  "text"  \ENDWHILE
∘ \REPEAT "text"  \UNTIL {"condition"}
∘ \LOOP "text"  \ENDLOOP





参考:http://hustsxh.is-programmer.com/posts/38801.html

            http://blog.sina.com.cn/s/blog_5a13c966010167fj.html

  • 6
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值