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

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

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

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

ตัวอย่าง สมมติว่ารถแต่ละคันสามารถบรรทุกน้ำหนักได้ 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 ดังนั้น

Error

Too many requests (f061ab2)

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



lemma 1:

Error

Too many requests (f061ab2)

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

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

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

(Induction Case) สมมติว่ามีจำนวนเต็ม ที่ทำให้ สำหรับค่า ทุกค่าที่

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

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

Error

Too many requests (f061ab2)

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

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

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

Error

Too many requests (f061ab2)

และในกรณีของ มันคือของชิ้นที่ ทุกชิ้นที่

จากสมมติฐานของ induction เราทราบว่า

Error

Too many requests (f061ab2)

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

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

Error

Too many requests (f061ab2)

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

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

Error

Too many requests (f061ab2)

ดังนั้นเราสามารถสรุปได้ว่า สำหรับ ทุกค่าที่

Error

Too many requests (f061ab2)

(จบการพิสูจน์ lemma 1)



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

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