1. 程式人生 > >2.資料結構和演算法——演算法時間複雜度

2.資料結構和演算法——演算法時間複雜度

定義


在進行演算法分析時,語句總的執行次數T(n)時關於問題規模n的函式,進而分析T(n)隨n的變化情況並確定T(n)的數量級。演算法的時間複雜度,也就是演算法的時間度量,記作:T(n) = O(f(n))。它表示歲問題規模n的增大,稱作演算法的漸進時間複雜度,簡稱為時間複雜度。其中f(n)時問題規模n的某個函式。
說了半天就差不多要知道這個東西 執行此時==時間

O()來提現演算法時間複雜度的記法,稱為大O記法

一般情況下,隨著輸入規模n的增大,T(n)增長最 的演算法為最優演算法

推導大O階方法


  • 用常數1取代執行時間中的所有加法常數
  • 在修改後的執行次數函式中,只保留最高階項
  • 如果最高階項數存在而且不是1,則去除與這個項相乘的常數
  • 得到的最後結果就是大O階

常數階:O(1)

線性階:O(n)

一般含有非巢狀迴圈涉及線性階,對應計算次數呈直線增長

int n = 100, sum = 0;
for(int i = 0; i < n; i++)
{
	sum += i;
}

平方階:O(n^2)

如果n=100,外層執行一次,內層執行100次,所以程式執行了100^2次

int i, j, n = 100;
for (i = 0; i < n; i++)
{
	for (j = 0; j < n; j++)
	{
		printf("hello");
	}
}

但是如果存在

int i, j, n = 100;
for (i = 0; i < n; i++)
{
	for (j = i; j < n; j++)
	{
		printf("hello");
	}
}

他還是O(n^2)

對數階:O(logn)