免費開始練習
地特三等申論題 108年 [資訊處理] 資料結構

第 一 題

📖 題組:
對下列三個程式片段,請使用 Big-O 符號,分別估計其最長執行時間(worst time)。程式片段中,S 代表一段沒有與 n 相關的迴圈(no n-dependent loops)。 (一) for (int i = 0; i * i < n; i++) (5 分) S (二) for (int i = 0; Math.sqrt (i) < n; i++) (5 分) S (三) int k = 1; (10 分) for (int i = 0; i < n; i++) k *= 2; for (int i = 0; i < k; i++) S
📝 此題為申論題,共 3 小題

小題 (一)

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

思路引導 VIP

判斷時間複雜度的關鍵在於找出迴圈的「終止條件」與迴圈變數的「遞增規律」。本題變數每次線性加 1,但終止條件是變數的平方小於 n,直接解數學不等式即可得到執行次數與輸入規模 n 的關係。

🤖
AI 詳解
AI 專屬家教

【解題思路】觀察迴圈變數的增長方式與終止條件,解開數學不等式以求得執行總次數。 【詳解】 已知:迴圈變數 i 初始值為 0,每次迭代步進為加 1(i++),且 S 代表一段與 n 無關的操作,即執行時間為常數時間 O(1)。

小題 (二)

for (int i = 0; Math.sqrt (i) < n; i++) S

思路引導 VIP

看到迴圈時間複雜度題,首要任務是解出計數器變數 i 與輸入規模 n 之間的不等式終止關係。將終止條件 Math.sqrt(i) < n 兩邊同時平方,即可直接得出 i < n^2,配合 i 每次線性遞增 1 的特性,便能精確推導出迴圈執行的總次數。

🤖
AI 詳解
AI 專屬家教

【解題思路】分析迴圈終止條件($\sqrt{i} < n$)與計數器變化($i++$)的數學關係,以推算總執行次數。 【詳解】 已知:迴圈初始值為 $i=0$,每次迭代計數器 $i$ 遞增 $1$(即 $i=i+1$)。程式區段 $S$ 為與 $n$ 無關的操作,其時間複雜度為 $O(1)$。

小題 (三)

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

思路引導 VIP

首先,將程式片段拆解為兩個獨立循序的迴圈分別分析。先觀察第一個迴圈對變數 k 的影響,推導出 k 最終的數值(表示為 n 的函數);接著將該 k 值帶入第二個迴圈,計算其執行次數,最後相加取最高階項作為整體的 Big-O 複雜度。

🤖
AI 詳解
AI 專屬家教

【解題思路】將程式片段拆解為兩個循序執行的迴圈分別分析,先計算第一段迴圈產生的 k 值,再代入第二段迴圈計算總執行次數。 【詳解】 已知:程式由兩個循序執行的 for 迴圈組成,且 S 的執行時間為常數時間 $O(1)$。

📝 同份考卷的其他題目

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

升級 VIP 解鎖