インタビュアー: アルゴリズムの時間計算量と空間計算量についてどう思いますか?計算方法は?

インタビュアー: アルゴリズムの時間計算量と空間計算量についてどう思いますか?計算方法は?

[[424483]]

1. はじめに

アルゴリズムとは、データを操作し、プログラムの問題を解決するために使用される一連の方法のことです。同じ問題に対して、異なるアルゴリズムを使用すると最終結果は同じになる可能性がありますが、プロセスで消費されるリソースと時間は大きく異なる場合があります。

さまざまなアルゴリズムの利点と欠点は、主に「時間」と「空間」という 2 つの次元を通じて測定されます。

  • 時間ディメンション: 現在のアルゴリズムの実行に費やされる時間を指し、通常は「時間複雑度」として表現されます。
  • 空間次元: 現在のアルゴリズムを実行するために必要なメモリ領域の量を指します。通常、これを説明するには「空間複雑度」を使用します。

時間と空間の次元を同時に考慮することができない状況に遭遇することが多く、両者のバランスを見つける必要があります。

アルゴリズムには通常、最良、平均、最悪の 3 つのケースがあります。通常は最悪のケースに焦点を当てます。

最悪のケースは、アルゴリズムの実行時間の上限です。一部のアルゴリズムでは、最悪のケースがより頻繁に発生します。つまり、平均的なケースは最悪のケースと同じくらい悪いということです。

2. 時間計算量

時間計算量とは、このアルゴリズムを実行するために必要な計算作業の量を指します。その計算量は、入力サイズが大きくなるにつれてプログラム実行時間の大きさを反映し、アルゴリズムの品質をほぼ反映します。

アルゴリズムにかかる時間は、アルゴリズム内のステートメントが実行される回数に比例します。ステートメントが実行される回数が増えるほど、かかる時間も長くなります。

アルゴリズムの複雑さは通常、ビッグ O 表記法で表され、T(n) = O(f(n)) と定義されます。一般的な時間複雑さには、次の図に示すように、O(1) 定数、O(log n) 対数、O(n) 線形、O(nlogn) 線形対数、O(n^2) 平方、O(n^3) 立方、O(n^k) k 乗、および O(2^n) 指数があります。

上記から、問題のサイズ n が大きくなり続けると、上記の時間計算量も増加し続け、アルゴリズムの実行効率が低下することがわかります。小さい順から大きい順の順序は次のとおりです。

  1. Ο(1)<Ο(log n)<Ο(n)<Ο(nlog n)<Ο(n2)<Ο(n3)<…<Ο(2^n)<Ο(n!)

アルゴリズムの複雑さは、アルゴリズムの成長傾向のみを表し、あるアルゴリズムが必ずしも他のアルゴリズムよりも効率的であることを意味するわけではないことに注意してください。定数項が大きすぎると、アルゴリズムの実行時間も長くなります。

時間の計算量を計算する方法については、次の簡単な例をご覧ください。

  1. 関数プロセス(n) {
  2. a = 1とする
  3. b = 2とする
  4. 合計をa + bとする
  5. ( i = 0; i < n; i++ とします) {
  6. 合計+= i
  7. }
  8. 戻る  
  9. }

関数アルゴリズムが実行する必要がある操作の数は、入力サイズnの関数として表されます。つまり、T(n) = 2 + n + 1の場合、時間計算量はO(n + 3)です。時間計算量は最大桁数のみに焦点を当てており、係数とは関係がないため、上記の時間計算量はO(n)です。

たとえば、次の例をご覧ください。

  1. 関数プロセス(n) {
  2. カウントを 0 にする
  3. ( i = 0; i < n; i++ とします){
  4. ( i = 0; i < n; i++ とします){
  5. カウント+= 1
  6. }
  7. }
  8. }

ループの中にネストされたループがあります。外側のループは 1 回実行され、内側のループは n 回実行されるため、時間計算量は O(n*n*1 + 2) = O(n^2) です。

順番に実行されるステートメントの場合、合計時間計算量は、次のように、それらの間の最大時間計算量に等しくなります。

  1. 関数プロセス(n) {
  2. 合計を0とする
  3. ( i = 0; i < n; i++ とします) {
  4. 合計+= i
  5. }
  6. ( i = 0; i < n; i++ とします){
  7. ( i = 0; i < n; i++ とします){
  8. 合計+= 1
  9. }
  10. }
  11. 戻る  
  12. }

最初の部分の複雑さは O(n)、2 番目の部分の複雑さは O(n^2)、合計の複雑さは max(O(n^2), O(n)) = O(n^2) です。

もう一つの例を挙げます。

  1. 関数プロセス(n) {
  2. i = 1; // ①
  3. (i <= n) の間 {
  4. i = i * 2; // ②
  5. }
  6. }

ループ ステートメントでは、n は 2 の倍数で近似され、そのたびに 2 が乗算されます。これを数式で表すと、1 * 2 * 2 * 2 … * 2 <= nとなり、これは2のx乗がn以下のときにループ本体が実行され、2^x <= nと記録されるので、x<=lognとなる。

したがって、ループはlogn回実行した後に終了するため、時間計算量はO(logn)となる。

同様に、O(n) ループが O(logn) ループ内にネストされている場合、時間の計算量は O(nlogn) です。たとえば、O(n^3) は、O(n) ループの 3 つの層にすぎません。

3. 空間の複雑さ

空間複雑度は主に、アルゴリズムの実行に必要なメモリのサイズを指し、プログラムの実行プロセス中に必要な一時的なストレージ領域を測定するために使用されます。

記憶領域、命令、定数、変数、入力データに加えて、データを操作する作業単位や計算に必要な情報を格納する補助領域も含まれます。

以下は空間計算量が O(1) の例です。

  1. a = 1とする
  2. b = 2とする
  3. c = 3とする

上記のコードの一時空間はnの変化によって変化しないので、空間計算量はO(1)である。

  1. arr [] を鳴らす
  2. (i=1; i<=n; ++i)の場合{
  3. arr.push(i)
  4. }

上でわかるように、nが増加すると、配列が占めるメモリ空間は大きくなります。

一般的に言えば、アルゴリズムが動的に割り当てられたスペース、再帰、およびスタックに必要なスペースを伴わない限り、スペースの複雑さは通常 O(1) です。1 次元配列 a[n] のスペースの複雑さは O(n) で、2 次元配列のスペースの複雑さは O(n^2) です。

参考文献

  • https://juejin.cn/post/6844904167824162823#heading-7
  • https://zhuanlan.zhihu.com/p/50479555
  • https://cloud.tencent.com/developer/article/1769988

<<:  MITはレーザー彫刻機にAIを搭載し、材料を自動的に識別し、98%の精度で彫刻の強度を判定した。

>>:  成功するAIチームの特徴

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

推薦する

AI はクラウド コンピューティングをどのように改善するのでしょうか?

今日、AI とクラウド コンピューティングを組み合わせることで、企業はデータを管理し、情報のパターン...

研究によると、2027年までにAIの電力消費量は一部の国の電力消費量と同等になると予想されている。

10月17日のニュースによると、人工知能はプログラマーのプログラミング速度を上げ、ドライバーの安全...

...

オペレーティング システムのプロセス スケジューリング アルゴリズムとは何ですか?

スケジューラは、次に実行するプロセスを選択する役割を担うオペレーティング システム カーネルの一部で...

AIが宇宙飛行士の健康を宇宙で監視する方法

[[286902]] ▲ 火星探査機ロゼッタが光学スペクトル赤外線リモートイメージングシステム(OS...

完全に無人運転? 2035年より前になる可能性は低いです!

無人運転技術の研究に対する熱意は相変わらず高いが、現実は市場に冷水を浴びせかけている。今後15年間で...

データサイエンスで勝つ: 製薬会社の幹部が始めるための 5 つのヒント

これら 5 つの重要なヒントは、製薬会社の幹部がデータ サイエンスの道への扉を開くのに役立つかもしれ...

チャットボットにおける2つの技術的火種: AIと機械学習

チャットボットの人気が高まるにつれて、競合するアプリケーション フレームワークが多数登場しました。 ...

AIと機械学習を活用してビジネスを完全に自動化する5つの優れた方法

アプリケーションソフトウェアや機器の更新に伴い、製品の品質に対するユーザーの要求はますます高くなり、...

Torch7 オープンソース PyTorch: Python ファーストのディープラーニング フレームワーク

PyTorch は、次の 2 つの高レベル機能を提供する Python パッケージです。強力な GP...

ビッグモデルの要約は信頼できるでしょうか? GPT-4を使用すると、人間の筆記よりも滑らかで、幻覚も少なくなります

自然言語生成 (NLG) のタスクとしてのテキスト要約は、主に長いテキストを短い要約に圧縮するために...

政府における人工知能の積極的な役割

近年、政府の間ではAIへの関心が高まっており、さまざまなAIベースのアプリケーションのパイロットプロ...

ArcSoft Open Platformの新しいアルゴリズムは、顔認識セグメンテーションのシナリオの拡張に役立ちます

ArcSoft ビジュアルオープンプラットフォームであるArcFace 3.0の発売以来、アルゴリ...

...

運転教習業界にも「AI」の波が吹き荒れる、普及規模に注目

[[422314]]近年、都市化と道路交通建設の加速により、自動車旅行の需要が継続的に増加しており、...