Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> การเขียนโปรแกรม C

บทนำสู่ Backtracking (การย้อนกลับ) ในอัลกอริทึม

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 เดินทีละก้าว หาทางออก