我怎样才能实现这种非限制性的伪代码风格?

我怎样才能实现这种非限制性的伪代码风格?

编写如下伪代码的最佳方法(最有效方法)是什么?

图片来自 Bernhard Korte、Jens Vygen - 组合优化

我特别喜欢它结构良好,但又提供了足够的书写自由度(实际上它只是以特定方式对齐的标准内联文本)。如果使用了库,如果有人能发现,我将不胜感激。如果没有这样的库,我该如何实现结果?

答案1

感谢 MS-SPO 指出我设法得到的包,结合带圈的数字即可pseudo找到我所寻找的内容。(使用,我们也可以制作方框)tikzmdframedtabular


\pseudoset{label=\protect\circled{\arabic*},  line-height=1.2, ref}
\newcommand*\circled[1]{\tikz[baseline=(char.base)]{
            \node[shape=circle,draw,inner sep=1pt] (char) {#1};}}



\begin{mdframed}
{\hspace{0.25em} \Large Dynamic Programming Knapsack Algorithm} \\[0.5em]
\begin{tabular}{p{3em} p{30em}}
\textit{Input:}  & Nonnegative integers $n, c_1,\dots,c_n,w_1,\dots, w_n$ and $W$. \\[0.5em]
\textit{Output:} & A subset $S\subseteq \{1, \dots, n\}$ such that $\sum_{j\in S} w_j \leq W$ and $\sum_{j\in S} c_j$ is maximum.
\end{tabular} 
\end{mdframed}

\begin{pseudo}
Let $C$ be any upper bound on the value of the optimum solution, e.g. \\*& \; $C:=\sum_{j=1}^n c_j$. \\
Set $x(0,0):=0$ and $x(0,k):=\infty$ for $k=1,\dots, C$. \\
\kw{For} $j:=1$ \kw{to} $n$: \\+*&
    \kw{For} $k:=0$ \kw{to} $C$: \\+*&
        Set $s(j, k):=0$ and $x(j, k):=x(j-1, k)$ . \\-*&
    \kw{For} $k:=c_j$ \kw{to} $C$: \\+*&
        \kw{If} $x(j-1, k-c_j) + w_j \leq \min\{W, x(j,k)\}$ \kfw{then}: \\+*&
            Set $x(j,k) := x(j-1, k-c_j) + w_j$ and $s(j, k):=1$. \\---
Let $k=\max\{i\in\{0,\dots, C\}:x(n,i) < \infty\}$. Set $S:=\emptyset$. \\*&
\kw{For} $j:=n$ \kw{down to} $1$: \\+*&
    \kw{If} $s(j, k)=1$ \kw{then} set $S:= S\cup \{j\}$ and $k:=k-c_j$.
\end{pseudo}

在此处输入图片描述

相关内容