アルゴリズムの時間計算量分析: Big O 表記

アルゴリズムの時間計算量分析: Big O 表記

[[354643]]

開発の際、アルゴリズムの品質をどのように評価し、アルゴリズムの効率をどのように説明すればよいのでしょうか。より一般的な表現方法は、プログラムの実行が速いか遅いかですが、これは比較的大まかな説明にすぎません。それを直感的かつ科学的に説明するにはどうすればよいでしょうか。

実行時間を使って非常にわかりやすく直感的に説明できると言う生徒もいるかもしれません。ただし、言語、コンパイラ、CPU が異なれば、プログラムの処理にかかる時間も異なります。実行時間を単純に使用してアルゴリズムの実行効率を表すことはできません。また、処理するデータが増えると、アルゴリズムの基本操作を繰り返す回数も増え、増加率はアルゴリズムごとに異なります。

数学は確かに優れたツールです。アルゴリズムの実行時間の増加を説明するために、さまざまな数式を使用して分析することができます。コンピュータ サイエンスには、アルゴリズムの効率性を特徴付ける特別な用語があり、それが今日学習する Big O 表記法です。 Big O は、アルゴリズムの実行にかかる時間を示すものではありません。アルゴリズムの実行時間の増加率を示します。つまり、アルゴリズムの実行時間はさまざまな率で増加します。これは漸近的時間複雑度とも呼ばれます。

これは次の式で表すことができます。

通常、時間の複雑さを説明するために次のような表現があります。

  • O(1): 定数時間
  • O(n): 線形時間
  • O(log n): 対数時間
  • O(n^2): 2次時間
  • O(2^n): 指数時間
  • O(n!): 階乗時間

それぞれの時間計算量は異なります。これらの時間計算量を詳しく見てみましょう。

ビッグOの複雑さ

オー(1)

O(1) は、一定の時間計算量を意味します。サイズ n の入力が与えられた場合、n の値が何であっても、アルゴリズムの最終的な実行時間は一定です。例えば:

  1. int関数( intn )
  2. {
  3. n++;
  4. n*2を返します
  5. }

上記のプログラムでは、入力 n の値がどのように変化しても、プログラムの実行時間は常に一定です。単純化してみましょう。関数内の各ステートメントの実行時間が 1 の場合、実行時間の数式は次のようになります。

n がどれだけ大きくても、最終的な実行時間は 2 という固定値になります。実行時間は 2 ですが、ここでは O(1) を使用して表します。1 は定数を表します。

の上)

O(n) は線形時間計算量を表し、アルゴリズムの実行時間は入力 n のサイズに応じて線形に変化します。

  1. int関数( intn )
  2. {
  3. 整数 合計= 0;
  4. ( int i=0; i<n; i++)の場合
  5. {
  6. 合計=合計+ i;
  7. }
  8.  
  9. 戻る 合計;
  10. }

上記のプログラムでは、関数の実行時間は n に比例して変化します。

線形表現で表現できるこの状況では、O(n) を使用します。

なぜ式中の他の係数を省略できるのでしょうか? 主な理由は、n が無限大に近づくと、無限大の n に対する係数を無視できるためです。

O(n^2) の場合

O(n^2) は二次の時間計算量を表します。アルゴリズムの時間は、入力データ n の増加とともに二次的に増加します。

  1. int関数( intn )
  2. {
  3. 整数 合計= 0;
  4. ( int i=0; i<n; i++)の場合
  5. {
  6. ( int j=0; j<n; j++)の場合
  7. {
  8. 合計=合計+ i + j;
  9. }
  10. }
  11.  
  12. 戻る 合計;
  13. }

上記のプログラムは 2 つのループを持つプログラムであり、関数の実行時間は n の 2 乗です。

このタイプのプログラムの場合、O(n^2) と表現できます。ただし、この 2 層ループに加えて、3 層、4 層...n 層のループもあり、対応する複雑さは O(n^3)、O(n^4)...O(n^n) になります。

O(2^n)

O(2^n) は指数関数的な複雑さを表します。n が増加すると、アルゴリズムの実行時間は指数関数的に増加します。これは爆発的な増加の例です。

  1. int関数( intn )
  2. {
  3. n==0の場合は1を返します
  4.  
  5. func(n) + func(n-1)を返す
  6. }

上記のコードには 2 つの再帰呼び出しがあり、関数の実行時間は入力 n に指数的に関係します。

したがって、ここではO(2^n)を使用できます。

O(logn) です

O(log n) は対数時間計算量を意味し、アルゴリズムの実行時間と n は対数関係にあります。このタイプのアルゴリズムでは、プログラムの実行につれて、特定の機能を完了するためのステップが少なくなります。その中でも、私たちがよく知っている二分探索法は良い例です。たとえば、次のコードは順序付きリスト内の値の位置を見つけ、バイナリ検索を使用します。

  1. int関数( int a[], int  サイズ int数値)
  2. {
  3. 整数 = 0;
  4. 整数 =サイズ-1;
  5.  
  6. while(<=)
  7. {
  8. int中央 = (+)/2;
  9.  
  10. if(a[mid] > num)
  11. {
  12. = 中央 - 1;
  13. }
  14. そうでない場合 (a[mid] < num)
  15. {
  16. = 中央 + 1;
  17. }
  18. それ以外 
  19. {
  20. 数値を返します
  21. }
  22. }
  23.  
  24. -1 を返します
  25. }

最悪の場合、バイナリ検索で x 回分割した後、最後の要素が探している要素になります。次の式が得られます。

関数の実行時間は次のように表すことができます。

したがって、ここでは O(log n) を使用できます。

の上!)

階乗関係の複雑さの最も典型的な例は巡回セールスマン問題です。

n+1 都市を訪問したい旅行中のビジネスマンがいるとします。彼は進むべき道を選択する必要があります。この道の制約は、各都市を 1 回しか訪問できず、最後には元の出発都市に戻らなければならないことです。パス選択の目的は、すべてのパスの中で最小のパス長を取得することです。

この問題を解決する最も簡単な方法は、網羅的な列挙によってすべての順列と組み合わせをリストすることです。 n+1 個の都市がある場合、数学で学んだ順列と組み合わせの計算方法によれば、すべての組み合わせの数は n! であると計算できるため、この網羅的な方法に対応する時間計算量は O(n!) です。

この記事はWeChat公式アカウント「Will's Canteen」から転載したものです。下のQRコードからフォローできます。この記事を転載する場合は、Will’s Dashitang パブリックアカウントにご連絡ください。

<<:  エッジ AI とエッジ コンピューティングとは何ですか?

>>:  GoogleとDeepMindは、6つのタスクと複数のデータタイプに対する効率的なTransformer評価ベンチマークを提案

ブログ    
ブログ    
ブログ    
ブログ    

推薦する

DeepMindがAIツールGNoMEをリリース、220万個の新しい結晶材料を発見したと主張

12月1日、GoogleのDeepMindは最近、Nature誌で自社のAIツールGNoMEを披露し...

中国人民大学高陵人工知能学院のネイチャーサブジャーナル:マルチモーダル基本モデルを使用して汎用人工知能への移行を試みている

最近、中国人民大学高陵人工知能学院の陸志武教授、孫昊准教授、温継栄学院長教授が共同責任著者として国際...

研究者はAIを活用して新型コロナウイルスの理解を深める

[[319373]]新型コロナウイルスが昨年12月に中国・武漢で発生して以来、過去数か月間に2,00...

詳細な分析: AI がイノベーションを容易にする方法

開発手段。イノベーションの結果は、企業が市場のニーズを満たす新製品を継続的に設計・生産することを奨励...

機械学習を簡単に理解!クラスタリング、回帰、分類アルゴリズムを説明する 3 つのケース

機械はどのように学習し、何を学ぶのでしょうか?人間はどうやって機械に学習を教えるのでしょうか?この記...

機械学習により暗号通貨は追跡可能になるか?

[[349063]] [51CTO.com 速訳] 機械学習技術を使って仮想通貨を追跡できるのか?...

...

OpenGL ES 入門: 組み込み 3D グラフィックス アルゴリズム標準

OpenGL とは何ですか? OpenGL (正式名称は Open Graphics Library...

人工知能はリモートセンシングデータの大きな可能性を解き放ち、国勢調査の手作業が置き換えられるかもしれない

畳み込みニューラルネットワーク(CNN)と衛星画像データを使用して地域の所得レベルを予測する手法がま...

MetaMath: 逆思考で大規模モデルをトレーニングする新しい数学的推論言語モデル

複雑な数学的推論は、大規模言語モデルの推論能力を評価するための重要な指標です。現在、一般的に使用され...

業界の資金調達が活発化しています!自動運転技術は物流分野で初めて導入される可能性

2019年、自動運転分野は谷間に向かうかに見えましたが、わずか数か月で業界は徐々に再び熱を帯び始め、...

ディープラーニングはオイラー方程式を「破壊」する準備ができている

この記事はLeiphone.comから転載したものです。転載する場合は、Leiphone.com公式...

銀行における機械学習の応用シナリオは何ですか?

1. 機械学習プラットフォームとビッグデータプラットフォームの関係の明確化[[346643]]機械...

米国のテクノロジー業界が冬を乗り切る中、プログラマーたちは仕事を維持するために率先して給与を削減している。 35歳の会社員:給料をもう少し下げてもいい

テクノロジー業界は歴史的に平均給与が最も高い業界の一つであり、リストのトップにランクされることも少な...

協働ロボットは従来のロボットとどう違うのでしょうか?

協働ロボットは従来のロボットとどう違うのでしょうか? [[418520]]本質的には、協働ロボットと...