免費開始練習
高考申論題 105年 [資訊處理] 資料結構

第 四 題

📖 題組:
五、對下列程式片段,請用 Big-O 符號(Big-O notation),分別估計最長執行時間(worst time)。注意:S 中沒有與 n 相關的迴圈(n-dependent loops)。(每小題 5 分,共 20 分)
(一) for (int i = 0; i * i < n; i++) S
(二) for (int i = 1; i < n+1; i*=2) S
(三) for (int i = 1; i < n+1; i*=2)
for (int j = 0; j < n; j++) S
(四) k=1; for (int i=0; i<n; i++)
{k*=3; for (int j=0; j<k; j++) S}
📝 此題為申論題,共 4 小題

小題 (四)

k=1; for (int i=0; i<n; i++)
{k*=3; for (int j=0; j<k; j++) S}

思路引導 VIP

觀察內外層迴圈的相依關係,將變數 k 隨著外層迴圈 i 增加的變化規律列出,並計算內層迴圈執行次數的總和。利用等比級數公式求和後,即可得出最長執行時間的 Big-O 表示法。

🤖
AI 詳解
AI 專屬家教

【解題思路】列出每一圈變數 k 的數值變化,計算內層迴圈執行次數的等比級數和。 【詳解】 已知:變數 k 初始值為 1,外層迴圈 i 從 0 執行到 n-1,共執行 $n$ 次。

小題 (一)

for (int i = 0; i * i < n; i++) S

思路引導 VIP

分析這類迴圈的時間複雜度,關鍵在於找出迴圈變數的「初始值」、「遞增模式」與「終止條件」。看到條件 i * i < n 且每次 i++,應推導 i 的平方與 n 的不等式關係,進而解出迴圈執行的總次數。

🤖
AI 詳解
AI 專屬家教

【解題思路】分析迴圈變數的初始值、遞增方式與終止條件,推導出迴圈執行的總次數,再轉換為 Big-O 符號。 【詳解】 已知:迴圈變數 i 從 0 開始,每次遞增 1(i++)。依題意,S 內部無與 n 相關的迴圈,故 S 單次執行時間視為常數時間 $O(1)$。

小題 (二)

for (int i = 1; i < n+1; i*=2) S

思路引導 VIP

看到迴圈變數的更新方式為乘法(i*=2),應立刻聯想到指數增長與對數關係。藉由列出每次疊代 i 的數值變化(1, 2, 4..., 2^k),並與終止條件(n+1)建立不等式,即可精準推導出執行次數為對數級別。

🤖
AI 詳解
AI 專屬家教

【解題思路】利用變數的幾何級數增長特性,推導執行次數與 n 的對數關係。 【詳解】 已知:迴圈初始值為 i = 1,終止條件為 i < n+1,每次疊代 i 的值乘以 2。題目說明指令 S 的執行時間與 n 無關,故視為常數時間 O(1)。

小題 (三)

for (int i = 1; i < n+1; i*=2)
for (int j = 0; j < n; j++) S

思路引導 VIP

面對雙層巢狀迴圈的時間複雜度計算,應先由外向內(或由內向外)分別評估各層迴圈的執行次數。外層變數呈指數倍增,屬對數時間級別;內層為固定次數的線性遞增,屬線性時間級別。兩者彼此獨立,相乘即為總時間複雜度。

🤖
AI 詳解
AI 專屬家教

【解題思路】分析巢狀迴圈的執行次數,將外層迴圈與內層迴圈的時間複雜度獨立計算後相乘即可得解。 【詳解】 已知條件整理:

📝 Big-O 複雜度分析
💡 追蹤迴圈變數變化規律,並利用級數公式計算總執行次數。

🔗 複雜度分析推導流程

  1. 1 變數規律 — 觀察知 i=0,1,2..n-1 時,k 為 3,9..3^n
  2. ↓
  3. 2 級數加總 — 列出總次數為 3¹ + 3² + ... + 3ⁿ 之和
  4. ↓
  5. 3 公式求解 — 套用等比級數公式求得閉合式為 1.5(3ⁿ-1)
  6. ↓
  7. 4 漸進簡化 — 忽略係數與常數,最終結果為 O(3ⁿ)
🔄 延伸學習:延伸學習:若變數以 i/=2 變化,則需考量對數級數 O(log n)。
🧠 記憶技巧:VIP 會員可查看這題的記憶口訣與速記法
⚠️ 常見陷阱:VIP 會員可查看這題最常被誘答的陷阱整理
漸進符號定義 等比級數求和公式 遞迴演算法分析 空間複雜度

🏷️ AI 記憶小卡 VIP

AI 記憶小卡

升級 VIP 解鎖記憶小卡

考前複習神器,一眼掌握重點

🏷️ 相關主題

演算法分析與複雜度
查看更多「[資訊處理] 資料結構」的主題分類考古題

📝 同份考卷的其他題目

查看 105年[資訊處理] 資料結構 全題