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

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

เราให้หมายเลขรถโดยให้รถคันแรกที่ออกจากกรุงเทพฯ เป็นรถหมายเลข 1 รถคันที่สองที่ออกจากกรุงเทพฯ เป็นรถหมายเลข 2 เช่นนี้ไปเรื่อยๆ

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

Error

Too many requests (f061ab2)

คือจำนวนรถที่ใช้ในการขนส่งของ ชิ้นแรก

ตัวอย่าง สมมติว่ารถแต่ละคันสามารถบรรทุกน้ำหนักได้ 10 หน่วย และให้ ของชื้นที่ 1 มีน้ำหนัก 5 หน่วย ของชิ้นที่สองมีน้ำหนัก 2 หน่วย ของชิ้นที่ 3 มีน้ำหนัก 1 หน่วย และของชิ้นที่ 4 มีน้ำหนัก 9 หน่วย

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

Error

Too many requests (f061ab2)

, , , และ เป็นค้น ถ้า เป็นวิธีการส่งของลงรถโดยที่รถหมายเลข 1 มีของชิ้นที่ 1 และ 2 ส่วนรถหมายเลข 2 มีของชิ้นที่ 3 และ 4 เราจะได้ว่า และ

ให้ เป็นวิธีการจัดของลงรถแบบ greedy ในโจทย์ และให้

Error

Too many requests (f061ab2)

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

ตัวอย่าง ในกรณีตัวอย่างข้างบน เราจะได้ว่า greedy algorithm จะบรรจุของชิ้นที่ 1, 2, และ 3 ลงในรถหมายเลข 1 และของชิ้นที่ 4 ลงในรถหมายเลข 2 ดังนั้น และ สำหรับตัวอย่างนี้ เราเห็นได้อย่างชัดเจนว่าต้องใช้รถอย่างน้อยสองคัน ดังนั้น greedy algorithm จึงใช้รถเป็นจำนวนน้อยที่สุดในกรณีนี้ แต่วิธีการจัดของลงรถบรรทุกให้ใช้รถเพียงแค่สองคันมีอยู่ได้หลายวิธี และ

Error

Too many requests (f061ab2)

จะเป็นวิธีไหนในวิธีการจัดแบบนั้นก็ได้ เช่น เราจะบอกว่า คือ การจัดของทีใส่ของชิ้นที่ 1 และชิ้นที่ 2 ลงไปในรถคันที่ 1 และของชิ้นที่ 3 และ 4 ลงในรถคันที่ 2 ก็ได้ ดังนั้น และ



lemma 1: สำหรับ ทุกค่าที่

Error

Too many requests (f061ab2)

พิสูจน์: การพิสูจน์ทำโดย strong induction บนตัวแปร i

(Base Case) ในกรณีนี้ เราได้ว่า

Error

Too many requests (f061ab2)

(เนื่องจาก greedy algorithm จะจัดของชิ้นแรกใส่รถหมายเลข 1 เลย) ดังนั้น base case เป็นความจริง

(Induction Case) สมมติว่ามีจำนวนเต็ม

Error

Too many requests (f061ab2)

ที่ทำให้ สำหรับค่า ทุกค่าที่

พิจารณาการบรรจุของชิ้นที่ ลงรถบรรทุก กรณีนี้มีความเป็นไปได้สองกรณี

กรณีที่ 1: ถ้า

Error

Too many requests (f061ab2)

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

กรณีที่ 2: ถ้า แล้วเราจะได้ว่าทั้ง greedy algorithm และ

Error

Too many requests (f061ab2)

ใส่ของชิ้นที่ ลงไปในรถหมายเลข เหมือนกัน เราจะพิสูจน์ว่าวิธีการจัดของของ greedy algorithm จะทำให้รถหมายเลข มีที่ว่างเหลือมากกว่า

พิจารณาของที่ถูกจัดให้อยู่ในรถหมายเลข

Error

Too many requests (f061ab2)

ในกรณีของ greedy algorithm เราจะได้ว่ามันคือของชิ้นที่ ทุกชิ้นซึ่ง และในกรณีของ มันคือของชิ้นที่ ทุกชิ้นที่

จากสมมติฐานของ induction เราทราบว่า สำหรับค่า ทุกค่าที่ ดังนั้นถ้า และเราจะได้ว่า จะต้องมีค่าเท่ากับ

Error

Too many requests (f061ab2)

ด้วยเสมอ เนื่องจาก

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

Error

Too many requests (f061ab2)

มีที่ว่างเหลือไม่น้อยกว่าที่ว่างที่เกิดจากวิธีการจัดของของ เสมอ

ด้วยเหตุนี้ในการจัดของชิ้นที่

Error

Too many requests (f061ab2)

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

ดังนั้นเราสามารถสรุปได้ว่า

Error

Too many requests (f061ab2)

สำหรับ ทุกค่าที่ (จบการพิสูจน์ lemma 1)



จาก lemma 1 เราจะได้ว่า

Error

Too many requests (f061ab2)

ซึ่งหมายความว่า greedy algorithm ใช้รถน้อยค้นที่สุดเท่าที่จะเป็นไปได้แล้ว

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