113 年 國立中正大學資訊工程學系碩士班甲組《軟體設計》

📄 試題原卷 免費註冊後即可對照原始考卷 PDF免費註冊
📄 以下 3 題共用同一段題幹

The following is an AVL tree, which is implemented/represented as an array. Please answer the following questions from Q1 to Q3.

🖼️【此處有附圖,請對照原卷】

第 1 題3 分

After inserting a new node with the key "43" into the AVL tree, what does the array representation of the AVL tree look like? Please note that a "−" represents a null value in the array.

(A) (65,40,70,35,50,−,80,−,−,45,55,−,43)(65,40,70,35,50,−,80,−,−,45,55,−,43)

(B) (65,40,70,35,45,−,80,−,−,43,50,−,−,55)(65,40,70,35,45,−,80,−,−,43,50,−,−,55)

(C) (65,45,70,40,50,−,80,35,43,−,55)(65,45,70,40,50,−,80,35,43,−,55)

(D) (65,45,70,35,50,−,−,80,40,43,−,55)(65,45,70,35,50,−,−,80,40,43,−,55)

(E) None of the above

🖼️ 本題附圖:
第 1 題附圖
圖看不清楚?展開原卷第 2 頁核對
原卷第 2 頁

登入後即可作答並保存紀錄。

這一題的完整詳解

核心觀念

AVL 樹在每次插入後,都要檢查從新節點往根回溯的節點平衡因子:

BF(v)=h(左子樹)−h(右子樹)BF(v)=h(\text{左子樹})-h(\text{右子樹})

若 ∣BF(v)∣>1|BF(v)|>1,就依插入路徑進行旋轉。本題原圖中,根節點是 6565;其左子節點 4040 的左右子節點為 3535、5050;5050 的左右子節點為 4545、5555;右子節點 7070 有右子節點 8080。

解題方法

插入 4343 時,依二元搜尋樹規則往下比較:43<6543<65、43>4043>40、43<5043<50、43<4543<45,因此 4343 成為 4545 的左子節點。

節點 5050 的平衡因子為 +1+1,仍平衡;節點 4040 的平衡因子為 −2-2,而插入路徑是從 4040 的右子樹進入其左子樹,因此屬於右左(RL)型。

先對 5050 右旋,再對 4040 左旋。旋轉後,4545 成為該子樹的新根,4040 與 5050 分別成為它的左右子節點:

  • 4040 的左右子節點為 3535、4343。
  • 5050 的右子節點為 5555。
  • 6565 的右子樹仍是 7070,且 7070 的右子節點為 8080。
🔒

後續完整解題步驟與【答案】

免費註冊,享三天全站完整詳解閱覽。

免費註冊

第 2 題3 分

Perform the post-order traversal on the AVL tree constructed for the first question (Q1) after the insertion. What is the sequence of nodes in the post-order traversal of the AVL tree?

(A) 35→43→45→55→50→40→80→70→6535\to43\to45\to55\to50\to40\to80\to70\to65

(B) 35→43→55→50→45→40→80→70→6535\to43\to55\to50\to45\to40\to80\to70\to65

(C) 35→43→40→55→50→45→80→70→6535\to43\to40\to55\to50\to45\to80\to70\to65

(D) 65→40→35→50→45→43→55→70→8065\to40\to35\to50\to45\to43\to55\to70\to80

(E) None of the above

🖼️ 本題含圖表,以下為原卷對應頁面:
原卷第 2 頁

登入後即可作答並保存紀錄。

這一題的完整詳解

核心觀念

AVL 樹要求每個節點的左右子樹高度差至多為 11。插入節點後若失衡,依失衡節點與插入方向判斷旋轉方式。本題會用到「右左(RL)雙旋轉」。

後序走訪的順序是「左子樹、右子樹、根節點」,也就是先走完左右子樹,最後才記錄目前節點。

解題方法

圖中原樹的結構為:根節點 6565 的左右子節點是 4040、7070;4040 的左右子節點是 3535、5050;5050 的左右子節點是 4545、5555;7070 的右子節點是 8080。將 4343 插入二元搜尋樹時,路徑是 65→40→50→4565\to40\to50\to45,因此 4343 成為 4545 的左子節點。

插入後,節點 4040 的右子樹比左子樹高兩層,造成失衡;插入位置在 4040 的右子節點 5050 的左子樹,屬於右左(RL)情況。先對 5050 右旋,再對 4040 左旋,得到:

  • 4545 成為 6565 的左子節點。
  • 4545 的左子節點為 4040,其子節點為 3535、4343。
  • 4545 的右子節點為 5050,其右子節點為 5555。
  • 6565 的右子樹維持 7070,而 7070 的右子節點為 8080。

依後序規則,先走訪 4545 的左子樹,得到 35→43→4035\to43\to40;再走訪右子樹,得到 55→5055\to50;最後記錄 4545。

🔒

後續完整解題步驟與【答案】

免費註冊,享三天全站完整詳解閱覽。

免費註冊

第 3 題3 分

Remove the node with the key "65" from the AVL tree constructed for the first question (Q1) after the insertion. What does the array representation of the AVL tree look like?

(A) (35,45,70,40,50,−,80,−,43,−,55)(35,45,70,40,50,−,80,−,43,−,55)

(B) (55,45,70,40,50,−,80,43,35)(55,45,70,40,50,−,80,43,35)

(C) (45,40,70,35,43,50,80,−,−,−,−,−,55)(45,40,70,35,43,50,80,−,−,−,−,−,55)

(D) (45,40,70,55,43,50,80,35)(45,40,70,55,43,50,80,35)

(E) None of the above

🖼️ 本題含圖表,以下為原卷對應頁面:
原卷第 2 頁

登入後即可作答並保存紀錄。

這一題的完整詳解

核心觀念

AVL 樹除了符合二元搜尋樹的大小順序,還要求每個節點左右子樹高度差的絕對值不超過 11。刪除節點後,若某節點失衡,就要依失衡方向與子樹高度進行旋轉。

二元搜尋樹中,刪除有兩個子節點的節點時,可用其中序後繼(右子樹最小值)取代,再刪除後繼原本的位置。以下依此標準方式處理。

解題方法

圖中原樹的根節點是 6565;其左子樹根為 4040,右子樹根為 7070。節點 4040 的左右子節點是 3535、5050;節點 5050 的左右子節點是 4545、5555;節點 7070 的右子節點是 8080。

先依 Q1 插入 4343:它會成為 4545 的左子節點,使節點 4040 右重,形成右左(RL)失衡。先對 5050 右旋,再對 4040 左旋,得到:

        65
       /  \
     45    70
    / \     \
   40  50    80
  / \    \
 35 43    55

現在刪除根節點 6565。其中序後繼是 7070,以 7070 取代 6565,再刪除原本的 7070;此時 8080 留在根節點的右子樹:

        70
       /  \
     45    80
    / \
   40  50
  / \    \
 35 43    55
🔒

後續完整解題步驟與【答案】

免費註冊,享三天全站完整詳解閱覽。

免費註冊
📄 以下 2 題共用同一段題幹

Given a fully parenthesized arithmetic expression provided below, please answer the following questions from Q4 to Q5.

B−E/(A−D)+E+C∗D−A∗BB-E/(A-D)+E+C*D-A*B

第 4 題3 分

Please find the expression tree and answer the level-order traversal of the expression tree. When operators have the same precedence, please evaluate them sequentially in the order presented within the expression. For instance, in the expression "a + b + c," calculate "a + b" first before combining the result with "c."

(A) −++−∗ABB/E∗E−CDAD-++-*ABB/E*E-CDAD

(B) +−+−∗E∗B/ABCDE−AD+-+ -*E*B/ABCDE-AD

(C) −+∗−+ABB/E∗E−CDAD-+* -+ABB/E*E-CDAD

(D) −+−+∗AB/BE∗E−CDAD-+-+*AB/BE*E-CDAD

(E) None of the above

登入後即可作答並保存紀錄。

這一題的完整詳解

核心觀念

運算式樹中,運算子是內部節點,運算元是葉節點。層序走訪(level-order traversal)從根節點開始,依照由上而下、每層由左至右的順序列出節點。

本題先依照運算子優先順序解析運算式:括號內優先,其次為乘除,最後為加減;同一優先順序的運算子則由左至右結合。

解題方法

先依規則補上運算次序:

(((B−(E/(A−D)))+E)+(C∗D))−(A∗B)(((B-(E/(A-D)))+E)+(C*D))-(A*B)

因此,最外層運算是減法,根節點為 −-;根節點的左子樹是前三項與 C∗DC*D 相加的結果,右子樹是 A∗BA*B。

運算式樹如下:

                 -
              /     \
             +       *
           /   \    / \
          +     *  A   B
        /  \   / \
       -    E C   D
      / \
     B   /
        / \
       E   -
          / \
         A   D

依層由上而下、每層由左至右列出節點:

🔒

後續完整解題步驟與【答案】

免費註冊,享三天全站完整詳解閱覽。

免費註冊

第 5 題3 分

What is the expression in prefix form?

(A) +−−B/E−AD∗AB+E∗CD+--B/E-AD*AB+E*CD

(B) −BEAD/−AB∗−ECD∗++-BEAD/-AB*-ECD*++

(C) −+−B/E−AD+E∗CD∗AB-+-B/E-AD+E*CD*AB

(D) +−−/BE−A∗DAB+E∗CD+--/BE-A*DAB+E*CD

(E) None of the above

登入後即可作答並保存紀錄。

這一題的完整詳解

核心觀念

把中序式轉成前序式,要先依優先序(*、/ 高於 +、-)與結合律(同優先序由左至右)加上完整括號,確定每個運算子的運算元,再把運算子移到它的兩個運算元前面。

解題方法

  1. 括號內與高優先序先結合:
    • E/(A−D)E/(A-D)、C∗DC*D、A∗BA*B。
  2. 剩下的 -、+、+、- 同優先序,由左至右結合:
(((B−E/(A−D))+E)+C∗D)−A∗B\Big(\big((B-E/(A-D))+E\big)+C*D\Big)-A*B
  1. 由內而外寫成前序:
    • A−D⇒−ADA-D \Rightarrow -AD
    • E/(A−D)⇒/E−ADE/(A-D) \Rightarrow /E-AD
    • B−E/(A−D)⇒−B/E−ADB-E/(A-D) \Rightarrow -B/E-AD
    • (…)+E⇒+−B/E−ADE(\ldots)+E \Rightarrow +-B/E-ADE
    • (…)+C∗D⇒++−B/E−ADE∗CD(\ldots)+C*D \Rightarrow ++-B/E-ADE*CD
    • (…)−A∗B⇒−++−B/E−ADE∗CD∗AB(\ldots)-A*B \Rightarrow -++-B/E-ADE*CD*AB

前序式為 -++-B/E-ADE*CD*AB。

🔒

後續完整解題步驟與【答案】

免費註冊,享三天全站完整詳解閱覽。

免費註冊

第 6 題3 分

Given the following failure function in the KMP matching algorithm and a string “AAABAAAAABAA” with 12 characters, what are the values of the failure function for the entire string?

f(j)={largest k<j, such that p0p1⋯pk=pj−kpj−k+1⋯pj,if such a k≥0 exists−1,otherwisef(j)= \begin{cases} \text{largest }k<j,\text{ such that }p_0p_1\cdots p_k=p_{j-k}p_{j-k+1}\cdots p_j,&\text{if such a }k\geq0\text{ exists}\\ -1,&\text{otherwise} \end{cases}

(A) −1,0,1,−1,0,1,2,0,−1,0,1,2-1,0,1,-1,0,1,2,0,-1,0,1,2

(B) −1,0,1,0,1,2,2,2,3,4,5,6-1,0,1,0,1,2,2,2,3,4,5,6

(C) −1,0,1,−1,0,1,2,2,3,4,5,6-1,0,1,-1,0,1,2,2,3,4,5,6

(D) −1,−1,0,−1,−1,0,1,2,3,4,5,6-1,-1,0,-1,-1,0,1,2,3,4,5,6

(E) None of the above

登入後即可作答並保存紀錄。

這一題的完整詳解

核心觀念

KMP 的失敗函數 f(j)f(j):p0…pjp_0\ldots p_j 中「既是前綴、又是後綴」的最長真子字串,其最後一個字元的索引 kk;不存在則為 −1-1。遞迴計算:令 k=f(j−1)k=f(j-1),若 pk+1=pjp_{k+1}=p_j 則 f(j)=k+1f(j)=k+1;否則令 k←f(k)k\leftarrow f(k) 再比,直到 k=−1k=-1 時比較 p0p_0。

解題方法

字串 AAABAAAAABAA:

j01234567891011
pjp_jAAABAAAAABAA
f(j)f(j)−101−101222345

關鍵幾格:

  • f(3)f(3):B 與前綴開頭的 A 都不符 → −1-1。
  • f(7)f(7):f(6)=2f(6)=2,比 p3=B≠Ap_3=B\ne A;退到 f(2)=1f(2)=1,比 p2=A=p7p_2=A=p_7 → 22(最長相同前後綴為 AAA)。
🔒

後續完整解題步驟與【答案】

免費註冊,享三天全站完整詳解閱覽。

免費註冊

第 7 題3 分

Determine the binary tree using the provided in-order and post-order traversals. What is the resulting pre-order traversal of the constructed binary tree?

In-order: A,B,G,E,D,I,J,F,H,CA,B,G,E,D,I,J,F,H,C

Post-order: G,E,J,I,H,F,D,C,B,AG,E,J,I,H,F,D,C,B,A

(A) A,B,C,D,E,F,G,I,H,JA,B,C,D,E,F,G,I,H,J

(B) A,B,G,E,D,C,I,J,F,HA,B,G,E,D,C,I,J,F,H

(C) A,B,C,D,E,G,F,I,J,HA,B,C,D,E,G,F,I,J,H

(D) A,B,C,D,E,F,G,I,J,HA,B,C,D,E,F,G,I,J,H

(E) None of the above

登入後即可作答並保存紀錄。

這一題的完整詳解

核心觀念

由中序(左-根-右)與後序(左-右-根)可唯一重建二元樹:後序的最後一個元素是根;在中序中找到根,左邊是左子樹、右邊是右子樹;再依子樹大小把後序切成左、右兩段,遞迴處理。

解題方法

  • 中序:A, B, G, E, D, I, J, F, H, C
  • 後序:G, E, J, I, H, F, D, C, B, A
  1. 後序最後是 A → 根為 A。中序中 A 在最前面 → A 沒有左子樹,右子樹的中序為 B,G,E,D,I,J,F,H,C,後序為 G,E,J,I,H,F,D,C,B。
  2. 右子樹的根為 B(後序最後)。中序中 B 在最前面 → B 只有右子樹:中序 G,E,D,I,J,F,H,C;後序 G,E,J,I,H,F,D,C。
  3. 根為 C。中序中 C 在最後 → C 只有左子樹:中序 G,E,D,I,J,F,H;後序 G,E,J,I,H,F,D。
  4. 根為 D。中序切成左 {G,E}、右 {I,J,F,H};後序對應切成 G,E 與 J,I,H,F。
    • 左子樹:後序 G,E → 根 E,中序 G,E → G 是 E 的左子節點。
    • 右子樹:後序 J,I,H,F → 根 F;
🔒

後續完整解題步驟與【答案】

免費註冊,享三天全站完整詳解閱覽。

免費註冊
📄 以下 2 題共用同一段題幹

Given the directed graph below, please answer the following questions from Q8 to Q9.

🖼️【此處有附圖,請對照原卷】

第 8 題2 分

Please use the cost on each edge as the weight and perform Dijkstra’s algorithm starting from vertex A. What is the order in which the vertices are selected by Dijkstra’s algorithm?

(A) A→B→D→F→E→CA\to B\to D\to F\to E\to C

(B) A→C→E→B→D→FA\to C\to E\to B\to D\to F

(C) A→B→D→E→C→FA\to B\to D\to E\to C\to F

(D) A→B→C→D→F→EA\to B\to C\to D\to F\to E

(E) None of the above

🖼️ 本題附圖:
第 8 題附圖
圖看不清楚?展開原卷第 4 頁核對
原卷第 4 頁

登入後即可作答並保存紀錄。

這一題的完整詳解

核心觀念

Dijkstra 演算法適用於邊權重皆非負的有向圖。從起點 AA 開始,每一步選出「尚未確定最短距離、暫定距離最小」的頂點,並用它更新相鄰頂點的暫定距離。頂點被選出時,其起點最短距離即已確定。

解題方法

圖中可讀到的有向邊與權重為:A→BA\to B 權重 1010、A→CA\to C 權重 1515、B→DB\to D 權重 1212、B→FB\to F 權重 1515、D→FD\to F 權重 11、D→ED\to E 權重 22、F→EF\to E 權重 55、C→EC\to E 權重 1010。依邊的箭頭方向,從 AA 執行 Dijkstra:

  1. 選出起點 AA,距離為 00。更新 B=10B=10、C=15C=15。
  2. 未確定的頂點中,BB 距離最小,選出 BB。更新 D=10+12=22D=10+12=22、F=10+15=25F=10+15=25。
  3. CC 距離為 1515,小於 DD 的 2222 與 FF 的 2525,選出 CC。更新 E=15+10=25E=15+10=25。
  4. DD 距離為 2222,選出 DD。經由 DD 到 FF 的距離為 22+1=2322+1=23,比原本的 2525 短;到 EE 的距離為 22+2=2422+2=24,比原本的 2525 短。
  5. FF 的距離為 2323,選出 FF。經由 FF 到 EE 的距離為 23+5=2823+5=28,不會改善 EE 的距離 2424。
  6. 最後選出 EE,距離為 2424。
🔒

後續完整解題步驟與【答案】

免費註冊,享三天全站完整詳解閱覽。

免費註冊

第 9 題2 分

What is the topological ordering of the graph? You must choose the node with the label that has the smallest alphabetical order first, when finding the topological order.

(A) A→B→D→F→E→CA\to B\to D\to F\to E\to C

(B) A→C→E→B→D→FA\to C\to E\to B\to D\to F

(C) A→B→D→E→C→FA\to B\to D\to E\to C\to F

(D) A→B→C→D→F→EA\to B\to C\to D\to F\to E

(E) None of the above

🖼️ 本題含圖表,以下為原卷對應頁面:
原卷第 4 頁

登入後即可作答並保存紀錄。

這一題的完整詳解

核心觀念

拓樸排序是將有向無環圖的頂點排列成線性順序,使每條有向邊 u→vu\to v 都符合「uu 排在 vv 前面」。可用入度法逐步處理:每次從目前入度為 00 的頂點中,選標籤字母順序最小者加入排序,再移除它的出邊。

解題方法

圖中有向邊為 A→BA\to B、A→CA\to C、B→DB\to D、B→FB\to F、D→FD\to F、D→ED\to E、F→EF\to E、C→EC\to E。題目要求每一步都優先選字母順序最小的入度為 00 頂點;邊上的權重與拓樸排序無關。

步驟入度為 00 的頂點選取
1AAAA
2B,CB, CBB
3C,DC, DCC
4DDDD
5FFFF
6EEEE

因此拓樸順序為 A→B→C→D→F→EA\to B\to C\to D\to F\to E。

選項分析

🔒

後續完整解題步驟與【答案】

免費註冊,享三天全站完整詳解閱覽。

免費註冊

第 10 題10 分

請回答以下 C 語言程式碼執行後在螢幕上顯示之結果,共兩項輸出(各 5%)。

int main() {
int num = 250;
printf("%X\n", num);
printf("%.2f\n", (float)num);
return 0;
}

登入後即可作答並保存紀錄。

這一題的完整詳解

核心觀念

這題考 printf 的格式指定符與數值表示方式:

  • %X:以大寫十六進位輸出整數。
  • %.2f:以小數形式輸出浮點數,並在小數點後保留兩位。
  • (float)num:將整數 num 轉型為 float。呼叫 printf 時,float 會自動提升為 double。

解題方法

先依格式指定符分別計算兩項輸出。

第一項:十六進位

十進位 250250 轉為十六進位:

250=15×16+10250 = 15 \times 16 + 10

餘數由後往前讀,1515 對應十六進位的 F,1010 對應 A,因此:

25010=FA16250_{10} = \mathrm{FA}_{16}

%X 使用大寫字母輸出,所以第一行為 FA。

第二項:浮點數格式

🔒

後續完整解題步驟與【答案】

免費註冊,享三天全站完整詳解閱覽。

免費註冊

第 11 題10 分

請回答以下 C 語言程式碼執行後在螢幕上顯示之結果。

int main() {
int arr[] = {10, 20, 30, 40, 50};
int *ptr;
int sum = 0;
int i;

for (i = 0; i < 5; i++) {
    ptr = &arr[i];
    if (i % 2 == 0)
        sum += *ptr;
}

printf("%d", sum);

}

登入後即可作答並保存紀錄。

這一題的完整詳解

核心觀念

陣列 arr 的索引從 00 開始,因此 arr[i] 是第 ii 個元素。&arr[i] 取得該元素的位址,指定給指標 ptr 後,*ptr 就是該位址所存放的值。

條件 i % 2 == 0 用來判斷 ii 是否為偶數;只有條件成立時,程式才會把 *ptr 加進 sum。

解題方法

每次迴圈先讓 ptr 指向 arr[i],再依照索引是否為偶數決定要不要累加:

iarr[i]ptr 指向的值是否累加sum
01010是10
🔒

後續完整解題步驟與【答案】

免費註冊,享三天全站完整詳解閱覽。

免費註冊

第 12 題5 分

請回答以下 C 語言程式碼執行後在螢幕上顯示之結果。

void fun1(char *str) {
char *end = str;
char temp;

if (str) {
    while (*end) {
        ++end;
    }
    --end;

    while (str < end) {
        temp = *str;
        *str++ = *end;
        *end-- = temp;
    }
}

}

int main() {
char str[] = "13579";
fun1(str);
int number = atoi(str);
printf("%d\n", number % 10);
return 0;
}

登入後即可作答並保存紀錄。

這一題的完整詳解

核心觀念

本題考查指標走訪字串、原地反轉字串,以及整數取餘數。

C 語言字串以 '\0' 作為結尾標記。end 從字串開頭一路前進,直到 *end == '\0',再往前退一格,便會指向最後一個字元。接著,程式用 str 與 end 分別由前、後往中間移動,交換兩端字元,完成原地反轉。

解題方法

初始字串是 "13579",記憶體中的字元依序為:

索引012345
字元'1''3''5''7''9''\0'

while (*end) 結束時,end 指向 '\0';執行 --end 後,end 指向最後一個字元 '9'。

交換過程如下:

  1. str 指向 '1',end 指向 '9',交換後字串為 "93571"。
  2. 指標往內移動,str 指向 '3',end 指向 '7',交換後字串為 "97531"。
🔒

後續完整解題步驟與【答案】

免費註冊,享三天全站完整詳解閱覽。

免費註冊

第 13 題5 分

Write a C++ program to find the largest factor of a number (the user supplies the number). The program is partially completed for you. Please only fill the missing parts. You should not introduce any new blocks.

number = 24, largest factor = 12

#include <iostream>
using namespace std;

int main() {
int number;
cout << “Enter an integer that is larger than 1: ”;
____; // line (A) (2%)

if (number <= 1) return -1;

int factor = number - 1;
while (____) // line (B) (3%)
    factor--;

cout << “The largest factor is: ” << factor << endl;
return 0;

}

登入後即可作答並保存紀錄。

這一題的完整詳解

核心觀念

因數是能整除某整數的正整數。題目範例把 2424 的最大因數定義為小於 2424 的最大因數,因此要找的是「最大真因數」,不包含數字本身。

解題方法

先讀入整數。factor 從 number - 1 開始,依序往下檢查;當 number 除以 factor 的餘數為 00,就找到因數並停止。由於檢查順序是由大到小,第一個找到的因數就是最大真因數。

兩個空格應填入:

cin >> number
number % factor != 0

以 2424 為例,factor 從 2323 開始往下遞減。2323 到 1313 都無法整除 2424;當 factor 為 1212 時,24 mod 12=024 \bmod 12 = 0,迴圈停止並輸出 1212。

關鍵程式碼

🔒

後續完整解題步驟與【答案】

免費註冊,享三天全站完整詳解閱覽。

免費註冊

第 14 題20 分

Find the best match of each term with the descriptions by writing a letter from 1 to 10 in each of the blanks.

Terms:

(A) function declaration
(B) if-else statement
(C) break statement
(D) pass by value
(E) local variable
(F) void
(G) float
(H) cast
(I) promotion
(J) overloaded function

Descriptions:

  1. A variable declared inside a function

  2. The default method in C++ of passing arguments to parameters

  3. The type in C++ of the constant 5.0F

  4. The type in C++ which has no values

  5. A variable inside of a class definition. If nn and mm are of type int, the programmer can insert this to request the int in nn to be converted to an equivalent value of type double before the division operation occurs, as in this expression: (double)n/m(\text{double})n/m

  6. A specification of a function name, its list of parameter types, and its return type

  7. Selects one of two choices of statements to execute depending on a condition

  8. Causes execution to leave an 'if', 'switch', or a loop and continue at the next statement after the one that was left

  9. A function name that has more than one definition

  10. Conversion of char to int or float to double

登入後即可作答並保存紀錄。

這一題的完整詳解

核心觀念

本題考查 C++ 的基本名詞,包括變數作用範圍、參數傳遞方式、資料型別、型別轉換、函式宣告與控制流程。配對時,先抓各描述中的關鍵字,再用程式語意確認。

解題方法

逐題辨認描述的核心概念:

  • 「函式內宣告的變數」對應區域變數。
  • 「預設的引數傳遞方式」對應傳值呼叫。
  • 5.0F 的尾綴 F 指定型別為 float。
  • void 表示沒有值。
  • (double)n 將 n 轉成 double,屬於型別轉型。
  • char 轉成 int、float 轉成 double,屬於型別提升。
  • 依條件選擇兩種敘述之一,是 if-else;離開迴圈或 switch 則是 break。
  • 同名函式有多個定義,稱為多載函式。

選項分析

(A) function declaration:對應第 6 題。
函式宣告描述函式名稱、參數型別清單與回傳型別,讓編譯器知道函式的介面。

(B) if-else statement:對應第 7 題。
if-else 根據條件真假,選擇兩組敘述中的一組執行。

(C) break statement:對應第 8 題。
break 會結束最內層的迴圈或 switch,從該結構之後的敘述繼續執行。嚴格來說 break 不能單獨跳出 if(if 裡的 break 跳出的是包住它的迴圈或 switch);原題第 8 項把 if 也列進去並不精確,但在所有術語中,「離開結構、跳到其後繼續執行」最符合的仍是 break。

(D) pass by value:對應第 2 題。
C++ 一般參數傳遞方式為傳值:函式收到引數的值之副本,對參數的修改不會直接改變呼叫端的原變數。

(E) local variable:對應第 1 題。
在函式內宣告的變數是區域變數,其作用範圍通常限於所屬函式或區塊。

(F) void:對應第 4 題。
void 表示沒有值,例如函式回傳型別為 void 時,代表函式不回傳值。

🔒

後續完整解題步驟與【答案】

免費註冊,享三天全站完整詳解閱覽。

免費註冊

第 15 題2 分

The solution of the recurrence T(n)=3T(n5)+nT(n)=3T\left(\frac{n}{5}\right)+n is

(A) n3/5n^{3/5}

(B) nn

(C) n5/3n^{5/3}

(D) nlog⁡53n^{\log_5 3}

(E) nlog⁡nn\log n

登入後即可作答並保存紀錄。

這一題的完整詳解

核心觀念

這題考遞迴式的漸近解,可用主定理(Master Theorem)判斷。對形式

T(n)=aT(nb)+f(n)T(n)=aT\left(\frac{n}{b}\right)+f(n)

先比較 f(n)f(n) 與 nlog⁡ban^{\log_b a} 的成長速度。

本題中 a=3a=3、b=5b=5、f(n)=nf(n)=n,因此比較 nn 與 nlog⁡53n^{\log_5 3}。

解題方法

計算遞迴子問題所對應的指數:

log⁡53≈0.683\log_5 3 \approx 0.683

因此 nlog⁡53n^{\log_5 3} 的成長速度低於 nn。更精確地說,存在常數 ε>0\varepsilon>0,使得

nlog⁡53=O(n1−ε)n^{\log_5 3}=O(n^{1-\varepsilon})

這屬於主定理第三種情況的候選條件。再檢查規則性條件:

3f(n5)=3⋅n5=35n≤cn3f\left(\frac{n}{5}\right) =3\cdot\frac{n}{5} =\frac{3}{5}n \le cn

其中可取常數 c=35<1c=\frac{3}{5}<1,所以規則性條件成立。依主定理第三種情況:

T(n)=Θ(f(n))=Θ(n)T(n)=\Theta(f(n))=\Theta(n)

選項分析

🔒

後續完整解題步驟與【答案】

免費註冊,享三天全站完整詳解閱覽。

免費註冊

第 16 題2 分

The solution of the recurrence T(n)=4T(n4)+nlog⁡nT(n)=4T\left(\frac{n}{4}\right)+n\log n is

(A) n2n^2

(B) nlog⁡nn\log n

(C) nlog⁡2nn\log^2 n

(D) nlog⁡(2)nn\log^{(2)}n

(E) nlog⁡n2n\log n^2

登入後即可作答並保存紀錄。

這一題的完整詳解

核心觀念

本題考遞迴式的漸近解,可用 Master 定理。對形式

T(n)=aT(nb)+f(n)T(n)=aT\left(\frac{n}{b}\right)+f(n)

先比較 f(n)f(n) 與 nlog⁡ban^{\log_b a}。若

f(n)=Θ(nlog⁡balog⁡kn),k≥0f(n)=\Theta\left(n^{\log_b a}\log^k n\right),\qquad k\ge 0

則

T(n)=Θ(nlog⁡balog⁡k+1n).T(n)=\Theta\left(n^{\log_b a}\log^{k+1}n\right).

解題方法

本題中 a=4a=4、b=4b=4,所以

nlog⁡ba=nlog⁡44=n.n^{\log_b a}=n^{\log_4 4}=n.

非遞迴項為 f(n)=nlog⁡nf(n)=n\log n,因此

f(n)=Θ(nlog⁡44log⁡1n).f(n)=\Theta\left(n^{\log_4 4}\log^1 n\right).

符合 Master 定理的上述情形,取 k=1k=1,得到

T(n)=Θ(nlog⁡2n).T(n)=\Theta\left(n\log^2 n\right).

所以正確選項是 (C)。

選項分析

  • (A) n2n^2:錯誤。 遞迴樹第 ii 層有 4i4^i 個子問題、每個大小 n/4in/4^i,該層成本為 4i⋅n4ilog⁡n4i=n(log⁡n−ilog⁡4)4^i\cdot\frac{n}{4^i}\log\frac{n}{4^i}=n(\log n-i\log 4),逐層遞減;
🔒

後續完整解題步驟與【答案】

免費註冊,享三天全站完整詳解閱覽。

免費註冊

第 17 題2 分

The solution of the recurrence T(n)=4T(n2)+n3T(n)=4T\left(\frac{n}{2}\right)+n^3 is

(A) n1/2n^{1/2}

(B) nn

(C) n2n^2

(D) n3n^3

(E) n2log⁡nn^2\log n

登入後即可作答並保存紀錄。

這一題的完整詳解

核心觀念

這題考遞迴式的漸近解,可用主定理。對形式

T(n)=aT(nb)+f(n)T(n)=aT\left(\frac{n}{b}\right)+f(n)

先比較 f(n)f(n) 與 nlog⁡ban^{\log_b a}。其中 aa 是子問題數量,bb 是每次縮小的比例。

解題方法

本題中 a=4a=4、b=2b=2、f(n)=n3f(n)=n^3。先計算遞迴部分的基準量:

nlog⁡ba=nlog⁡24=n2n^{\log_b a}=n^{\log_2 4}=n^2

因為 f(n)=n3f(n)=n^3 比 n2n^2 多一個多項式階,因此檢查主定理第三種情況的正則條件:

af(nb)=4(n2)3=n32≤cn3a f\left(\frac{n}{b}\right) =4\left(\frac{n}{2}\right)^3 =\frac{n^3}{2} \leq c n^3

取 c=12<1c=\frac12<1,正則條件成立。因此由主定理第三種情況:

T(n)=Θ(n3)T(n)=\Theta(n^3)
🔒

後續完整解題步驟與【答案】

免費註冊,享三天全站完整詳解閱覽。

免費註冊

第 18 題2 分

Determine if the following statement is true or false: “There is no polynomial time algorithm that can find the value of an ss-tt minimum cut in a directed graph.”

登入後即可作答並保存紀錄。

這一題的完整詳解

核心觀念

這題考的是有向圖的最小割與最大流。

給定有向圖 G=(V,E)G=(V,E)、源點 ss、匯點 tt,一個 ss-tt 割將頂點分成兩個集合 SS 與 TT,滿足 s∈Ss\in S、t∈Tt\in T。割的容量是所有從 SS 指向 TT 的邊容量總和:

c(S,T)=∑(u,v)∈Eu∈S, v∈Tc(u,v)c(S,T)=\sum_{\substack{(u,v)\in E\\u\in S,\ v\in T}} c(u,v)

ss-tt 最小割的值,是所有符合條件的割中容量最小者。

最大流最小割定理指出:有向圖中的最大 ss-tt 流值等於最小 ss-tt 割容量。因此,只要用多項式時間演算法求最大流,就能求得最小割的值。

解題方法

🔒

後續完整解題步驟與【答案】

免費註冊,享三天全站完整詳解閱覽。

免費註冊

第 19 題2 分

Determine if the following statement is true or false: “Both the subroutines ‘Merge’ in Merge sort and ‘Partition’ in Quicksort are linear time operations.”

登入後即可作答並保存紀錄。

這一題的完整詳解

核心觀念

本題考查排序演算法中兩個子程序的時間複雜度:

  • Merge sort 的 Merge:將兩個已排序的子陣列合併成一個有序陣列。
  • Quicksort 的 Partition:依照樞紐值重新排列子陣列,使樞紐值左側的元素不大於它,右側的元素不小於它。

若子程序處理的元素數量為 nn,每個元素只需被檢查或搬移常數次,該子程序的時間複雜度就是 Θ(n)\Theta(n),也稱為線性時間。

解題方法

Merge 為線性時間。 設兩個已排序子陣列的長度分別為 mm 與 nn。合併時,每一步比較兩個子陣列目前尚未處理的元素,將較小者放入結果;每個元素都會被取出並放入結果一次。因此總工作量與元素總數成正比:

Θ(m+n)\Theta(m+n)

若兩個子陣列合計有 NN 個元素,則 Merge 的時間複雜度為 Θ(N)\Theta(N)。

🔒

後續完整解題步驟與【答案】

免費註冊,享三天全站完整詳解閱覽。

免費註冊

第 20 題2 分

Determine if the following statement is true or false: “Find the median of nn elements takes Ω(nlog⁡n)\Omega(n\log n) time for any algorithms working in the comparison-based model.”

登入後即可作答並保存紀錄。

這一題的完整詳解

核心觀念

題目考查比較式模型下的「選擇問題」與「排序問題」之差異。找中位數只需找出排序後位於中央的元素,不必排好所有元素。

比較式模型中,中位數可在最壞情況 O(n)O(n) 時間內找出;因此不能說所有演算法都需要 Ω(nlog⁡n)\Omega(n\log n) 時間。

解題方法

使用中位數的中位數選擇演算法,可在最壞情況線性時間內找出第 kk 小元素。令 k=⌈n/2⌉k=\lceil n/2\rceil,即可取得中位數。

此演算法每次將元素分組、找出各組中位數,再以這些中位數選出樞紐並進行分割。遞迴式可寫為:

T(n)≤T(n/5)+T(7n/10+O(1))+O(n)T(n)\leq T(n/5)+T(7n/10+O(1))+O(n)
🔒

後續完整解題步驟與【答案】

免費註冊,享三天全站完整詳解閱覽。

免費註冊

第 21 題2 分

Determine if the following statement is true or false: “Given TT is a minimum spanning tree of a graph GG, for any pair of vertices (s,t)(s,t), the shortest path from ss to tt in GG is the path from ss to tt in TT.”

登入後即可作答並保存紀錄。

這一題的完整詳解

核心觀念

最小生成樹(Minimum Spanning Tree, MST)是在連通圖中,選出連接所有頂點且不含環的邊集合,使所有樹邊權重總和最小。

最短路徑則是針對指定的兩個頂點,尋找讓路徑上邊權重總和最小的路徑。兩者最佳化的目標不同,因此最小生成樹不保證保留每一對頂點之間的最短路徑。

解題方法

用反例判斷敘述是否成立。考慮一個有三個頂點 s,a,ts,a,t 的三角形,邊權重如下:

w(s,a)=2,w(a,t)=2,w(s,t)=3w(s,a)=2,\qquad w(a,t)=2,\qquad w(s,t)=3

選取 (s,a)(s,a) 與 (a,t)(a,t),總權重為 2+2=42+2=4;選取 (s,a)(s,a) 與 (s,t)(s,t),總權重為 2+3=52+3=5;選取 (a,t)(a,t) 與 (s,t)(s,t),總權重也為 2+3=52+3=5。因此,最小生成樹由 (s,a)(s,a) 與 (a,t)(a,t) 組成。

🔒

後續完整解題步驟與【答案】

免費註冊,享三天全站完整詳解閱覽。

免費註冊
📄 以下 1 題共用同一段題幹

🖼️【此處有附圖,請對照原卷】

第 22 題3 分

The following graph (graph on the left-hand side with 6 vertices) describes a flow assignment in a flow network. The notation x/yx/y describes xx units of flow in an edge with capacity yy. Determine if it reaches the maximum flow. If your answer is yes, demonstrate how to derive such flow assignment. If your answer is no, then calculate its maximum flow.

🖼️ 本題含圖表,以下為原卷對應頁面:
原卷第 7 頁原卷第 8 頁

登入後即可作答並保存紀錄。

這一題的完整詳解

核心觀念

最大流問題要在每條邊的流量不超過容量,且中間節點流入量等於流出量的條件下,讓來源點 ss 到終點 tt 的流量總和最大。依增廣路定理,只要殘餘網路中還有 ss 到 tt 的增廣路,就能增加流量;若能找到容量等於流量值的割,便可證明此流量已是最大流。

解題方法

圖中頂點為 s,a,b,c,d,ts,a,b,c,d,t;邊上的標示為「流量/容量」。原流量包括 s→as\to a 的 1/41/4、s→bs\to b 的 6/66/6、b→ab\to a 的 3/73/7、a→ca\to c 的 4/54/5、c→bc\to b 的 0/20/2、b→db\to d 的 3/33/3、c→dc\to d 的 1/41/4、c→tc\to t 的 3/63/6,以及 d→td\to t 的 4/44/4。

目前流量值為 ss 的流出量 1+6=71+6=7,也等於 tt 的流入量 3+4=73+4=7。但殘餘網路中有一條增廣路:

🔒

後續完整解題步驟與【答案】

免費註冊,享三天全站完整詳解閱覽。

免費註冊
📄 以下 1 題共用同一段題幹

🖼️【此處有附圖,請對照原卷】

第 23 題8 分

Given the above graph (graph on right-hand side with 5 vertices), determine if each of the following algorithm options (a-h) can be used to find the shortest paths of user-specified pair/pairs of vertices:

(a) Kruskal’s algorithm

(b) Dijkstra’s algorithm

(c) Ford-Fulkerson algorithm

(d) Johnson’s algorithm

(e) Bellman-Ford algorithm

(f) Jarvis’s march algorithm

(g) Floyd-Warshall algorithm

(h) Huffman algorithm

🖼️ 本題附圖:
第 23 題附圖
圖看不清楚?展開原卷第 8 頁核對
原卷第 8 頁

登入後即可作答並保存紀錄。

這一題的完整詳解

核心觀念

本題考查各演算法的用途,以及它們對圖形條件的要求。右側圖是有向加權圖,包含負權邊;負權邊不一定代表沒有最短路徑,關鍵是圖中是否存在負權環。Johnson、Bellman–Ford、Floyd–Warshall 都能處理負權邊,但要求相關範圍內沒有負權環。

解題方法

讀圖可得頂點為 a,b,c,d,ea,b,c,d,e,有向邊與權重如下:b→ab\to a 權重 33、a→ca\to c 權重 77、a→da\to d 權重 11、e→ae\to a 權重 44、b→eb\to e 權重 88、b→cb\to c 權重 −4-4、d→bd\to b 權重 22、c→dc\to d 權重 66、d→ed\to e 權重 −5-5。

圖上有負權邊,因此 Dijkstra 的非負權重前提不成立。這張圖沒有負權環:取勢能值
h(a)=−1, h(b)=0, h(c)=−4, h(d)=0, h(e)=−5h(a)=-1,\ h(b)=0,\ h(c)=-4,\ h(d)=0,\ h(e)=-5,並將每條邊的權重改寫為 w′(u,v)=w(u,v)+h(u)−h(v)w'(u,v)=w(u,v)+h(u)-h(v),各邊的新權重依序為 4,10,0,0,13,0,2,2,04,10,0,0,13,0,2,2,0,全部非負。沿任一環的勢能項會互相抵消,所以原環權重等於新權重總和,不可能為負。

因此,可用支援負權邊且適用範圍內無負權環的最短路徑演算法;再依題目要找單一來源或多組頂點間的路徑,判斷演算法的範圍是否符合。

選項分析

(a) Kruskal’s algorithm:不可以。
Kruskal 用來求無向圖的最小生成樹,按邊權重由小到大選邊;它不是求有向圖中頂點間最短路徑的演算法。

(b) Dijkstra’s algorithm:不可以。
Dijkstra 的正確性要求邊權重皆非負,本圖含有 −4-4 與 −5-5 的邊。貪婪地確定某頂點距離後,後續負權邊可能使它的距離變短,故不能保證得到正確最短路徑。

🔒

後續完整解題步驟與【答案】

免費註冊,享三天全站完整詳解閱覽。

免費註冊

其他考古題