Cheat sheet

ทุกสูตรและตัวเลขที่ต้องจำในวิชานี้ รวมไว้หน้าเดียว

ลำดับอัตราการโต

O(1) << O(log n) << O(n) << O(n log n) << O(n²) << O(2ⁿ)
ดีสุด <---------------------------------------> แย่สุด

วิธีเทียบ 2 ฟังก์ชัน:

lim (n→∞) f(n)/g(n) = ∞  → f โตเร็วกว่า
                        = 0  → g โตเร็วกว่า
                        = C  → โตเท่ากัน

Big-O และเพื่อน ๆ

สัญลักษณ์ความหมายใช้กับ
O(f)≤ fworst case / ขอบบน
Ω(f)≥ fbest case / ขอบล่าง
Θ(f)= fbest = worst
o(f)< fขอบบนแบบเข้ม
ω(f)> fขอบล่างแบบเข้ม
O(n+1) = O(n)      O(n+c) = O(n)      O((n²-n)/2) = O(n²)
อัลกอริทึมBestWorstเงื่อนไข
Linear Search (มี return)Ω(1)O(n)ข้อมูลไม่ต้องเรียง
Linear Search (ไม่มี return)Θ(n)วนครบทุกกรณี
Binary SearchΩ(1)O(log n)ข้อมูลต้องเรียงแล้ว

Sorting

อัลกอริทึมBestWorstหน่วยความจำเพิ่มจุดสังเกต
Bubble (ไม่มี flag)Θ(n²)Θ(n²)ไม่มีj < n-i-1
Bubble (มี flag swapped)Ω(n)O(n²)ไม่มีbreak เมื่อไม่มี swap
InsertionΩ(n)O(n²)ไม่มีเหมือนจัดไพ่ในมือ
MergeΘ(n log n)Θ(n log n)ต้องใช้ array ชั่วคราวdivide and conquer
Tower of HanoiO(2ⁿ)recursion 2 สาย

โครงสร้างข้อมูล — เวลาค้นหา

โครงสร้างSearch
ArrayO(n)
Sorted ArrayO(log n)
Stack / Queue / Linked listO(n)
Binary Search Tree (balanced)O(log n)
Binary Search Tree (เอียงสุด)O(n)
Hash Table (กระจายดี)Θ(1)
Hash Table (ชนกันหมด)O(n)

สูตรของ Tree

Depth ของ node  = ความยาวเส้นทางขึ้นไปถึง root      (มองขึ้น)
Height ของ node = ความยาวเส้นทางที่ยาวสุดลงถึง leaf  (มองลง)
Height ของ tree = height ของ root

Complete binary tree height k  → node มากสุด = 2^(k+1) - 1
BST:  log₂n ≤ h ≤ n   และเวลาค้นหา = O(h)
ชนิด binary treeเงื่อนไข
Fullทุก node มีลูก 0 หรือ 2 ตัว
Completeเต็มทุกชั้นยกเว้นชั้นล่างสุดที่เรียงชิดซ้าย
Perfectเต็มทุกชั้น leaf อยู่ชั้นเดียวกันหมด
Balanced (AVL)height ซ้าย–ขวาต่างกันไม่เกิน 1 ทุก node

Traversal

แบบลำดับโครงสร้างที่ใช้หมายเหตุ
PreorderRoot, Left, Rightstack / recursion
InorderLeft, Root, Rightstack / recursionBST ได้ค่าเรียงน้อยไปมาก
PostorderLeft, Right, Rootstack / recursion
BFS (level order)ทีละชั้น ซ้ายไปขวาqueueการันตีเส้นทางสั้นสุด

ต้นไม้ตัวอย่างในบทเรียนให้ผลดังนี้:

Preorder  : 1, 8, 3, 4, 9, 5, 6, 2, 0, 7
Inorder   : 3, 8, 9, 4, 5, 1, 2, 0, 6, 7
Postorder : 3, 9, 5, 4, 8, 0, 2, 7, 6, 1
BFS       : 1, 8, 6, 3, 4, 2, 7, 9, 5, 0

สูตรของ Graph

Complete directed graph    E = N(N-1)
Complete undirected graph  E = N(N-1)/2
Tree                       E = V - 1
MST ของกราฟ V vertex        E = V - 1
ความยาว path ที่มี n vertex  = n - 1
คำถามMatrixList
u,v ติดกันไหมΘ(1)O(V)
เพื่อนบ้านของ v มีใครบ้างO(V)Θ(จำนวนเพื่อนบ้าน)
หน่วยความจำV + E
อัลกอริทึมแก้ปัญหาอะไรแนวคิด
PrimMSTgreedy ขยายจาก vertex เดียว
KruskalMSTgreedy เรียง edge ทั้งกราฟ ข้ามเส้นที่ทำให้เกิด cycle
Dijkstrashortest path จาก sourcerelaxation: d(u)+w < d(v) แล้วอัปเดต
BFSshortest path ในกราฟไม่ถ่วงน้ำหนักqueue ไล่ทีละชั้น

Hash Table

Division method        hash(key) = key % m
Multiplication method  hash(key) = m × ( key×A - ⌊key×A⌋ ),  0 < A < 1
Uniform                hash(key) = key × (m / X)
Load factor            ∝ = n / m
วิธีแก้ collisionกลุ่มลำดับการ probe
Separate Chainingclose addressingต่อ linked list ในช่องเดิม
Linear Probingopen addressinghash+1, hash+2, hash+3, …
Quadratic Probingopen addressinghash+1, hash+4, hash+9, … (hash+k²)
Double Hashingopen addressinghash + k×hash2(key)

Recurrence ที่ต้องจำ

สมการผลลัพธ์มาจาก
T(n) = T(n/2) + cO(log n)Binary search
T(n) = 2T(n/2) + kO(n)Divide step ของ merge sort
T(n) = 2T(n/2) + nΘ(n log n)Merge sort เต็มรูปแบบ
T(n) = 2T(n-1) + 1O(2ⁿ)Tower of Hanoi

กับดักข้อสอบ

  • Binary search ต้องใช้ข้อมูลที่เรียงแล้ว — ถ้าโจทย์ให้ array มั่ว ๆ ใช้ไม่ได้
  • Bubble sort ที่ไม่มี flag เป็น Θ(n²) ไม่ใช่ Ω(n) — best case ดีขึ้นได้ต่อเมื่อใส่ flag
  • Merge sort ไม่มี best case ที่ดีกว่า — Θ(n log n) ทุกกรณี
  • BST ที่ใส่ข้อมูลเรียงมาแล้ว จะกลายเป็นเส้นตรง ค้นหา O(n)
  • เงื่อนไข BST ต้องจริงกับทุก node ใน subtree ไม่ใช่แค่ลูกที่ติดกัน
  • ลบใน linear probing ห้ามปล่อยช่องว่างเปล่า ต้องทำเครื่องหมาย deleted
  • MST ไม่เท่ากับ shortest path tree — คนละปัญหา
  • BFS การันตีเส้นทางสั้นสุด DFS ไม่การันตี
  • COUNT ที่ใช้กับ LEFT JOIN ในบทฐานข้อมูลก็คนละเรื่องกับที่นี่ — อย่าสับสนสองวิชา