ゲームのアルゴリズム:アルゴリズムの時間複雑

インタビュアーのインタビューの間に生まれたプログラマ学習スラグが尋ねたよう:時間の複雑さは何ですか?
私は:時間の複雑さは、メソッドが実行されている時間についてです!(知りませんが、これまたはノウハウ)
インタビュアー:それはどのように計算されますか?
I:見てきましたが、理解していなかった- (漢漢を!)
インタビュアーをします。Doはこれを読んでいませんか?

私が言うことができますか?インタビューの前には、具体的に学習に関連する記事を探したが、本当に理解していませんでした!
エントリー後、我々は慎重に、アルゴリズムの複雑さを勉強するつもりが、また、どのような成長の過程を記録します!

同じ問題、さまざまなソリューション、高速ないくつかの方法で、いくつかの遅い方法があります。アルゴリズムと同じ、品質アルゴリズムは、アルゴリズムの効率性とプログラム全体に影響を与えます。

アルゴリズムの品質は主から时间复杂度空间复杂度測定されました。
時間計算:
アルゴリズムの実行によって消費される時間は、理論的には、計算されていませんが、より多くの我々は、文の実行回数、それがかかる多くの時間をアルゴリズムいる知っています。アルゴリズムの実行のステートメントは、T(N)と呼ばれる、周波数または時間文周波数と呼びます。アルゴリズムの時間計算量はまた、アルゴリズムの実行に必要な計算量を指します。
T(n) 即为一个函数,n是一个自变量,也就以n为自变量组成的函数
nは、問題のサイズと呼ばれ、nは変化している場合、それはT(n)を変更しないであろう。

複雑さは、通常、大文字Oで表現される時間は、メソッドのOは、次の規則があります
。1.定数項を無視
式:O©= O(1)例:O(10)= O( 1)
例えば、:T(n)をN = + 50時間の%が4.8(50 / n)の場合、N = 1024、この式の定数項の影響のみ実行され、計算の実行時間を表し、
2は定数係数無視
式:O(CT)を= CO 3(T)= O( T) の例:O(10N)= O( N)(cは定数である)
、例えば:T(N)= N2( 1) 及びT(N)= 10N(2 ) 二つの実験(a)は、nが10よりも大きい時アルゴリズムは、(1)(2)よりも大きくなります。
3.低次位相因子無視
発現:O(T1)+ O( T2)= MAX(O(T1)、O(T2)) 例:O(N)+ O((N- 2)= O(N- 2
例えば:T(N)= N ^ 2 + nはアルゴリズムの実行時間であり、そして場合nは1024、因子の発現における低次項の値は、動作時間の0.1%未満を有します。

なぜ?:例を参照
3NとT(N)=時間アルゴリズム2 + 10N + 10
:、時間複雑度は
O(T(N))= O(と3N 2 + 10N + 10)= O(と3N 2)= O (N- 2

場合10 = N:
3Nと2 / T(N)= 73.2パーセントの
10N / T(N)= 24.4%
10 / T(N)= 2.4%

= 100ときN-:
3Nと2 / T(N)= 96.7%の
10N / T(N)3.2%=
10 / T(N)= <0.1%の
N-ことがわかる2は、ほぼ全体実行時間を占有します。

:ステージ、共通の時間複雑さの数だけインクリメントされ
、一定の順序:O(1)最初の要素からのデータセット取得する
ための:O(log2n)は、2つの半分にデータセットを、各半分を次いで別々に再分割されます両半分一の記載(2を底とする対数n)は
对数:如果x^2=n ,那么2就为以x为底n的对数。也就对求幂的逆运算
次の線形:O(n)の横断データのセット
の線形順序:半分に分割されたデータの組にO(nlog2n)を、そして半分が再び分離しませんでした半分に、というように、プロセスデータを同時に各半分を通る
正方形の順序:O(N ^ 2)データの他のセットは、同じ大きさのオーダー通過しながら各要素のデータセットを横断
指数注文を:O(2 ^ n個)は、すべてのデータのサブセットとして生成することができる設定
データのセットのすべての可能な順列を生成する階乗順序を:! O(n)は
、nの大きさが増大するという問題と、アルゴリズムは、時間計算量が増加されます効率を下げます。
図:
ここに画像を挿入説明
どのようにそれの時間の複雑さの解析?
そして、時間のアルゴリズム実行意志経過=アルゴリズム各ステートメントの
回数(頻度)各ステートメントのステートメントの実行時間は= *文の実行時間を実行する必要がありました。
時間それぞれの文は、他の要因コードの品質とマシンのパフォーマンス命令のうち、依存、およびコンパイラによって生成された速度は、通常は各ステートメントのために必要な時間は1回実行されているものとします。
時間がかかり、最終的なアルゴリズムは次のとおりです。
周波数とすべての文の時間=合計

たとえば:バブルソートの時間計算量を見つけます

function BubbleSort(list)
	for i = 1,table.getn(list) - 1 do		            
		for j = 1,table.getn(list) - 1 - i do		   	 
			if list[j] > list[j+1] then							
				list[j],list[j+1] = list[j+1],list[j]
			end
		end
	end
end

バブルソートアルゴリズムにおいて、それぞれ同定1及び2を有する2つのサイクルの合計、
長さが想定され、我々は、Nであることが行のアレイに渡し、その後サイクルが実行されるべき第一の層を必要とN-1回(実際に必要なぜなら最初の文とサイクルを継続するかどうかを決定するための追加の比較のため)は、n-1 + 1回の実装。
:第二層は、ループ実行で
I = 1、N -'- N- = 1、。。
I = 2、N -'- N-2 =
...
'= N-(N-1-1オブ) - I-N-1-1 =、n個の
有意数に、ある点では、N = 5と仮定
ことを
。5
。4
。3
2
1
、それは明らかである等差級数、算術級数の総和の式
(最後の項目最初のアイテム+)項目数* / 2 =(N + 1 ) N- / (N-2 =。(N + 1))/ 2
上記によれば、
T(N)=(N 2 + N-)/ 2
の表記に従って、およびO:
1.定数項を無視
2無視定数係数
3.無視最下位
次いで、O(T(N))= O(N 2

たとえば:ソート方法選択します。

function SelectionSort(t)
	local pos = 1;
	for i=1,#t do
		pos =i;
		for j=1+i,table.getn(t) do
			if t[j] < t[pos] then
				pos = j;
			end
		end
		t[pos],t[i] = t[i],t[pos]
	end
end

一階は、ループのN回、2,3,4,5,6-ために必要... Nも演算シーケンス加算、O(n個の最悪時の複雑実行する必要がある2

宇宙複雑:
必要なアルゴリズムは、コンピュータ内で実行された空間の複雑さメトリック記憶手段。S(N)= O(F算出 (N))
アルゴリズムの実行中に必要なメモリ空間は、3つの部分から構成:
空間は、プログラムアルゴリズム1によって占有される
初期の2入力データ・ストレージ・スペースが占有
3.アルゴリズムの実行処理を必要に応じて追加のスペース。

公開された28元の記事 ウォン称賛18 ビュー20000 +

おすすめ

転載: blog.csdn.net/qq_18192161/article/details/89461127