1. 程式人生 > >第一章作業2-演算法時間複雜度和空間複雜度

第一章作業2-演算法時間複雜度和空間複雜度

1-1

演算法分析的兩個主要方面是時間複雜度和空間複雜度的分析。 (1分)

T     

1-2

N​^2​​logN和NlogN^​2​​具有相同的增長速度。 (2分)

F: N​^2​​logN較快 ,取對數對增長影響還是蠻大的,畢竟裸的logn函式後期增長率趨近於零

1-3

2^​N​​和N^​N​​具有相同的增長速度。 (2分)

F:   N^​N​​炒雞快

1-4

100logN是O(N)的。 (1分)

 F:大O表示法是不看係數的,所以是O(logN)的

1-5

(NlogN)/1000是O(N)的。 (1分)

 F:是 O(nlogn)的

1-6

在任何情況下,時間複雜度為O(n​2​​) 的演算法比時間複雜度為O(n*logn)的演算法所花費的時間都長。 (1分)

 F:具體問題具體分析

1-7

對於某些演算法,隨著問題規模的擴大,所花的時間不一定單調增加。 (1分)

T    

2-1

下面程式碼段的時間複雜度是(2)。(2分)

x=n; //n>1
y=0;
while( x≥(y+1)*(y+1) )
    y++;
  1. O(1)
  2. O(n​1/2​​)
  3. O(n)
  4. O(log​2​​n)

2-2

下列程式碼

if ( A > B ) {
    for ( i=0; i<N*N/100; i++ )// if裡的迴圈為O(n^4)
        for ( j=N*N; j>i; j-- )
            A += B;
}
else {
    for ( i=0; i<N*2; i++ )    //else 裡的迴圈為O(N^2)的
        for ( j=N*3; j>i; j-- )
            A += B;
}

的時間複雜度是:(2分)

  1. O(N​3​​)
  2. O(N​4​​)  
  3. O(N​5​​)
  4. O(N​6​​)

2-3

下列函式

int func ( int n )
{   int i = 0, sum = 0;
    while ( sum < n )  sum += ++i;//等差數列求和
    return i;
}

的時間複雜度是:(2分)

  1. O(logn)
  2. O(n^1/2​​)
  3. O(n)
  4. O(nlogn)

2-4

下列程式碼

for(i=0; i<n; i++)
  for(j=i; j>0; j/=2)
     printf(“%d\n”, j);

的時間複雜度是: (3分)

  1. O(N×i)
  2. O(N)
  3. O(N​2​​)
  4. O(NlogN)

2-5

下面程式碼段的時間複雜度是()。 (2分)

x=0;  
for( i=1; i<n; i++ )  
    for ( j=1; j<=n-i; j++ )  
        x++;
  1. O(n)
  2. O(n​2​​)
  3. O(n​3​​)
  4. O(2​n​​)

2-6

要判斷一個整數N(>10)是否素數,我們需要檢查3到√​N​​​之間是否存在奇數可以整除N。則這個演算法的時間複雜度是:(2分)

  1. O(N/2)
  2. O(√​N​​​)
  3. O(√​N​​​logN)
  4. O(0.5logN)

2-7

下列函式中,哪個函式具有最慢的增長速度:(2分)

  1. N​^1.5​​
  2. NlogN​2​​
  3. N^​2​​logN
  4. N(logN)​^2​​

2-8

給定N×N×N的三維陣列A,則在不改變陣列的前提下,查詢最小元素的時間複雜度是:(2分)

  1. O(N​^2​​)
  2. O(NlogN)
  3. O(N^​3​​logN)
  4. O(N​^3​​)

2-9

計算機演算法指的是()。 (2分)

  1. 計算方法
  2. 排序方法
  3. 解決問題的有限運算序列
  4. 排程方法

2-10

計算機演算法必須具備輸入、輸出和()等五個特性。 (2分)

  1. 可行性、可移植性和可擴充性
  2. 可行性、確定性和有窮性
  3. 確定性、有窮性和穩定性
  4. 易讀性、穩定性和安全性