これは、手元のアルゴリズムをどれだけ効果的に表現できるかについてです。これは学部で教えるために必要です。
擬似コードを記述する標準的な方法などはないことを理解しています。異なる著者は異なる規則に従います。
ここの人々が、彼らが従い、最良のものを考える方法を指摘してくれれば、それは助けになるでしょう。
これを詳細に扱っている本はありますか?
これは、手元のアルゴリズムをどれだけ効果的に表現できるかについてです。これは学部で教えるために必要です。
擬似コードを記述する標準的な方法などはないことを理解しています。異なる著者は異なる規則に従います。
ここの人々が、彼らが従い、最良のものを考える方法を指摘してくれれば、それは助けになるでしょう。
これを詳細に扱っている本はありますか?
回答:
擬似コードを書くことはコードを書くことに似ています:あなた(そしてあなたが書いた人々)が実際に何らかの標準に従う限り、どの標準に従うかは特に重要ではありません。
しかし、記録のために、講義ノート、研究論文、および今後の本で使用する特異な標準を以下に示します。
制御フローとメモリアクセスに標準の必須構文を使用します— if、while、for、return、array [index]、function(arguments)。「else if」と綴ります。
record.field
使用しますrecord->field
x*y
a%b
¬ P √s <= t
!p
π∞sqrt(x)
PI
MAX_INT
ただし、問題を回避するには、割り当てにを使用します。==
ただし、英語がより明確な場合は、表記法(および擬似コード!)を完全に避けてください。
構文糖の最小化—一貫したインデント(Python)によってブロック構造を示します。「begin / end」、「do / od」、「fi」などの甘いキーワードを省略します。行番号を省略します。「for」、「while」、「if」などのキーワードを異なるスタイルまたはスタイルに設定して強調しないでください。今まで。しないでください。typeface
しかし、\ textsc {Small Caps}のアルゴリズム名と定数、斜体の変数名、およびサンセリフのリテラル文字列のタイプセット。
ただし\\[0.5ex]
、意味のあるコードチャンク間に少量の垂直の「呼吸」スペース()を追加します。
重要でない詳細を指定しないでください。頂点にアクセスする順序が重要でない場合は、「すべての頂点に対して」と言うだけです。
たとえば、次はBorůvkaの最小スパニングツリーアルゴリズムの再帰的な定式化です。は、セット内のすべてのエッジを縮小することでから取得したグラフとして定義し、ループと平行エッジを削除するサブルーチンとしてFlattenを定義しました。G L
独自の軽量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です。ただし、言語の特定の選択は重要ではないと思います。抽象化のレベルに最適なもの(パラダイムごと)に固執するだけです。