Latex——小trick(二)——寫算法僞代碼

轉自 http://blog.sina.com.cn/s/blog_6c8556dd0100xdp1.html


Latex——小trick(二)——寫算法僞代碼

 (2011-09-18 10:46:26)
標籤: 

雜談

分類: Matlab/Mathematica/Latex

\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<M$}
\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 )<rand(1)$}
            \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 了~!
Latex——小trick(二)——寫算法僞代碼


另附百度找來的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





發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章