ตัดกิ่งเพื่อให้อยู่รอดในขีดจำกัดเวลา
ตัดกิ่งที่ไม่อาจปรับปรุงคำตอบได้
ตัดกิ่งเพื่อให้อยู่รอดในขีดจำกัดเวลา เป็นบทเรียน Competitive Programming Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Competitive Programming Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Competitive Programming Academy มีบทเรียนทั้งหมด 4 บทเรียน
เหตุผลที่การตัดกิ่งสำคัญ
การย้อนกลับแบบไม่ลดกิ่งอาจสำรวจกิ่งมากเกินไปจนชนขีดจำกัดเวลา การตัดกิ่งจะตัดกิ่งที่หมดหวังตั้งแต่เนิ่น ๆ เพื่อให้ทำงานได้รวดเร็ว ✂️
การตัดกิ่งคืออะไร
การตัดกิ่งหมายถึงการหยุดกิ่งทันทีที่พิสูจน์ได้ว่ากิ่งนั้นไม่สามารถนำไปสู่คำตอบที่ถูกต้องหรือดีกว่าได้ จากนั้นจะข้ามการสำรวจกิ่งนั้นทั้งหมด
การตัดกิ่งด้วยการตรวจสอบความเป็นไปได้
หากตัวเลือกบางส่วนในปัจจุบันละเมิดกฎอยู่แล้ว ให้ส่งค่ากลับทันที การตรวจสอบความเป็นไปได้นี้ช่วยหลีกเลี่ยงการสร้างต่อจากสถานะที่ไม่ถูกต้อง
if violates(cur):
returnการตัดกิ่งด้วยขอบเขต
ติดตามคำตอบที่ดีที่สุดที่พบจนถึงตอนนี้ หากคำตอบที่ดีที่สุดที่กิ่งหนึ่งอาจทำได้ยังแย่กว่า ก็ให้ตัดกิ่งนั้น นี่คือขอบเขตของกิ่ง
ตัดกิ่งในโค้ด
ตรงนี้ขอบเขตจะหยุดกิ่งเมื่อแม้แต่ค่าประมาณในแง่ดีที่สุดก็ยังไม่สามารถดีกว่าคำตอบที่ดีที่สุดในปัจจุบันได้
if cur_cost + best_possible <= best:
returnจัดลำดับทางเลือกอย่างชาญฉลาด
การลองทางเลือกที่มีแนวโน้มดีที่สุดก่อนจะพบคำตอบที่ดีได้เร็วขึ้น ซึ่งช่วยปรับขอบเขตให้ดีขึ้นและตัดกิ่งถัด ๆ ไปได้มากขึ้น
การส่งต่อข้อจำกัด
หลังจากเลือกแล้ว ให้จำกัดสิ่งที่ขั้นตอนถัดไปสามารถทำได้ การนำทางเลือกที่เป็นไปไม่ได้ออกตั้งแต่ต้นเรียกว่าการส่งต่อข้อจำกัด และช่วยลดขนาดต้นไม้
การทำลายสมมาตร
หากกิ่งสองกิ่งเป็นภาพสะท้อนกัน ให้สำรวจเพียงกิ่งเดียว การทำลายสมมาตรสามารถลดงานลงครึ่งหนึ่งหรือมากกว่านั้นโดยไม่ทำให้คำตอบสูญหาย
จดจำสถานะที่ซ้ำกัน
หากสถานะบางส่วนเดิมเกิดขึ้นซ้ำ ให้เก็บผลลัพธ์ไว้ในแคช การจดจำผลลัพธ์จะเปลี่ยนต้นไม้ย่อยที่ซ้ำกันให้เป็นการค้นหาอย่างรวดเร็วเพียงครั้งเดียว
from functools import lru_cache
@lru_cache(maxsize=None)
def solve(state):
...ตัดกิ่งตั้งแต่ต้น ไม่ใช่ตอนท้าย
ตรวจสอบเงื่อนไขการตัดกิ่งก่อนการเรียกซ้ำ ไม่ใช่หลังจากนั้น การตัดกิ่งตั้งแต่ต้นช่วยหลีกเลี่ยงงานที่เสียไปกับการขยายกิ่งที่หมดหวัง
ประเมินก่อนเริ่มทำงาน
ตรวจสอบจำนวนกิ่งทั้งหมดในกรณีเลวร้ายที่สุดเทียบกับข้อจำกัดเสมอ หากจำนวนมากเกินไป ก็ต้องใช้การตัดกิ่งที่เข้มข้นขึ้นหรือเปลี่ยนแนวทางใหม่
ตรวจสอบความเข้าใจ
เป้าหมายของการตัดกิ่งในการย้อนกลับคืออะไร
สรุปทบทวน: ตัดกิ่งที่หมดหวัง
ได้เรียนรู้การตัดกิ่งด้วยการตรวจสอบความเป็นไปได้และขอบเขต การจัดลำดับอย่างชาญฉลาด การทำลายสมมาตร และการจดจำผลลัพธ์ เพื่อรับมือกับขีดจำกัดเวลา 🎯
คำถามที่พบบ่อย
บทเรียน “ตัดกิ่งเพื่อให้อยู่รอดในขีดจำกัดเวลา” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “ตัดกิ่งเพื่อให้อยู่รอดในขีดจำกัดเวลา” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Competitive Programming Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Competitive Programming Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “ตัดกิ่งเพื่อให้อยู่รอดในขีดจำกัดเวลา”
ตัดกิ่งที่ไม่อาจปรับปรุงคำตอบได้ คุณปฏิบัติ Competitive Programming Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Competitive Programming Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน Competitive Programming Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน
บทเรียน “ตัดกิ่งเพื่อให้อยู่รอดในขีดจำกัดเวลา” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน Competitive Programming Academy นี้ได้ไหม
ได้ บทเรียน Competitive Programming Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- คิดแบบเวียนเกิด: ฐานและการเรียกซ้ำ
- สร้างเซตย่อยทั้งหมด
- การเรียงสับเปลี่ยนและแนวคิด N-Queens
- ตัดกิ่งเพื่อให้อยู่รอดในขีดจำกัดเวลา