プログラムにはアルゴリズムが含まれていると言われていますが、その定義を参照すると、アルゴリズムは次のように記述された一連の命令です。指定されたタスクを実行し、コンピュータプログラムは、コンピュータで(いくつかの)タスクを実行するための一連の命令でもあります。
では、プログラムがアルゴリズムと異なる点は何ですか?それもアルゴリズムの一種ですか?
実際、私はアルゴリズムとコンピュータープログラムの正式な定義を探して、それらを互いに区別したり、プログラム内のアルゴリズムを識別したりできるようにしています。
更新:ウィキペディアで非公式の定義(少なくとも構文的に)によって、どのプログラムもアルゴリズムであることに気づきました。
非公式の定義は、「一連の操作を正確に定義する一連のルール」である可能性があります。これには、すべてのコンピュータープログラムが含まれます、数値計算を実行しないプログラムを含みます。一般に、プログラムは、最終的に停止した場合のアルゴリズムにすぎません。
回答
前回この質問が出たときと同じ回答をします。
まず、執筆時点では「アルゴリズム」の適切な正式な定義がないことを理解してください。ここでのキーワードは「正式」です。
ただし、賢い人々がそれに取り組んでいます。
私たちが知っていることは、「アルゴリズム」が何であれ、それは「数学関数」と「コンピュータプログラム」の間のどこかにあるということです。
数学関数は入力から出力へのマッピングの正式な概念。たとえば、「sort」は、注文可能なアイテムのシーケンスと同じタイプの注文可能なアイテムのシーケンスの間のマッピングであり、各シーケンスをその順序付けられたシーケンスにマッピングします。さまざまなアルゴリズム(マージソート、ヒープソートなど)を使用して実装できます。各アルゴリズムは、次のようになります。異なるプログラムを使用して実装されます(同じプログラミング言語が与えられた場合でも)。
つまり、「アルゴリズム」とは何かについての最良のハンドルは、プログラムのある種の同値類であり、2つプログラムが「本質的に同じこと」を行う場合、プログラムは同等です。同じアルゴリズムを実装する2つのプログラムは同じ関数を計算する必要がありますが、その逆は当てはまりません。
同様に、アルゴリズム間には等価クラスがあり、2つのアルゴリズムが同じ数学関数を計算する場合は等価です。 。
このすべての難しい部分は、「本質的に同じこと」が意味することを捉えようとすることです。
含めるべき明らかなことがいくつかあります。たとえば、2つのプログラムは、変数の名前変更のみが異なる場合、基本的に同じです。プログラミング言語のほとんどのモデルには「同等性」のネイティブ概念があるため(たとえば、ラムダ計算でのベータ削減とイータ変換)、それらも投入する必要があります。
どの同等関係を選択しても、これにより構造が得られます。 。アルゴリズムは、プログラムの商圏であるという事実により、カテゴリを形成します。いくつかの興味深い同値関係は、興味深いカテゴリー構造を生み出すことが知られています。たとえば、原始再帰アルゴリズムのカテゴリは、カテゴリのカテゴリのユニバーサルオブジェクトです。そのような興味深い構造を見るときはいつでも、この質問の行がおそらく役立つことを知っています。
コメント
- 正確な回答をありがとうございます。ちょうど別の質問。プログラムを検討すると、それが何をするかに関係なく、プログラムはいくつかの入力を取得し、いくつかの指示に従い、実行時にいくつかの結果を出します。 ‘(私たちが呼ぶように)問題を解決しない場合もありますが、それでもマッピングです。それらは既知のアルゴリズムである可能性がありますか?
- ‘正しく読んでいる場合は、’ “アルゴリズム”の正式な定義に、便利な”。 ‘を形式化することが不可能であるという理由だけで、” no “と言います。概念。
- ごめんなさい!私の英語が苦手な場合は、” no “と言いますか? ‘プログラムの有用性を形式化することは不可能であり、定義上、どのプログラムもアルゴリズムであると認めますか?または、アルゴリズムのほかに有用性を考慮することが’必要だと言いますか?
- 私は’ “アルゴリズムの正式な定義”
便利な”は’できるため、は便利である必要があります。正式に定義する必要はありません。
答え
結局のところ、違いは視点の1つです。プログラムはプログラムです。ある言語、おそらくプログラミング言語またはマシンレベルの命令での一連のステートメント。アルゴリズムは通常、機械命令やプログラミング言語ステートメントよりも高いレベルで記述されますが、レベルの高さはかなり柔軟です。たとえば、状況によっては、「配列を並べ替えてから$ k $番目の要素を確認する」は、配列内で$ k $番目に大きいオブジェクトを見つけるためのアルゴリズムの完全に適切な説明です。他の状況では、並べ替えの実行方法についてさらに詳細を指定することをお勧めします。
あなたが言うように、アルゴリズムは「計算やその他の問題で従うべきプロセスまたは一連のルール」のようなものです-特にコンピューターによる操作の解決。」つまり、文字通り、すべてのプログラムは アルゴリズムです。ただし、通常、私たちはプログラムの実装アルゴリズムについて話します。通常、アルゴリズムを説明するときは、有能なプログラマーが選択した言語でアルゴリズムを実装できると想定して、実装方法の低レベルの詳細を避けます。
コメント
- アルゴリズムの正確さは数学の概念、ラムダ計算、またはチューリングマシンに関連していると思いますが、それでも’それが何であるかわかりません抽象化言語?数学または多くのあいまいなステートメントを含む自然言語
- @AhmadAlgorithmは非公式の概念です。正式な定義はありません。ある意味で、’は数学的な証明のようなものであり、正式な証明システムの正式な証明とは異なります。非公式の証明は、選択した(十分に強力な)正式な証明システムの正式な証明に”肉付け”できると考えています。アルゴリズムは、任意の(チューリング完全)プログラミング言語で完全に実装できます。
回答
チューリングのアルゴリズム-完全な考え方は通常、入力と出力によって指定されます。実際のプログラムはさらに多くのことを行います。
- ユーザーとの通信、
- 他のマシンとの通信、
- 環境への反応、
- 終了しないそれでも便利です
など。これらのことは通常、アルゴリズムや計算理論では考慮されませんが、ほとんどのプログラムに不可欠です。
コメント
- これは非常に良い点です。しかし、通常、入力を出力にマップする手段として指定される”のようなものを意味しますか”?入力と出力を指定するだけでは’十分ではありません。たとえば、マージソートとクイックソートはどの入力からも同じ出力を生成しますが、’は考慮されません。同じアルゴリズムである必要があります。
- @DavidRicherby私はPLの意味での仕様を考えていました。 ‘他に何も指定しないため、アルゴリズムは他に何もしない可能性があります。もちろん、具体的なアルゴリズムを説明するには、仕様以上のものを提供する必要があります。
- 良い点ですが、最終的にプログラムがアルゴリズムであると認める場合は、’あなたが取り組んだこれらの問題がアルゴリズムに関してどのように測定されるかを知りません。たぶんAIトピック?!
- 誰がそれを認めるのか、そしてその理由は?そして、ここで測定するとはどういう意味ですか? (そして私は確かに’ここでAIの角度を見ていません。)
- @Raphael私はそれを認めるかもしれません(構文を見ると、すべてのプログラムは似ていますが、それらは一連の命令、または入力から出力へのマッピングです)、私は’プログラムの他の機能(あなたが対処したもの)をその定義からどのように抽出できるかわかりません。たとえば、クイックソートとMATLABまたはWindows MediaPlayerの違い!!
回答
-
アルゴリズムは、特定の問題を解決するための体系的なアプローチです。
-
プログラムは、コンピューターが従うべき一連の指示です。
したがって、プログラムは問題を解決する必要さえありません。「私たちは皆、解決したよりも多くの問題を引き起こしたいくつかのプログラムについて考えることができると確信しています」。プログラムは、多くのアルゴリズムの実装にすることも、多くのプログラムにパッチを適用してアルゴリズムを実装することもできます。プログラムにアルゴリズムを含めることもできません。たとえば、単に終了する空のプログラム、またはおそらくHello Worldでさえ、アルゴリズムのないプログラムと見なすことができます。
アルゴリズムは特定の問題を解決するため、特定の概念全体に焦点を当てています。したがって、アルゴリズムは、関連情報の1つのセットを派生情報の別のセットに処理するための抽象的なステップを提供します。プログラムは、その構成要素が概念的に関連している必要はまったくありません。たとえば、プログラムはイースターエッグを持つことができますが、アルゴリズムと適切に呼ばれるものはそうではありません。プログラムにはウイルスやトロイの木馬が潜んでいる可能性がありますが、アルゴリズムには潜んでいません。アルゴリズムがこれに最も近いのは、暗号化アルゴリズムのバックドアのようなもので、計画された欠陥はアルゴリズムによって確立された情報関係の一部です。
最後に、プログラムはそのままです。コンピュータプログラムの略で、トートロジー的にコンピュータを必要とします。アルゴリズムはそうではありません。シャツ、ズボン、靴下を洗濯物から整理してから片付ける場合、これはアルゴリズムです。これは、関連する入力と出力を扱い、フローチャートで説明でき、効率の観点から計算可能な結果をもたらします(たとえば、一致する靴下を見つけるために比較する必要のある衣類の数)。
回答
アルゴリズムは概念またはアイデアです。これは、問題を解決するための正式なアプローチです。アルゴリズムは、さまざまなプログラミング言語で表現または実装できます(通常、ほとんどすべての言語で任意のアルゴリズムを実装できます)。いくつかの例については、Wikipediaのソートアルゴリズムを読む必要があります。
コンピュータープログラムは、特定のプログラミング言語での特定の命令シーケンスです。 。プログラムには、多くのアルゴリズムの実装が含まれている場合があります。 Excelはプログラムですが、その並べ替え機能はアルゴリズムの現れです。
回答
アルゴリズムは、特定の問題または問題のクラスを解決するために実行される、自己完結型の段階的な操作のセットです。
コンピュータプログラムは、一連の特定のプログラミング言語の規則に準拠し、コンピューターで特定のタスクを実行するために作成された命令。
アルゴリズムは一般的であり、に変換する必要があります。特定のプログラミング言語(実装済み)。
コメント
- しかし、問題の要点は、プログラム(そのソースコードまたはコンパイルされたバイナリのいずれか)です。 )は “特定の問題または問題のクラスを解決するために実行される自己完結型の段階的な操作のセットです。”
- しかし、それは’ではありません。プログラムはthではありません。これらの操作ですが、それらの実装:特定のコンテキストでそれらを実行するもの。例えば。 Unix
sort
ユーティリティは並べ替えアルゴリズムではなく、並べ替えアルゴリズムを使用します。
回答
アルゴリズムは、特定の問題に対する私たちのアイデアまたは解決策を段階的なアプローチで表現しています。これは、コンピュータシステムではなく、問題解決と人間が理解できるアプローチにすぎません。
プログラムは、コンピュータシステムによって問題を解決するために実装されたステップバイステップの命令です。それは、プログラマだけでなくコンピュータによっても理解可能でなければなりません。
コメント
- Computer Science StackExchangeへようこそ。まだ読んでいない cs.stackexchange.com/tour.if をお読みください。
回答
ここでの他の答えは、重要な点を見逃していると思います。私が教えられた「アルゴリズム」の定義には、手順がすべての入力で停止するという要件が含まれていました。当然、「プログラム」は「アルゴリズム」よりも幅広いクラスのプロシージャになります。一部のプログラムはすべての入力で停止し、他のプログラムは停止しないためです。
コメント
- これは普遍的ではありません。私が教えられた定義には、’その要件は含まれていませんでした。
回答
アルゴリズムとプログラムの間に線を引く方法はいくつかあります。
意味のある目的
プログラムは目的を持って作成されており、ゴール。アルゴリズムは、その目標を達成するためのツールと見なすことができます。
例:ドライバーはネジの状態を変更するアルゴリズムですが、ドライバー自体はそれを行う目的を持っていません。目的は、棚を立てるようなプログラムを保持するドライバーの頭にあります。
ビジネスロジック
この点は、プログラムの目的と強く関連しています。プログラムには目的があるため、特定の日付、測定値、テクノロジー、名前など、必然的に実世界のビットが含まれます。
一方、アルゴリズムにはビジネスロジックも実世界のビットも含まれず、操作する代わりに特定の値は変数に作用します。
例:この意味で、抽象的で変数を操作するf(x) = x^2
のような数学関数を、正確な値(少なくとも1つは参照用)を含む調理レシピと比較できます。
結果
この点は、プログラムのビジネスロジックに強く関係しています。エージェント(Webブラウザユーザーなど)は、アルゴリズムの結果ではなく、プログラムの結果を消費します。
例:料理レシピの消費者は、ホイップクリームやオーブンの加熱の結果ではなく、ケーキを消費します。
コメント
- おそらくそれを言う方がよいでしょうドライバーには’ネジを回す意図がありませんか?日常の英語では、ドライバーはネジを回す目的を持っていると言っても過言ではありません。ネジを回すのは設計どおりのことです。
- また、I ‘ “ビジネスロジック”の意味がわかりません(多くのプログラムは何の関係もありませんまたは、アルゴリズム”にはビジネスロジックも実世界のビットも含まれていません”。たとえば、頂点やエッジではなく、町や道路の観点から最短経路アルゴリズムを完全に表現できます。 ‘アルゴリズムに、”実世界のビットが含まれていません” ?
- @DavidRicherby、そうです、私の言い回しはあいまいです。私が意味したのは、意味のある目的です。ネジを回してネジを回すのは、使用されない配列を並べ替えるのと同じように無意味です。ビジネスロジックとは、ユーティリティロジックとテクノロジースタックボイラープレートを除くすべてのプログラムロジックを意味します。つまり、プログラムの目的を実際に実装するすべてのロジックです。つまり、ケーキを焼くビジネスロジックは、材料を混ぜて焼くことであり、混ぜたり焼いたりすることを学ぶことは含まれません(これは、この場合はユーティリティロジックを再利用します。
- @DavidRicherby、実世界のビットに関しては、実現を意味します。つまり、アルゴリズムとは異なるプログラムが何らかの方法で通信する必要があります。物理的な世界。一方、アルゴリズムは純粋に数学的な概念である可能性があります。
回答
I他の答えが主導権を握るのに十分であると確信していますが、ここでは、アルゴリズムとプログラムの違いをどのように見ているかを説明します
-
アルゴリズムは、問題を解決するために何らかの手順で実行する必要のある手順(マシンに依存しない)で構成されています。
-
プログラムは、特定のタイプのマシンがアルゴリズムを実行するための命令セットです。
たとえば。
次のステップがあるアルゴリズムがあるとします。他のステップを実行する前に特定の場所に到達する現在、この到達ステップがどのように実行されるかは正確に定義されていません。歩くか、走るか、バスに乗るかを選択できますが、それはどのように実装するかによって異なります。 (これはあなたのプログラムですram)。
アルゴリズムはプログラムの抽象化であると言えます。つまり、正確な詳細が欠落していますが、何かを行うための計画が立てられています。 。