【2023】Javaデータ構造 - 時間と空間の複雑さの分析

1. アルゴリズムの効率

アルゴリズム効率分析には 2 つのタイプがあります。1 つ目は時間効率、2 つ目はスペース効率です。時間効率は時間計算量と呼ばれ、空間効率は空間計算量と呼ばれます。時間計算量は主にアルゴリズムの実行速度を測定し、空間計算量は主にアルゴリズムに必要な追加スペースを測定します。

2. 時間計算量:

時間計算量の定義: コンピューター サイエンスでは、アルゴリズムの時間計算量は、アルゴリズムの実行時間を定量的に記述する関数です。アルゴリズムの実行にかかる時間

  • Big O 表記法: コードの実際の実行時間を具体的に表すものではありませんが、データ サイズの増加に伴うコード実行時間の変化傾向を表します。
  • 複雑度の共有とは、コードの実行回数とデータサイズnの関係を明らかにすることです。

ここに画像の説明を挿入します

  1. O(1): n の増加に伴ってコードの実行時間が増加しない限り、そのコードの複雑さは O(1) です。のように:

    public void test01(int n){
          
          
    	int i = 0;
    	int sum =  0;
    	for(;1<100;i++){
          
          
    		sum = sum + i;
    	}
    }
    
  2. O(log n): 変数 i の値は対数的に増加します。i の値が大きくなるにつれて、i は n に近づきます。のように:

    public void test01(int n){
          
          
        int i=1;
        while (i<n){
          
          
            i = i * 2;
        }
    }
    

[外部リンク画像の転送に失敗しました。ソース サイトにはリーチ防止メカニズムが備わっている可能性があります。画像を保存して直接アップロードすることをお勧めします (img-DgYC1cAT-1690358171360)(https://s3-us-west-2. amazonaws.com/secure.notion -static.com/7e1a5fd7-8e65-469e-bea7-b3023074faca/Untitled.png)]

上記の分析から、コードの時間計算量は O(log n) で表されることがわかります。

  1. O(n): T(n) はコードの実行回数に比例します (コードの実行時間が長いほど、時間計算量は高くなります)

    public void test01(int n){
          
          
    	int i = 0;
    	int sum =  0;
    	for(;i<n;i++){
          
          
    		sum = sum + i;
    	}
    }
    

3. 空間の複雑さ:

スペースの複雑さは、実行中にアルゴリズムに必要な追加スペースの尺度です。これは、アルゴリズムによって使用される追加メモリ空間のサイズや増加傾向など、アルゴリズムによるメモリ リソースの使用状況を評価するために使用されます。

  1. O(1): 空間複雑度が O(1) の場合、アルゴリズムによって使用される追加空間が固定されており、入力サイズとは関係がないことを意味します。
    public void printNumbers(int n) {
    
    
    for (int i = 1; i <= n; i++) {
    
    
        System.out.println(i);
    }
}
  1. O(n): 空間複雑度が O(n) の場合、アルゴリズムによって使用される追加空間が入力サイズに比例することを意味します。
public int[] copyArray(int[] nums) {
    
    
    int[] copy = new int[nums.length];
    for (int i = 0; i < nums.length; i++) {
    
    
        copy[i] = nums[i];
    }
    return copy;
}
  1. O(n^2): 空間複雑度が O(n^2) の場合、アルゴリズムによって使用される追加空間が入力サイズの 2 乗に比例することを意味します。

public int[] copyArray(int[] nums) {
    
    
    int[] copy = new int[nums.length];
    for (int i = 0; i < nums.length; i++) {
    
    
        copy[i] = nums[i];
    }
    return copy;
}

おすすめ

転載: blog.csdn.net/weixin_52315708/article/details/131941244