データ構造とアルゴリズム() - 時間の複雑さと空間の複雑さ

データ構造とアルゴリズム() - 時間の複雑さと空間の複雑さ

依頼するトリプル魂への最初:

1、なぜこのようなものの時間複雑と空間の複雑?

どのようなものの2、時間の複雑さと空間の複雑?

3、どのようにアルゴリズムの複雑さと空間の複雑さの時間を決定します。

まず、なぜこのようなものの時間の複雑さとスペースの複雑さを持っていますか?

まずあなたは効率の問題を気にしないことで、多くの人がいればうまく機能を実現するよう、実務に従事したシーンを達成するために直接書き込みにアルゴリズムが発生しました。少量のデータ、データ量の爆発的な成長には何も表示されませんでしたが、あなたが書くときの悪いアルゴリズムは、システムに災害をもたらすかもしれません。それは多くの人が初めて、高速実行で読みやすいと思いますどのように測定するためのアルゴリズムを記述するために良いことです。少数の人々は、スペースを節約しない州の別の重要な指標に言及します。一つは、このハードウェアは、今も高度の年齢を見て、まだ、このような理解が非常に狭いことを言うかもしれません。場合は、各ミリ秒の小さなメモリ空間と実行時間あたりのデータ量の爆発的な成長は、無限に拡大されます。前世紀のハードウェアリソースの制約では、それ以上に、その科学者は、コンセプトの時間複雑と空間の複雑さを測定するためのアルゴリズムを提案しました。

第二に、時間の複雑さと空間の複雑さは何ですか。

アルゴリズム解析、実行の総数文T(n)がNの関数の大きさについての質問がある場合には、NとT(n)を分析し、Tの変化の大きさのオーダーの(n)を決定します。T(N)= O(F(N)):アルゴリズムの時間複雑性は、アルゴリズムは、で表される、時間の尺度です。Nは、アルゴリズムの実行時間は、アルゴリズムの漸近的時間計算と呼ばれる、同じ成長率とF(n)の成長のサイズと共に増加問題を表し、時間複雑度と呼びます。ここで、f(n)は、問題のサイズnの関数です。大文字O()私たちは大きなO記法を呼び出すアルゴリズム表記の時間の複雑さを反映します。nは入力の大きさを増大させるように、一般に、T(n)のアルゴリズムは、最も遅い成長に最適なアルゴリズムです。

S(N)= O(F(n))は、問題の、n型スケールは、Fである(N:実施計算アルゴリズムによって必要とされる記憶空間の空間の複雑さは、アルゴリズムの空間複雑性は式と呼ばれます)は、n文の機能としては、ストレージスペースを占有しました。一般的に、我々は時間を実行しているのニーズを参照するために「時間計算」を使用している、それは「宇宙の複雑さ」を使用することでスペース要件を指します。

アルゴリズムの時間の複雑さと、より複雑な空間の導出のための式の複雑さについては、興味のある学生は、見つけるためにウィキペディアにGoogleに行くことができます。

第三には、どのようなアルゴリズムの複雑さと空間の複雑さの時間を決定します。

*すべて1つのランタイム定数の定数の添加により置換されています。

次のコードは、なしサイクル:

         int型の合計= 0; 
         System.out.println( "こんにちは");
         System.out.println( "こんにちは");
         System.out.println( "こんにちは");
         System.out.println( "こんにちは");
         合計=(1 + N)* N / 2。

*の数は最高次の項を保持、改訂された関数を実行します。

次のコードは、定数があり、二重ループがあり、ループのN回にNを実行します

以下のためにネストされた2は、n ^ 2です。時間は、アルゴリズムの計算量はほとんど見することになりますある場合は、これは、n ^ 2です。

        int型I、J、N = 100; 
        {(; I <N I ++ I = 0)するための
            ための(J = 0であり、j <N; J ++){
                するSystem.out.println( "こんにちは");
           }
       }

最高次の項が存在し、1でない場合は*、定数項を削除して乗算されます。

以下のコード:I = 0のときI = 1の場合、ループは、n回実行されるので、ループは、1-N iがn-1 =回......実行されるインナーループが一度実行されるので、合計実行は次のようになります。

N +(N-1)+(N-2)+ ... + 1 = N(N + 1)/ 2 N(N + 1)/ 2 = N ^ 2/2 + N / 2ないがあるため、まず、無視定数の合計。

唯一の最高アイテム第2の保持ので、N / 2これを除去しました。

最高の最終的なO(N ^ 2)を得、定数項を乗じを除去する第三の、。

        int型I、J、N = 100; 
        (I ++; I <N I = 0)するための
       {
            (J = I; J <N; J ++)のための
           {
                 のSystem.out.println( "こんにちは");
           }
       }

*最終的な結果は、ビッグO-ためです。

それの写真を投稿:

659

線形対応する図の効率:

603

典型的な時間の昇順に費やされる時間の複雑さがある:O(1)<O(LOGN)<(N)<O(nlogn)<O(N ^ 2)<O(N ^ 3)<O( 2 ^ n)の<O(N!)<O(N ^ N)

一般的に、我々は時間を実行しているのニーズを参照するために「時間計算」を使用している、それは「宇宙の複雑さ」を使用することでスペース要件を指します。私たちは、直接「複雑さ」を作るしようとすると、通常時の複雑さを指します。

それについての判断、あなたは、アルゴリズムの複雑さを書く時間と空間を見に殺到。ここで、あること、おそらく学生のほとんどが使用している、データ構造とアルゴリズムのペアが実際に良い場所ですされています

【leecode] https://leetcode.com/

そこに上記の回答各質問提出時には、時間と空間の複雑さの評価はあなたのフィードバックアルゴリズム、素晴らしいが、これは長いです。

画像-20200320194830953

それを試してラッシュ。

おすすめ

転載: blog.51cto.com/14745357/2480558