การเลือกกิจกรรมตามเวลาสิ้นสุดที่เร็วที่สุด
จัดตารางเหตุการณ์ที่ไม่ทับซ้อนกันให้ได้มากที่สุด
การเลือกกิจกรรมตามเวลาสิ้นสุดที่เร็วที่สุด เป็นบทเรียน Competitive Programming Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Competitive Programming Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Competitive Programming Academy มีบทเรียนทั้งหมด 4 บทเรียน
ปัญหาการจัดตารางกิจกรรม
เมื่อมีกิจกรรมพร้อมเวลาเริ่มต้นและสิ้นสุด การเลือกกิจกรรม จะถามว่าคุณสามารถเข้าร่วมกิจกรรมได้มากที่สุดกี่กิจกรรมโดยไม่มีสองกิจกรรมใดทับซ้อนกัน 📅
การทับซ้อนหมายถึงความขัดแย้ง
กิจกรรมสองกิจกรรม ขัดแย้งกัน หากกิจกรรมหนึ่งเริ่มก่อนที่อีกกิจกรรมจะสิ้นสุด คุณเลือกได้เพียงหนึ่งกิจกรรมจากคู่ที่ทับซ้อนกัน
กฎที่ชนะ
กุญแจของวิธีแบบละโมบคือเลือกกิจกรรมที่ สิ้นสุดเร็วที่สุด จากกิจกรรมที่ยังเลือกได้เสมอ การสิ้นสุดเร็วจะเหลือพื้นที่เวลาให้กิจกรรมอื่นมากที่สุด
เรียงตามเวลาสิ้นสุด
เริ่มด้วยการ เรียงลำดับ กิจกรรมทั้งหมดตามเวลาสิ้นสุด จากนั้นตัวเลือกถัดไปที่ดีที่สุดก็คือกิจกรรมถัดไปในลำดับที่ยังใส่ได้
events.sort(key=lambda e: e[1])ติดตามเวลาสิ้นสุดล่าสุด
เก็บตัวแปรหนึ่งตัวสำหรับเวลาสิ้นสุดของกิจกรรมล่าสุดที่เลือก กิจกรรมใหม่ต้องเริ่มต้นที่เวลานี้หรือหลังจากนั้นจึงจะเข้ากันได้
last_end = -1ไล่ผ่านและเลือก
ไล่ดูรายการที่เรียงลำดับแล้วหนึ่งครั้ง หากกิจกรรม เริ่มต้น ที่เวลาสิ้นสุดล่าสุดหรือหลังจากนั้น ให้เลือกกิจกรรมนั้นและปรับเวลาสิ้นสุดล่าสุดเป็นเวลาสิ้นสุดของกิจกรรม
for s, f in events:
if s >= last_end:
count += 1
last_end = fทำงานในเวลา n log n
ต้นทุนอยู่ที่ sort ซึ่งใช้ O(n log n) แล้วจึงไล่ผ่านเชิงเส้นเพียงครั้งเดียว วิธีนี้เร็วพอแม้อินพุตการแข่งขันจะมีขนาดใหญ่มาก
เหตุใดการสิ้นสุดเร็วที่สุดจึงชนะ
การสิ้นสุดก่อนจะทำให้เส้นเวลาว่าง เร็วที่สุด จึงไม่มีทางขัดขวางแผนที่ดีกว่า การสลับกิจกรรมนี้เข้าไปในตารางที่ดีที่สุดใด ๆ ก็ยังให้ผลดีเท่าเดิม
การเริ่มต้นเร็วที่สุดใช้ไม่ได้
การเลือกตามเวลา เริ่มต้น ที่เร็วที่สุดอาจทำให้ได้กิจกรรมยาวกิจกรรมหนึ่งซึ่งกินเวลาทั้งวัน ระยะเวลาเพียงอย่างเดียวก็ทำให้เข้าใจผิดได้เช่นกัน จึงควรเชื่อเวลาเสร็จสิ้น
จัดการกรณีปลายช่วงแตะกัน
ตัดสินใจว่ากิจกรรมที่สิ้นสุดตรงกับเวลาที่อีกกิจกรรม เริ่มต้น นับเป็นความขัดแย้งหรือไม่ ใช้ s >= เวลาสิ้นสุดล่าสุดเพื่ออนุญาตให้กิจกรรมต่อกันพอดี
รูปแบบที่พบได้บ่อยในการแข่งขัน
รูปแบบนี้ซ่อนอยู่เบื้องหลังโจทย์มากมาย เช่น การจอง ห้อง การดูรายการ หรือการจัดงานให้ทำงาน มองให้ออกแล้วใช้กฎสิ้นสุดเร็วที่สุดได้
ตรวจสอบอย่างรวดเร็ว
ต้องการจำนวนกิจกรรมที่ไม่ทับซ้อนกันให้ได้มากที่สุด
สรุป
เรียงลำดับกิจกรรมตาม เวลาสิ้นสุด แล้วเลือกแต่ละกิจกรรมที่เริ่มหลังจากกิจกรรมล่าสุดที่เลือกสิ้นสุด การเรียงลำดับหนึ่งครั้งกับการไล่ผ่านหนึ่งครั้งให้เซตที่มีขนาดใหญ่ที่สุด 🚀
คำถามที่พบบ่อย
บทเรียน “การเลือกกิจกรรมตามเวลาสิ้นสุดที่เร็วที่สุด” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “การเลือกกิจกรรมตามเวลาสิ้นสุดที่เร็วที่สุด” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ 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 ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน
บทเรียน “การเลือกกิจกรรมตามเวลาสิ้นสุดที่เร็วที่สุด” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน Competitive Programming Academy นี้ได้ไหม
ได้ บทเรียน Competitive Programming Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- แนวคิดแบบโลภ
- การเลือกกิจกรรมตามเวลาสิ้นสุดที่เร็วที่สุด
- กระเป๋าแบบแบ่งส่วนตามอัตราส่วน
- สังเกตว่าเมื่อใดวิธีโลภใช้ไม่ได้