31

いくつかのPythonおよびJavaルーチンを修士論文の擬似コードに変換する必要がありますが、次のような構文/スタイルを思い付くのに問題があります。

  • 一貫性のある
  • わかりやすい
  • 冗長すぎない
  • 自然言語に近すぎない
  • いくつかの具体的なプログラミング言語に近すぎない。

擬似コードをどのように記述しますか?標準的な推奨事項はありますか?

4

7 に答える 7

20

「アルゴリズム入門」の本(Cormen、Leiserson、Rivestによる)を参照することをお勧めします。私は常に、アルゴリズムの擬似コード記述が非常に明確で一貫していることに気づきました。

例:

DIJKSTRA(G, w, s)
1  INITIALIZE-SINGLE-SOURCE(G, s)
2  S ← Ø
3  Q ← V[G]
4  while Q ≠ Ø
5      do u ← EXTRACT-MIN(Q)
6         S ← S ∪{u}
7         for each vertex v ∈ Adj[u]
8             do RELAX(u, v, w)
于 2010-02-20T10:03:51.117 に答える
7

私自身の質問に答えて、私はLaTeXのTeXFAQエントリタイプセット擬似コードに注意を向けたいと思いました。さまざまなスタイルについて説明し、長所と短所を示します。ちなみに、上記で推奨されているように、Cormenによる「IntroductintoAlgorithms」で使用されている方法で擬似コードを記述するための2つのスタイルシートが存在しnewalgますclrscode。後者はコルメン自身によって書かれました。

于 2010-02-25T14:08:06.507 に答える
5

Fortressプログラミング言語をご覧になることをお勧めします。

これは実際のプログラミング言語であり、擬似コードではありませんが、実行可能な擬似コードにできるだけ近くなるように設計されています。特に、構文を設計するために、彼らは何百ものCSと数学の論文、コース、本、ジャーナルを読んで分析し、擬似コードやその他の計算/数学表記の一般的な使用パターンを見つけました。

Fortressのソースコードを調べて不要なものを抽象化するだけで、これらすべての調査を活用できます。これは、対象読者が人間であるのに対し、Fortressはコンパイラであるためです。

これは、 NAS(NASA Advanced Supercomputing)共役勾配並列ベンチマークからFortressコードを実行する実際の例です。楽しい経験のために、ベンチマークの仕様をFortressでの実装と比較し、ほぼ1:1の対応があることに注目してください。また、CやFortranなどの他のいくつかの言語での実装を比較し、それらが仕様とはまったく関係がないことに注目してください(また、多くの場合、仕様よりも桁違いに長くなっています)。

強調する必要があります。これは擬似コードではなく、実際に機能するFortressコードです。https://umbilicus.wordpress.com/2009/10/16/fortress-parallel-by-default/から

共役勾配法の要塞コード例

FortressはASCII文字で書かれていることに注意してください。特殊文字はフォーマッタでレンダリングされます。

于 2010-02-20T14:33:29.763 に答える
4

コードが手続き型の場合、通常の擬似コードはおそらく簡単です(Wikipediaにはいくつかの例があります)。

オブジェクト指向の擬似コードはもっと難しいかもしれません。検討:

  • UMLクラス図を使用してクラス/継承を表現する
  • UMLシーケンス図を使用してコードのシーケンスを表現する
于 2010-02-20T10:05:48.507 に答える
3

「具体的なプログラミング言語に近すぎない」というあなたの要件を理解していません。

Pythonは、一般的に擬似コードを書くための良い候補と考えられています。おそらく、Pythonの少し簡略化されたバージョンがあなたのために働くでしょう。

于 2010-02-20T14:39:39.013 に答える
2

Pascalは、数学および技術分野に関しては、伝統的に擬似コードに最も類似しています。理由はわかりませんが、いつもそうだったのです。

私はいくつか持っています(ああ、私にはわかりません、おそらくこの理論を具体化する棚に10冊の本があります)。

提案されているように、Pythonは優れたコードである可能性がありますが、非常に読みにくくなる可能性があるため、それ自体が不思議です。古い言語は読みにくくするのが難しく、今日の言語よりも「単純」(注意が必要)です。何が起こっているのかを理解するのは難しいかもしれませんが、読みやすくなります(プログラムの機能を理解するために必要な構文/言語機能は少なくなります)。

于 2010-02-20T15:15:33.960 に答える
1

この投稿は古いですが、うまくいけば、これは他の人を助けるでしょう。

「アルゴリズム入門」(Cormen、Leiserson、Rivest著)はアルゴリズムについて読むのに良い本ですが、「擬似コード」はひどいものです。Q [1 ... n]のようなものは、Q [1...n]が何を意味するのかを理解する必要がある場合には意味がありません。これは、「擬似コード」の外で注意する必要があります。さらに、「アルゴリズム入門」のような本は、擬似コードの1つの目的に違反する数学的構文を使用するのが好きです。

擬似コードは2つのことを行う必要があります。構文から離れて抽象化し、読みやすくします。実際のコードが擬似コードよりも記述的であり、実際のコードがより記述的である場合、それは擬似コードではありません。

簡単なプログラムを書いていたとしましょう。

画面デザイン:

Welcome to the Consumer Discount Program!
Please enter the customers subtotal: 9999.99
The customer receives a 10 percent discount
The customer receives a 20 percent discount
The customer does not receive a discount
The customer's total is: 9999.99

変数リスト:

TOTAL:         double
SUB_TOTAL:     double
DISCOUNT:      double

擬似コード:

DISCOUNT_PROGRAM

    Print "Welcome to the Consumer Discount Program!"
    Print "Please enter the customers subtotal:"
    Input SUB_TOTAL

    Select the case for SUB_TOTAL
        SUB_TOTAL > 10000 AND SUB_TOTAL <= 50000
            DISCOUNT = 0.1
            Print "The customer receives a 10 percent discount"
        SUB_TOTAL > 50000
            DISCOUNT = 0.2
            Print "The customer receives a 20 percent discount"
        Otherwise
            DISCOUNT = 0
            Print "The customer does not a receive a discount"

    TOTAL = SUB_TOTAL - (SUB_TOTAL * DISCOUNT)
    Print "The customer's total is:", TOTAL

これは非常に読みやすく、構文を参照していないことに注意してください。これは、BohmとJacopiniの3つの制御構造すべてをサポートします。

順序:

Print "Some stuff"
VALUE = 2 + 1
SOME_FUNCTION(SOME_VARIABLE)

選択:

if condition
    Do one extra thing

if condition
    do one extra thing
else
    do one extra thing

if condition
    do one extra thing
else if condition
    do one extra thing
else
    do one extra thing

Select the case for SYSTEM_NAME
    condition 1
        statement 1
    condition 2
        statement 2
    condition 3
        statement 3
    otherwise
        statement 4

繰り返し:

while condition
    do stuff

for SOME_VALUE TO ANOTHER_VALUE
    do stuff

これをこのN-Queensの「擬似コード」(https://en.wikipedia.org/wiki/Eight_queens_puzzle)と比較してください。

PlaceQueens(Q[1 .. n],r)

    if r = n + 1
        print Q
    else
        for j ← 1 to n
            legal ← True
            for i ← 1 to r − 1
                if (Q[i] = j) or (Q[i] = j + r − i) or (Q[i] = j − r + i)
                    legal ← False
        if legal
            Q[r] ← j
            PlaceQueens(Q[1 .. n],r + 1) 

簡単に説明できないと、十分に理解できません。- アルバート・アインシュタイン

于 2019-01-11T15:02:22.433 に答える