我编写了以下算法,但它无法编译并抛出一些错误。我不确定我做错了什么。任何帮助都将不胜感激。
\begin{algorithm}
\caption{Bridging Score(BRS) Computation}
\begin{algorithmic}
Given: User-Noun Matrix $X$
\FOR {$i = 1 \to n$}
Let $S_i$ = {$s{i,j}$ | $0\le j \le l_i$} be set of nodes which have links to $i$;
\IF $\left({l_i=0$ OR $l_i=1 \right)}$ \THEN
$b_i=0$;
\ELSE
Compute the similarity score vectors $r_{s,1},r_{s,2},...,r_{s,l_i}$ for each $S_i=s_1,s_2,...s_{l_i}$; \\
Construct $l_i \times l_i$ matrix $R_i= \left[r_{s,1},r_{s,2},...,r_{s,l_i}\right]$;
Take the average of all non-diagonal elements in $R_i$ to obtain $\hat{r_s}$;
$b_i= 1/\hat{r_s}$;
\ENDIF
\ENDFOR
\RETURN vector $b$ of bridging scores;
\end{algorithmic}
\end{algorithm}
答案1
我不太清楚您使用的是哪种算法排版包,因为您没有包含文档前言,而且您的代码是几种不同语法的奇怪混合,大部分看起来像旧的algorithms
包语法,但不完全一样。您的标签似乎表明您正在使用algorithmicx
捆绑包,所以我假设您使用了algpseudocode
包。您需要更正一些语法,例如,algpseudocode
不大写命令,只大写首字母,所以您应该有\If ... \Else ... \EndIf
等。
另外,命令\For
并\If
接受论点,所以你需要
\If{something something}
不\If
使用\Then
,您应该将其省略。
每一行都必须有一个命令,因此您应该为“Given:”之类的内容定义自己的命令,或者直接使用\State
。
以下内容有望实现您期望的功能:
\documentclass{article}
\usepackage{algpseudocode}
\usepackage{algorithm}
\begin{document}
\begin{algorithm}
\caption{Blah blah}
\begin{algorithmic}[1]
\State Given: User-Noun Matrix $X$
\For{$i = 1 \to n$}
\State Let $S_i$ = {$s{i,j}$ | $0\le j \le l_i$} be set of nodes which have links to $i$;
\If{$\left(l_i=0 \hbox{OR} l_i=1 \right)$}
\State $b_i=0$;
\Else
\State Compute the similarity score vectors $r_{s,1},r_{s,2},...,r_{s,l_i}$ for each $S_i=s_1,s_2,...s_{l_i}$; \\
\State Construct $l_i \times l_i$ matrix $R_i= \left[r_{s,1},r_{s,2},...,r_{s,l_i}\right]$;
\State Take the average of all non-diagonal elements in $R_i$ to obtain $\hat{r_s}$;
\State $b_i= 1/\hat{r_s}$;
\EndIf
\EndFor
\State \Return vector $b$ of bridging scores;
\end{algorithmic}
\end{algorithm}
\end{document}
捆绑包algorithmicx
非常好文档举几个例子,建议大家看一下。