一.問答題(每題 10 分,共 100 分)
1.若已知一個二元樹(binary tree)的節點數(node)總共有 305 個,且有 104 個樹葉
節點(leaf node)
,試求出分支度(degree of branch)為 1 的節點數有多少個?
參考解答:
n0+n1+n2=305
n0=n2+1,由題目,故 n2=103
分支度為 1 的節點樹為 98 個
2. 今有八個數字: 6、12、7、9、15、10、4、11 儲存於陣列中,由不同演算法進行遞
增排序。
(1).請按照合併排序法(merge sort)步驟,列出此八個數字的順序變化過程。
(2).請按照快速排序法(quick sort)步驟,列出此八個數字的順序變化過程。
(3).如果輸入 n 筆資料時,請寫出這二種排序法之時間複雜度以及空間複雜度。
參考解答:
(一)合併排序
6 12 7 9 15 10 4 11
6 12 7 9 10 15 4 11
6 7 9 12 4 10 11 15
4 6 7 9 10 11 12 15
(二)快速排序
6 12 7 9 15 10 4 11
[4] 6 [7 9 15 10 12 11]
4 6 [7 9 15 10 12 11]
4 6 7 [9 15 10 12 11]
4 6 7 9 [15 10 12 11]
4 6 7 9 [11 10 12] 15
4 6 7 9 [10] 11 [12] 15
4 6 7 8 10 11 [12] 15
4 6 7 8 10 11 12 15
(三)時間與空間複雜度
時間複雜度 空間複雜度
快速排序法 平均:O(nlogn)
最佳:O(nlogn)
最差:O(n2
)
Ο(log n) ~ Ο(n)
合併排序法 平均:O(nlogn)
最佳:O(nlogn)
最差:O(nlogn)
Ο(n)
3. 請使用虛擬碼(pseudocode)或 C 語言或 C++語言撰寫程式片段。
(1).以遞迴的呼叫方式寫出二元搜尋法(binary search)
。
(2).請說明時間複雜度為何?
參考解答:
(1).
int binarySearch (int sortedArray [ ] , int key , int  , int μ) {
if (  <=μ) {
int mid=( +μ)/2;
if (key == sortedArray [mid])
return mid;
else if (key<sortedArray [mid])
return binarySearch (sortedArray ,key ,  , mid-1) ;
else
return binarySearch (sortArray ,key ,mid+1 ,μ) ;
} else {
return -1 ; //Not Found
}
}
(2). O(logn)

4.請問下列輸出為何?
#include <stdio.h>
class A{
public:
int X;
A() { X = 1; printf("X = %dn", X); }
};
class B : public A {
public:
B() { X = 2; printf("X = %dn", X); }
};
main()
{
B * pB = new B;
}
參考解答:
X = 1
X = 2
5.
#include <stdio.h>
#include <stdlib.h>
void F(int* p, int n) {
int i;
for (i = 0; i < n - 1; i = i + 1) {
int tmp = *(p + i + 1);
*(p + i + 1) = *(p + i);
*(p + i) = tmp;
}
}
int main() {
int a[5] = { 7,3,6,9,5 };
F(a, 5);
for(int i=0;i<=4;i++){
printf("%dn", a[i]);
}
system("pause");
return 0;
}
參考解答:
3
6
9
5
7
6.請試述下列名詞之意涵
(1).object code
(2).preprocessor command
(3).data hiding
(4).local variable
(5).Overloading
參考解答:
(1) object code: 目的碼會載入記憶體並於日後執行。
(2) preprocessor command: 例如: define,主要用來使程式在不同執行環境中易於變更和編譯。
(3) data hiding: 此為封裝的技術,將物件的權限進行封裝,分為內部受保護與外部可取用。
(4) local variable: 宣告於 block 之內,當 block 結束,就會將區域變數做回收。
(5) Overloading: 此為多載,運用相同的函式名稱接收不同的參數。
7.搜尋(search)是在一堆資料中找出所要之特定資料。搜尋之主要核心動作為「比較」動作,
透過比較才有辦法判斷是否尋找到特定資料。
(1).sequential search 法來尋找 1000 筆元素中的一個資料,請問最多需要比較幾次?
(2).binary search 法來尋找 1000 筆已排序的元素中的一個資料,請問最多需要比較幾次?
(3).binary search 法通常會比 sequential search 法使用比較的次數較少,那請問在什麼情形下還
是非採用 sequential search 法不可?
(4).binary search 法的程式中通常會有類似下列程式碼的一行,請你說明其中 Low 及 High 變數
的用途為何?
(5).Middle =(int)((Low + High)/2); 承上小題,請你說明其中程式碼中(int)的用途為何?
參考解答:
(1).最多的情況為找到最後一筆,故為 1000 次。
(2).若採用二分搜尋,最多為 log(n+1)取上標。
(3).當資料並非以大小進行搜尋,而是其屬性進行搜尋時,此時無法用樹的方式劃分,因此會回
歸到利用 sequential search。
(4).LOW 跟 HIGH 分別指的就是上限和下限,透過上限和下限取得中間值進行資料比對。
(5).(int)主要作用為強制轉型,即取出整數。
8.通常我們說要訓練類神經網路,但訓練沒有很成功,指的意思是什麼?
參考解答:
指的是最終的輸出結果並沒有和真實世界相匹配。
9. 網路對於生活影響程度與日俱增,駭客利用網路從事電腦犯罪也屢見不鮮,請回答
下列相關問題:
(1).何謂分散式阻斷服務攻擊(DDoS)?試說明之。
(2).常見的網路系統安全威脅來自那三個來源?試說明之。
參考解答:
(1).
DDoS 為多台主機同時向目標主機請求資源,故目標主機可能在回應的過程中因為負荷量過大而
導致主機癱瘓,此透過多台主機不斷向同一台主機請求便稱為 DDoS。
(2).
1.來自外部的入侵者(例如電腦駭客)
2.惡意散播的訊息
3.內部惡意的使用者

正課第10週模擬試題_解答.pdf

  • 1.
    一.問答題(每題 10 分,共100 分) 1.若已知一個二元樹(binary tree)的節點數(node)總共有 305 個,且有 104 個樹葉 節點(leaf node) ,試求出分支度(degree of branch)為 1 的節點數有多少個? 參考解答: n0+n1+n2=305 n0=n2+1,由題目,故 n2=103 分支度為 1 的節點樹為 98 個 2. 今有八個數字: 6、12、7、9、15、10、4、11 儲存於陣列中,由不同演算法進行遞 增排序。 (1).請按照合併排序法(merge sort)步驟,列出此八個數字的順序變化過程。 (2).請按照快速排序法(quick sort)步驟,列出此八個數字的順序變化過程。 (3).如果輸入 n 筆資料時,請寫出這二種排序法之時間複雜度以及空間複雜度。 參考解答: (一)合併排序 6 12 7 9 15 10 4 11 6 12 7 9 10 15 4 11 6 7 9 12 4 10 11 15 4 6 7 9 10 11 12 15 (二)快速排序 6 12 7 9 15 10 4 11 [4] 6 [7 9 15 10 12 11] 4 6 [7 9 15 10 12 11] 4 6 7 [9 15 10 12 11] 4 6 7 9 [15 10 12 11] 4 6 7 9 [11 10 12] 15 4 6 7 9 [10] 11 [12] 15 4 6 7 8 10 11 [12] 15 4 6 7 8 10 11 12 15
  • 2.
    (三)時間與空間複雜度 時間複雜度 空間複雜度 快速排序法 平均:O(nlogn) 最佳:O(nlogn) 最差:O(n2 ) Ο(logn) ~ Ο(n) 合併排序法 平均:O(nlogn) 最佳:O(nlogn) 最差:O(nlogn) Ο(n) 3. 請使用虛擬碼(pseudocode)或 C 語言或 C++語言撰寫程式片段。 (1).以遞迴的呼叫方式寫出二元搜尋法(binary search) 。 (2).請說明時間複雜度為何? 參考解答: (1). int binarySearch (int sortedArray [ ] , int key , int  , int μ) { if (  <=μ) { int mid=( +μ)/2; if (key == sortedArray [mid]) return mid; else if (key<sortedArray [mid]) return binarySearch (sortedArray ,key ,  , mid-1) ; else return binarySearch (sortArray ,key ,mid+1 ,μ) ; } else { return -1 ; //Not Found } } (2). O(logn) 
  • 3.
    4.請問下列輸出為何? #include <stdio.h> class A{ public: intX; A() { X = 1; printf("X = %dn", X); } }; class B : public A { public: B() { X = 2; printf("X = %dn", X); } }; main() { B * pB = new B; } 參考解答: X = 1 X = 2
  • 4.
    5. #include <stdio.h> #include <stdlib.h> voidF(int* p, int n) { int i; for (i = 0; i < n - 1; i = i + 1) { int tmp = *(p + i + 1); *(p + i + 1) = *(p + i); *(p + i) = tmp; } } int main() { int a[5] = { 7,3,6,9,5 }; F(a, 5); for(int i=0;i<=4;i++){ printf("%dn", a[i]); } system("pause"); return 0; } 參考解答: 3 6 9 5 7
  • 5.
    6.請試述下列名詞之意涵 (1).object code (2).preprocessor command (3).datahiding (4).local variable (5).Overloading 參考解答: (1) object code: 目的碼會載入記憶體並於日後執行。 (2) preprocessor command: 例如: define,主要用來使程式在不同執行環境中易於變更和編譯。 (3) data hiding: 此為封裝的技術,將物件的權限進行封裝,分為內部受保護與外部可取用。 (4) local variable: 宣告於 block 之內,當 block 結束,就會將區域變數做回收。 (5) Overloading: 此為多載,運用相同的函式名稱接收不同的參數。 7.搜尋(search)是在一堆資料中找出所要之特定資料。搜尋之主要核心動作為「比較」動作, 透過比較才有辦法判斷是否尋找到特定資料。 (1).sequential search 法來尋找 1000 筆元素中的一個資料,請問最多需要比較幾次? (2).binary search 法來尋找 1000 筆已排序的元素中的一個資料,請問最多需要比較幾次? (3).binary search 法通常會比 sequential search 法使用比較的次數較少,那請問在什麼情形下還 是非採用 sequential search 法不可? (4).binary search 法的程式中通常會有類似下列程式碼的一行,請你說明其中 Low 及 High 變數 的用途為何? (5).Middle =(int)((Low + High)/2); 承上小題,請你說明其中程式碼中(int)的用途為何? 參考解答: (1).最多的情況為找到最後一筆,故為 1000 次。 (2).若採用二分搜尋,最多為 log(n+1)取上標。 (3).當資料並非以大小進行搜尋,而是其屬性進行搜尋時,此時無法用樹的方式劃分,因此會回 歸到利用 sequential search。 (4).LOW 跟 HIGH 分別指的就是上限和下限,透過上限和下限取得中間值進行資料比對。 (5).(int)主要作用為強制轉型,即取出整數。 8.通常我們說要訓練類神經網路,但訓練沒有很成功,指的意思是什麼? 參考解答: 指的是最終的輸出結果並沒有和真實世界相匹配。
  • 6.