避けられないアルゴリズムを完全に理解するにはどうすればよいでしょうか?

避けられないアルゴリズムを完全に理解するにはどうすればよいでしょうか?

検索エンジン(Google Chrome、Mozilla Firefox など)を使用するとき、バックグラウンドでは何が起こりますか? Alexa、Google アシスタント、Siri などの仮想アシスタントに質問するとき、バックグラウンドでは何が起こっているのでしょうか?彼らはどうやって答えを知るのでしょうか?なぜ正解が表示されるのでしょうか?これらすべてはアルゴリズムのおかげです。

携帯電話、コンピューター、ラップトップ、電卓を使用するたびに、アルゴリズムを使用しています。

では、アルゴリズムとは何でしょうか?

2 つの数値を掛け合わせるなどの計算を (電子機器を使わずに) 行いたい場合は、紙の上で掛け算を行う必要があります。正しい答えを得るには、特定のルールに従います。時間のかからない方法で計算を行うこともできます。それがアルゴリズムです。

アルゴリズムは、特定のタスクを実行するために設計された一連の命令です。

達成しようとしていることに応じて、いくつかのアルゴリズムは単純ですが、他のアルゴリズムは非常に複雑です。

アルゴリズムの歴史

歴史を知ることは常に良いことです。なぜなら、それは主題をより深く理解し、その知識をいつ使うべきかを知るのに役立つからです。

「アルゴリズム」という言葉は、9 世紀のペルシャの数学者ムハンマド・イブン・ムーサ・アル・フワーリズミー (代数学の父) に由来し、ラテン語では Algoritmi と表記されます。もともとこのアルゴリズムは Algorismus と呼ばれていました。 15 世紀後半には、アルゴリズム (ギリシャ語の「Arithmetic」に由来) と改名されました。現代英語の「アルゴリズム」という言葉は 19 世紀に導入されました。

アルゴリズムは古代中国の文献では「書」と呼ばれ、『周壁算経』と『九章算書』に初めて登場しました。特に、「数学の芸術に関する 9 つの章」では、四則演算、最大公約数、最小公倍数、平方根、立方根、素数を見つけるためのエラトステネスのふるい、および線形方程式の解法のアルゴリズムが提供されています。三国時代の劉徽は円周率を計算するアルゴリズム、すなわち劉徽の円分割法を提案しました。

[[330338]]


エイダ・ラブレスは、1842 年に初めて計算エンジンのアルゴリズムを書いたことから、世界初のコンピュータ プログラマーと呼ばれることがよくあります。彼女は、バベッジ解析エンジン(自動計算を行う機械式コンピュータ)用にベルヌーイの微分方程式を解くアルゴリズムを作成しました(バベッジ解析エンジンは、コンピュータの父であるチャールズ・バベッジによって開発されました)。

[[330339]]


現代的な形で表現された最初のアルゴリズムは、1936 年にアラン チューリングのチューリング マシンで初めて提案されました。

[[330340]]


アルゴリズムをどのように表現するのでしょうか?

アルゴリズムを表現する方法は、自然言語、疑似コード、フローチャート、プログラミング言語、動的チャート、制御テーブルなど、数多くあります。

自然言語を使用してアルゴリズムを表現することは十分に明確ではないため、複雑なアルゴリズムや技術的なアルゴリズムにはほとんど使用されません。疑似コード、フローチャート、ドラコン図、制御テーブルは、自然言語に比べて多くの曖昧さを回避するため、アルゴリズムを表現する構造化された方法です。プログラミング言語は、コンピューターが実行できる形式でアルゴリズムを表現するように設計されています。

コンピュータ システムでは、アルゴリズムはソフトウェア開発者が任意のプログラミング言語で記述したロジックです。ただし、アルゴリズムを設計する際には、いくつかのルールに留意する必要があります。これらには以下が含まれます:

  • 入力: アルゴリズムには少なくとも 1 つ以上の入力値が必要です。入力が与えられない場合、アルゴリズムはどのような出力を生成しますか?
  • 出力: アルゴリズムは少なくとも 1 つの出力を生成する必要があります。結果が出なければ、アルゴリズムを設計しても意味がありません。
  • 効率: アルゴリズムは、コンピューティング リソースとメモリ リソースの効率的な使用を保証する必要があります。生成される出力は正確かつ高速である必要があります。
  • シンプルさ: アルゴリズムは過度に複雑であってはなりません。
  • スケーラビリティ: アルゴリズムは、コアロジックを変更せずに拡張できる必要があります。
  • 有限性: アルゴリズムは有限数のステップの後に終了する必要があります。入力が間違っているときにアルゴリズムが最初のステップで終了した場合、アルゴリズムの何が間違っているのかは決してわかりません。さらに、アルゴリズムは無限ループに陥ることはありません。
  • プログラミング言語に依存しない: アルゴリズムは言語に依存しない、つまり、どの言語でも実装できる単純な命令である必要がありますが、出力は言語に関係なく同じである必要があります。

次に、2 つの数値を加算する(上記の要件を満たす)簡単なアルゴリズムを構築しましょう。

  • ステップ 1: 開始します。
  • ステップ 2: 変数 num1、num2、sum を宣言します。
  • ステップ3: num1とnum2の値を読み取ります。
  • ステップ 4: num1 と num2 を加算し、その値を sum に割り当てます。
  • ステップ 5: 表示して;
  • ステップ6: 停止します。

次に、このアルゴリズムをテストするために、プログラミング言語を使用して実装します。私は Java を使用することを選択しましたが、他の言語を選択することもできます。

  1. 公共 クラス追加
  2.  
  3. {
  4.  
  5. 公共 静的  void main(String[] args) {
  6.  
  7. int num1、num2、合計;
  8.  
  9. スキャナー sc = new Scanner(System.in);
  10.  
  11. System.out.println(“最初の番号を入力してください: “);
  12.  
  13. num1 = sc.nextInt;
  14.  
  15. System.out.println("2番目の数字を入力してください: ");
  16.  
  17. num2 = sc.nextInt;
  18.  
  19. sc.閉じる;
  20.  
  21. 合計 = num1 + num2;
  22.  
  23. System.out.println(“2つの数値の合計: “+sum);
  24.  
  25. }
  26.  
  27. }

出力は次のようになります。

当社のアルゴリズムは適切に機能し、上記の要件を満たしています。

アルゴリズムは効率的でなければなりません。アルゴリズムの効率は時間と空間の両方に依存します。優れたアルゴリズムは、時間とスペースをあまり必要としませんが、常に両方に対応できるとは限りません。時間が短縮されると、スペースが増加する可能性があり、その逆も同様です。したがって、妥協する必要があります。アルゴリズムの空間複雑度は、アルゴリズムの実行時に占有または必要とされる合計空間を表します。時間の複雑さは、アルゴリズムがタスクを完了するのに必要な操作の数を指します。最も効率的なアルゴリズムは、最小の操作数でタスクを実行するアルゴリズムです。さらに、アルゴリズムにかかる時間はコンピューターの計算速度にも依存しますが、アルゴリズムの効率を考える際には、通常、これらの外部要因は考慮されません。アルゴリズムの効率を測定する 1 つの方法は、さまざまな入力に対して答えを見つけるのに必要な操作の数を測定することです。


アルゴリズムの種類

  • 再帰アルゴリズム: 問題を類似のサブ問題に繰り返し分割して解決します。
  • 分割統治アルゴリズム: 複雑な問題を 2 つ以上の同一または類似のサブ問題に分割し、最後のサブ問題が単純かつ直接的に解決されるまで続けます。元の問題の解決策は、サブ問題の解決策の組み合わせになります。
  • 動的プログラミング アルゴリズム (動的最適化アルゴリズムとも呼ばれます): 過去の結果を記憶して将来使用します。分割統治アルゴリズムと同様に、このアルゴリズムは複雑な問題を比較的単純なサブ問題に分解し、その解決策を保存して、次回同じサブ問題の解決策が必要になったときに再計算せずに直接使用できるようにします。
  • 貪欲アルゴリズム: 各ステップで現在の状態に基づいて最良または最適な (つまり最も好ましい) オプションを選択し、最良または最適な結果を得ることを期待するアルゴリズム。このアルゴリズムでは、最終的に最適なソリューションが得られることを保証するものではありません。
  • ブルートフォースアルゴリズム: シンプルでわかりやすく、満足のいく解決策が見つかるまであらゆる可能性を試します。
  • バックトラッキング アルゴリズム: 問題を段階的に解決します。いずれかのステップの解決策が失敗した場合は、1 つまたは複数のステップを戻して、再度解決策を探し始めます。


今日、アルゴリズムはデータサイエンス、機械学習、農業、科学、輸送など、ほぼすべての分野で使用されています。各アプリケーション間の最大の違いはアルゴリズムです (Google Chrome と Mozilla Firefox、Uber と Ola)。たとえば、Google Chrome と Mozilla Firefox はどちらも検索エンジン アプリケーションです。どちらも同じ結果を提供しますが、異なるソート アルゴリズムを使用しているため、結果の順序が異なります。 Google のランキング アルゴリズムは Firefox のものと異なります。

アルゴリズムはどこにでもあり、これからも普及し続け、私たちの生活を楽にしてくれますが、考慮すべき問題がいくつかあります。

  • データと予測モデルが世界を支配すると、私たちは人間性と判断力を失うことになります。
  • よりスマートで効率的なアルゴリズムが徐々に多くの人間の活動に取って代わるにつれて、失業者数は増加するでしょう。

21 世紀において、アルゴリズムは魔法のようなものです。アルゴリズムの背後にある原理やネットワークの作成方法などを説明することはできますが、これらのアルゴリズムが特定の出力を生成する理由を機械的に説明することはできません。そしてこれはほんの始まりに過ぎません。

<<:  MITの新しい「脳チップ」が利用可能になりました。これは数万の人工脳シナプスで構成されており、超複雑な計算を実行できます。

>>:  10億のデータから数字を素早く見つける方法 | 定番アルゴリズムBitMapの詳しい説明

ブログ    

推薦する

今後10年間でAIはどのように発展するでしょうか? iFLYTEKの劉清鋒氏はこう語った。

[[379731]] iFLYTEKは、流行病によって大きな影響を受けているにもかかわらず、人工知...

...

...

...

栄創同志、競争は発展を促進する。第1回「AIIAカップ」人工知能ツアー説明会が北京で開催

2月28日、中国人工知能産業発展連盟「AIIAカップ」人工知能ツアー報告会において、中国航天科技集団...

...

...

...

年末レビュー | 霧の中で花を見ることから実現することまで、人工知能は3つの主要な分野を「本当に香り高い」ものにしました

人工知能はもはや新しい言葉ではないが、2020年という異例の年に、人工知能は再び新型コロナウイルス感...

人工知能はすでに人間の減量を手助けするのに忙しい

今日はカロリーを消費しましたか?近年、生活水準の向上や生活習慣の変化に伴い、肥満は徐々に多くの人々を...

ロボティック プロセス オートメーションの導入を成功させるための 8 つのヒント

RPA は、企業が導入できる、リスクが低く価値の高い自動化アプローチの 1 つです。 RPA ツール...

ビジネス界におけるAIと自動化の変革的役割

人工知能や自動化などの破壊的技術の急速な発展により、現代の企業は変化しています。これらのテクノロジー...

お気に入りのランダムフォレストは? TensorFlow オープンソース決定森ライブラリ TF-DF

[[402276]]人工知能の発展の歴史の中で、さまざまなアルゴリズムが際限なく登場してきました。...

Java プログラミング スキル - データ構造とアルゴリズム「循環リンク リストとジョセフ問題」

[[386837]]ジョセフ問題1、2、...n と番号が付けられた n 人が輪になって座り、番号...