1が十分であるかを確認するために、時間の複雑さを見つけるために、どのように、時間の複雑さとは何ですか

時間の複雑さとは何ですか

時間の複雑さは、プログラムの開発を容易にするために使用され、実行時に推定されています

どのように我々はそれを実行している時間を見積もるか、我々は通常、消費プログラムを表現するための時間数演算部推定我々は、デフォルトの実行CPUの単位時間当たりの消費、同じです。

アルゴリズムは、問題の大きさであるとし、Nは、操作部の数は、関数f(n)が示されている使用します

場合nはデータのサイズを増加する、と呼ばれる成長及びf(n)は、成長速度、同じアルゴリズム実行時間アルゴリズムの時間漸近的な複雑さは、時間の複雑性と呼ば O(F(N))で表されます、

大きなOとは何ですか

ここでは、それは大きなO何か、大きなOについて話す必要があり、多くの学生は、彼らがO(n)は、O(N ^ 2)の複雑さを認識しているが、大きなOが何であるかを言うことができないとき、その時間を言います

はじめに説明が与えられたアルゴリズム:ビッグOは、アルゴリズムの実行時間最悪のケースとしてそれを使用した場合の上限、上限を示すために使用され、実行されている時間は、上の任意のデータ入力のためにバインドしています。

挿入ソートのためのテイク、挿入ソート、我々は時間の複雑さはO(N ^ 2)であると言う、:同じ導入のアルゴリズムは、例を示しますが、データは、時間の複雑さはO(N)である場合には発注されているも、それが入力されたすべてのケースのために、最悪の場合はO(N ^ 2)の時間計算量でそうはO(n ^ 2)の挿入ソート時間複雑と呼ばれます

同じことは、同様に、我々は、クイックソート、すべてのノウハウがO(nlogn)であるが、データはクイックソートの時間計算量はO(N ^ 2)で、注文されたとき、および、クイックソートを見て、厳密ビッグOさんから定義では、クイックソートの時間計算量はO(N ^ 2)でなければなりません

しかし、我々はまだクイックソートはO(nlogn)時間複雑であると言う、これは業界のデフォルトの提供である一般的であり、上限厳密ではない、我々はOに代わって、ここで言います

ここに画像を挿入説明

そこでここでは、のようなに関するすべてを知っています

問題のクイックソートの時間計算のためのOの定義については説明しませんインタビュアーインタビュー、我々は複雑さを議論する時間は、一般的なケースの複雑さだけで結構で時間を指す知っています

私たちは、このような考え方を持っているアルゴリズムの時間複雑に持っています

同じ時間ではなく、静的なの複雑なアルゴリズムであり、データ入力フォームは、まだ関係であります

私たちの主な関心事は、一般的な場合のデータ形式です。

インタビュー、彼はアルゴリズムの時間計算量は、一般的に言及されているどのくらいです

しかし、インタビュアーと私たちの深さの研究とは、我々は常にデータのユースケースを考えるだろう時間のアルゴリズムの性能を実装する場合、学生は注意を払う必要があること、複雑さが異なる同じ時間ではありません

時間の複雑さを説明する方法

この図は、我々は、異なる入力データサイズの異なるアルゴリズムの時間計算量の違いを見ることができます。
ここに画像を挿入説明

私たちは、データのサイズを考慮し、低良く、時間が複雑されていない場合にこれらのアルゴリズムを使用することを決めたアルゴリズムはO(n)がより適切であるデータサイズが小さいOによっても、(N ^ 2)である場合

上記図形描画O(5N ^ 2)及びO(100N)場合N 20 O(5N ^ 2)の前に明らかであるように費やされる時間が最小であり、優れています。

そして、なぜ我々はそれの一定の係数を無視する時間の計算がときにある、O(100N)はO(n)の時間複雑であると言うことです、O(5N ^ 2)はO(N ^ 2)である時の複雑さ度

しかし、また、O(n)がOよりも(N ^ 2)優れているデフォルトに?

ここにも大きなOの定義を含み

のでビッグOは、実際には非常に大規模な実証した時間複雑で注文と注文データの画期的なポイントデータであり、この点は、一定の係数がポイントで決定的な役割を持っている余裕はありませんです

図20はその点、上記の例の図である20より大きい係数がない臨界有する限りように、n-定数。

我々は、一般的に、デフォルトのデータサイズに十分な大きさであるため、時間複雑係数は、省略されている定数項であると言うように、複雑なアルゴリズムの私達の時間が与えられているという事実に基づいて、次のようにランキング:

O(1)常数阶 < O(logn)对数阶 < O(n)线性阶 < O(n^2)平方阶 < O(n^3)(立方阶) < O(2^n) (指数阶)  

あなたはO(LOGN)知りません

私たちは、通常、それはそれの2を底とした対数をnログインする必要があり、アルゴリズムのこの時間複雑性はLOGNであると言いますか?

実際には、さらに数Nベース10のベースとすることができ、また、端部20の数nに基づくことができるが、我々は統一されているベースの記述では無視されLOGNを述べました。

なぜあなたはそれを行うことができますか?

図に示すように。
ここに画像を挿入説明

我々は、2つの時間計算アルゴリズムを使用している場合、対数ログであり、ベースnに対数の底部10に2 n個のログ

我々は高校の数学を覚えているのであれば、ここで、それは、nのベース10に対数を乗じたベース10に、N = 2対数の底2の数に解釈されるべきではありません

ここでは対数の底2は定数10であり、私たちは時間の複雑さを計算言ったということは、上記で一定の係数を無視することです

抽象ログの数を見てn iは下の数は、エンドjへのログオンに等しいのは、ちょうどそれが一定のlogijで正式ので、そのLOGNを言って、私たちは私を無視するようであり、nは

だから、私たちは基本番号を無視するべきであるなぜこれほど難しい理解します

時間計算が複雑な式であれば、どのように簡素化します

時々、私たちは、単純なO(N)またはO(N ^ 2)ないことが判明したときの時間の複雑さを計算する必要がありますが、複雑な式、例えば:

O(2*n^2 + 10*n + 1000) 

ここでは、それは通常、それのアルゴリズムの時間複雑である方法を説明し、それがプロセスを簡素化するための方法です

(定数項として、コンピュータの操作と数Nの増加を増加しないであろう)実行時に添加定数項を除去すること

O(2*n^2 + 10*n)

一定の係数を取り外します(私たちは詳細にについては定数項を除去することができる理由を説明しました)

O(n^2 + n)

(データサイズがNよりもはるかに大きいので、N ^ 2)のみ最高n個の小さなアイテムを除去するために予約され、最終的に減少させます。

O(n^2) 

このステップの学生が理解するのに苦労する場合は、抽出操作を行うことができますnは、それがなるとO(n(n+1))、ほかの一定の期間を省略した後となりません。

O(n^2) 

だから、最後に、私たちは言う:アルゴリズムの私達のアルゴリズムの時間計算量はO(N ^ 2)であります

これは、nが40以上である別のアイデア、と簡略化することができ、この複雑さはあったであろうよりも少ないですO(3*n^2)

O(2*n^2 + 10*n + 1000)  < O(3*n^2)

だから、最終的に我々は省略し、最終的な一定の時間複雑係数はO(N ^ 2)

時間の複雑さを計算する方法を説明するために、

具体的には、我々は時間の複雑さが話題を通じて、見てどのように数える必要があります

説明タイトル:(ここでは2つだけの同じ文字列を仮定して)同じ列にNの2つの文字列を識別する

一部の学生は、列挙トラバーサル・ソリューションを使用することができますされているが、この質問を解決するために考えることが、時間計算量はO(N ^ 2)

この時間の複雑さが正しくありません

ここではいくつかの学生が費やした時間の文字列を比較、無視されている横断数n ^ 2倍に加えて、比較数値がint型の操作を行うと、ここでは簡単なようではありません操作は(mは文字の文字列ですmは文字列の比較は、まだ消費されています長さ)、時間の複雑さがありますO(m*n*n)

その後、我々は他の問題解決のアイデアを考えます

私たちは、辞書のソート順にn番目の文字列の最初の行には、意味、ソートされたn個の文字列を注文された隣同士に同じ文字列2

次に、n個の文字列の上に横断するので、同じ文字列を検索するために、2つの

その後、我々は、アルゴリズムの時間計算を見てみましょう

クイックソートの時間計算量は依然として続いクイックソートは、文字の比較のすべてのm番目の比較操作が必要であり、m O(nlogn)、文字列の長さを考慮すべきであるであるO(M N- logN個)

その後、我々は再びトラバースする必要がN 2つの同一の文字列を検索するには、この文字列は、文字列を比較するためにはまだ時間を通過することを忘れないでください、その合計時間の複雑さがあります O(m*n*logn + n*m)

私たちO(m*n*logn + n*m)の簡素化、操作、m*n抽出なってO(m*n*(logn + 1))

定数項では省略されている前回の複雑さがありO(m*n*logn)、我々は時間効率が比較することをO(m*n*logn)第1の方法はより良いではないO(m*n*n)、まだ速くなります

明らかにO(m*n*logn)優れO(m*n*n)

だから、最初の暴力列挙より直接的な方法を超えるトラバースするより高速な方法で文字列をソートするために、文字列の同じセットのうちの2つを見つけます

この例を通して、私たちは、複雑さが予備的な理解と意識を持っているかである時間をカウントします。

彼らのアイデアやインターネットの思考と技術を共有するための「コードさまよう」フロントラインインターネット技術の専門家、:私のマイクロチャネル公共数の懸念へようこそ。懸念が返信した後:「javaの」、「C ++」、「パイソン」「アルゴリズムとデータ構造」などのキーワードでは、学習教材の私の年を整理することができます。仕事でのプッシュは、私にとって最も重要な百度に来ることができます。テンセント、アリ、見出しなど私を助けることができます

公開された230元の記事 ウォンの賞賛248 ビュー260 000 +

おすすめ

転載: blog.csdn.net/youngyangyang04/article/details/105182447