之前自己尝试用visio+mathtype画算法流程图,但是总是存在着各种各样的问题,今天才知道最好的算法流程图是用latex写出来的,在网上找到相关资源,先记录下来,然后照着实践一下看看效果。
转载自:http://blog.csdn.net/u010485913/article/details/50609623
- \documentclass{article}
- \usepackage{amsmath}
- \usepackage{algorithm}
- \usepackage{algpseudocode}
- \makeatletter
- \def\BState{\State\hskip-\ALG@thistlm}
- \makeatother
- \floatname{algorithm}{Procedure}
- \renewcommand{\algorithmicrequire}{\textbf{Input:}}
- \renewcommand{\algorithmicensure}{\textbf{Output:}}
- \begin{document}
- \begin{algorithm}
- \caption{My algorithm}\label{euclid}
- \begin{algorithmic}[1]
- \Procedure{MyProcedure}{}
- abc
- \State $\textit{stringlen} \gets \text{length of }\textit{string}$
- \State $i \gets \textit{patlen}$
- \BState \emph{top}:
- \If {$i > \textit{stringlen}$} \Return false
- \EndIf
- \State $j \gets \textit{patlen}$
- \BState \emph{loop}:
- \If {$\textit{string}(i) = \textit{path}(j)$}
- \State $j \gets j-1$.
- \State $i \gets i-1$.
- \State \textbf{goto} \emph{loop}.
- \State \textbf{close};
- \EndIf
- \State $i \gets i+\max(\textit{delta}_1(\textit{string}(i)),\textit{delta}_2(j))$.
- \State \textbf{goto} \emph{top}.
- \EndProcedure
- \end{algorithmic}
- \end{algorithm}
- \begin{algorithm}[h]
- \caption{An example for format For \& While Loop in Algorithm}
- \begin{algorithmic}[1]
- \For{each $i\in [1,9]$}
- \State initialize a tree $T_{i}$ with only a leaf (the root);
- \State $T=T\cup T_{i};$
- \EndFor
- \ForAll {$c$ such that $c\in RecentMBatch(E_{n-1})$}
- \label{code:TrainBase:getc}
- \State $T=T\cup PosSample(c)$;
- \label{code:TrainBase:pos}
- \EndFor;
- \For{$i=1$; $i<n$; $i++$ }
- \State $//$ Your source here;
- \EndFor
- \For{$i=1$ to $n$}
- \State $//$ Your source here;
- \EndFor
- \State $//$ Reusing recent base classifiers.
- \label{code:recentStart}
- \While {$(|E_n| \leq L_1 )and( D \neq \phi)$}
- \State Selecting the most recent classifier $c_i$ from $D$;
- \State $D=D-c_i$;
- \State $E_n=E_n+c_i$;
- \EndWhile
- \label{code:recentEnd}
- \end{algorithmic}
- \end{algorithm}
- \end{document}
转自:http://www.myexception.cn/other/1259942.html
1)首先在导言区加入语句:\usepackage{algorithm} \usepackage{algorithmic}
2)例1
\begin{algorithm} \caption{A} \label{alg:A} \begin{algorithmic} \STATE {set $r(t)=x(t)$} \REPEAT \STATE set $h(t)=r(t)$ \REPEAT \STATE set $h(t)=r(t)$ \UNTIL{B} \UNTIL{B} \end{algorithmic} \end{algorithm}
排版结果如下:
3)例2
\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}
排版结果如下:
4)\renewcommand 改变现有命令的定义。在导言区加入如下语句:
\renewcommand{\algorithmicrequire}{ \textbf{Input:}} %Use Input in the format of Algorithm \renewcommand{\algorithmicensure}{ \textbf{Output:}} %UseOutput in the format of Algorithm
使得原来软件包中定义的命令\REQUIRE和\ENSURE显示为Input:和Output:
一个例子如下:
\begin{algorithm}[htb] \caption{ Framework of ensemble learning for our system.} \label{alg:Framwork} \begin{algorithmic}[1] %这个1 表示每一行都显示数字 \REQUIRE ~~\\ %算法的输入参数:Input The set of positive samples for current batch, $P_n$;\\ The set of unlabelled samples for current batch, $U_n$;\\ Ensemble of classifiers on former batches, $E_{n-1}$; \ENSURE ~~\\ %算法的输出:Output Ensemble of classifiers on the current batch, $E_n$; \STATE Extracting the set of reliable negative and/or positive samples $T_n$ from $U_n$ with help of $P_n$; \label{ code:fram:extract }%对此行的标记,方便在文中引用算法的某个步骤 \STATE Training ensemble of classifiers $E$ on $T_n \cup P_n$, with help of data in former batches; \label{code:fram:trainbase} \STATE $E_n=E_{n-1}\cup E$; \label{code:fram:add} \STATE Classifying samples in $U_n-T_n$ by $E_n$; \label{code:fram:classify} \STATE Deleting some weak classifiers in $E_n$ so as to keep the capacity of $E_n$; \label{code:fram:select} \RETURN $E_n$; %算法的返回值 \end{algorithmic} \end{algorithm}
排版结果如下:
5)最后一个例子
\begin{algorithm}[h] \caption{An example for format For \& While Loop in Algorithm} \begin{algorithmic}[1] \FOR{each $i \in [1,9]$} \STATE initialize a tree $T_{i}$ with only a leaf (the root);\ \STATE $T=T \cup T_{i};$\ \ENDFOR \FORALL {$c$ such that $c \in RecentMBatch(E_{n-1})$} \label{code:TrainBase:getc} \STATE $T=T \cup PosSample(c)$; \label{code:TrainBase:pos} \ENDFOR \FOR{$i=1$; $i<n$; $i++$ } \STATE $//$ Your source here; \ENDFOR \FOR{$i=1$ to $n$} \STATE $//$ Your source here; \ENDFOR \STATE $//$ Reusing recent base classifiers. \label{code:recentStart} \WHILE {$(|E_n| \leq L_1 )and( D \neq \phi)$} \STATE Selecting the most recent classifier $c_i$ from $D$; \STATE $D=D-c_i$; \STATE $E_n=E_n+c_i$; \ENDWHILE \label{code:recentEnd} \end{algorithmic} \end{algorithm}
排版结果如下: