web-dev-qa-db-ja.com

疑似コードとアルゴリズムの違いは?

技術的には、これらの2つの単語に違いはありますか、それとも同じ意味で使用できますか?それらはどちらも多かれ少なかれ、問題の解決に続く論理的な一連のステップを説明しています。じゃない? SO同じことを話すことを意図しているのに、なぜ2つの単語を実際に使用するのですか?

または、同義語でない場合、それらを区別するものは何ですか? Wordの疑似コードとWordのアルゴリズムをどのようなコンテキストで使用するのですか?

17
Vamsi Emani

ウィキペディアのアルゴリズムの定義:

数学とコンピュータサイエンスでは、アルゴリズムは、関数を計算するための明確に定義された命令の有限リストとして表現される効果的な方法です。アルゴリズムは、計算、データ処理、および自動推論に使用されます。

アルゴリズムは、疑似コードなしで、純粋な数式から複雑なグラフまで、さまざまな方法で記述できます。

疑似コードは、構文の詳細に触れずにアルゴリズムを実装する方法を説明しています。

だから、いいえ、彼らは本当に同義ではありません。

37
Demian Brecht

algorithmは、コードの記述方法に関するアイデアです。 疑似コードは、その考えを伝えるために必要なテキストです。

8
DanC

「疑似コード」は「アルゴリズム」であり、「英語」は「ノックノックジョーク」です。

アルゴリズムは、疑似コードまたはactualコードで表現される可能性のあるものの正式な構造です。

ノックノックジョークは、英語やその他の言語で表現される可能性のあるものの正式な構造です。 (他の文化ではノックノックジョークを行っていますか?わかりません。)

6
Dan Ray

クイックソートアルゴリズムは1つしかありません。これは、プラトンの純粋なアイデアの世界に存在するようなものです。それについては、いくつもの異なる疑似コード記述が存在する可能性があります。疑似コードは、コンピューターコードのように見えるテキストとして定義し、経験豊富なプログラマーが実際のコンピューターコードに変換して、創造的な飛躍をする必要はないと思います。

ですから、私はこれらの用語を同じ意味で使用することはしません。

3
PeterAllenWebb

アルゴリズムは、コンピューターの問題を解決するために使用される体系的な論理アプローチです。一方、疑似コードは、後でプログラミング言語(プログラム)に翻訳される可能性のある単純な英語のステートメントです。

2
aloyce boniface

アルゴリズムはsemanticですが、疑似コードは問題の解決に関する通信のsyntaxです。つまり、アルゴリズムは問題を解決する実際の方法であり、疑似コードはその方法を表現する方法にすぎません。

アルゴリズムは、Cプログラミング言語、疑似コード、英語など、何らかの方法(構文)で表現した場合、同じ意味(セマンティック)を持ちます。

2
m3th0dman

疑似コードはアルゴリズムよりもコードに近いように見えますが、実際には、疑似コードは形式的ではなく、より高レベルの記述です。たとえば、チェスをするコンピューターを次のような疑似コードとして説明できます。

  • 場所に最初の駒を置く
  • ショーボード
  • ゲームが終わっていない間
    • 移動して掲示板を作る
    • ユーザーに移動を促す
    • ユーザーを動かす

はい、これは疑似コードです。これは良い出発点として役立ちますが、多くの詳細については説明しません。実装の問題やバリエーションは考慮されていませんが、最大の利点は、詳細をすべて解決しなくても、状況全体を概念化できることです。

次のようにレベルを1つ追加して、修正できます。

  • 場所に最初の駒を置く
  • ショーボード
  • ボードがチェックメイトでもドローでもないとき
    • ホワイトの法的動きのリストを作る
    • いくつかの基準に従って最良のものを選択する
    • その移動を行い、結果のボードを計算します
    • チェックメイトまたはドローが発生したかどうかを確認します
    • ディスプレイボード
    • 黒人の法的動きのリストを作る
    • 入力の合法的な移動をユーザーに要求する
    • その移動を行い、結果のボードを計算します
    • チェックメイトまたはドローが発生したかどうかを確認します
    • ディスプレイボード

次のように、「黒人の合法的な動きのリストを作成する」などの主要なステップごとに疑似コードを記述できます。

  • それぞれの黒い部分
    • 指定された場所のピースタイプの場合
      • 次の可能な場所のリストを作る

これで、疑似コードの力が実際に全体の状況を一度に示すことができ、詳細を少しずつ処理できることがわかります。弱点は、どのステップも明確な単純なステップではないということです。

アルゴリズムは通常、これらのステップの1つを取得し、さまざまなデータ構造をシンボリック言語で詳細に記述して、ステップの目標を効率的に満たすことができるようにします。

たとえば、get_legal_moves(board, color)はアルゴリズム設計に値します。

get_legal_moves(board, color):
    for i,j in board_dimensions
        if piece_at i,j is of color
            if piece type is KNIGHT
                add the following to the next moves list:
                    location i+1 j+2, i-1 j+2... etc
            if piece type is rook
                add locations:....

アルゴリズムが有用であるためには非常に正確でなければならないことがわかります。

これにより、いくつかのことが保証されます。何よりもまず、目標がエラーなしで達成されることです。手順は非常に詳細であり、機械化された方法で実行可能であり、手順を並べ替えてタスクを完了する効率(速度)を上げることができるほど小さいです。

1
Ravi Annaswamy

私が理解しているような擬似コードは、アルゴリズムと実装されたプログラムの間の仲介者です。アルゴリズムに基づいて疑似コードを作成できます。これには、実装する転送可能な手順が含まれています。

一方、アルゴリズムは全体的なロジックを意味します。問題を解決するための一連のステップ。ダイアグラムで表されている場合は、フローチャートと呼ばれます。

これを、クライアント側のビジネスオブジェクト開発者が要件に基づいて疑似コードを記述するビジネスソフトウェア開発における一般的な用語である疑似コードと呼ぶ人もいます。これは、実装するプログラマ/開発者に与えられます。

システムプログラミング、検索、並べ替えなどのプログラミング用語でより一般的に見られるアルゴリズム。基本的に、実装する複雑なロジックがある場合はどこでも。

1
Aditya P

私の経験から、疑似コードは、プロセス、モジュール、またはサブシステムに適用されるビジネスルールを表現する方法として、常に機能担当者(プロセスを所有する人々)によって記述されてきました。

アルゴリズムは、可能な限り特定のタスクを解くための論理ステートメントの決定的なセットです。

アルゴリズムは、数学的な用語で表されるものです。これには、分析、基本的な実装(疑似コードで表現されている場合でも)、複雑さの考慮事項(最良、平均、および最悪のケースの分析など)が含まれます。

疑似コードは、人間が読めるプログラムの表現です。それでもアルゴリズムの説明に使用できます。

0
sarat