显示算法的并行性

显示算法的并行性

我想显示算法中的某个部分是并行工作的。所以我想到了在算法中的行 S/state 周围加一个大括号之类的东西。

在下面的图片中我用 Photoshop 添加了支架:

在此处输入图片描述

有没有办法使用 Latex 中的算法/算法包来实现这一点?

源代码:

\begin{algorithm}
\caption{Parallele Tourkonstruktion}
\label{ParallelTour}
\textbf{Eingabe:} Datenobjekt mit $v$ Städten sowie einer Distanzmatrix $D$ und Pheromonmatrix $S$, \texttt{vector} $M$ mit $m$ Ameisen
\\\textbf{Ausgabe:} Route $r$ mit der kürzesten gefunden Distanz $d_s$
\begin{algorithmic}[1]
\State $j := 0$
\While{$j < v$}
\For{\textbf{each} Ameise $m_i \in M$}
\State Starte in einer zufälligen Stadt $v_0$
\State Ermittle die nächste Stadt $v_i$ und gehe dorthin
\State $r_{m_i} := v_i$
\State $d_m := d_m + D_{i-1,i}$
\State Aktualisiere Pheromonmatrix $S$
\EndFor
\State $j := j + 1$
\EndWhile
\State $d_s = \infty$
\For{\textbf{each} Ameise $m_i \in M$}
\If{Tourlänge $d_m < d_s$}
\State $d_s := d_m$
\EndIf
\EndFor
\end{algorithmic}
\end{algorithm}

答案1

您可以设置\smashed 数学构造来跨越对于每个

在此处输入图片描述

\documentclass{article}

\usepackage{algorithm,mathtools}
\usepackage[noend]{algpseudocode}
\usepackage[utf8]{inputenc}

\newcommand{\isassigned}{\vcentcolon=}

\begin{document}

\begin{algorithm}
  \caption{Parallele Tourkonstruktion}
  \textbf{Eingabe:} Datenobjekt mit $v$ Städten sowie einer Distanzmatrix $D$ 
    und Pheromonmatrix $S$, \texttt{vector} $M$ mit $m$ Ameisen \\
  \textbf{Ausgabe:} Route $r$ mit der kürzesten gefunden Distanz $d_s$
  \begin{algorithmic}[1]
    \State $j \isassigned 0$
    \While{$j < v$}
      \For{\textbf{each} Ameise $m_i \in M$}
        \State Starte in einer zufälligen Stadt $v_0$
        \State Ermittle die nächste Stadt $v_i$ und gehe dorthin
        \State $r_{m_i} \isassigned v_i$ 
          \hspace{17em}\smash{$\left.\rule{0pt}{2.7\baselineskip}\right\}\ \mbox{in parallel}$}
        \State $d_m \isassigned d_m + D_{i-1,i}$
        \State Aktualisiere Pheromonmatrix $S$
      \EndFor
      \State $j \isassigned j + 1$
    \EndWhile
    \State $d_s = \infty$
    \For{\textbf{each} Ameise $m_i \in M$}
      \If{Tourlänge $d_m < d_s$}
      \State $d_s \isassigned d_m$
      \EndIf
    \EndFor
  \end{algorithmic}
\end{algorithm}

\end{document}

如果你想让建筑覆盖对于每个那么你就可以使用

% ...
      \For{\textbf{each} Ameise $m_i \in M$}
        \State Starte in einer zufälligen Stadt $v_0$
        \State Ermittle die nächste Stadt $v_i$ und gehe dorthin
        \State $r_{m_i} \isassigned v_i$ 
          \hspace{17em}\raisebox{.5\baselineskip}[0pt][0pt]{$\left.\rule{0pt}{3.2\baselineskip}\right\}\ \mbox{in parallel}$}
        \State $d_m \isassigned d_m + D_{i-1,i}$
        \State Aktualisiere Pheromonmatrix $S$
      \EndFor
% ...

在此处输入图片描述

答案2

这是一个快速的tikzmark替代方法。

\documentclass{article}
\usepackage{algorithm}
\usepackage[noend]{algpseudocode}
\usepackage{tikz}
\usetikzlibrary{tikzmark,decorations.pathreplacing}

\begin{document}

\begin{algorithm}
  \caption{Parallele Tourkonstruktion}
  \textbf{Eingabe:} Datenobjekt mit $v$ St\"adten sowie einer Distanzmatrix $D$ 
    und Pheromonmatrix $S$, \texttt{vector} $M$ mit $m$ Ameisen \\
  \textbf{Ausgabe:} Route $r$ mit der k\"urzesten gefunden Distanz $d_s$
  \begin{algorithmic}[1]
    \State $j < 0$
    \While{$j < v$}
      \For{\textbf{each} Ameise $m_i \in M$}
        \State Starte in einer zuf\"alligen Stadt \tikzmarknode{v0}{$v_0$}
        \State Ermittle die n\"achste Stadt $v_i$ und gehe \tikzmarknode{dorthin}{dorthin}
        \State $r_{m_i} < v_i$ 
          %\hspace{17em}\smash{$\left.\rule{0pt}{2.7\baselineskip}\right\}\ \mbox{in parallel}$}
        \State $d_m < d_m + D_{i-1,i}$
        \State Aktualisiere Pheromonmatrix \tikzmarknode{S}{$S$}
      \EndFor
      \State $j < j + 1$
    \EndWhile
    \State $d_s = \infty$
    \For{\textbf{each} Ameise $m_i \in M$}
      \If{Tourl\"ange $d_m < d_s$}
      \State $d_s < d_m$
      \EndIf
    \EndFor
  \end{algorithmic}
\end{algorithm}
\begin{tikzpicture}[overlay,remember picture]
 \draw[thick,decorate,decoration=brace] ([xshift=1mm,yshift=2mm]dorthin.east |- v0.north) 
 -- ([xshift=1mm,yshift=-2mm]dorthin.east |- S.south)
 node[midway,right,align=left]{Working Parallel};
\end{tikzpicture}

\end{document}

在此处输入图片描述

让我提一下,它tikzmark能做的远不止这些。它可以注释代码而无需输入任何命令,也就是说,您可以真正嵌入工作代码并对其进行注释。但这里不需要这样做。

相关内容