資料結構與演算法教學系列文 (8) 字串比對、位元運算、雙重指標
字串比對(String Matching)
KMP 演算法
KMP 演算法是一種用於字串搜尋的高效方法。透過建立部分配對表(最長的相同前後綴),可以快速定位搜尋字串中的可能配對位置,減少不必要的重複比較,從而加速搜尋過程。
KMP 演算法其實相對複雜且較難實作,我個人認為有大概理解概念就好,實際上也很少遇到需要直接實作該演算法的情境。
- 初學者學 KMP 演算法
補充:KMP algorithm,從自學到放棄 (1)
補充:KMP algorithm,從自學到放棄 (2)
補充:演算法筆記:substring
補充:KMP Visualization
Leetcode
位元運算(Bit Manipulation)
Bit manipulation 是在電腦中用「位元」(bit)來進行操作的技巧,這種技巧常在程式設計競賽或像 Leetcode 這樣的題目中出現。位元是電腦中最基本的單位,由 0 或 1 組成,這跟開關一樣,只有開或關的狀態。這些 0 與 1 會再經由二進位制與二補數的方式,組成所有的其他數字。常見的位元操作有:AND, OR, XOR, NOT, Shift 等等,參考以下:
Leetcode
雙重指標(Two Pointers)
常用於陣列當中,用兩個指標指著不同的位置,與滑動視窗(Sliding Window)有異曲同工之妙,兩者基本上是相同技巧。
快慢指標(Fast & Slow Pointers)
此種技巧為雙重指標的特殊版本,使用一快一慢的指標(一次走不同步數 or 一個先走一個後走),常用在 Linked List 當中。
這樣可以幹嘛呢?我們來看看以下的例子:
尋找中點
判斷 Cycle 是否存在 Linked List 中
尋找倒數第 K 個節點
Leetcode
本部落格所有文章除特別聲明外,均採用CC BY-NC-SA 4.0 授權協議。轉載請註明來源 Jack's Space!
評論