---
# System prepended metadata

title: 台大 110 軟體
tags: [NTU, '110', 軟體]

---

# 台大 110 軟體
###### tags: `NTU` `110` `軟體`
1. D
2. A
3. A
4. C
5. A
6. B
7. B
8. A
9. C
10. A
11. C
12. D
13. B
14. B
15. D
16. D
17. B
18. D
:::warning
可以利用 NFA 轉 DFA 演算法的概念思考。想知道細節可以讀[這本](https://www.amazon.com/Introduction-Automata-Languages-Computation-Hardcover/dp/B00M8P8LA6)，這邊簡單帶過思考過程。

首先觀察 ['A'][3] = 4 這格，這意味著「若在第 3 個位置匹配到 A，就往 4 前進」，代表第 3 個字元是 A。同理可推其它的：

_ _ _ A A _ B _ _ C


再來觀察 ['B'][9] = 3，「若在第 9 個位置匹配到 B，則往 3 前進」意味著 0, 1 和 7, 8 是相同的，而且第 2 個位置是 B：

_ _ B A A _ B _ _ C


同理可觀察 ['A'][6] = 2，代表第 0 個位置與第 5 個位置相同、且第 1 個字元為 A:
_ A B A A _ B _ _ C

而第 8 個字元跟第 1 個字元是相同的...：
_ A B A A _ B _ A C

而第 0、5、7 的字元是一樣的，所以只要推出其中一個就可以了。接著考慮 ['B'][3] = 0 和 ['C'][3] = 0，這兩個意味著「在第 3 個位置匹配到 B 或 C 的話，就前進到 0」也就是要重新匹配。這代表第 0 個位置不會是 B 或 C，不然應該有一個要前進到 1 才對。所以第 0 個是 A：
A A B A A A B A A C

A 總共有 7 個
:::
:::info
NFA 在匹配的時候，同時間有「好幾個」匹配在進行。匹配成功的就保留，失敗的就丟掉。

以 ['B'][9] = 3 為例，同時有 2 個匹配在進行，一個在匹配第 9 個，另一個在匹配第 2 個。而第 9 個失敗了，第 2 個卻成功了，所以前進到 3。這代表第 2 個是 B，而且 [0] = [7], [1] = [8]
:::
19. A
20. C
