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

จาก Theory Wiki
ไปยังการนำทาง ไปยังการค้นหา

อัลกอริทึม

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

Error

Too many requests (f061ab2)

ซึ่งใช้ในการเรียงลำดับนั่นเอง

โจทย์ต้องการให้เวลาคอยรวมของผู้ใช้ทุกคนมีค่าน้อยที่สุด เขียนเป็นสมการทางคณิตศาสตร์คือต้องการให้ค่า มีค่าน้อยที่สุดนั่นเอง

ข้อสังเกต

ให้ เป็นผู้ใช้สองคนจากผู้ใช้ทั้งหมด คน และให้การจัดลำดับการทำงานสองลำดับคือ

Error

Too many requests (f061ab2)

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

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

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

Error

Too many requests (f061ab2)

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

สมมติว่า

Error

Too many requests (f061ab2)

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

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

Error

Too many requests (f061ab2)

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

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

จากข้อสังเกตข้างต้น เพื่อความง่ายในการแทนค่าในสมการเวลาคอย จะกำหนดให้

Error

Too many requests (f061ab2)

และ

ก่อนการสลับจะได้ว่า

Error

Too many requests (f061ab2)

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

และจะได้ว่าหลังการสลับ

Error

Too many requests (f061ab2)

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

เมื่อพิจารณาสมการเวลาคอยรวมก่อนและหลังสลับข้างต้น และเนื่องจาก

Error

Too many requests (f061ab2)

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

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

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