这是关于我们如何有效地表达手头的算法。我的本科教学需要这个。
我了解没有编写伪代码的标准方法。不同的作者遵循不同的约定。
如果这里的人们指出他们遵循和思考最佳方法的方式,那将是有帮助的。
是否有任何书籍对此进行了详细介绍?
这是关于我们如何有效地表达手头的算法。我的本科教学需要这个。
我了解没有编写伪代码的标准方法。不同的作者遵循不同的约定。
如果这里的人们指出他们遵循和思考最佳方法的方式,那将是有帮助的。
是否有任何书籍对此进行了详细介绍?
Answers:
编写伪代码就像编写代码:遵循哪个标准并不特别重要,只要您(以及与您一起编写代码的人)实际上遵循某个标准即可。
但是为了记录,这是我在讲义,研究论文和新书中使用的特质标准。
使用标准命令式语法进行控制流和内存访问-如果返回,则返回array [index],function(arguments)。拼写“否则”。
record.field
record->field
使用标准的数学符号的数学-写代替,一个MOD b代替,小号≤ 牛逼的不是,¬ p代替,√x*y
a%b
s <= t
!p
代替,π代替,∞代替,等等。sqrt(x)
PI
MAX_INT
但是请使用进行分配,以避免出现此问题。==
但是,如果英语更清晰,请完全避免使用符号(和伪代码!)。
最小化语法糖—通过一致的缩进来表示块结构(如Python)。省略含糖关键字,例如“开始/结束”或“执行/结束”或“ fi”。省略行号。难道不是强调关键字,如“for”或“while”或“如果”通过在不同设置它们typeface
或风格。曾经 只是不要。
但是在\ textsc {Small Caps}中排版算法的名称和常量,在斜体中使用变量名,在Sans Serif中使用文字字符串。
但是\\[0.5ex]
在有意义的代码块之间添加少量垂直“呼吸”空间()。
不要指定不重要的细节。如果您访问顶点的顺序无关紧要,只需说“对于所有顶点”。
例如,这是Borůvka的最小生成树算法的递归公式。我之前将定义为通过收缩集合L中的所有边而从G获得的图,并将Flatten作为删除循环和平行边的子例程。
我使用自己的轻量级algorithm
LaTeX环境排版伪代码。(这只是一个tabbing
内部的环境\fbox
。)这是我的Borůvka算法的源代码:
\begin{algorithm}
\textul{$\textsc{Borůvka}(G)$:}\+
\\ if $G$ has no edges\+
\\ return $\varnothing$\-
\\[0.5ex]
$L \gets \varnothing$
\\ for each vertex $v$ of $G$\+
\\ add the lightest edge incident to $v$ to $L$\-
\\[0.5ex]
return $L \cup \textsc{Borůvka}(\textsc{Flatten}(G / L))$
\end{algorithm}
我倾向于使用类似于Python语法的内容。Python已经足够接近伪代码了,以至于在某些情况下我的伪代码可以变成实际的工作代码。
如果您要使用确定的代码(即几乎没有数学,几乎等于实际编程),则可能需要考虑使用实际编译的代码。这有几个优点:
我大学的一位教授在其算法课程中做到了这一点。他选择的语言是Modula。不过,我认为语言的特定选择并不重要。只要坚持最适合您抽象水平的一种(每个范例)即可。