นี่คือโปรแกรม C++ สำหรับสร้างคู่เซตย่อย (Subset Pairs) ทั้งหมด ที่ Union ของทั้งสองจะได้เซตต้นฉบับ (Superset) อัลกอริทึม เริ่มต้น ฟังก์ชัน UnionSet(): อาร์กิวเมนต์: a[] = อาร์เรย์ n = จำนวนองค์ประกอบ ส่วนตัวของ
นี่คือโปรแกรม C++ สำหรับสร้างคู่เซตย่อย (Subset Pairs) ทั้งหมด ที่ Union ของทั้งสองจะได้เซตต้นฉบับ (Superset) อัลกอริทึม เริ่มต้น ฟังก์ชัน UnionSet(): อาร์กิวเมนต์: a[] = อาร์เรย์ n = จำนวนองค์ประกอบ ส่วนตัวของ
นี่คือโปรแกรม C++ สำหรับตรวจสอบว่ามีเส้นทางระหว่าง 2 จุดที่กำหนดหรือไม่ อัลกอริทึม เริ่มต้น ฟังก์ชัน isReach() เป็นฟังก์ชันแบบเรียกซ้ำ เพื่อตรวจสอบว่า d เข้าถึงได้จาก s หรือไม่: A) ทำเครื่องหมายให้ทุกจุดเป็นยังไม่ได้เยี่ยมชม B) ทำเครื่องหมายจุดปัจจุบันว่าเยี่ย
นี่คือโปรแกรม C++ สำหรับแก้ปัญหา Dominating Set อัลกอริทึม เริ่มต้น รับจำนวนจุดและขอบเป็นอินพุต รวมถึงจุดปลายของขอบ ฟังก์ชัน dominant(): ประกาศ Vector Set เลือกขอบ e ใดๆ ในกราฟที่เชื่อมจุด X และ Y เพิ่มจุดหนึ่ง
นี่คือโปรแกรม C++ ที่สาธิตการนำปัญหา 4 สี (4-Color Problem) มาใช้งาน อัลกอริทึม เริ่มต้น พัฒนาฟังก์ชัน issafe() เพื่อตรวจสอบว่าการกำหนดสีปัจจุบัน ปลอดภัยสำหรับจุด v หรือไม่ คือ ตรวจสอบว่าขอบมีอยู่หรือไม่ ถ้ามีอยู่ ตรวจสอบต่อว่าสีที่จะเติมใ
ทฤษฎีของ Vizing ระบุว่า Chromatic Index ของกราฟแบบง่าย (Simple Graph) สามารถเป็นได้เพียง Max Degree หรือ Max Degree + 1 เท่านั้น โดย Chromatic Index หมายถึงจำนวนสีสูงสุดที่จำเป็นสำหรับการระบายสีขอบ (Edge Coloring) ของกราฟ นี่คือโปรแกรม C++ ที่นำทฤษฎีของ Vizing มาใช้งาน อัลกอริทึม เริ่มต้น &n
นี่คือโปรแกรม C++ ที่นำ Treap มาใช้งาน Treap เป็นโครงสร้างข้อมูลแบบ Binary Search Tree แบบสุ่ม (Randomized) ที่นี่เราจะพิจารณาการดำเนินการ Insert, Delete และ Search บนโครงสร้างนี้ ฟังก์ชันและคำอธิบาย ฟังก์ชัน rotLeft() สำหรับการหมุนซ้ายหมุนต้นไม้ก่อน แล้วตั้งค่า Root ใหม่ ฟังก์ชัน rotRight() สำห
นี่คือโปรแกรม C++ สำหรับแปลงเวลาจากรูปแบบ 12 ชั่วโมง (AM/PM) เป็นรูปแบบ 24 ชั่วโมง อัลกอริทึม เริ่มต้น ใน main() ถ้า median = pm ตรวจสอบว่าชั่วโมงที่ป้อนน้อยกว่า 12 แล้วบวก 12 เข้ากับชั่วโมงและพิมพ์เวลาในรูปแบบ 24 ชั่ว
นี่คือโปรแกรม C++ ที่พิมพ์ข้อความ Happy Birthday โดยใช้เทคนิคการจัดการตัวอักษรแบบฉลาด อัลกอริทึม เริ่มต้น กำหนด str1 ซึ่งรับตัวอักษรถัดไปของผลลัพธ์ที่ต้องการ เช่น สำหรับ H จะเป็น G กำหนดสตริงให้กับพอยน์เตอร์ p สร้างลูป while จนกว่า *p จะเท่ากับ NULL &nb
พิมพ์รูป Diamond (เพชร) ด้วย Asterisk (*) โดยรับจำนวนแถว (Rows) ของครึ่งบน มาเป็นพารามิเตอร์ Logic Diamond = Upper Pyramid + Lower Inverted Pyramid Upper: Rows 1 to N, Spaces = N-i, Stars = 2i-1 Lower: Rows 1 to N-1, Spaces = i, Stars = 2(N-i)-1 โค้ด C++ (Clean & Readable) #include <iostream&
Graphic Sequence (Degree Sequence) คือลำดับของ Degree ของ Vertex ทั้งหมดใน Graph โจทย์: กำหนด Sequence ของจำนวนเต็มบวก สามารถสร้าง Simple Graph (No Loops, No Multiple Edges) ที่มี Degree Sequence ตรงกันได้หรือไม่? Erdős–Gallai Theorem (Necessary & Sufficient Condition) Sequence d₁ ≥ d₂ ≥ ... ≥ dₙ เ
การตรวจสอบ Cycle ใน Directed Graph สามารถทำได้โดยพยายามทำ Topological Sort ถ้าทำไม่ได้ (Result Size < V) แสดงว่ามี Cycle หลักการ: Kahns Algorithm for Cycle Detection คำนวณ In-degree ทุก Vertex Queue เก็บ Vertex ที่ In-degree = 0 Process Queue: Pop u, ลด In-degree ของ Neighbors นับจำนวน Vertex ที่
Topological Sorting เรียงลำดับ Vertex ของ Directed Graph ให้ Edge (u,v) ทุกอันมี u อยู่ก่อน v ได้ก็ต่อเมื่อ Graph เป็น DAG (Directed Acyclic Graph) → ไม่มี Cycle Algorithm: Kahns Algorithm (BFS-based) คำนวณ In-degree ของทุก Vertex Enqueue Vertex ที่ In-degree = 0 ทั้งหมด Dequeue Vertex u → Add to
Forward Edge ใน DFS Tree ของ Directed Graph คือ Edge (u, v) ที่ v เป็น Descendant ของ u ใน DFS Tree แต่ไม่ใช่ Tree Edge (คือ u → v โดย v ถูก Visit แล้ว และอยู่ใน Subtree ของ u) Edge Classification ใน DFS Edge TypeConditionColor Tree Edgev ไม่เคย Visit (White)White → Gray Back Edgev กำลัง Process อ
Threaded Binary Tree เป็น Binary Tree ที่ Pointer NULL ของ Node ถูกแทนที่ด้วย Thread (Pointer) ไปยัง Inorder Predecessor/Successor ทำให้ Inorder Traversal ได้ใน O(N) Time, O(1) Space โดยไม่ต้องใช้ Stack หรือ Recursion Types of Threading TypeLeft NULL →Right NULL → Single Threaded (Right)-Inorder S
Point-Line Duality เป็นการแปลงระหว่าง Point และ Line ใน Computational Geometry มีหลายรูปแบบ แบบมาตรฐานคือ: Standard Duality Transform Point → Line: Point p = (a, b) → Line y = ax - b Line → Point: Line y = cx + d → Point (c, -d) Properties Involution: Dual(Dual(p)) = p Incidence Preserving: Poi
จุด 3 จุด P1(x1,y1), P2(x2,y2), P3(x3,y3) อยู่บนเส้นตรงเดียวกัน (Collinear) ก็ต่อเมื่อ พื้นที่สามเหลี่ยมที่เกิดขึ้น = 0 Mathematical Formula พื้นที่สามเหลี่ยม (Shoelace Formula): Area = ½ | x1(y2 - y3) + x2(y3 - y1) + x3(y1 - y2) | Collinear ⟺ Area = 0 ⟺ x1(y2 - y3) + x2(y3 - y1) + x3(y1 - y2) = 0
N-Queens Problem: วาง N Queens บนหมากรุก N×N ให้ไม่มี Queen ตัวใดโจมตีกันได้ (ไม่อยู่ Row, Column, หรือ Diagonal เดียวกัน) Backtracking Algorithm วาง Queen ทีละ Column (หรือ Row) ตรวจสอบความปลอดภัย: Row, Upper Diagonal, Lower Diagonal ถ้าปลอดภัย → วาง Queen, Recurse Column ถัดไป ถ้าไม่ปลอดภัยหรือ
การค้นหา Pattern ใน Text เดียวกันหลายครั้ง (Repeated Search) หาก Text คงที่ แต่ Pattern เปลี่ยนบ่อย ควรสร้าง Index/Data Structure ไว้ล่วงหน้า เช่น Suffix Array, Suffix Tree, Suffix Automaton Naive Algorithm (Baseline) สำหรับ Single Search โดยไม่มี Preprocessing Complexity Time: O(N × M) Worst Cas
Finite State Automaton (FSA) String Search สร้าง State Machine จาก Pattern แล้ว Scan Text ใน O(N) Time หลัง Preprocessing O(M × |Σ|) เหมาะสำหรับค้นหา Pattern เดียวใน Text ใหญ่หลายครั้ง Concept State = จำนวนตัวอักษรที่ Match ไปแล้ว (0 ถึง M) Transition: State q + Char c → Next State Accept State =
Levenshtein Distance (Edit Distance) คือจำนวน Operation น้อยที่สุดเพื่อแปลง String หนึ่งเป็นอีก String หนึ่ง โดย Operation มี 3 แบบ: Insert, Delete, Substitute (แทนที่) ตัวอย่าง cat → mat: 1 (Substitute c→m) kitten → sitting: 3 (k→s, e→i, +g) sunday → saturday: 3 (un→atur, +r) Dynamic Programming