S SmartDocs

Algorithms & Data Structures

Sorting, trees, hashing, graph algorithms, KMP, LeetCode practice and algorithm analysis teaching materials.

Algorithms 中文 Updated 2026-04-26

銀行系統前後端完整教學 — 架構、流程、API、安全與交易一致性

本教材從工程角度介紹一個現代銀行系統如何設計前端、後端、資料庫、交易流程、安全控管與 API。 > 內容適合作為系統設計、金融科技後端、全端開發與面試準備教材。 > > 注意:真實銀行系統會受到法規、內控、資安稽核與核心銀行主機限制,本教材以教學用架構為主,不構成金融或法遵建議。

Read article →
Algorithms 中文 Updated 2026-10-24

二元搜尋(Binary Search)— 完整教材

分析教材與遞迴教材都把二元搜尋當成 (O(log n)) 的例子,但沒有處理邊界、lower_bound / upper_bound,也沒有「對答案二分」——後者在課程與實作裡比在陣列裡找一個數更常出現。本篇把迴圈不變量寫死,避免 off-by-one。

Read article →
Algorithms 中文 Updated 2026-04-26

Disjoint Set(並查集 / Union-Find)演算法完整教學

Disjoint Set(不相交集合),又稱 Union-Find 或 並查集,是一種維護「互不相交集合的動態分組(partition)」的資料結構。

Read article →
Algorithms 中文 Updated 2026-10-24

分治法與主定理(Divide and Conquer / Master Theorem)— 完整教材

分析教材用最大子段和展示了一次分治,遞迴教材列出了合併排序與快速排序,但沒有把「遞迴式怎麼解」收成可以套用的定理。本篇補上替換法的一個完整例子、遞迴樹的直覺,以及主定理的三個標準情況。

Read article →
Algorithms 中文 Updated 2026-10-24

動態規劃(Dynamic Programming)— 方法論完整教材

既有教材把動態規劃嵌在個別問題裡:0/1 背包、子集和、編輯距離、漢彌爾頓路徑的狀態壓縮。本篇把「怎麼設計一題 DP」抽成可遷移的方法:狀態、轉移、順序、還原方案。讀完再回去看那些專題,會知道它們只是同一套骨架的不同填法。

Read article →
Algorithms 中文 Updated 2026-05-29

模糊搜尋(Fuzzy Search / Approximate String Matching)— 完整教材

從「字串距離」到「近似匹配演算法」與「索引結構」,一份內含 9 個手動推演例子、完整可編譯 C++ 程式碼的中階教材。

Read article →
Algorithms 中文 Updated 2026-06-21

圖論演算法完整教材

「圖」(Graph)是電腦科學中最具表達力的資料結構之一。任何牽涉到「物件」與「物件之間關係」的問題,幾乎都能用圖來建模:社群網路的朋友關係、地圖上的道路、網頁之間的超連結、程式的相依性、晶片上的線路、金融交易的金流、分子的原子鍵結……。一旦把問題抽象成圖,我們就能套用一整套成熟、強大且效率經過嚴格證明的演算法來求解。

Read article →
Algorithms 中文 Updated 2026-10-24

貪心演算法(Greedy Algorithms)— 方法論完整教材

貪心每次做當下看起來最好的選擇,並且不再反悔。它比動態規劃快,也比動態規劃容易寫錯:很多問題「看起來能貪」其實不能。本篇用交換論證說明什麼時候貪心是對的,並把活動選擇、分數背包、霍夫曼編碼做成可手算的完整例子。

Read article →
Algorithms 中文 Updated 2026-04-19

Hash 演算法 — 完整教材(概念到應用)

本教材依「資料結構用的 Hash」與「密碼學用的 Hash」兩條主線編排,並對應 Hash/cpp/ 內的 C++ 範例程式。

Read article →
Algorithms 中文 Updated 2026-10-24

堆積與優先佇列(Binary Heap / Priority Queue)— 完整教材

本篇補上既有排序教材裡「堆積排序」只有程式、沒有資料結構本身的缺口。讀完應能獨立實作二元堆積、說明 build-heap 為什麼是線性時間,並知道 Dijkstra、Prim、Top-K 為什麼都站在優先佇列上。

Read article →
Algorithms 中文 Updated 2026-03-06

KMP (Knuth-Morris-Pratt) 字串匹配演算法 — 完整教學

字串匹配問題(String Matching / Pattern Search):

Read article →
Algorithms 中文 Updated 2026-05-24

Knuth–Morris–Pratt (KMP) 字串匹配演算法 — 完整教材

適用對象:演算法初學者到中階;含完整理論、6 個手動推演例子、可編譯的 C++ 程式碼,以及進階應用。

Read article →
Algorithms 中文 Updated 2026-04-26

KMP 與 LPS 演算法 — 完整教學(含多範例逐步推導)

本教材把 LPS(Longest Proper Prefix–Suffix) 與 KMP(Knuth–Morris–Pratt) 當成兩個獨立但相依的主題。 > LPS 不只是 KMP 的副產物,它本身就是一個強大的字串工具;KMP 則是 LPS 最有名的應用之一。

Read article →
Algorithms 中文 Updated 2026-10-24

數論演算法(GCD、擴展歐幾里得、模反元素、快速冪)— 完整教材

分析教材把歐幾里得演算法與快速冪當成 (O(log n)) 的例子,沒有把它們接成「模意義下的除法」。競賽與密碼學導論裡,這四個是同一條鏈:gcd 判斷互質,擴展版求出係數,係數就是模反元素,快速冪用來算大指數。本篇只做到正確計算與複雜度,不討論如何攻擊實際系統。

Read article →
Algorithms 中文 Updated 2026-10-24

順序統計與快速選擇(Quickselect)— 完整教材

排序教材在最後說:只要第 (k) 小的元素時,不必把整個陣列排完。本篇把這件事做成演算法。平均線性時間的快速選擇足夠日常使用;最壞線性時間的中位數的中位數用來說明「最壞 (O(n)) 做得到」,實作較少逐行抄它。

Read article →
Algorithms 中文 Updated 2026-10-24

前綴和、差分與雙指標 — 完整教材

很多「區間加總」與「有序陣列上的配對」不需要線段樹,也不需要二元搜尋。前綴和把重複的區間加總收成一次相減,差分把區間修改收成兩個端點,雙指標把有序陣列上的 (O(n^2)) 配對收成 (O(n))。三者都是後面 DP、線段樹與二分答案的前置工具,本站原先散落在各篇裡,沒有放在一起。

Read article →
Algorithms 中文 Updated 2026-03-28

遞迴 (Recursion) — 完整教學

遞迴 (Recursion) 是指一個函式直接或間接地呼叫自己的程式技巧。

Read article →
Algorithms 中文 Updated 2026-10-24

線段樹與樹狀陣列(Segment Tree / Fenwick Tree)— 完整教材

前綴和能算靜態區間和,改一個元素就要重建。堆積只會取極值,不會做「區間和」。線段樹與樹狀陣列補上的是:陣列會改,又要很快問區間。NTUCPC 這類大綱把兩者放在基礎資料結構的後段;本站先前沒有獨立教材。

Read article →
Algorithms 中文 Updated 2026-07-03

排序演算法全集(C++17)

每個檔案都是獨立、可編譯執行的示範程式,內含:原理註解、複雜度分析、 穩定性說明、多組測試(含空陣列、單元素、已排序、反向、重複元素等邊界情況)。

Read article →
Algorithms 中文 Updated 2026-10-24

排序演算法 — 教材(含 C++ 範例)

排序問題: 給定長度為 (n) 的序列,將元素依鍵值(通常為數值)遞增(或遞減)排列。

Read article →
Algorithms 中文 Updated 2026-04-26

Splay Tree(伸展樹)演算法完整教學

Splay Tree(伸展樹) 由 Daniel Sleator 與 Robert Tarjan 在 1985 年提出,是一種自我調整的二元搜尋樹(Self-adjusting BST)。

Read article →
Algorithms 中文 Updated 2026-10-24

堆疊、佇列與鏈結串列 — 完整教材

本資料夾裡已有 singly_linked_list.cpp、stack_array.cpp、queue_array.cpp、deque_array.cpp 等可編譯實作,README 也列了操作清單。缺的是「為什麼是這兩種順序、複雜度怎麼來、用錯會怎樣」。圖的 BFS/DFS、回溯、運算式括號,都只是這兩個抽象資料型別。

Read article →
Algorithms 中文 Updated 2026-04-26

第三方支付平台前後端完整教學 — 類 Stripe / PayPal 架構、API 對接與 Webhook

本教材介紹第三方支付平台的全端架構與 API 對接方式,並以類似 Stripe.com、PayPal 的產品型態作為參考。 > 內容涵蓋商戶前端、商戶後端、支付平台、收單銀行、卡組織、Webhook、退款、對帳、安全與錯誤處理。 > > 注意:Stripe、PayPal 的實際 API 會隨版本與地區改變。本文使用教學用 API 形狀說明設計思想,實作時應以官方文件與合約為準。

Read article →
Algorithms 中文 Updated 2026-10-24

Tree、Binary Tree、Balanced Binary Tree — 完整教學

樹 (Tree) 是一種非線性的資料結構,由節點(node)和邊(edge)組成。

Read article →