algorithmicx:缩短算法

algorithmicx:缩短算法

我的算法占用了文档中的太多空间。我想做两件事:

  • 设置更大的宽度,这样一行中放不下的线条就可以了
  • 删除带有end关键字的行(即结束标签或任何它们被称为的行)

这些事情可能吗?

抱歉,这些问题很无趣,但我对 TeX 还很陌生,我只将 LaTeX 用于算法,我正在以另一种格式编写我的文档。

更新:例子:

完整文档:

\documentclass{article}
\usepackage{algorithm}
\usepackage{algpseudocode}
\usepackage{amsmath}
\begin{document}

\begin{algorithm}

\begin{algorithmic}[1]

\Function {NMS3D}{$T : array[1..w, 1..h, 1..d], n: int$}
    \State \Comment $(2 n +1) \times (2 n +1) \times (2 n +1)$ szomsz\'eds\'gban keress\"uk a lok\'alis maximumokat 
    \State label \textbf{mainloop:}
    \ForAll {$(i, j, k) \in \{ n, 2n+1, ... \}^3 \cap [1..w - n] \times [1..h - n] \times [1..d - n] $}
        \State \textbf{initialize:} $(i_{max}, j_{max}, k_{max}) \gets (i, j, k)$
        \ForAll {$(i_2, j_2, k_2) \in [i, i+n] \times [j, j+n] times [k, k+n]$}
            \If {$T[i_2, j_2, k_2] > T[i_{max}, j_{max}, k_{max}]$}
                \State $(i_{max}, j_{max}, k_{max}) \gets (i_2, j_2, k_2)$
            \EndIf
        \EndFor
        \ForAll {$(i_2, j_2, k_2) \in [i_{max}-n, i_{max}+n] \times [j_{max}-n, j_{max}+n] \times [k_{max}-n, k_{max}+n] 
            - [i, i+n] \times [j, j+n] \times [k, k+n]$}
            \If {$T[i_2, j_2, k_2] > T[i_{max}, j_{max}, k_{max}]$}
                \State \textbf{continue} mainloop
                \State \Comment a maximum jel\"olt t\'ul k\"ozel van egy m\'asik maximumhoz, elvetj\"uk
            \EndIf
        \EndFor         
        \State $list_{max} \stackrel{add}{\longleftarrow} (i_{max}, j_{max}, k_{max})$
    \EndFor
    \State \textbf{return} $list_{max}$
\EndFunction


\end{algorithmic}
\end{algorithm}
\end{document}

下面是我想要更改的结果,用红色进行了更正(使用 MS Paint,是的,我确实有一些史诗般的 Paint 技能,对吧?):

评论是匈牙利语的,别介意

答案1

本质上,这是一个页面几何的问题。\usepackage{fullpage}例如,它可以工作,但您可能还会摆弄该geometry包以获得更加可定制的效果。

另请参阅一英寸边距和几何包

至于关于删除ends 的第二点,algorithmicx的文档第 4 节描述了自定义块。

编辑:这是一个例子。

如果添加\algnotext{EndFor}For块将打印不end。然后您可以将其应用于EndIf您需要的任何其他内容。

\documentclass{article}
\usepackage{algorithm}
\usepackage{algpseudocode}
\usepackage{amsmath,fullpage}
\algnotext{EndFor}
\algnotext{EndIf}
\begin{document}

\begin{algorithm}

\begin{algorithmic}[1]

\Function {NMS3D}{$T : array[1..w, 1..h, 1..d], n: int$}
    \State \Comment $(2 n +1) \times (2 n +1) \times (2 n +1)$ szomsz\'eds\'gban keress\"uk a lok\'alis maximumokat 
    \State label \textbf{mainloop:}
    \ForAll {$(i, j, k) \in \{ n, 2n+1, ... \}^3 \cap [1..w - n] \times [1..h - n] \times [1..d - n] $}
        \State \textbf{initialize:} $(i_{max}, j_{max}, k_{max}) \gets (i, j, k)$
        \ForAll {$(i_2, j_2, k_2) \in [i, i+n] \times [j, j+n] times [k, k+n]$}
            \If {$T[i_2, j_2, k_2] > T[i_{max}, j_{max}, k_{max}]$}
                \State $(i_{max}, j_{max}, k_{max}) \gets (i_2, j_2, k_2)$
            \EndIf
        \EndFor
        \ForAll {$(i_2, j_2, k_2) \in [i_{max}-n, i_{max}+n] \times [j_{max}-n, j_{max}+n] \times [k_{max}-n, k_{max}+n] 
        - [i, i+n] \times [j, j+n] \times [k, k+n]$}
            \If {$T[i_2, j_2, k_2] > T[i_{max}, j_{max}, k_{max}]$}
                \State \textbf{continue} mainloop
                \State \Comment a maximum jel\"olt t\'ul k\"ozel van egy m\'asik maximumhoz, elvetj\"uk
            \EndIf
        \EndFor         
        \State $list_{max} \stackrel{add}{\longleftarrow} (i_{max}, j_{max}, k_{max})$
    \EndFor
    \State \textbf{return} $list_{max}$
\EndFunction


\end{algorithmic}
\end{algorithm}
\end{document}

相关内容