Backtracking (การย้อนกลับ) เป็นเทคนิคอัลกอริทึมแก้ปัญหาโดยใช้ recursive เรียกซ้ำ สร้างคำตอบทีละขั้นตอน เพิ่มค่าเรื่อยๆ และตัด枝枝 (prune) คำตอบที่ไม่เป็นไปตามเงื่อนไข
Backtracking ใช้กับปัญหา 3 ประเภท:
- Decision Problem - หาคำตอบที่เป็นไปได้ (feasible solution)
- Optimization Problem - หาคำตอบที่ดีที่สุด (best solution)
- Enumeration Problem - หาชุดคำตอบที่เป็นไปได้ทั้งหมด
ใน Backtracking อัลกอริทึมพยายามหาเส้นทางไปยังคำตอบ มีจุดตรวจสอบ (checkpoints) หากไม่พบคำตอบจะย้อนกลับ (backtrack) ไปจุดก่อนหน้า
ตัวอย่างภาพการทำงาน
(เขียว=เริ่มต้น, น้ำเงิน=จุดกลาง, แดง=ทางตาย, เขียวเข้ม=คำตอบ)
อัลกอริทึมทั่วไป
Step 1: ถ้า current_position เป็น goal → return success Step 2: มิฉะนั้น Step 3: ถ้า current_position เป็น endpoint → return failed Step 4: มิฉะนั้น ถ้าไม่ใช่ endpoint → explore และทำซ้ำข้างต้น
การประยุกต์: N-Queen Problem
วาง n รัณีบนกระดาน n×n ให้ไม่มีรัณีสองตัวโจมตีกัน (แนวนอน, แนวตั้ง, แนวทแยง)
ตัวอย่าง 4-Queen คำตอบ:
{0,1,0,0}
{0,0,0,1}
{1,0,0,0}
{0,0,1,0}
อัลกอริทึม: วางรัณีแถวละตัว ตรวจสอบ衝突 ถ้าชน → backtrack ย้ายตำแหน่ง ตรวจสอบใหม่
การประยุกต์: Rat in a Maze
หนูใน מבוך (maze) เริ่ม [0][0] จบ [n-1][n-1] มีทางตาย ใช้ backtracking เดินทีละก้าว หาทางออก