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)