【转】LaTeX插入伪代码2

\   usepackage   {   algorithm   }  
\   usepackage   {   algorithmic   }   Upload

Here is an exemple:

\begin   {   algorithm   }  
\   caption   {   Calculate$y = x^n$   }  
\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   }   Upload

Here are useful commands

Single line statements  \STATE  If-statements  \IF   {     }    \ENDIF  
\IF   {     }    \ELSE    \ENDIF  
\IF   {     }    \ELSIF   {     }    \ELSE    \ENDIF   Upload For-loops

There are two forms

\FOR   {     }    \ENDFOR  
\FORALL   {     }    \ENDFOR   Upload While-loops  \WHILE   {     }    \ENDWHILE Repeat until condition  \REPEAT    \UNTIL   {     } Infinite loops  \LOOP    \ENDLOOP Precondition  \REQUIRE  Postcondition  \ENSURE  Returning variables  \RETURN  Printing variables  \PRINT  

Note: Due to a bug, the algorithmic package is not compatible withhyperref.

From:http://www.math-linux.com/spip.php?article129

以上代码可以执行,下面代码测试不成功。

\usepackage{algorithm}

\usepackage{algorithmic} %用到的宏包,要自己改下

\usepackage{multirow}

\renewcommand{\algorithmicrequire}{\textbf{Initialization:}}%改成后面的小标题

\renewcommand{\algorithmicensure}{\textbf{Iteration:}}
\renewcommand{\algorithmiclastcon}{\textbf{Output:}}

%%正文代码

\begin{algorithm}[htb]%算法的开始

\caption{ ABC }%算法的标题

\label{alg:SA}%给算法一个标签,这样方便在文中对算法的引用

\begin{algorithmic}[1]%不知[1]是干嘛的?

\REQUIRE ~~\\%算法的输入参数:Initialization

Set $J=0$; $S_0= \left\{ \phi\right\}$; $R(S_0 ) = 0$; $\Omega=\{1,2,\ldots,K\}$;

\ENSURE ~~\\%算法的迭代:Iteration

%Ensemble of classifiers on the current batch,$E_n$;

\WHILE{$J \STATE $J\leftarrow J+1$;
\FORALL {$k\in \Omega$}
\STATE$R_{temp}=0$;$\Delta R_{J,k} = R(S_{J-1}\cup \{k\})-R(S_{J-1})$;
\IF{$\Delta R_{J,k}>0$}
\IF{$R(S_{J-1}\cup \{k\})\geq R_{temp}$}
\STATE $R_{temp}\leftarrow R(S_{J-1}\cup \{k\})$; $s_J\leftarrow k$;
\ENDIF
\ELSE
\IF{$1/(1-\Delta R_{J,k}/c_k ) \STATE $\Omega= \Omega-\{k\}$;
\ENDIF
\ENDIF
\ENDFOR
\IF {$R_{temp}>0$}
\STATE $S_J\leftarrow S_{J-1}\cup \{s_J\}$;
\ELSE
\STATE $J\leftarrow J-1$; Break;
\ENDIF
\ENDWHILE%算法的返回值
\lastcon ~~\\%OUTPUT
selected user set $S_J$ and weighted sum rate $R(S_J)$;

\end{algorithmic}

\end{algorithm}
%%%宏包\usepackage{algorithmic} 的改法

%%%原宏包只有require和ensure两个\item,要改成三个(加入OUTPUT)的话,

%%%在algorithmic.sty中找到

% ALGORITHMIC
\newcommand{\algorithmicrequire}{\textbf{Require:}}
\newcommand{\algorithmicensure}{\textbf{Ensure:}}

%%%再下面加入一句:\newcommand{\algorithmiclastcon}{\textbf{Lastcon:}}%%%lastcon是自己定义的

%%%再找到

\newcommand{\REQUIRE}{\item[\algorithmicrequire]}
\newcommand{\ENSURE}{\item[\algorithmicensure]}

%%%在后面加入一句
\newcommand{\lastcon}{\item[\algorithmiclastcon]} %%% lastcon是自己定义的

%%%保存ALGORITHMIC.sty,在正文中就可以加入\LASTCON 了~!



另附百度找来的algorithmic.sty 的其他一些命令的使用:

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

 

你可能感兴趣的:(LaTeX)