# 台大 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