115 年 國立政治大學圖書資訊與檔案學研究所圖書資訊學組《計算機概論》
第 1 題5 分
元資料/詮釋資料(Metadata)定義及使用情境(5%)
登入後即可作答並保存紀錄。
核心觀念:本題主要在考察對「元資料」(Metadata)的理解,包含其定義、目的以及實際應用情境。
詳解:
元資料(Metadata)是指「關於資料的資料」(data about data)。它提供了描述、解釋、定位或管理某筆資源的資訊。元資料可以幫助使用者理解、發現、使用和管理資源。
定義:
元資料是一種結構化的資訊,用來描述其他資料的內容、品質、特性、上下文、關係和管理資訊。它可以被視為資源的「標籤」或「索引」。
使用情境(範例):
- 圖書館目錄(OPAC): 圖書的書名、作者、出版日期、ISBN、摘要、關鍵字等,都是圖書的元資料,用於幫助讀者查找和了解書籍。
第 2 題5 分
萬國碼(Unicode)定義及使用情境(5%)
登入後即可作答並保存紀錄。
核心觀念:本題考察對「萬國碼」(Unicode)的定義及其在處理多語言文字時的應用。
詳解:
萬國碼(Unicode)是一個全球性的字元編碼標準,旨在為世界上所有語言的每一個字元(包括符號、數字、字母、漢字、日文假名、韓文諺文等)分配一個獨一無二的數字碼位(code point),以便在電腦系統中進行統一的處理和交換。
定義:
Unicode 是一個國際標準,它為幾乎所有的書寫系統中的字元提供了一個統一的編碼方案。它定義了一個龐大的字元集,並為其中的每個字元分配了一個唯一的數字(稱為碼位,Code Point),表示為 U+ 後跟四到六位十六進制數字,例如 'A' 是 U+0041,漢字 '中' 是 U+4E2D。
目的與重要性:
在 Unicode 出現之前,不同的語言和地區使用不同的字元編碼標準(如 ASCII、Big5、GB2312、Shift JIS 等),這導致了嚴重的「亂碼」問題,當不同編碼的文本在不同系統之間交換時,文字會變成無法識別的符號。Unicode 的出現解決了這個問題,實現了字元的統一表示。
使用情境:
- 網際網路與網頁: 網頁開發(HTML、CSS、JavaScript)普遍使用 Unicode(通常是 UTF-8 編碼),確保網頁內容能正確顯示各種語言的文字。
第 3 題5 分
數位物件識別碼(DOI)定義及使用情境(5%)
登入後即可作答並保存紀錄。
核心觀念:本題在於釐清「數位物件識別碼」(DOI)的定義,以及它在學術出版和數位資源管理中的作用。
詳解:
數位物件識別碼(Digital Object Identifier, DOI)是一個永久性的、可解析的識別碼,用於識別數位物件(如學術論文、期刊文章、書籍、數據集、軟體等)的身份。它由國際 DOI 基金會(International DOI Foundation, IDF)管理。
定義:
DOI 是一個字串,由兩個主要部分組成:一個前綴(prefix)和一個後綴(suffix),中間用斜線 / 分隔。
- 前綴 (Prefix): 通常由註冊機構分配,用於標識註冊者(例如出版商或機構)。
- 後綴 (Suffix): 由註冊者自行分配,用於唯一標識其註冊的特定數位物件。
例如,10.1000/xyz123 中的 10.1000 是前綴,xyz123 是後綴。
核心功能與目的:
- 永久性識別: DOI 是永久性的,即使數位物件的 URL 或儲存位置發生變化,DOI 依然保持不變。
- 可解析性: DOI 可以通過 DOI 解析服務(如 doi.org)轉換為該物件當前的網路位置(URL),從而方便使用者訪問。
第 4 題5 分
本體論(Ontology)定義及使用情境(5%)
登入後即可作答並保存紀錄。
核心觀念:本題旨在解釋「本體論」(Ontology)的概念,並說明其在人工智慧、知識工程等領域的應用。
詳解:
本體論(Ontology)源於哲學,但在計算機科學和資訊科學領域,它被賦予了更具體的含義。在這些領域中,本體論是指對一個領域的概念、屬性、關係以及實例的一種形式化、明確的表示。它提供了一個共享的詞彙表和概念模型,用於描述和推理某個特定領域的知識。
定義:
在資訊科學中,本體論可以被定義為:
- 一種對概念的明確的、形式化的規格說明 (an explicit and formal specification of a conceptualization)。
- 概念 (Concepts): 領域內的類別、對象、實體(例如:人、書籍、學科、課程)。
- 屬性 (Properties/Attributes): 概念的特徵或性質(例如:書籍的作者、價格、出版日期;人的姓名、年齡)。
- 關係 (Relations): 概念之間的聯繫(例如:作者「寫了」書籍;學生「選修」課程;課程「屬於」學科)。
- 實例 (Instances): 概念的具體成員(例如:「哈利波特」是「書籍」的一個實例;「張三」是「人」的一個實例)。
- 形式化 (Formal): 這種表示必須是機器可讀的,通常使用邏輯規則或標準語言(如 OWL - Web Ontology Language)來定義。
- 明確化 (Explicit): 概念、屬性、關係的含義和約束都應該被清晰地定義,沒有歧義。
第 5 題5 分
無線射頻辨識(RFID)定義及使用情境(5%)
登入後即可作答並保存紀錄。
核心觀念:本題考察對「無線射頻辨識」(RFID)技術的定義及其在物流、追蹤和識別等方面的應用。
詳解:
無線射頻辨識(Radio-Frequency Identification, RFID)是一種無線通訊技術,它利用無線射頻(Radio Frequency)來識別特定的目標並讀取或寫入相關的數據,而無需在讀取器和目標之間建立機械或光學接觸。
定義:
RFID 系統通常由以下幾個主要組件構成:
- 標籤 (Tag) / 應答器 (Transponder): 包含一個微晶片(用於儲存數據)和一個天線。標籤可以是主動式(有電池)或被動式(無電池,由讀取器感應供電)。
- 讀取器 (Reader) / 詢問器 (Interrogator): 發射無線電波,與標籤進行通訊,讀取或寫入標籤中的數據。
- 後端系統 (Backend System): 接收並處理從讀取器傳來的數據,通常是資料庫或應用程式。
工作原理:
讀取器發射無線電波,當 RFID 標籤進入讀取器的感應範圍時,天線會接收到電波。
- 被動式標籤: 接收到的電波會被微晶片利用,產生足夠的電力來啟動晶片,然後晶片將儲存的數據通過天線發送回讀取器。
- 主動式標籤: 內建電池,可以主動發送訊號,或在接收到讀取器訊號後發送回應。
第 6 題5 分
語意網(Semantic Web)定義及使用情境(5%)
登入後即可作答並保存紀錄。
【核心觀念】
- 語意網(Semantic Web)的核心本質:由全球資訊網之父提姆·柏內茲-李(Tim Berners-Lee)所提出,為現行全球資訊網(Web)的延伸架構。其目標是將傳統「供人類閱讀的文件網路」(Web of Documents)轉化為「電腦/代理人(Agent)可理解與處理的資料網路」(Web of Data)。
- 標準與技術堆疊(W3C Semantic Web Stack):
- URI/IRI:全球唯一的資源識別碼。
- RDF(Resource Description Framework):資源描述框架,以「主詞-述詞-受詞」(Subject-Predicate-Object)的三元組(Triple)結構表達實體與關係。
- RDFS / OWL(Web Ontology Language):定義領域詞彙、階層關係與邏輯推論規則的「知識本體」(Ontology)。
- SPARQL:針對 RDF 圖形資料庫進行查詢的標準語法。
【解題方法】
本題配分為 5 分,屬於名詞解釋與申論簡答題。作答結構應精準拆解為兩大部分:
- 定義(約 2~3 分):點出提出者、由「文件」到「資料」的轉變,以及強調「機器可判讀與邏輯推論」之核心特徵。
- 使用情境(約 2~3 分):提出 2 至 3 個具體且具代表性的應用範疇(特別結合「圖書資訊領域的鏈結資料」與「現代搜尋引擎的知識圖譜」),展示跨領域應用的廣度與專業度。
【選項分析】
本題為簡答題,無選項。評分重點如下:
- 定義完整性:是否提及「機器可理解/處理(Machine-understandable)」、「語意關聯/結構化資料」及「W3C 相關標準(如 RDF、Ontology)」。
- 情境實用性:是否舉出具體實例(如數位典藏與圖書館鏈結開放資料 LOD、跨領域資料整合、智慧搜尋引擎與知識圖譜)。
【解題技巧】
- 掌握關鍵字(Scoring Keywords):作答務必包含「機器可理解(Machine-readable / Machine-understandable)」、「RDF 三元組」、「知識本體(Ontology)」、「鏈結資料(Linked Data)」。
第 7 題5 分
多模態檢索(Multi-modality Retrieval)定義及使用情境(5%)
登入後即可作答並保存紀錄。
核心觀念:本題考查對「多模態檢索」(Multi-modality Retrieval)的理解,包括其定義、目的以及在不同應用場景中的實踐。
詳解:
多模態檢索(Multi-modality Retrieval)是指一種資訊檢索技術,它能夠處理和整合來自**多種不同模態(Modality)**的資訊,並基於這些資訊進行搜索、匹配和檢索。模態指的是資訊的表現形式,例如文字、圖像、聲音、影片、3D 模型等。
定義:
多模態檢索系統能夠理解和處理不同類型的數據,並允許用戶使用一種模態的資訊來查詢另一種模態的資訊,或者將多種模態的資訊結合起來進行更精確的檢索。
核心挑戰:
- 模態間的對齊 (Cross-modal Alignment): 如何建立不同模態資訊之間的聯繫和對應關係。例如,將圖像中的物體與文字描述關聯起來。
- 特徵提取與表示 (Feature Extraction and Representation): 為不同模態的數據提取有效、可比較、可融合的特徵。
- 模態融合 (Modality Fusion): 如何有效地將來自不同模態的特徵或資訊進行整合,以提高檢索的準確性。
- 統一的查詢接口: 如何設計用戶能夠方便地使用不同模態進行查詢的介面。
主要應用情境:
- 圖文檢索 (Image-Text Retrieval):
- 文字到圖像檢索 (Text-to-Image Retrieval): 用文字描述(如「一隻在草地上奔跑的金毛獵犬」)來搜索相關的圖像。
- 圖像到文字檢索 (Image-to-Text Retrieval): 上傳一張圖片,搜索描述該圖片的文字資訊(如圖片標題、標籤、相關新聞報導)。
- 應用: 圖片搜索引擎、內容推薦、圖像標註。
第 8 題5 分
NoSQL Database 定義及使用情境(5%)
登入後即可作答並保存紀錄。
核心觀念:本題考查對「NoSQL Database」的定義、特點以及其與傳統 SQL 資料庫的區別和適用場景。
詳解:
NoSQL(Not Only SQL)資料庫是一種非關聯式資料庫管理系統。與傳統的關聯式資料庫(SQL Database)不同,NoSQL 資料庫在設計上不嚴格遵循關聯式模型,並且通常不使用 SQL 作為主要的查詢語言。NoSQL 資料庫的出現主要是為了應對大數據時代對資料儲存和處理的彈性、可擴展性、高可用性和效能的需求。
定義與特點:
NoSQL 資料庫通常具有以下特點:
- 非關聯式模型: 不依賴於表格、行、列的結構,而是採用多種不同的數據模型,例如:
- 鍵值對 (Key-Value Stores): 如 Redis, Memcached。數據以鍵值對的形式儲存,讀寫速度快,適合快取、會話管理。
- 文件導向 (Document Stores): 如 MongoDB, Couchbase。數據以類似 JSON 或 BSON 的文件格式儲存,結構靈活,適合內容管理、使用者配置。
- 列族 (Column-Family Stores): 如 Cassandra, HBase。數據按列族組織,適合處理大量稀疏數據,如日誌、時間序列數據。
- 圖形資料庫 (Graph Databases): 如 Neo4j, Amazon Neptune。數據以節點和邊的形式表示,適合處理高度關聯的數據,如社交網絡、推薦系統。
- 彈性的數據結構 (Schema Flexibility): 通常不需要預先定義嚴格的數據結構(Schema),可以輕鬆添加或修改欄位,適合快速迭代開發。
- 高可擴展性 (Scalability): 能夠通過水平擴展(增加更多伺服器)來處理不斷增長的數據量和流量,而不是像傳統 SQL 資料庫那樣主要依賴垂直擴展(升級單一伺服器)。
- 高可用性 (High Availability): 通常採用分散式架構,數據會被複製到多個節點,即使部分節點失效,系統仍能繼續運行。
- BASE 原則: 相較於傳統 ACID(Atomicity, Consistency, Isolation, Durability)原則,NoSQL 資料庫更傾向於 BASE(Basically Available, Soft state, Eventually consistent)原則,強調系統的可用性和最終一致性,以換取更好的擴展性和效能。
與 SQL 資料庫的比較:
| 特性 | SQL Database (關聯式) | NoSQL Database (非關聯式)
第 9 題5 分
軟體即服務(SaaS)定義及使用情境(5%)
登入後即可作答並保存紀錄。
核心觀念:本題考察對「軟體即服務」(SaaS)的定義、特點以及其在現代軟體應用中的普及。
詳解:
軟體即服務(Software as a Service, SaaS)是一種軟體交付模式,其中軟體應用程式由第三方提供商託管,並通過網際網路提供給客戶使用。客戶通常按訂閱付費,無需購買、安裝、維護或管理軟體和底層基礎設施。
定義:
SaaS 是一種雲端運算(Cloud Computing)的服務模型,使用者可以透過網頁瀏覽器或專門的客戶端應用程式來存取軟體功能。軟體運行在供應商的伺服器上,而使用者只需關注如何使用軟體來完成任務。
核心特點:
- 基於訂閱的商業模式: 客戶通常按月或按年支付費用,而不是一次性購買授權。
- 網際網路交付: 軟體透過網際網路提供,使用者可以從任何連接網路的設備存取。
- 供應商託管: 軟體、數據、基礎設施(伺服器、儲存、網路)都由供應商負責管理和維護。
- 多租戶架構 (Multi-tenancy): 通常,一個軟體實例會服務於多個客戶(租戶),但每個租戶的數據和配置是隔離的。
- 自動更新與維護: 供應商負責軟體的更新、修補程式的發布和系統的維護,確保軟體始終是最新版本。
- 可擴展性: 供應商能夠根據客戶需求調整資源,以應對用戶數量的增長或使用量的變化。
與傳統軟體模式的比較:
| 特點 | 傳統軟體 (On-Premise) | SaaS (軟體即服務) |
|---|---|---|
| 購買方式 | 一次性購買授權 | 按訂閱付費 |
| 安裝與維護 | 客戶自行安裝、維護、更新、管理硬體和軟體 | 供應商負責安裝、維護、更新、管理基礎設施和軟體 |
| 存取方式 | 主要在公司內部網路 | 透過網際網路,可從任何地方存取 |
第 10 題5 分
檢索增強生成(RAG)定義及使用情境(5%)
登入後即可作答並保存紀錄。
核心觀念:本題考察對「檢索增強生成」(RAG)的定義,了解其如何結合檢索與生成技術,以及其在提升大型語言模型(LLM)表現上的作用。
詳解:
檢索增強生成(Retrieval-Augmented Generation, RAG)是一種結合了資訊檢索(Information Retrieval)和自然語言生成(Natural Language Generation, NLG)的技術框架,主要用於增強大型語言模型(LLM)的回答能力。
定義:
RAG 的核心思想是,在 LLM 進行文本生成之前,先從一個外部知識庫(如文檔集合、資料庫、網頁等)中檢索相關資訊,然後將這些檢索到的資訊作為上下文(Context)提供給 LLM,讓 LLM 在此基礎上生成最終的回答。
工作流程:
一個典型的 RAG 流程包含以下步驟:
- 使用者查詢 (User Query): 用戶提出一個問題或指令。
- 檢索 (Retrieval): 系統利用搜尋或向量相似度等技術,在一個預先建立的知識庫(通常是經過索引的文檔集合)中,找到與用戶查詢最相關的資訊片段(稱為「上下文」或「提示」)。
- 增強 (Augmentation): 將檢索到的相關資訊與原始用戶查詢結合,形成一個更豐富的提示(Prompt)。
- 生成 (Generation): 將這個增強後的提示輸入到 LLM 中,LLM 基於這個更全面的上下文來生成回答。
目的與優勢:
RAG 的主要目的是解決 LLM 在生成回答時遇到的幾個關鍵問題:
- 知識過時 (Knowledge Staleness): LLM 的訓練數據是靜態的,無法獲取最新的資訊。RAG 可以從即時更新的知識庫中檢索最新資訊。
第 11 題3 分
- 將十進位數 27.625 轉換為二進位,結果為何?(3%)
(A) 11011.101
(B) 11011.110
(C) 11010.101
(D) 11101.011
登入後即可作答並保存紀錄。
核心觀念:本題考查十進位小數轉換為二進位小數的運算技巧。
詳解:
將十進位數轉換為二進位數,我們需要分別處理整數部分和小數部分。
1. 整數部分轉換:
將十進位整數 27 除以 2,記錄餘數,直到商為 0。
餘
餘
餘
餘
餘
從下往上讀取餘數,得到二進位整數部分為 。
第 12 題3 分
- 使用8-bit 的二補數(2's Complement)表示整數,可表示的數值範圍為何?(3%)
(A) -127~+128
(B) -128~+127
(C) -128 ~ +128
(D) 0~255
登入後即可作答並保存紀錄。
核心觀念:本題考查對二補數(2's Complement)表示法的理解,特別是其表示範圍。
詳解:
二補數(2's Complement)是一種在計算機中表示帶符號整數的常用方法。對於一個 位元(bit)的二補數系統:
1. 表示範圍的計算:
- 總共有 種不同的組合。
- 為了表示正數和負數,通常會保留一個位元(最高位)作為符號位。
- 正數和零: 最高位為 0,其餘位元表示數值。最大的正數是所有位元(除了符號位)都為 1,即 。
- 負數: 最高位為 1。最小的負數(絕對值最大)是所有位元都為 1,表示為 。
對於一個 位元的二補數系統:
- 最小值: 。這是因為其中一個組合()被分配給了負數(最小的負數)。
- 最大值: 。這是因為其中一個組合()被分配給了最大的正數。
第 13 題3 分
- 對於一個堆疊(Stack)資料結構,若依序執行 push(A), push(B), pop(), push(C), push(D), pop(), pop(),最後堆疊中留下的元素為何?(3%)
(A) A
(B) B
(C) C
(D) D
登入後即可作答並保存紀錄。
核心觀念:本題考查對堆疊(Stack)資料結構「後進先出」(LIFO, Last-In, First-Out)原理的理解和應用。
詳解:
堆疊(Stack)是一種後進先出(LIFO)的資料結構。操作主要有兩個:
push(element):將元素放入堆疊頂部。pop():從堆疊頂部移除並返回元素。
我們將依序模擬堆疊的操作,觀察堆疊的狀態變化:
| 操作 | 堆疊狀態 (底部 -> 頂部) | 說明 |
|---|---|---|
| 初始狀態 | (空) | 堆疊是空的 |
push(A) | A | A 被放入堆疊 |
第 14 題3 分
- 對於一個已排序的陣列有1000筆資料,使用二元搜尋法搜尋特定資料,最差情況下需要比較幾次?(3%)
(A) 10次
(B) 50次
(C) 100次
(D) 500次
登入後即可作答並保存紀錄。
核心觀念:本題考查二元搜尋法(Binary Search)在最差情況下的時間複雜度,以及如何計算其比較次數。
詳解:
二元搜尋法(Binary Search)是一種在已排序的陣列中搜尋目標值的搜尋演算法。它的基本原理是:每次比較都將搜尋範圍縮小一半。
演算法步驟:
- 確定搜尋範圍的起始點(low)和結束點(high)。
- 計算中間點(mid)。
- 將目標值與中間點的元素進行比較。
- 如果相等,則找到目標,搜尋結束。
- 如果目標值小於中間點元素,則在左半部分繼續搜尋(high = mid - 1)。
- 如果目標值大於中間點元素,則在右半部分繼續搜尋(low = mid + 1)。
- 重複步驟 2-3,直到找到目標或搜尋範圍為空。
最差情況分析:
最差情況發生在目標值不存在於陣列中,或者目標值位於搜尋過程中最後一次被檢查的區間時。在這種情況下,搜尋會一直進行,直到搜尋範圍縮小到只剩一個元素,或者搜尋範圍變為空。
每一次比較,搜尋範圍都會被縮小一半。如果陣列的大小是 ,那麼在最差情況下,搜尋需要進行的比較次數 滿足:
或者更精確地說,搜尋範圍從 縮小到 1,大約需要 次。
計算:
陣列大小 。
我們需要找到 使得 。
。
所以,當 時,最差情況下的比較次數大約是 。
第 15 題3 分
- 霍夫曼編碼(Huffman Coding)是什麼類型的壓縮技術?(3%)
(A) 失真壓縮(Lossy)
(B) 無失真壓縮(Lossless)
(C) 混合壓縮
(D) 向量量化
登入後即可作答並保存紀錄。
核心觀念:本題考查對霍夫曼編碼(Huffman Coding)作為一種資料壓縮技術的分類。
詳解:
霍夫曼編碼(Huffman Coding)是一種在資訊理論中用於無損數據壓縮的演算法。它是一種統計性的編碼方法,其基本原理是為出現頻率較高的符號分配較短的編碼,為出現頻率較低的符號分配較長的編碼,從而達到整體壓縮的目的。
壓縮技術的分類:
資料壓縮技術主要分為兩大類:
- 無失真壓縮 (Lossless Compression): 壓縮後可以完全恢復原始數據,沒有任何資訊損失。適用於文字、程式碼、金融數據等對精確性要求極高的場合。
- 失真壓縮 (Lossy Compression): 壓縮後數據會丟失一部分資訊,無法完全恢復原始數據。
第 16 題3 分
- 訓練機器學習模型時,將資料分為訓練集與測試集的主要目的是為了避免什麼問題?(3%)
(A) Underfitting (低度擬合)
(B) Overfitting (過度擬合)
(C) Normalization (正規化)
(D) Clustering (分群)
登入後即可作答並保存紀錄。
核心觀念:本題考查機器學習中「訓練集」與「測試集」劃分的根本目的,即避免模型對訓練數據過度適應而無法泛化到新數據。
詳解:
在機器學習中,將數據集劃分為訓練集(Training Set)和測試集(Test Set)是標準的做法。
- 訓練集: 用於訓練模型,讓模型學習數據中的模式和規律。
- 測試集: 用於評估模型在未見過的數據上的表現。
為什麼要分開?
如果我們僅使用訓練集來評估模型,模型可能會「記住」訓練數據中的所有細節,包括其中的噪聲和特例。這樣訓練出來的模型在訓練集上表現會非常好,但當遇到新的、未見過的數據時,就無法做出準確的預測。這種現象被稱為過度擬合(Overfitting)。
第 17 題16 分
三、程式設計(32%)
- 費氏數列:請寫一個函式 fib(n),輸入整數n,輸出費氏數列的第n項。(定義:Fo=0, F1=1, Fn = Fn-1 + Fn-2)
(16%)
登入後即可作答並保存紀錄。
核心觀念
費氏數列定義為:
且對於 :
本題要求撰寫函式 fib(n),輸入非負整數 ,輸出第 項費氏數。
關鍵在於:
- 時回傳
- 時回傳
- 時,利用前兩項逐步推算目前項目
解題方法
採用「由小到大」的迭代法。先設定:
prev2表示前前項,初始為prev1表示前一項,初始為
每次計算:
接著將兩個變數向前更新:
經過 次更新後,prev1 即為 。
參考程式碼
以下以 Python 撰寫:
def fib(n):
if n < 0:
raise ValueError("n 必須是非負整數")
if n == 0:
return 0
if n == 1:
return 1
prev2 = 0 # F0
prev1 = 1 # F1
for i in range(2, n + 1):
current = prev2 + prev1
prev2 = prev1
prev1 = current
return prev1
執行示例
以 為例:
因此:
為何不直接使用遞迴
直接依照公式撰寫:
第 18 題16 分
- 處理文字資訊的迴文偵測:請寫一個函式 isPalindrome(s),判斷輸入的字串s是否為迴文(從左讀和從右讀一樣,如"madam"),可忽略大小寫與空白。(16%)
登入後即可作答並保存紀錄。
核心觀念
- 迴文(Palindrome)定義:字串正讀與反讀完全相同的文字序列(例如
"madam"、"racecar")。 - 文字前處理(Text Preprocessing / Normalization):題目明確規定「忽略大小寫與空白」,因此在比對之前,必須先對原始字串進行過濾與正規化:
- 轉為統一大小寫(如全轉小寫
lower())。 - 移除所有空白字元(Space、Tab 等)。
- 轉為統一大小寫(如全轉小寫
- 雙指標演算法(Two-Pointer Technique)或字串反轉比對:
- 雙指標法:在字串兩端設置左指標與右指標,向中間逐步比對相應字元。
- 字串反轉法:直接比對正規化後的字串與其反轉字串是否完全一致。
解題方法
此題為經典的程式設計題,以研究所計概考試最通用且直觀的 Python 作為實作語言(若考卷未限定語言,Python 語法最精簡且不易出錯;文末亦附上 C/C++ 解法供參考)。
解題邏輯分為兩大步驟:
- 清理字串:遍歷輸入字串 ,將字元轉為小寫,並濾除空白字元(可使用字串生成式或雙指標邊走邊過濾)。
- 迴文判定:比對過濾後的字串與其反轉字串是否相等。
Python 實作程式碼
def isPalindrome(s: str) -> bool:
# 步驟 1:過濾空白字元並全部轉換為小寫
filtered_chars = [ch.lower() for ch in s if ch != ' ']
clean_str = "".join(filtered_chars)
# 步驟 2:利用切片 [::-1] 快速反轉並比對
return clean_str == clean_str[::-1]
演算法複雜度分析
- 時間複雜度:,其中 為輸入字串 的長度。遍歷過濾需 ,反轉與字串比對亦需 。
- 空間複雜度:,需額外建立儲存清理後字串的空間。
解題技巧與延伸比較
- 空間最佳化寫法(原地雙指標法,In-place Two Pointers):
若考題強調記憶體空間效率( 額外空間),可直接在原字串上使用左(left)、右(right)兩指標向中間靠攏,遇到空白時主動跳過: