ผลต่างระหว่างรุ่นของ "418531 ภาคต้น 2552/โจทย์ปัญหาอัลกอริทึมแบบตะกละ I/เฉลยข้อ 1"
Cardcaptor (คุย | มีส่วนร่วม) |
Cardcaptor (คุย | มีส่วนร่วม) |
||
(ไม่แสดง 3 รุ่นระหว่างกลางโดยผู้ใช้คนเดียวกัน) | |||
แถว 1: | แถว 1: | ||
เราให้หมายเลขรถโดยให้รถคันแรกที่ออกจากกรุงเทพฯ เป็นรถหมายเลข 1 รถคันที่สองที่ออกจากกรุงเทพฯ เป็นรถหมายเลข 2 เช่นนี้ไปเรื่อยๆ | เราให้หมายเลขรถโดยให้รถคันแรกที่ออกจากกรุงเทพฯ เป็นรถหมายเลข 1 รถคันที่สองที่ออกจากกรุงเทพฯ เป็นรถหมายเลข 2 เช่นนี้ไปเรื่อยๆ | ||
− | ให้ S เป็นวิธีการจัดของลงรถสักวิธีหนึ่ง สำหรับของชิ้นที่ <math>i \,</math> เราให้ <math>c_i^S \,</math> แทนหมายเลขของรถคันที่ของชิ้นที่ <math>i \,</math> ถูกบรรจุ สังเกตว่า <math> | + | ให้ S เป็นวิธีการจัดของลงรถสักวิธีหนึ่ง สำหรับของชิ้นที่ <math>i \,</math> เราให้ <math>c_i^S \,</math> แทนหมายเลขของรถคันที่ของชิ้นที่ <math>i \,</math> ถูกบรรจุ สังเกตว่า <math>c_i^S \,</math> คือจำนวนรถที่ใช้ในการขนส่งของ <math>i \,</math> ชิ้นแรก |
− | + | <blockquote> | |
+ | '''ตัวอย่าง''' สมมติว่ารถแต่ละคันสามารถบรรทุกน้ำหนักได้ 10 หน่วย และให้ ของชื้นที่ 1 มีน้ำหนัก 5 หน่วย ของชิ้นที่สองมีน้ำหนัก 2 หน่วย ของชิ้นที่ 3 มีน้ำหนัก 1 หน่วย และของชิ้นที่ 4 มีน้ำหนัก 9 หน่วย | ||
วิธีการบรรจุของลงรถของมีได้หลายวิธี เช่น สมมติให้ <math>S \,</math> เป็นวิธีการบรรจุของลงรถให้แต่ละคันมีของเพียงแค่ชิ้นเดียว เราจะได้ว่าของชิ้นที่ 1 ลงรถหมายเลข 1 ของชิ้นที่สองลงรถหมายเลข 2 เช่นนี้ไปเรื่อยๆ ดังนั้นเราจะได้ว่า <math>c_1^S = 1 \,</math>, <math>c_2^S = 2 \,</math>, <math>c_3^S = 3 \,</math>, และ <math>c_4^S = 4 \,</math> เป็นค้น ถ้า <math>S \,</math> เป็นวิธีการส่งของลงรถโดยที่รถหมายเลข 1 มีของชิ้นที่ 1 และ 2 ส่วนรถหมายเลข 2 มีของชิ้นที่ 3 และ 4 เราจะได้ว่า <math>c_1^S = c_2^S = 1 \,</math> และ <math>c_3^S = c_4^S = 2 \,</math> | วิธีการบรรจุของลงรถของมีได้หลายวิธี เช่น สมมติให้ <math>S \,</math> เป็นวิธีการบรรจุของลงรถให้แต่ละคันมีของเพียงแค่ชิ้นเดียว เราจะได้ว่าของชิ้นที่ 1 ลงรถหมายเลข 1 ของชิ้นที่สองลงรถหมายเลข 2 เช่นนี้ไปเรื่อยๆ ดังนั้นเราจะได้ว่า <math>c_1^S = 1 \,</math>, <math>c_2^S = 2 \,</math>, <math>c_3^S = 3 \,</math>, และ <math>c_4^S = 4 \,</math> เป็นค้น ถ้า <math>S \,</math> เป็นวิธีการส่งของลงรถโดยที่รถหมายเลข 1 มีของชิ้นที่ 1 และ 2 ส่วนรถหมายเลข 2 มีของชิ้นที่ 3 และ 4 เราจะได้ว่า <math>c_1^S = c_2^S = 1 \,</math> และ <math>c_3^S = c_4^S = 2 \,</math> | ||
+ | </blockquote> | ||
ให้ <math>G \,</math> เป็นวิธีการจัดของลงรถแบบ greedy ในโจทย์ และให้ <math>\mathrm{OPT} \,</math> เป็นวิธีการจัดของลงรถที่ใช้รถจำนวนน้อยคันที่สุดเท่าที่จะเป็นไปได้ ดังนั้นเราทราบว่า <math>c_n^{\mathrm{OPT}} \leq c_n^G \,</math> | ให้ <math>G \,</math> เป็นวิธีการจัดของลงรถแบบ greedy ในโจทย์ และให้ <math>\mathrm{OPT} \,</math> เป็นวิธีการจัดของลงรถที่ใช้รถจำนวนน้อยคันที่สุดเท่าที่จะเป็นไปได้ ดังนั้นเราทราบว่า <math>c_n^{\mathrm{OPT}} \leq c_n^G \,</math> | ||
− | ในกรณีตัวอย่างข้างบน เราจะได้ว่า greedy algorithm จะบรรจุของชิ้นที่ 1, 2, และ 3 ลงในรถหมายเลข 1 และของชิ้นที่ 4 ลงในรถหมายเลข 2 ดังนั้น <math>c_1^G = c_2^G = c_3^G = 1 \,</math> และ <math>c_4^G = 2 \,</math> สำหรับตัวอย่างนี้ เราเห็นได้อย่างชัดเจนว่าต้องใช้รถอย่างน้อยสองคัน ดังนั้น greedy algorithm จึงใช้รถเป็นจำนวนน้อยที่สุดในกรณีนี้ แต่วิธีการจัดของลงรถบรรทุกให้ใช้รถเพียงแค่สองคันมีอยู่ได้หลายวิธี และ <math>\mathrm{OPT} \,</math> จะเป็นวิธีไหนในวิธีการจัดแบบนั้นก็ได้ เช่น เราจะบอกว่า <math>\mathrm{OPT} \,</math> คือ การจัดของทีใส่ของชิ้นที่ 1 และชิ้นที่ 2 ลงไปในรถคันที่ 1 และของชิ้นที่ 3 และ 4 ลงในรถคันที่ 2 ก็ได้ ดังนั้น <math>c_1^{\mathrm{OPT}} = c_2^{\mathrm{OPT}} = 1 \,</math> และ <math>c_3^{\mathrm{OPT}} = c_4^{\mathrm{OPT}} = 2 \,</math> | + | <blockquote> |
+ | '''ตัวอย่าง''' ในกรณีตัวอย่างข้างบน เราจะได้ว่า greedy algorithm จะบรรจุของชิ้นที่ 1, 2, และ 3 ลงในรถหมายเลข 1 และของชิ้นที่ 4 ลงในรถหมายเลข 2 ดังนั้น <math>c_1^G = c_2^G = c_3^G = 1 \,</math> และ <math>c_4^G = 2 \,</math> สำหรับตัวอย่างนี้ เราเห็นได้อย่างชัดเจนว่าต้องใช้รถอย่างน้อยสองคัน ดังนั้น greedy algorithm จึงใช้รถเป็นจำนวนน้อยที่สุดในกรณีนี้ แต่วิธีการจัดของลงรถบรรทุกให้ใช้รถเพียงแค่สองคันมีอยู่ได้หลายวิธี และ <math>\mathrm{OPT} \,</math> จะเป็นวิธีไหนในวิธีการจัดแบบนั้นก็ได้ เช่น เราจะบอกว่า <math>\mathrm{OPT} \,</math> คือ การจัดของทีใส่ของชิ้นที่ 1 และชิ้นที่ 2 ลงไปในรถคันที่ 1 และของชิ้นที่ 3 และ 4 ลงในรถคันที่ 2 ก็ได้ ดังนั้น <math>c_1^{\mathrm{OPT}} = c_2^{\mathrm{OPT}} = 1 \,</math> และ <math>c_3^{\mathrm{OPT}} = c_4^{\mathrm{OPT}} = 2 \,</math> | ||
+ | </blockquote> | ||
− | |||
− | การพิสูจน์ทำโดย strong induction บนตัวแปร i | + | <hr /> |
+ | '''lemma 1:''' <math>c_i^G \leq c_i^{\mathrm{OPT}} \,</math> สำหรับ <math>i \,</math> ทุกค่าที่ <math>1 \leq i \leq n \,</math> | ||
+ | |||
+ | '''พิสูจน์:''' การพิสูจน์ทำโดย strong induction บนตัวแปร i | ||
(Base Case) ในกรณีนี้ <math>i = 1 \,</math> เราได้ว่า <math>c_1^G = 1 \leq c_1^{\mathrm{OPT}} \,</math> (เนื่องจาก greedy algorithm จะจัดของชิ้นแรกใส่รถหมายเลข 1 เลย) ดังนั้น base case เป็นความจริง | (Base Case) ในกรณีนี้ <math>i = 1 \,</math> เราได้ว่า <math>c_1^G = 1 \leq c_1^{\mathrm{OPT}} \,</math> (เนื่องจาก greedy algorithm จะจัดของชิ้นแรกใส่รถหมายเลข 1 เลย) ดังนั้น base case เป็นความจริง | ||
แถว 21: | แถว 27: | ||
พิจารณาการบรรจุของชิ้นที่ <math>i+1 \,</math> ลงรถบรรทุก กรณีนี้มีความเป็นไปได้สองกรณี | พิจารณาการบรรจุของชิ้นที่ <math>i+1 \,</math> ลงรถบรรทุก กรณีนี้มีความเป็นไปได้สองกรณี | ||
− | '''กรณีที่ 1:''' ถ้า <math>c_i^G < c_i^{\mathrm{OPT}} \,</math> | + | '''กรณีที่ 1:''' ถ้า <math>c_i^G < c_i^{\mathrm{OPT}} \,</math> ซึ่งหมายความว่า greedy algorithm ใข้รถ''น้อยกว่า'' <math>\mathrm{OPT} \,</math> ในการส่งของ <math>i \,</math> ชิ้นแรก แล้วเราจะได้ว่าในการส่งของชิ้นที่ <math>i+1 \,</math> greedy algorithm จะใช้รถไม่เกิน <math>c_{i}^G + 1 \,</math> คัน (เนื่องจาก greedy algorithm อาจจะเอาของชิ้นที่ <math>i+1 \,</math> ไปใส่ในรถคันใหม่) และ <math>\mathrm{OPT} \,</math> จะต้องนำของชิ้นที่ <math>i+1 \,</math> ไปใส่ในรถหมายเลข <math>c_i^{\mathrm{OPT}} \,</math> หรือไม่ก็ <math>c_i^{\mathrm{OPT}}+1 \,</math> ฉะนั้นเราจะได้ว่า <math>c_{i+1}^G \leq c_i^G+1 \leq c_i^{\mathrm{OPT}} \leq c_{i+1}^{\mathrm{OPT}} \,</math> ตามต้องการ |
+ | |||
+ | '''กรณีที่ 2:''' ถ้า <math>c_i^G = c_i^{\mathrm{OPT}} \,</math> แล้วเราจะได้ว่าทั้ง greedy algorithm และ <math>\mathrm{OPT} \,</math> ใส่ของชิ้นที่ <math>i \,</math> ลงไปในรถหมายเลข <math>c_i^G \,</math> เหมือนกัน เราจะพิสูจน์ว่าวิธีการจัดของของ greedy algorithm จะทำให้รถหมายเลข <math>c_i^G \,</math> มีที่ว่างเหลือมากกว่า <math>\mathrm{OPT} \,</math> | ||
+ | |||
+ | พิจารณาของที่ถูกจัดให้อยู่ในรถหมายเลข <math>c_i^G \,</math> ในกรณีของ greedy algorithm เราจะได้ว่ามันคือของชิ้นที่ <math>k \,</math> ทุกชิ้นซึ่ง <math>c_k^G = c_i^G \,</math> และในกรณีของ <math>\mathrm{OPT} \,</math> มันคือของชิ้นที่ <math>k \,</math> ทุกชิ้นที่ <math>c_k^{\mathrm{OPT}} = c_i^{\mathrm{OPT}} = c_i^G \,</math> | ||
+ | |||
+ | จากสมมติฐานของ induction เราทราบว่า <math>c_k^G \leq c_k^{\mathrm{OPT}} \,</math> สำหรับค่า <math>k \,</math> ทุกค่าที่ <math>1 \leq k \leq i \,</math> ดังนั้นถ้า <math>c_k^G = c_i^G \,</math> และเราจะได้ว่า <math>c_k^{\mathrm{OPT}} \,</math> จะต้องมีค่าเท่ากับ <math>c_i^G \,</math> ด้วยเสมอ เนื่องจาก <math>c_i^G = c_k^G \leq c_k^{\mathrm{OPT}} \leq c_i^{\mathrm{OPT}} \leq c_i^G \,</math> | ||
+ | |||
+ | เราจึงสามารถสรุปได้ว่า สำหรับของทุกชิ้นที่ greedy algorithm ใส่ลงในรถหมายเลข <math>c_i^G \,</math> เราจะได้ว่า <math>\mathrm{OPT} \,</math> ก็จะใส่มันลงในรถหมายเลข <math>c_i^G \,</math> ด้วย เพราะฉะนั้น greedy algorithm จะทำให้รถคันที่ <math>c_i^G \,</math> มีที่ว่างเหลือไม่น้อยกว่าที่ว่างที่เกิดจากวิธีการจัดของของ <math>\mathrm{OPT} \,</math> เสมอ | ||
+ | |||
+ | ด้วยเหตุนี้ในการจัดของชิ้นที่ <math>i+1 \,</math> ลงรถ จึงไม่มีทางเป็นไปได้ที่ greedy algorithm จะใช้จำนวนรถมากกว่า <math>\mathrm{OPT} \,</math> เพราะ greedy algorithm จะจัดของชิ้นที่ <math>i+1 \,</math> ลวรถหมายเลข <math>c_i^G \,</math> ทันทีถ้ามีที่ว่างพอ กล่าวคือ <math>c_{i+1}^G \leq c_{i+1}^{\mathrm{OPT}} \,</math> | ||
+ | |||
+ | ดังนั้นเราสามารถสรุปได้ว่า <math>c_i^G \leq c_i^{\mathrm{OPT}} \,</math> สำหรับ <math>i \,</math> ทุกค่าที่ <math>1 \leq i \leq n \,</math> (จบการพิสูจน์ lemma 1) | ||
+ | <hr/> | ||
+ | |||
+ | |||
+ | จาก lemma 1 เราจะได้ว่า <math>c_n^G = c_n^{\mathrm{OPT}} \,</math> ซึ่งหมายความว่า greedy algorithm ใช้รถน้อยค้นที่สุดเท่าที่จะเป็นไปได้แล้ว |
รุ่นแก้ไขปัจจุบันเมื่อ 16:01, 18 กันยายน 2552
เราให้หมายเลขรถโดยให้รถคันแรกที่ออกจากกรุงเทพฯ เป็นรถหมายเลข 1 รถคันที่สองที่ออกจากกรุงเทพฯ เป็นรถหมายเลข 2 เช่นนี้ไปเรื่อยๆ
ให้ S เป็นวิธีการจัดของลงรถสักวิธีหนึ่ง สำหรับของชิ้นที่ เราให้ แทนหมายเลขของรถคันที่ของชิ้นที่ ถูกบรรจุ สังเกตว่า คือจำนวนรถที่ใช้ในการขนส่งของ ชิ้นแรก
ตัวอย่าง สมมติว่ารถแต่ละคันสามารถบรรทุกน้ำหนักได้ 10 หน่วย และให้ ของชื้นที่ 1 มีน้ำหนัก 5 หน่วย ของชิ้นที่สองมีน้ำหนัก 2 หน่วย ของชิ้นที่ 3 มีน้ำหนัก 1 หน่วย และของชิ้นที่ 4 มีน้ำหนัก 9 หน่วย
วิธีการบรรจุของลงรถของมีได้หลายวิธี เช่น สมมติให้ เป็นวิธีการบรรจุของลงรถให้แต่ละคันมีของเพียงแค่ชิ้นเดียว เราจะได้ว่าของชิ้นที่ 1 ลงรถหมายเลข 1 ของชิ้นที่สองลงรถหมายเลข 2 เช่นนี้ไปเรื่อยๆ ดังนั้นเราจะได้ว่า , , , และ เป็นค้น ถ้า เป็นวิธีการส่งของลงรถโดยที่รถหมายเลข 1 มีของชิ้นที่ 1 และ 2 ส่วนรถหมายเลข 2 มีของชิ้นที่ 3 และ 4 เราจะได้ว่า และ
ให้ เป็นวิธีการจัดของลงรถแบบ greedy ในโจทย์ และให้ เป็นวิธีการจัดของลงรถที่ใช้รถจำนวนน้อยคันที่สุดเท่าที่จะเป็นไปได้ ดังนั้นเราทราบว่า
ตัวอย่าง ในกรณีตัวอย่างข้างบน เราจะได้ว่า greedy algorithm จะบรรจุของชิ้นที่ 1, 2, และ 3 ลงในรถหมายเลข 1 และของชิ้นที่ 4 ลงในรถหมายเลข 2 ดังนั้น และ สำหรับตัวอย่างนี้ เราเห็นได้อย่างชัดเจนว่าต้องใช้รถอย่างน้อยสองคัน ดังนั้น greedy algorithm จึงใช้รถเป็นจำนวนน้อยที่สุดในกรณีนี้ แต่วิธีการจัดของลงรถบรรทุกให้ใช้รถเพียงแค่สองคันมีอยู่ได้หลายวิธี และ จะเป็นวิธีไหนในวิธีการจัดแบบนั้นก็ได้ เช่น เราจะบอกว่า คือ การจัดของทีใส่ของชิ้นที่ 1 และชิ้นที่ 2 ลงไปในรถคันที่ 1 และของชิ้นที่ 3 และ 4 ลงในรถคันที่ 2 ก็ได้ ดังนั้น และ
lemma 1: สำหรับ ทุกค่าที่
พิสูจน์: การพิสูจน์ทำโดย strong induction บนตัวแปร i
(Base Case) ในกรณีนี้ เราได้ว่า (เนื่องจาก greedy algorithm จะจัดของชิ้นแรกใส่รถหมายเลข 1 เลย) ดังนั้น base case เป็นความจริง
(Induction Case) สมมติว่ามีจำนวนเต็ม ที่ทำให้ สำหรับค่า ทุกค่าที่
พิจารณาการบรรจุของชิ้นที่ ลงรถบรรทุก กรณีนี้มีความเป็นไปได้สองกรณี
กรณีที่ 1: ถ้า ซึ่งหมายความว่า greedy algorithm ใข้รถน้อยกว่า ในการส่งของ ชิ้นแรก แล้วเราจะได้ว่าในการส่งของชิ้นที่ greedy algorithm จะใช้รถไม่เกิน คัน (เนื่องจาก greedy algorithm อาจจะเอาของชิ้นที่ ไปใส่ในรถคันใหม่) และ จะต้องนำของชิ้นที่ ไปใส่ในรถหมายเลข หรือไม่ก็ ฉะนั้นเราจะได้ว่า ตามต้องการ
กรณีที่ 2: ถ้า แล้วเราจะได้ว่าทั้ง greedy algorithm และ ใส่ของชิ้นที่ ลงไปในรถหมายเลข เหมือนกัน เราจะพิสูจน์ว่าวิธีการจัดของของ greedy algorithm จะทำให้รถหมายเลข มีที่ว่างเหลือมากกว่า
พิจารณาของที่ถูกจัดให้อยู่ในรถหมายเลข ในกรณีของ greedy algorithm เราจะได้ว่ามันคือของชิ้นที่ ทุกชิ้นซึ่ง และในกรณีของ มันคือของชิ้นที่ ทุกชิ้นที่
จากสมมติฐานของ induction เราทราบว่า สำหรับค่า ทุกค่าที่ ดังนั้นถ้า และเราจะได้ว่า จะต้องมีค่าเท่ากับ ด้วยเสมอ เนื่องจาก
เราจึงสามารถสรุปได้ว่า สำหรับของทุกชิ้นที่ greedy algorithm ใส่ลงในรถหมายเลข เราจะได้ว่า ก็จะใส่มันลงในรถหมายเลข ด้วย เพราะฉะนั้น greedy algorithm จะทำให้รถคันที่ มีที่ว่างเหลือไม่น้อยกว่าที่ว่างที่เกิดจากวิธีการจัดของของ เสมอ
ด้วยเหตุนี้ในการจัดของชิ้นที่ ลงรถ จึงไม่มีทางเป็นไปได้ที่ greedy algorithm จะใช้จำนวนรถมากกว่า เพราะ greedy algorithm จะจัดของชิ้นที่ ลวรถหมายเลข ทันทีถ้ามีที่ว่างพอ กล่าวคือ
ดังนั้นเราสามารถสรุปได้ว่า สำหรับ ทุกค่าที่ (จบการพิสูจน์ lemma 1)
จาก lemma 1 เราจะได้ว่า ซึ่งหมายความว่า greedy algorithm ใช้รถน้อยค้นที่สุดเท่าที่จะเป็นไปได้แล้ว