アルゴリズムとは何ですか?


12

Algorithmとはどういう意味ですか?私がこの言葉を少し理解しているのは、それが特定の言語やデザインパターンに固有のものではなく、むしろ最も基本的な原則であるということです(したがって、この質問は私を愚かに見えると思います)。

私がそれを理解している「オプション」の1つは、それが何かを成し遂げる方法を意味するということです。それは、擬似コードのリストとして書くことができます。

もっと複雑なコードを書くとき、何をする必要があるのか​​、何を、どのようにそこに到達するのか(プログラミング言語ではない)を考え、それをコードで記述します。それについては良い方法ですか?それはアルゴリズムと関係がありますか?

(特定の問題/言語に関するものではなく、Stackoverflowではなく、ここの大多数の人々が「理由」を知っている、または少なくともここの回答がより詳細であると感じるため、むしろStackoverflowで質問したかったのです。それが違うところで、あそこに尋ねたらよかったです)


5
グーグル?ウィキ?google.com/search?q=algorithm
Maglob

1
@Apalala:これらの制限は適用されないと思います。
ジョシュK

2
@Apalala:有限ではなく、知られています
ジョシュK

2
@ジョナサン:「私が調べなければならない言葉」?どの言葉?して特定。このサイトは魔法ではありません。私たちはあなたを知りません。何を読んだかわかりません。何があなたを混乱させたのかわかりません。具体的にご記入ください。
-S.Lott

1
@Apalala:「Finite」は「有界」を意味し、それ以上のものはありません。アルゴリズムはいつか停止することが保証されています。有限性が終了することを予測する何らかの方法があると、有限性を証明するのがはるかに簡単になるため、アルゴリズムは予測可能になる傾向がありますが、アルゴリズムの通常の定義には予測可能性はありません。
デビッド

回答:


19

アルゴリズムは、明確に定義された終了状態で終了する関数を計算(またはプロシージャを実行)するための明確に定義された命令の有限シーケンスです。


1
+1。ウィキペディアのエントリの3つの基準は、「最終的、明確、効果的」です。ここにも3つすべてがあります。
S.Lott

@Jörgが引用したビデオを見るように設定していますが、私の現在の視点は、ステップだけが有限でなければならないということです。リソース(時間を含む)が制限されていない場合、プロシージャは、アルゴリズムではなく、何でも呼び出しまたはラベル付けできます
アパララ

@Apalala-私は教科書に戻ってきましたが、その制限はどこにも見当たりません。これは、ためている可能性があります特定のデータ・セットまたは入力アルゴリズムが(決して終わることのないループで動けなくなることがあり、ルートを見つけるためのニュートン-ラプソン法のようなアルゴリズム)を終了しないかもしれないが、それはアルゴリズムではないアルゴリズムを作成しません。
ジョンボード

@John Oscillationsは、Newton-Raphsonで定期的に検出できます。
アパララ

1
@Apalala:それはアルゴリズムの定義というよりもプログラムの定義のように聞こえます。離散ステップのこの考え方は、チューリングマシン、レジスタマシン、ランダムアクセスマシン、そしてもちろん実際の物理コンピューター、ほぼすべてのプログラミング言語、さらに暗黙的ではありますが、ラムダ計算にも存在します。しかし、それはアルゴリズムに固有ではない arbitrary意的な制限です。たとえば、アナログアルゴリズムには個別のステップがなく(実際には、アナログアルゴリズムの定義)、アナログコンピューターで実際に実装できます。
ヨルグWミットタグ

15

これは実際には非常に興味深い質問であり、実際には未解決の研究質問です。

Algorithm Theoryの巨人の1人であるYuri Gurevichは、現在マイクロソフトのコミュニティWebサイトChannel9でビデオ講義シリーズを提供しています。

ご覧のとおり、あなたの質問は、実際には2番目の講義のタイトルです。ただし、これら3つすべてを視聴することを強くお勧めします。

特に最初のものには、ここにある他のほとんどの答えで与えられた定義のほとんどすべてを無効にするアルゴリズムの例がいくつか含まれています。


2
リンクをありがとう。アルゴリズムの定義の一部として、最初のビデオに付随するテキストで、「最終的な終了状態で終了する」ということに気付くでしょう。終了は、アルゴリズムの定義の重要な部分です。それが、オペレーティングシステムと非終端サーバーがアルゴリズムではない理由です。
LIProf

4

アルゴリズムは良い調理法のようなものです。いくつかの入力、いくつかの明確に定義された中間ステップがあり、最終結果が得られます。

プログラミングに適用される、特定の問題を解決するために必要な手順の明確な説明です。選択したプログラミング言語で書き留めることができるものはすべて、アルゴリズムと見なすことができますが、通常、この用語は、並べ替えや検索などの一般的な論理タスクまたは数学タスクにのみ使用されます。


最終結果を必ずしももたらすとは限らないアルゴリズムがたくさんあります。たとえば、オペレーティングシステムまたはWebサーバーは、最終結果を出すことが通常バグと見なされるアルゴリズムです。
ヨルグWミットタグ

@JörgWMittagが、OSまたはWebサーバーは「アルゴリズム」ですか?私は彼らはそうではないと思う-彼らはアルゴリズムを使用してドメインのサブ問題を解決するかもしれない-そして、すべての場合、彼らは間違いなく最終結果を必要とする-しかし、彼らはまた、アルゴリズムではない部分があり、全体としてはそうではないtアルゴリズム。(あなたが別のコメントで言ったようです-OSとWebサーバーはプログラムですが、必ずしもアルゴリズムではありません)。
Andres F.

2

アルゴリズムは、問題解決に使用される一連のルールまたはプロセス(計算)です。基本的に、問題があり、解決策が必要です。この解決策のプロセスはアルゴリズムです。アルゴリズムには、ソリューションに到達するためのルール/プロセスの有限セットがあります。

Edsger W. Dijkstraのような場合は、アルゴリズムを紙に書き、アルゴリズムに満足するまでアルゴリズムを紙の上で試したり洗練したりします。そうでない場合(特にドキュメントを作成する場合)、フローチャートを使用して、アルゴリズム/プロセスのフローを図式的に表します。これにより、他の人がフローチャートを批判し、必要に応じて改善することができます(必要なプログラミング言語を心配することなく)。

それがあなたの質問に答えるかどうかはわかりません。


「順序付けされていない」という意味のセットという言葉は好きではありません。私は「シーケンス」またはイベントタプルを数学エリアに滞在することを好むだろう
ベンジャミン

@Ubiquité、Setは必ずしも「順序付けられていない」という意味ではありません。必要な順序でセットを分類できます(ランダムな順序など)。それでも、人々が「セット」という言葉を解釈するため、それは下票を必要としません。さらに、アルゴリズムの一部でもあるセットのグループ化である複合セットを使用できます。したがって、問題に対するアルゴリズムの解決策として適切に使用される限り、「セット」は何でもかまいません。
ブハケシンディ

私はダウン投票しませんでした!
ベンジャミン

申し訳ありませんが、私はあなたに下票を責めるつもりはありませんでした。downvoterは、downvoteの理由を明示的に提供する必要があります。
ブハケシンディ

1

アルゴリズム:1)明確であり、2)最初から開始する操作を実行すると有限数の操作後に結果が生成されるように効果的に計算可能な、整然とした操作のセット。


反例:オペレーティングシステム。これは、結果を生成しませんすべてで通常のバグと考えられていること、実際には、。
ヨルグWミットタグ

@Jörgは、OSが多くの結果を生成し、それらをまとめて、システムサービスをアプリケーションに提供する全体的な結果を生成します。
ThomasMcLeod

@JörgWMittag他のコメントで述べたように、あなたの観察の結論は、オペレーティングシステムは実際にはアルゴリズムではないということです;)
Andres F.

1

アルゴリズムこれは、非常に簡単で効率的な方法で問題を解決するために使用する連続ステップ(これらのステップは計算、データ処理、および推論タスク)の組み合わせです。

有限の空間と時間内で表現できるように最も効率的に設計されています。任意のプログラミング言語で実装できます。

アルゴリズムのプロパティ:アルゴリズムの主なプロパティは次のとおりです。

アルゴリズムには一意の名前が必要です。入力と出力のセットが明示的に定義されている必要があります。アルゴリズムは、明確な操作で順番に並んでいる必要があります。何らかのエンドポイントが必要です。つまり、有限時間で停止します。 アルゴリズムの設計と分析について学ぶには、ここをクリックしてください


0

この用語を使用して、特定の問題を解決する式を説明します。数式は必ずしも数学で記述したり、メソッドと1対1の関係にする必要はありません。学校では、アルゴリズムとデータ構造は密接に関連しており、数式として記述したり、証明を使用して証明することができます。


0

アルゴリズムはコンピュータープログラムの抽象化であり、有限数のステップで明確に定義されたタスクを達成するための一連の命令で構成されますが、ステップ数の限界は非常に大きく、個々のステップは複雑になる可能性があります(有限)独自のタスク。全体的に既知の非アルゴリズムである(正しい)プログラムがありますが、それらはすべて、何らかのパターンでアルゴリズムの断片を繰り返すことによって機能します。(さらに興味深いのは、終了ステータスが不明なプログラムですが、ほとんどのプログラマーは実際にそのようなことを意図的に処理していません。私は知らないことを知っています!)


0

IMO誰もかなり知らない:)私は用語がに、数学的な計算機能にのみ適用される見てきたすべての入力を受け取り、出力を生成機能、およびに何も入力を受け取り、それに対する操作のいくつかの種類を実行します。

次のいずれか/すべてをアルゴリズムとみなしますか?

  1. 20年間のローンの金利を計算する関数
  2. ローン申請書にすべての情報が入力されているかどうかを確認するビジネスロジック
  3. finderCustomerオブジェクトのデータベースを照会機能
  4. データ入力をクリーンアップおよびフォーマットする「ヘルパー」関数
  5. XMLファイルを解析し、データをビジネスオブジェクトにマップする関数
  6. 入力を受け取り、テキストファイルに書き込むクラス

0

アルゴリズムは、本質的に抽象的であるタスクの計算または実行のためのアイデア、メソッド、テクニック、「スマート」ですが、実世界のコンピューターで実行されるため、できるだけ少ないリソースを使用することを目指しています、これはコンピューターの世界では時間と記憶です。


0

アルゴリズムは、有限時間で結果を生成する一連の明確に定義されたステップです。

明確に定義されたステップ:正確に定義された、実行または計算できることです。ステップを読むだけで、あなたがしなければならないこととその方法を知っています。具体的には、既知のプログラミング言語で作成し、プログラムフラグメントがステップと正確に一致するようにします。

シーケンス:ステップは指定された順序で実行されます。ステップは、データに応じて複数回実行される場合があり(ループ)、データに応じてまったく実行されない場合があります(ifステートメント)。並列アルゴリズムはステップに部分的な順序のみを課すため、ここでは単純化しすぎています。シーケンスよりも部分的に順序付けられたセットとして説明する方が正しいでしょうが、私は言葉を少しシンプルにしたかったのです。また、部分的に順序付けられたセットを完全な順序で埋め込むことも簡単にできます。

結果:終了状態または値。事前に予測可能である必要はありませんが、何らかの条件を満たす特定の目的である必要があります。つまり、オペレーティングシステムはアルゴリズムではありませんが、それらの多くを使用します。

有限:アルゴリズムは、少なくとも十分な時間実行できるマシン上で、いつか停止することが保証されています。予測可能な時間内に停止することは必ずしも保証されていません。また、既存のマシンで太陽が膨張して赤くなる前に停止することは保証されていません。また、これはオペレーティングシステムがアルゴリズムではなく、理想的には永久に実行されることを意味します。「手順」という言葉は、いつか停止することが確実な場合にアルゴリズムとなる何かを説明するのに使用されるのを見てきました。(未知の時間で停止するアルゴリズムを使用することは可能です。例えば、Goldbachの予想が非構成的証明で数学的に間違っていることが証明されたと仮定します。 。偶数を単純にテストするアルゴリズムは、最終的に終了しますが、

アルゴリズムは意図的に抽象化されたものであるため、「宇宙の熱死の前にこれを実行することは物理的に可能ですか?」などの質問は考慮しません。彼らは答えるのが難しいだろう。コンピューターの操作に関連する場合、プログラミング言語で簡単に実装できます。


-1

一般的な定義をしなければならない場合、アルゴリズムは、明白な/総当たりのソリューションよりも複雑で、最終的には効率的であるコンピューティング問題を解決するための公式だと思います。

また、アルゴリズムは特定のソースコードではないことに注意することが重要です。それは計算そのものです。とりわけ、これは、チューリング完全言語は、他のチューリング完全言語が実装できるアルゴリズムを実装できることを意味します。


私はこの答えがとても気に入ったので、もう少し進めて言うことができると思います(元の質問とは関係ありませんが):アルゴリズムはブルートフォース/ツリー検索ソリューションの最適化です。正式に証明できるかどうか疑問に思っていました。
mojuba

-1「アルゴリズム」は、明確に定義された数学用語です。
アパララ

1
@Apalalaでは、明確にするために、またはその本質をよりよく理解するために、それを再定義することを妨げるものは何ですか?「命令セット」としてのアルゴリズムは、私にはほとんど何も言いません。
-mojuba

1
@mojuba用語が再定義されるかどうかは本当に気にしませんが、従来の定義は少なくとも問題にアプローチする方法の間で区別されていたので有用だったと思います:アルゴリズムは有限のリソースを使用して問題を解決するためのレシピです。その定義を変更すると、予測可能な結果は、同じことを意味する別の単語を考え出す必要があるということです。くそー!計算可能性と複雑性について過去1世紀に得たすべての知識は、アルゴリズムの適切な定義なしに消えます
アパララ

1
ブルートフォース検索はアルゴリズムです。それは一般的にきれいなアルゴリズムではなく、一般的に書き上げる価値もありません。ブルートフォースを除外することに実際の有用性は見当たらず、多くの場合、「ブルートフォースより優れている」が実際に何を意味するのかは明確ではありません。
デビッドソーンリー
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.