阿摩線上測驗 登入

申論題資訊

試卷:114年 - 114 調查特種考試_三等_電子科學組:計算機概論#129574
科目:計算機概論、大意(資訊科學概論,電腦常識,電子計算機概論)
年份:114年
排序:0

題組內容

三、請回答下列有關資料結構及時間複雜度計算的問題:

申論題內容

(一)請說明堆疊資料結構的定義與特性;並請說明應用堆疊資料結構完成以下程式的方法,程式功能為:將一個十進制的正整數轉換為二進制。 (15 分)

詳解 (共 1 筆)

詳解 提供者:蕭仁豪

這題其實包含兩部分:

上面是 時間複雜度分析(PROGRAM-1),
下面是 堆疊(Stack)結構與應用題(十進制轉二進制)。
以下分別給出標準作答與解析?


---

?【第一部分】PROGRAM-1 時間複雜度分析(10 分)

n = int(input())
k = 0
counter = 0
for i in range(1, n//2):
    k = k + 1
    for j in range(1, n, pow(2, k)):
        counter = counter + 1
print(counter)

?外層迴圈:

for i in range(1, n//2) → 約執行 n/2 次。

?內層迴圈:

for j in range(1, n, pow(2, k))
→ 每次迴圈間隔為 2^k,執行次數約為 n / 2^k。

?總執行次數(counter 累加次數):

T(n) = \sum_{k=1}^{n/2} \frac{n}{2^k}

T(n) < n \sum_{k=1}^{\infty} \frac{1}{2^k} = n(1) = O(n)

✅ 結論:時間複雜度為 O(n)
空間複雜度僅用到常數變數(k, counter),為 O(1)。


---

?【第二部分】堆疊資料結構與十進制轉二進制(15 分)

?堆疊(Stack)的定義與特性

1. 一種**後進先出(LIFO, Last In First Out)**的線性資料結構。


2. 只能在一端(稱為頂端 Top)進行「推入 (Push)」與「彈出 (Pop)」操作。


3. 應用於:函式呼叫、括號匹配、逆序轉換、遞迴模擬等。




---

?堆疊應用:十進制轉二進制

原理:
將十進制數反覆除以 2,取餘數並依「反向順序」輸出。
使用堆疊可自然地將餘數逆序。

步驟:
1️⃣ 不斷取餘數 n % 2 並 push 入堆疊。
2️⃣ 當 n == 0 時停止。
3️⃣ 不斷取出(pop)堆疊元素,依序組成二進位字串。


---

?程式示範(Python 版)

def dec_to_bin(n):
    stack = []
    while n > 0:
        stack.append(n % 2) # push
        n //= 2
    bin_str = ''
    while stack:
        bin_str += str(stack.pop()) # pop
    return bin_str or '0'

# 範例
num = int(input("輸入十進位數:"))
print(dec_to_bin(num))

例:
輸入 13 → 堆疊過程:[1, 0, 1, 1] → 輸出 "1101"

✅ 時間複雜度 O(log n)(因為每次除以2),
✅ 空間複雜度 O(log n)(堆疊儲存餘數)。


---

?【完整答案摘要】

題目 核心答案

PROGRAM-1 時間複雜度 O(n)
堆疊定義 後進先出(LIFO),操作限於一端(push/pop)
應用程式功能 將十進制轉換為二進制
方法 反覆除2取餘 → push → 逆序 pop 輸出
轉換範例 13 → 1101
時間/空間複雜度 O(log n) / O(log n)



---

要我幫你把這份答案整理成「考試卷可直接誦寫的 20 行正式答題稿」版本嗎?(條列+說明混排版)