418531 ภาคต้น 2552/โจทย์ปัญหาอัลกอริทึมแบบตะกละ I/เฉลยข้อ 4

จาก Theory Wiki
รุ่นแก้ไขเมื่อ 21:03, 17 กันยายน 2552 โดย Cardcaptor (คุย | มีส่วนร่วม)
(ต่าง) ←รุ่นแก้ไขก่อนหน้า | รุ่นแก้ไขล่าสุด (ต่าง) | รุ่นแก้ไขถัดไป→ (ต่าง)
ไปยังการนำทาง ไปยังการค้นหา

เพื่อให้สัญลักษณ์ดูง่าย เราให้

Error

Too many requests (f061ab2)

สำหรับ ทุกตัว

อัลกอริทึม

เรียงผู้เข้าแข่งขันตาม

Error

Too many requests (f061ab2)

จากมากไปหาน้อย แล้วจัดลำดับการเริ่มต้นแข่งตามนั้น

เห็นได้อย่างชัดเจนว่าอัลกอริทึมนี้สามารถทำงานได้ในเวลา

ข้อสังเกต

ก่อนที่เราจะไปพิสูจน์ว่าอัลกอริทึมทำงานได้ถูกต้อง เราจะตั้งข้อสังเกตดังต่อไปนี้

ให้ แทนเวลาที่ผู้เข้าแข่งขันหมายเลข วายน้ำเสร็จ แล้วเราจะได้ว่าเวลาที่ผู้เข้าแข่งขันคนที่ช้าที่สุดจบการแข่งขันคือเวลา

Error

Too many requests (f061ab2)

ดังนั้นอัลกอริทึมข้างบนจึงเป็นอัลกอริทึมทีทำให้ มีค่าน้อยที่สุดเท่าที่จะเป็นไปได้

การพิสูจน์ความถูกต้องของอัลกอริทึม

เราจะพิสูจน์ว่าอัลกอริทึมทำงานได้ถูกต้องโดยใช้ exchange argument

ให้ แทนวิธีการจัดลำดับการเริ่มแข่งขันที่ดีที่สุด (กล่าวคือผู้เข้าแข่งขันที่จบการแข่งขันช้าที่สุดนั้นจบการแข่งขันเร็วที่สุดเท่าที่จะทำได้) เราจะแสดงว่าเราสามารถเปลี่ยน ไปเป็นวิธีการจัดลำดับการแข่งขันที่ผู้เข้าแข่งขันถูกเรียงตามเวลา

Error

Too many requests (f061ab2)

โดยไม่ทำให้เวลาจบการแข่งขันของผู้เข้าแข่งขันที่จบเป็นคนสุดท้ายช้าลงได้ดังต่อไปนี้

สมมติว่า ไม่ใช่การจัดลำดับตามอัลกอริทึมข้างบน แสดงว่า จะต้องมี inversion กล่าวคือจะต้องมีผู้เข้าแข่งขัน และ ที่

Error

Too many requests (f061ab2)

แต่ ได้เริ่มทำการแข่งขันก่อน

จากในขั้นเรียน เราได้ว่าเมื่อมี inversion แล้วจะต้องมี inversion ที่อยู่ติดกัน กล่าวคือจะต้องมีผู้เข้าแข่งัน และ ที่

Error

Too many requests (f061ab2)

และ เริ่มทำการแข่งขันต่อจาก พอดี ถ้าหากเราสลับให้ มาทำการแข่งขันก่อน เราก็จะลดจำนวน inversion ลงหนึ่ง และเราสามารถทำเช่นนี้ไปเรื่อยๆ ได้จนกระทั่งไม่เหลือ inversion ดังนั้นเราสามารถเปลี่ยน ให้เป็นคำตอบที่ greedy algorithm ให้ได้เสมอ

สิ่งเหลืออยู่คือเราต้องทำการพิสูจน์ว่าการสลับข้างต้นจะไม่ทำให้เวลาของผู้เข้าแข่งขันที่แข่งเสร็จคนสุดท้ายมากขึ้น

สมมติว่าก่อนสลับให้ เริ่มทำการแข่งขัน ณ เวลา เราจะได้ว่า แข่งเสร็จเวลา และ ทำการแข่งขันเสร็จ ณ​เวลา เนื่องจาก ดังนั้น จะจบการแข่งขันช้ากว่า เสมอ

ดังนั้นหลังสลับ เราได้ว่า จะแข่งเสร็จเวลา และ จะแข่งเสร็จเวลา แต่เวลาการจบการแข่งขันทั้งสองนี้มีค่าไม่เกิน ทั้งสิ้น ดังนั้นการสลับจึงไม่ทำให้เวลาของผู้เข้าแข่งขันที่จบการแข่งขันช้าที่สุด แย่ลงไปกว่าเดิมอีก

เราจึงสามารถสรุปได้ว่าการจัดลำดับการแข่งขันตาม greedy algorithm จะทำให้ผู้เข้าแข่งขันที่จบการแข่งขันเป็นคนสุดท้าย จบการแข่งขันเร็วที่สุดเท่าที่จะทำได้

รายการเลือกการนำทาง