Algoritmi e strutture dati
Ordinamento, alberi, hashing, algoritmi sui grafi, KMP, esercizi LeetCode e analisi degli algoritmi.
銀行系統前後端完整教學 — 架構、流程、API、安全與交易一致性
本教材從工程角度介紹一個現代銀行系統如何設計前端、後端、資料庫、交易流程、安全控管與 API。 > 內容適合作為系統設計、金融科技後端、全端開發與面試準備教材。 > > 注意:真實銀行系統會受到法規、內控、資安稽核與核心銀行主機限制,本教材以教學用架構為主,不構成金融或法遵建議。
Leggi l'articolo →二元搜尋(Binary Search)— 完整教材
分析教材與遞迴教材都把二元搜尋當成 (O(log n)) 的例子,但沒有處理邊界、lower_bound / upper_bound,也沒有「對答案二分」——後者在課程與實作裡比在陣列裡找一個數更常出現。本篇把迴圈不變量寫死,避免 off-by-one。
Leggi l'articolo →Disjoint Set(並查集 / Union-Find)演算法完整教學
Disjoint Set(不相交集合),又稱 Union-Find 或 並查集,是一種維護「互不相交集合的動態分組(partition)」的資料結構。
Leggi l'articolo →分治法與主定理(Divide and Conquer / Master Theorem)— 完整教材
分析教材用最大子段和展示了一次分治,遞迴教材列出了合併排序與快速排序,但沒有把「遞迴式怎麼解」收成可以套用的定理。本篇補上替換法的一個完整例子、遞迴樹的直覺,以及主定理的三個標準情況。
Leggi l'articolo →動態規劃(Dynamic Programming)— 方法論完整教材
既有教材把動態規劃嵌在個別問題裡:0/1 背包、子集和、編輯距離、漢彌爾頓路徑的狀態壓縮。本篇把「怎麼設計一題 DP」抽成可遷移的方法:狀態、轉移、順序、還原方案。讀完再回去看那些專題,會知道它們只是同一套骨架的不同填法。
Leggi l'articolo →模糊搜尋(Fuzzy Search / Approximate String Matching)— 完整教材
從「字串距離」到「近似匹配演算法」與「索引結構」,一份內含 9 個手動推演例子、完整可編譯 C++ 程式碼的中階教材。
Leggi l'articolo →圖論演算法完整教材
「圖」(Graph)是電腦科學中最具表達力的資料結構之一。任何牽涉到「物件」與「物件之間關係」的問題,幾乎都能用圖來建模:社群網路的朋友關係、地圖上的道路、網頁之間的超連結、程式的相依性、晶片上的線路、金融交易的金流、分子的原子鍵結……。一旦把問題抽象成圖,我們就能套用一整套成熟、強大且效率經過嚴格證明的演算法來求解。
Leggi l'articolo →貪心演算法(Greedy Algorithms)— 方法論完整教材
貪心每次做當下看起來最好的選擇,並且不再反悔。它比動態規劃快,也比動態規劃容易寫錯:很多問題「看起來能貪」其實不能。本篇用交換論證說明什麼時候貪心是對的,並把活動選擇、分數背包、霍夫曼編碼做成可手算的完整例子。
Leggi l'articolo →Hash 演算法 — 完整教材(概念到應用)
本教材依「資料結構用的 Hash」與「密碼學用的 Hash」兩條主線編排,並對應 Hash/cpp/ 內的 C++ 範例程式。
Leggi l'articolo →堆積與優先佇列(Binary Heap / Priority Queue)— 完整教材
本篇補上既有排序教材裡「堆積排序」只有程式、沒有資料結構本身的缺口。讀完應能獨立實作二元堆積、說明 build-heap 為什麼是線性時間,並知道 Dijkstra、Prim、Top-K 為什麼都站在優先佇列上。
Leggi l'articolo →KMP (Knuth-Morris-Pratt) 字串匹配演算法 — 完整教學
字串匹配問題(String Matching / Pattern Search):
Leggi l'articolo →Knuth–Morris–Pratt (KMP) 字串匹配演算法 — 完整教材
適用對象:演算法初學者到中階;含完整理論、6 個手動推演例子、可編譯的 C++ 程式碼,以及進階應用。
Leggi l'articolo →KMP 與 LPS 演算法 — 完整教學(含多範例逐步推導)
本教材把 LPS(Longest Proper Prefix–Suffix) 與 KMP(Knuth–Morris–Pratt) 當成兩個獨立但相依的主題。 > LPS 不只是 KMP 的副產物,它本身就是一個強大的字串工具;KMP 則是 LPS 最有名的應用之一。
Leggi l'articolo →數論演算法(GCD、擴展歐幾里得、模反元素、快速冪)— 完整教材
分析教材把歐幾里得演算法與快速冪當成 (O(log n)) 的例子,沒有把它們接成「模意義下的除法」。競賽與密碼學導論裡,這四個是同一條鏈:gcd 判斷互質,擴展版求出係數,係數就是模反元素,快速冪用來算大指數。本篇只做到正確計算與複雜度,不討論如何攻擊實際系統。
Leggi l'articolo →順序統計與快速選擇(Quickselect)— 完整教材
排序教材在最後說:只要第 (k) 小的元素時,不必把整個陣列排完。本篇把這件事做成演算法。平均線性時間的快速選擇足夠日常使用;最壞線性時間的中位數的中位數用來說明「最壞 (O(n)) 做得到」,實作較少逐行抄它。
Leggi l'articolo →前綴和、差分與雙指標 — 完整教材
很多「區間加總」與「有序陣列上的配對」不需要線段樹,也不需要二元搜尋。前綴和把重複的區間加總收成一次相減,差分把區間修改收成兩個端點,雙指標把有序陣列上的 (O(n^2)) 配對收成 (O(n))。三者都是後面 DP、線段樹與二分答案的前置工具,本站原先散落在各篇裡,沒有放在一起。
Leggi l'articolo →遞迴 (Recursion) — 完整教學
遞迴 (Recursion) 是指一個函式直接或間接地呼叫自己的程式技巧。
Leggi l'articolo →線段樹與樹狀陣列(Segment Tree / Fenwick Tree)— 完整教材
前綴和能算靜態區間和,改一個元素就要重建。堆積只會取極值,不會做「區間和」。線段樹與樹狀陣列補上的是:陣列會改,又要很快問區間。NTUCPC 這類大綱把兩者放在基礎資料結構的後段;本站先前沒有獨立教材。
Leggi l'articolo →排序演算法全集(C++17)
每個檔案都是獨立、可編譯執行的示範程式,內含:原理註解、複雜度分析、 穩定性說明、多組測試(含空陣列、單元素、已排序、反向、重複元素等邊界情況)。
Leggi l'articolo →排序演算法 — 教材(含 C++ 範例)
排序問題: 給定長度為 (n) 的序列,將元素依鍵值(通常為數值)遞增(或遞減)排列。
Leggi l'articolo →Splay Tree(伸展樹)演算法完整教學
Splay Tree(伸展樹) 由 Daniel Sleator 與 Robert Tarjan 在 1985 年提出,是一種自我調整的二元搜尋樹(Self-adjusting BST)。
Leggi l'articolo →堆疊、佇列與鏈結串列 — 完整教材
本資料夾裡已有 singly_linked_list.cpp、stack_array.cpp、queue_array.cpp、deque_array.cpp 等可編譯實作,README 也列了操作清單。缺的是「為什麼是這兩種順序、複雜度怎麼來、用錯會怎樣」。圖的 BFS/DFS、回溯、運算式括號,都只是這兩個抽象資料型別。
Leggi l'articolo →第三方支付平台前後端完整教學 — 類 Stripe / PayPal 架構、API 對接與 Webhook
本教材介紹第三方支付平台的全端架構與 API 對接方式,並以類似 Stripe.com、PayPal 的產品型態作為參考。 > 內容涵蓋商戶前端、商戶後端、支付平台、收單銀行、卡組織、Webhook、退款、對帳、安全與錯誤處理。 > > 注意:Stripe、PayPal 的實際 API 會隨版本與地區改變。本文使用教學用 API 形狀說明設計思想,實作時應以官方文件與合約為準。
Leggi l'articolo →Tree、Binary Tree、Balanced Binary Tree — 完整教學
樹 (Tree) 是一種非線性的資料結構,由節點(node)和邊(edge)組成。
Leggi l'articolo →