VC++ “時間複雜度”需要注意的常見問題

1、以下程序運行的調度次數

int n = 10;
for (int i = 1; i < n; i++)
	for (int j = 1; j < n; j = j + n / 2)
		for (int k = 1; k < n; k = 2 * k)
			x = x + 1;
時間複雜度:(nlogn)

2、按數量級遞增排序,常見的時間複雜度有:

常數階:O(1)

對數階:O(log(2)n)

線性階:O(n)

線性對數階:O(nlog(2)n)

平方階:O(n^2)

立方階:O(n^3)

……

K次方階:O(n^k)

指數階:O(2^n)

3、以下哪種節構,平均來講獲取任意一個指定值最快:

A:二叉樹序樹

B:哈希表

C:棧

D:隊列

答案:B

4、輾轉相除法的時間複雜度:

歐幾裏算法,又稱爲輾轉相除法,用於求兩個自然數的最大公約數,算法的思想很簡單,基於下面的數論等式

gcd(a,b)=gcd(a,a mod b),其時間複雜度爲O(logn)

5、算法實現如下的問題:

有20個數組,每個數組裏面有500個數,升序排序,求出這10000個數字中最大的500個,同時確定時間複雜度。

算法分析:20個數組的最小元素全部進堆。每次去最小的一個時候,從最小元素對應的數組裏取下來一個放到堆裏。堆裏一直最多有20個數,

充分利用20個數組的有序性。

A:判斷20個數組的第一個元素,取出最小的放到堆裏面,同時被取出數的數組刪除對應的數值,長度減1.

B,判斷所有數組元素的個數,是否大於500,若大於則執行A,否則停止並輸出所有數組的元素

時間複雜度:500*log(20)


發佈了87 篇原創文章 · 獲贊 14 · 訪問量 14萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章