目次
1. 時間計算量
二、空间复杂度
ホームページ ウェブフロントエンド jsチュートリアル アルゴリズムの時間計算量と空間計算量について説明する記事

アルゴリズムの時間計算量と空間計算量について説明する記事

Mar 04, 2022 pm 03:45 PM
時間の複雑さ 空間の複雑さ アルゴリズム

この記事ではアルゴリズムについて学び、アルゴリズムの時間計算量と空間計算量について紹介します。

アルゴリズムの時間計算量と空間計算量について説明する記事

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

それでは、さまざまなアルゴリズムの長所と短所をどのように測定すればよいのでしょうか?

主にアルゴリズムが占める「時間」と「空間」の2つの次元から考えます。

  • 時間ディメンション: 現在のアルゴリズムの実行にかかる時間を指します。通常、これを説明するために「時間計算量」を使用します。

  • 空間次元: 現在のアルゴリズムを実行するために必要なメモリ空間の量を指します。通常、これを説明するために「空間複雑さ」を使用します。

したがって、アルゴリズムの効率の評価は、主に時間計算量と空間計算量に依存します。ただし、時間と空間が「ケーキを食べながらも食べる」場合があり、両方を同時に持つことはできないため、バランス ポイントを見つける必要があります。

「時間計算量」と「空間計算量」の計算方法をそれぞれ紹介します。

1. 時間計算量

アルゴリズムの「時間計算量」を知りたいです。多くの人が最初に考える方法は、アルゴリズム プログラムを 1 回実行することです。次に、それにかかる時間計算量を計算します。時間は自然にやってきます。

この方法は可能ですか?もちろんそれは可能ですが、多くのデメリットもあります。

この方法は動作環境の影響を非常に受けやすいため、高性能のマシンで実行した結果と、低パフォーマンスのマシンで実行した結果は大きく異なります。また、テストで使用されるデータの規模にも大きく関係します。さらに、アルゴリズムを作成した時点では、それを完全に実行する方法はまだありませんでした。

したがって、別のより一般的な方法が登場します。「 Big O notation」、つまり、T(n) = O(f(n))

としましょう。まず例を見てみましょう:

for(i=1; i<=n; ++i)
{
   j = i;
   j++;
}
ログイン後にコピー
ログイン後にコピー

Big O notation」を使用すると、このコードの時間計算量は次のようになります: O(n)、なぜですか?

In Big O 表記の時間計算量の公式は次のとおりです: T(n) = O( f(n) )、ここで f(n) はコードの各行の実行回数の合計を表し、O は比例関係、つまり完全な値を表します。この式の名前は次のとおりです: アルゴリズムの漸近時間計算量

引き続き上記の例を見てみましょう。コードの各行の実行時間が同じであると仮定します。それを表すために 1 パーティクル時間を使用します。この例の最初の行には 1 パーティクル時間がかかります。コードの 3 行目は 1 粒子時間かかります。行の実行時間は n 粒度時間で、4 行目の実行時間も n 粒度時間です (2 行目と 5 行目はシンボルなので、今のところ無視してください)。この場合、合計時間は 1 粒度時間 n 粒度時間 n 粒度時間、つまり (1 2n) 粒子時間、つまり: T(n) = (1 2n)*粒子時間 この結果から、このアルゴリズムの消費時間は n の変化とともに変化します。したがって、このアルゴリズムの時間計算量は次のように簡略化できます: T(n) = O(n)

なぜこのように簡略化できるのでしょうか?ビッグ O 表記は、コード実行時間の増加傾向を表すために使用される、アルゴリズムの実行時間を実際に表すために使用されないためです。

したがって、上記の例では、n が無限大の場合、T(n) = time(1 2n) の定数 1 は意味がなく、倍数 2 も意味がありません。したがって、T(n) = O(n) に単純化できます。

一般的な時間計算量のメトリクスは次のとおりです。

  • 定数次数 O(1)

  • 対数次数 O(logN )

  • 線形次数 O(n)

  • 線形対数次数 O(nlogN)

  • 二乗次数 O (n²)

  • 3 次 O(n³)

  • ##K 乗次数 O(n^k)

  • 指数次数 (2^n)

時間計算量は上から下に向かってますます大きくなり、実行効率はますます低くなります。

以下では、より一般的に使用されるものをいくつか選んで説明します (厳密な順序ではありません):

  • 定数順序 O(1)

コードを何行実行しても、ループなどの複雑な構造がない限り、このコードの時間計算量は O(1 )、たとえば:

int i = 1;
int j = 2;
++i;
j++;
int m = i + j;
ログイン後にコピー
ログイン後にコピー

上記のコードが実行されると、特定の変数が増加してもその消費量は増加しません。そのため、このタイプのコードがどれだけ長くても、たとえ数万個のコードがあったとしても、または数十万行の場合、O(1) を使用して時間計算量を表現できます。

  • #線形順序 O(n)

  • これは最初のコード例にあります。
for(i=1; i<=n; ++i)
{
   j = i;
   j++;
}
ログイン後にコピー
ログイン後にコピー

このコードでは、for ループ内のコードが n 回実行されるため、n が変化すると消費時間が変化するため、このタイプのコードは次のようになります。時間計算量を表すために O(n) を使用しました。

  • #対数次数 O(logN)

    最初にコードを見てみましょう:
  • int i = 1;
    while(i<n)
    {
        i = i * 2;
    }
    ログイン後にコピー

    从上面代码可以看到,在while循环里面,每次都将 i 乘以 2,乘完之后,i 距离 n 就越来越近了。我们试着求解一下,假设循环x次之后,i 就大于 2 了,此时这个循环就退出了,也就是说 2 的 x 次方等于 n,那么 x = log2^n

    也就是说当循环 log2^n 次以后,这个代码就结束了。因此这个代码的时间复杂度为:O(logn)

    • 线性对数阶O(nlogN)

    线性对数阶O(nlogN) 其实非常容易理解,将时间复杂度为O(logn)的代码循环N遍的话,那么它的时间复杂度就是 n * O(logN),也就是了O(nlogN)。

    就拿上面的代码加一点修改来举例:

    for(m=1; m<n; m++)
    {
        i = 1;
        while(i<n)
        {
            i = i * 2;
        }
    }
    ログイン後にコピー
    • 平方阶O(n²)

    平方阶O(n²) 就更容易理解了,如果把 O(n) 的代码再嵌套循环一遍,它的时间复杂度就是 O(n²) 了。

    举例:

    for(x=1; i<=n; x++)
    {
       for(i=1; i<=n; i++)
        {
           j = i;
           j++;
        }
    }
    ログイン後にコピー

    这段代码其实就是嵌套了2层n循环,它的时间复杂度就是 O(n*n),即 O(n²)

    如果将其中一层循环的n改成m,即:

    for(x=1; i<=m; x++)
    {
       for(i=1; i<=n; i++)
        {
           j = i;
           j++;
        }
    }
    ログイン後にコピー

    那它的时间复杂度就变成了 O(m*n)

    • 立方阶O(n³)、K次方阶O(n^k)

    参考上面的O(n²) 去理解就好了,O(n³)相当于三层n循环,其它的类似。

    除此之外,其实还有 平均时间复杂度、均摊时间复杂度、最坏时间复杂度、最好时间复杂度 的分析方法,有点复杂,这里就不展开了。

    二、空间复杂度

    既然时间复杂度不是用来计算程序具体耗时的,那么我也应该明白,空间复杂度也不是用来计算程序实际占用的空间的。

    空间复杂度是对一个算法在运行过程中临时占用存储空间大小的一个量度,同样反映的是一个趋势,我们用 S(n) 来定义。

    空间复杂度比较常用的有:O(1)、O(n)、O(n²),我们下面来看看:

    • 空间复杂度 O(1)

    如果算法执行所需要的临时空间不随着某个变量n的大小而变化,即此算法空间复杂度为一个常量,可表示为 O(1)

    举例:

    int i = 1;
    int j = 2;
    ++i;
    j++;
    int m = i + j;
    ログイン後にコピー
    ログイン後にコピー

    代码中的 i、j、m 所分配的空间都不随着处理数据量变化,因此它的空间复杂度 S(n) = O(1)

    • 空间复杂度 O(n)

    我们先看一个代码:

    int[] m = new int[n]
    for(i=1; i<=n; ++i)
    {
       j = i;
       j++;
    }
    ログイン後にコピー

    这段代码中,第一行new了一个数组出来,这个数据占用的大小为n,这段代码的2-6行,虽然有循环,但没有再分配新的空间,因此,这段代码的空间复杂度主要看第一行即可,即 S(n) = O(n)

    以上,就是对算法的时间复杂度与空间复杂度基础的分析,欢迎大家一起交流。

    更多算法相关知识,请访问:编程入门!!

    以上がアルゴリズムの時間計算量と空間計算量について説明する記事の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

CLIP-BEVFormer: BEVFormer 構造を明示的に監視して、ロングテール検出パフォーマンスを向上させます。 CLIP-BEVFormer: BEVFormer 構造を明示的に監視して、ロングテール検出パフォーマンスを向上させます。 Mar 26, 2024 pm 12:41 PM

上記および筆者の個人的な理解: 現在、自動運転システム全体において、認識モジュールが重要な役割を果たしている。道路を走行する自動運転車は、認識モジュールを通じてのみ正確な認識結果を得ることができる。下流の規制および制御モジュール自動運転システムでは、タイムリーかつ正確な判断と行動決定が行われます。現在、自動運転機能を備えた自動車には通常、サラウンドビューカメラセンサー、ライダーセンサー、ミリ波レーダーセンサーなどのさまざまなデータ情報センサーが搭載されており、さまざまなモダリティで情報を収集して正確な認識タスクを実現しています。純粋な視覚に基づく BEV 認識アルゴリズムは、ハードウェア コストが低く導入が容易であるため、業界で好まれており、その出力結果はさまざまな下流タスクに簡単に適用できます。

C++ での機械学習アルゴリズムの実装: 一般的な課題と解決策 C++ での機械学習アルゴリズムの実装: 一般的な課題と解決策 Jun 03, 2024 pm 01:25 PM

C++ の機械学習アルゴリズムが直面する一般的な課題には、メモリ管理、マルチスレッド、パフォーマンスの最適化、保守性などがあります。解決策には、スマート ポインター、最新のスレッド ライブラリ、SIMD 命令、サードパーティ ライブラリの使用、コーディング スタイル ガイドラインの遵守、自動化ツールの使用が含まれます。実践的な事例では、Eigen ライブラリを使用して線形回帰アルゴリズムを実装し、メモリを効果的に管理し、高性能の行列演算を使用する方法を示します。

C++sort 関数の基礎となる原則とアルゴリズムの選択を調べる C++sort 関数の基礎となる原則とアルゴリズムの選択を調べる Apr 02, 2024 pm 05:36 PM

C++sort 関数の最下層はマージ ソートを使用し、その複雑さは O(nlogn) で、クイック ソート、ヒープ ソート、安定したソートなど、さまざまなソート アルゴリズムの選択肢を提供します。

人工知能は犯罪を予測できるのか? CrimeGPT の機能を調べる 人工知能は犯罪を予測できるのか? CrimeGPT の機能を調べる Mar 22, 2024 pm 10:10 PM

人工知能 (AI) と法執行機関の融合により、犯罪の予防と検出の新たな可能性が開かれます。人工知能の予測機能は、犯罪行為を予測するためにCrimeGPT (犯罪予測技術) などのシステムで広く使用されています。この記事では、犯罪予測における人工知能の可能性、その現在の応用、人工知能が直面する課題、およびこの技術の倫理的影響について考察します。人工知能と犯罪予測: 基本 CrimeGPT は、機械学習アルゴリズムを使用して大規模なデータセットを分析し、犯罪がいつどこで発生する可能性があるかを予測できるパターンを特定します。これらのデータセットには、過去の犯罪統計、人口統計情報、経済指標、気象パターンなどが含まれます。人間のアナリストが見逃す可能性のある傾向を特定することで、人工知能は法執行機関に力を与えることができます

改良された検出アルゴリズム: 高解像度の光学式リモートセンシング画像でのターゲット検出用 改良された検出アルゴリズム: 高解像度の光学式リモートセンシング画像でのターゲット検出用 Jun 06, 2024 pm 12:33 PM

01 今後の概要 現時点では、検出効率と検出結果の適切なバランスを実現することが困難です。我々は、光学リモートセンシング画像におけるターゲット検出ネットワークの効果を向上させるために、多層特徴ピラミッド、マルチ検出ヘッド戦略、およびハイブリッドアテンションモジュールを使用して、高解像度光学リモートセンシング画像におけるターゲット検出のための強化されたYOLOv5アルゴリズムを開発しました。 SIMD データセットによると、新しいアルゴリズムの mAP は YOLOv5 より 2.2%、YOLOX より 8.48% 優れており、検出結果と速度のバランスがより優れています。 02 背景と動機 リモート センシング技術の急速な発展に伴い、航空機、自動車、建物など、地表上の多くの物体を記述するために高解像度の光学式リモート センシング画像が使用されています。リモートセンシング画像の判読における物体検出

C++ 再帰関数の時間計算量を分析するにはどうすればよいですか? C++ 再帰関数の時間計算量を分析するにはどうすればよいですか? Apr 17, 2024 pm 03:09 PM

再帰関数の時間計算量分析には、基本ケースと再帰呼び出しの特定が含まれます。基本ケースと各再帰呼び出しの時間計算量を計算します。すべての再帰呼び出しの時間計算量を合計します。関数呼び出しの数と問題のサイズとの関係を考慮してください。たとえば、再帰呼び出しごとに再帰の深さが 1 ずつ増加し、合計の深さが O(n) になるため、階乗関数の時間計算量は O(n) になります。

PHP 関数の時間計算量の問題にどう対処するか? PHP 関数の時間計算量の問題にどう対処するか? Apr 26, 2024 pm 02:12 PM

時間計算量は、関数の実行にかかる時間の尺度です。一般的な PHP 関数の時間計算量の問題には、入れ子になったループ、大規模な配列の走査、再帰呼び出しなどがあります。時間計算量を最適化する手法には、次のものが含まれます。 キャッシュを使用してループ数を削減する 並列処理を使用してアルゴリズムを簡素化する

58 ポートレート プラットフォームの構築におけるアルゴリズムの適用 58 ポートレート プラットフォームの構築におけるアルゴリズムの適用 May 09, 2024 am 09:01 AM

1. 58 Portraits プラットフォーム構築の背景 まず、58 Portraits プラットフォーム構築の背景についてお話ししたいと思います。 1. 従来のプロファイリング プラットフォームの従来の考え方ではもはや十分ではありません。ユーザー プロファイリング プラットフォームを構築するには、複数のビジネス分野からのデータを統合して、ユーザーの行動や関心を理解するためのデータ マイニングも必要です。最後に、ユーザー プロファイル データを効率的に保存、クエリ、共有し、プロファイル サービスを提供するためのデータ プラットフォーム機能も必要です。自社構築のビジネス プロファイリング プラットフォームとミドルオフィス プロファイリング プラットフォームの主な違いは、自社構築のプロファイリング プラットフォームは単一のビジネス ラインにサービスを提供し、オンデマンドでカスタマイズできることです。ミッドオフィス プラットフォームは複数のビジネス ラインにサービスを提供し、複雑な機能を備えていることです。モデリングを提供し、より一般的な機能を提供します。 2.58 中間プラットフォームのポートレート構築の背景のユーザーのポートレート 58

See all articles