ผลต่างระหว่างรุ่นของ "418341 ภาคต้น 2552/โจทย์ปัญหาอัลกอริืทึมแบบตะกละ I"
(→ข้อ 3) |
Aoy (คุย | มีส่วนร่วม) (→ข้อ 1) |
||
(ไม่แสดง 12 รุ่นระหว่างกลางโดยผู้ใช้ 1 คน) | |||
แถว 1: | แถว 1: | ||
== ข้อ 1 == | == ข้อ 1 == | ||
− | [Kleinberg & Tardos 4.3] | + | [Kleinberg & Tardos 4.3] บริษัทรถบรรทุกบริษัทหนึ่งจัดการส่งพัสดุจากกรุงเทพฯ ไปสุไหงโกลก รถบรรทุกคันหนึ่งสามารถบรรทุกน้ำหนักได้ไม่เกิน W หน่วย ในวันหนึ่งๆ บริษัทจะได้รับกล่องพัสดุมาทีละกล่อง โดยกล่องที่ <math>i \,</math> จะมีน้ำหนัก <math>w_i \,</math> บริษัทมีนโยบายว่าของจะต้องถูกส่งตามลำดับที่บริษัทได้รับมา (กล่าวคือของที่มาก่อนจะต้องไม่ไปถึงหลังจากกล่องที่มาทีหลัง) ดังนั้นบริษัทจึงใช้อัลกอริทึมแบบ greedy ในการจัดของลงรถบรรทุกดังต่อไปนี้: บริษัทจะพยายามเอาของใส่รถบรรทุกคันหนึ่งตามลำดับที่ได้รับมาจนกระทั่งรถบรรทุกไม่สามารถบรรทุกของชิ้นต่อไปได้ แล้วจึงส่งรถบรรทุกเดินทางไปสุไหงโกลก ของที่มาหลังจากรถบรรทุกออกก็จะเอาไปใส่รถบรรทุกคันใหม่ |
บริษัทกังวลว่าเมื่อทำเช่นนี้แล้วจะมีจำนวนเที่ยวรถบรรทุกมากเกินไป โดยคิดว่า บางทีพวกเขาอาจจะทำให้จำนวนเที่ยวรถบรรทุกน้อยลงด้วยการส่งรถบรรทุกไปโดยที่มันยังสามารถใส่ของชิ้นต่อไปได้ การทำเช่นนี้อาจจะทำให้พวกเขาสามารถบรรจุของลงรถบรรทุกคันต่อไปได้ดียิ่งขึ้น | บริษัทกังวลว่าเมื่อทำเช่นนี้แล้วจะมีจำนวนเที่ยวรถบรรทุกมากเกินไป โดยคิดว่า บางทีพวกเขาอาจจะทำให้จำนวนเที่ยวรถบรรทุกน้อยลงด้วยการส่งรถบรรทุกไปโดยที่มันยังสามารถใส่ของชิ้นต่อไปได้ การทำเช่นนี้อาจจะทำให้พวกเขาสามารถบรรจุของลงรถบรรทุกคันต่อไปได้ดียิ่งขึ้น | ||
เมื่อกำหนดลำดับของกล่องที่บริษัทได้รับพร้อมกับน้ำหนักของกล่องแต่ละกล่อง <math>w_1, w_2, \ldots, w_n \,</math> จงพิสูจน์ว่าอัลกอริทึมแบบ greedy ที่บริษัืทใช้อยู่นี้ทำให้จำนวนเที่ยวการส่งของน้อยที่สุดเท่าที่จะเป็นไปได้ การพิสูจน์ของคุณควรจะมีลักษณะคล้ายๆ กับการพิสูจน์ความถูกต้องของ greedy algorithm สำหรับแก้ปัญหา interval scheduling ซึ่งใช้เทคนิคการพิสูจน์แบบ "greedy algorithm นำหน้าเสมอ" | เมื่อกำหนดลำดับของกล่องที่บริษัทได้รับพร้อมกับน้ำหนักของกล่องแต่ละกล่อง <math>w_1, w_2, \ldots, w_n \,</math> จงพิสูจน์ว่าอัลกอริทึมแบบ greedy ที่บริษัืทใช้อยู่นี้ทำให้จำนวนเที่ยวการส่งของน้อยที่สุดเท่าที่จะเป็นไปได้ การพิสูจน์ของคุณควรจะมีลักษณะคล้ายๆ กับการพิสูจน์ความถูกต้องของ greedy algorithm สำหรับแก้ปัญหา interval scheduling ซึ่งใช้เทคนิคการพิสูจน์แบบ "greedy algorithm นำหน้าเสมอ" | ||
+ | |||
+ | [[418531 ภาคต้น 2552/โจทย์ปัญหาอัลกอริทึมแบบตะกละ I/เฉลยข้อ 1|เฉลย]] | ||
== ข้อ 2 == | == ข้อ 2 == | ||
แถว 10: | แถว 12: | ||
จงออกแบบอัลกอริทึมที่รับสตริง <math>S \,</math> ความยาว <math>m \,</math> และ <math>S' \,</math> ความยาว <math>n \,</math> มา แล้วตอบว่า <math>S' \,</math> เป็น subsequence ของ <math>S \,</math> หรือไม่ ในเวลา <math>O(m + n) \,</math> | จงออกแบบอัลกอริทึมที่รับสตริง <math>S \,</math> ความยาว <math>m \,</math> และ <math>S' \,</math> ความยาว <math>n \,</math> มา แล้วตอบว่า <math>S' \,</math> เป็น subsequence ของ <math>S \,</math> หรือไม่ ในเวลา <math>O(m + n) \,</math> | ||
+ | |||
+ | [[418531 ภาคต้น 2552/โจทย์ปัญหาอัลกอริทึมแบบตะกละ I/เฉลยข้อ 2|เฉลย]] | ||
== ข้อ 3 == | == ข้อ 3 == | ||
[Kleinberg & Tardos 4.5] ถนนชนบทแห่งหนึ่งมีบ้านเรือนตั้งอยู่ริ่มถนนอยู่ <math>n \,</math> โดยบ้านหลังที่ <math>i \,</math> อยู่ห่างจากต้นถนนเป็นระยะทาง <math>x_i \,</math> กิโลเมตร เพื่อความสะดวก คุณสามารถสมมติได้ว่า <math>x_1 < x_2 < \ldots < x_{n-1} < x_n \,</math> | [Kleinberg & Tardos 4.5] ถนนชนบทแห่งหนึ่งมีบ้านเรือนตั้งอยู่ริ่มถนนอยู่ <math>n \,</math> โดยบ้านหลังที่ <math>i \,</math> อยู่ห่างจากต้นถนนเป็นระยะทาง <math>x_i \,</math> กิโลเมตร เพื่อความสะดวก คุณสามารถสมมติได้ว่า <math>x_1 < x_2 < \ldots < x_{n-1} < x_n \,</math> | ||
− | คุณต้องการตั้งสถานีส่งสัญญาณโทรศัพท์มือถือบนถนนนี้ โดยที่ทำให้บ้านทุกหลังอยู่ในรัศมี 4 | + | คุณต้องการตั้งสถานีส่งสัญญาณโทรศัพท์มือถือบนถนนนี้ โดยที่ทำให้บ้านทุกหลังอยู่ในรัศมี 4 กิโลเมตรของสถานีส่งสัญญาณอย่างน้อยหนึ่งสถานี |
+ | |||
+ | จงออกแบบอัลกอริทึมเพื่อเลือกตำแหน่งการตั้งสถานีส่งสัญญาณโทรศัพท์มือถือเพื่อให้บรรลุวัตถุประสงค์ข้างบน โดยมีจำนวนสถานีน้อยที่สุดเท่าที่จะเป็นไปได้ อัลกอริทึมของคุณควรจะทำงานได้ในเวลา <math>O(n) \,</math> | ||
− | + | [[418531 ภาคต้น 2552/โจทย์ปัญหาอัลกอริทึมแบบตะกละ I/เฉลยข้อ 3|เฉลย]] | |
== ข้อ 4 == | == ข้อ 4 == | ||
แถว 26: | แถว 32: | ||
ผู้จัดการแข่งขันต้องการจัดลำดับการเิริ่มว่ายน้ำของผู้เข้าแข่งขัน '''ให้ผู้เข้าแข่งขันคนที่แข่งขันเสร็จเป็นคนสุดท้าย แข่งขันเสร็จเร็วที่สุดเท่าที่จะทำได้''' จงออกแบบอัลกอริทึมที่มีประสิทธิืภาพเพื่อจัดลำดับการเริ่มต้นว่ายน้ำดังกล่าว | ผู้จัดการแข่งขันต้องการจัดลำดับการเิริ่มว่ายน้ำของผู้เข้าแข่งขัน '''ให้ผู้เข้าแข่งขันคนที่แข่งขันเสร็จเป็นคนสุดท้าย แข่งขันเสร็จเร็วที่สุดเท่าที่จะทำได้''' จงออกแบบอัลกอริทึมที่มีประสิทธิืภาพเพื่อจัดลำดับการเริ่มต้นว่ายน้ำดังกล่าว | ||
+ | |||
+ | [[418531 ภาคต้น 2552/โจทย์ปัญหาอัลกอริทึมแบบตะกละ I/เฉลยข้อ 4|เฉลย]] | ||
== ข้อ 5 == | == ข้อ 5 == | ||
แถว 37: | แถว 45: | ||
จงออกแบบอัลกอริทึัมเพื่อคำนวณลำดับการทำงานที่ทำให้ความไม่พึงพอใจรวมต่ำที่สดเท่าที่จะทำได้ | จงออกแบบอัลกอริทึัมเพื่อคำนวณลำดับการทำงานที่ทำให้ความไม่พึงพอใจรวมต่ำที่สดเท่าที่จะทำได้ | ||
+ | |||
+ | [[418531 ภาคต้น 2552/โจทย์ปัญหาอัลกอริทึมแบบตะกละ I/เฉลยข้อ 5|เฉลย]] | ||
== ข้อ 6 == | == ข้อ 6 == | ||
แถว 61: | แถว 71: | ||
จงออกแบบอัลกอริทึัมสำหรับแก้ปัญหาดังกล่าว เวลากาำรทำงานของอัลกอริทึมของคุณควรจะเป็น polynomial ในตัวแปร <math>n \,</math> | จงออกแบบอัลกอริทึัมสำหรับแก้ปัญหาดังกล่าว เวลากาำรทำงานของอัลกอริทึมของคุณควรจะเป็น polynomial ในตัวแปร <math>n \,</math> | ||
+ | |||
+ | [[418531 ภาคต้น 2552/โจทย์ปัญหาอัลกอริทึมแบบตะกละ I/เฉลยข้อ 6|เฉลย]] | ||
== ข้อ 7 == | == ข้อ 7 == | ||
แถว 75: | แถว 87: | ||
แล้วเราจะได้ว่าเราสามารถเลือกคนงานที่ทำงานกะตั้งแต่เวลา 18.00 น. - 22.00 น. เป็นผู้ตรวจงานได้ สังเกตว่ากะของคนงานคนนี้เหลื่อมกับกะของคนงานอื่นอีกทั้งสองคน | แล้วเราจะได้ว่าเราสามารถเลือกคนงานที่ทำงานกะตั้งแต่เวลา 18.00 น. - 22.00 น. เป็นผู้ตรวจงานได้ สังเกตว่ากะของคนงานคนนี้เหลื่อมกับกะของคนงานอื่นอีกทั้งสองคน | ||
+ | |||
+ | [[418531 ภาคต้น 2552/โจทย์ปัญหาอัลกอริทึมแบบตะกละ I/เฉลยข้อ 7|เฉลย]] | ||
== ข้อ 8 == | == ข้อ 8 == | ||
แถว 82: | แถว 96: | ||
จงออกแบบอัลกอริทึมเพื่อจัดลำดับการทำงานเพื่อให้บรรลุวัตถุประสงค์ดังกล่าว | จงออกแบบอัลกอริทึมเพื่อจัดลำดับการทำงานเพื่อให้บรรลุวัตถุประสงค์ดังกล่าว | ||
+ | |||
+ | [[418531 ภาคต้น 2552/โจทย์ปัญหาอัลกอริทึมแบบตะกละ I/เฉลยข้อ 8|เฉลย]] |
รุ่นแก้ไขปัจจุบันเมื่อ 13:11, 21 กันยายน 2552
ข้อ 1
[Kleinberg & Tardos 4.3] บริษัทรถบรรทุกบริษัทหนึ่งจัดการส่งพัสดุจากกรุงเทพฯ ไปสุไหงโกลก รถบรรทุกคันหนึ่งสามารถบรรทุกน้ำหนักได้ไม่เกิน W หน่วย ในวันหนึ่งๆ บริษัทจะได้รับกล่องพัสดุมาทีละกล่อง โดยกล่องที่ จะมีน้ำหนัก บริษัทมีนโยบายว่าของจะต้องถูกส่งตามลำดับที่บริษัทได้รับมา (กล่าวคือของที่มาก่อนจะต้องไม่ไปถึงหลังจากกล่องที่มาทีหลัง) ดังนั้นบริษัทจึงใช้อัลกอริทึมแบบ greedy ในการจัดของลงรถบรรทุกดังต่อไปนี้: บริษัทจะพยายามเอาของใส่รถบรรทุกคันหนึ่งตามลำดับที่ได้รับมาจนกระทั่งรถบรรทุกไม่สามารถบรรทุกของชิ้นต่อไปได้ แล้วจึงส่งรถบรรทุกเดินทางไปสุไหงโกลก ของที่มาหลังจากรถบรรทุกออกก็จะเอาไปใส่รถบรรทุกคันใหม่
บริษัทกังวลว่าเมื่อทำเช่นนี้แล้วจะมีจำนวนเที่ยวรถบรรทุกมากเกินไป โดยคิดว่า บางทีพวกเขาอาจจะทำให้จำนวนเที่ยวรถบรรทุกน้อยลงด้วยการส่งรถบรรทุกไปโดยที่มันยังสามารถใส่ของชิ้นต่อไปได้ การทำเช่นนี้อาจจะทำให้พวกเขาสามารถบรรจุของลงรถบรรทุกคันต่อไปได้ดียิ่งขึ้น
เมื่อกำหนดลำดับของกล่องที่บริษัทได้รับพร้อมกับน้ำหนักของกล่องแต่ละกล่อง จงพิสูจน์ว่าอัลกอริทึมแบบ greedy ที่บริษัืทใช้อยู่นี้ทำให้จำนวนเที่ยวการส่งของน้อยที่สุดเท่าที่จะเป็นไปได้ การพิสูจน์ของคุณควรจะมีลักษณะคล้ายๆ กับการพิสูจน์ความถูกต้องของ greedy algorithm สำหรับแก้ปัญหา interval scheduling ซึ่งใช้เทคนิคการพิสูจน์แบบ "greedy algorithm นำหน้าเสมอ"
ข้อ 2
[Kleinberg & Tardos 4.4] กำหนด string และ มาให้ เรากล่าวว่า เป็น subsequence ของ ถ้าหากเราสามารถลบตัวอักษรบางตัวใน ออกแล้วได้ผลลัพธ์เท่ากับ ยกตัวอย่างเช่น abc เป็น substring ของ daabaefcaf ( da ab aef c af )
จงออกแบบอัลกอริทึมที่รับสตริง ความยาว และ ความยาว มา แล้วตอบว่า เป็น subsequence ของ หรือไม่ ในเวลา
ข้อ 3
[Kleinberg & Tardos 4.5] ถนนชนบทแห่งหนึ่งมีบ้านเรือนตั้งอยู่ริ่มถนนอยู่ โดยบ้านหลังที่ อยู่ห่างจากต้นถนนเป็นระยะทาง กิโลเมตร เพื่อความสะดวก คุณสามารถสมมติได้ว่า
คุณต้องการตั้งสถานีส่งสัญญาณโทรศัพท์มือถือบนถนนนี้ โดยที่ทำให้บ้านทุกหลังอยู่ในรัศมี 4 กิโลเมตรของสถานีส่งสัญญาณอย่างน้อยหนึ่งสถานี
จงออกแบบอัลกอริทึมเพื่อเลือกตำแหน่งการตั้งสถานีส่งสัญญาณโทรศัพท์มือถือเพื่อให้บรรลุวัตถุประสงค์ข้างบน โดยมีจำนวนสถานีน้อยที่สุดเท่าที่จะเป็นไปได้ อัลกอริทึมของคุณควรจะทำงานได้ในเวลา
ข้อ 4
[Kleinberg & Tardos 4.6] ในการแข่งขันไตรกีฬาครั้งหนึ่งมีผู้เข้าแข่งขัน คน ผู้เข้าแข่งขันแต่ละคนจะต้องว่ายน้ำ 20 รอบในสระว่ายน้ำ ปั่นจักรยาน 10 ไมล์ แล้ววิ่ง 3 ไมล์ คุณทราบว่าผู้เข้าแข่งขันคนที่ จะใช้เวลาว่ายน้ำประมาณ นาที ปั่นจักรยานประมาณ นาที และวิ่งอีกประมาณ นาที
สระว่ายน้ำมีอยู่เพียงแค่สระเดียว และมีกฎว่าในเวลาหนึ่งๆ จะมีผู้เข้าแข่งขันใช้สระได้เพียงคนเดียวเท่านั้น ฉะนั้นผู้จัดการแข่งขันจึงจัดการแ่ข่งขันในรูปแบบนี้ ตอนเริ่มต้นแข่งขันผู้เข้าแข่งขันที่ได้เริ่มคนแรกจะว่ายน้ำไป 20 รอบ แล้วออกจากสระไปปั่นจักรยานและวิ่งต่อ ทันใดที่ผู้เข้าแข่งขันที่ได้เริ่มคนแรกออกจากสระไป ผู้เข้าแข่งขันที่ได้เริ่มเป็นคนที่สองก็จะว่ายน้ำ และทันใดที่ผู้เข้าแข่งขันคนนั้นว่ายน้ำเสร็จ ผู้เข้าแข่งขันคนที่สามก็จะเริ่มว่ายต่อ เช่นนี้ไปเรื่อยๆ จนครบ คน
ดังนั้น สมมติว่าผู้จัดการแข่งขันจัดให้ผู้เข้าแข่งขันเริ่มทำการแข่งขันตามลำดับโดยให้ผู้เข้าแข่งขันคนที่ เริ่มเป็นคนแรก ผู้เข้าแข่งขันคนที่ เริ่มเป็นคนที่สอง ... และผู้เข้าแข่งขันคนที่ เริ่มเป็นคนสุดท้ายแล้ว เราจะได้ว่าผู้เข้าแข่งขันคนที่ จะทำการแข่งขันเสร็จ ณ เวลา (กล่าวคือจะต้องรอให้ผู้เข้าแข่งขันคนที่ได้เริ่มก่อนว่ายน้ำให้เสร็จหมดก่อน แล้วจึงได้ว่ายน้ำเอง หลังจากนั้นจึงวิ่งและว่ายน้ำ)
ผู้จัดการแข่งขันต้องการจัดลำดับการเิริ่มว่ายน้ำของผู้เข้าแข่งขัน ให้ผู้เข้าแข่งขันคนที่แข่งขันเสร็จเป็นคนสุดท้าย แข่งขันเสร็จเร็วที่สุดเท่าที่จะทำได้ จงออกแบบอัลกอริทึมที่มีประสิทธิืภาพเพื่อจัดลำดับการเริ่มต้นว่ายน้ำดังกล่าว
ข้อ 5
[Kleinberg & Tardos 4.13] ร้านถ่ายเอกสารแห่งหนึ่งมีเครื่องถ่ายเอกสารเครื่องใหญ่หนึ่งเครื่อง ทุกเช้าร้านถ่ายเอกสารจะได้รับงานจากลูกค้ามาจำนวน งาน
งานของลูกค้าคนที่ จะต้องใช้เวลาทำ นาที โดยงานนี้จะต้องทำต่อเนื่องกันด้วยเครื่องถ่ายเอกสารตั้งแต่ต้นจนจบโดยไม่มีพัก สมมติว่าเจ้่าของร้านได้ลำดับการทำงานเสร็จแล้ว ให้ เป็นเวลานับตั้งแต่เริ่มต้นทำงานแรกจนถึงเวลาที่ทำงานของลูกค้าคนที่ เสร็จ (กล่าวคือ ถ้างานของลูกค้าคนที่ เป็นงานแรกที่เจ้าของร้านเลือกทำก่อน เราจะได้ว่า และถ้างานของลูกค้าคนที่ เป็นงานที่ถูกทำถัดมา เราจะได้ว่า ) ลูกค้าแต่ละคนจะให้ "น้ำหนัก" กับเวลาทำงานเสร็จ โดยความ "ไม่พึงพอใจ" ของลูกค้่าคนที่ สามารถวัดเป็นตัวเลขออกมาได้เท่ากับ
เจ้าของร้านต้องการจัดลำดับการทำงานเหล่านี้เพื่อให้ลูกค้าได้รับความพึงพอใจมากที่สุด จึงต้องการทำให้ค่า มีค่าน้อยที่สุด
ยกตัวอย่างเช่น สมมติว่ามีงานสองงาน งานแรกใช้เวลา และมีน้ำหนัก ส่วนงานที่สองใช้เวลา และมีน้ำหนัก ถ้าเจ้าของร้านเลือกทำงานแรกก่อนทำงานที่สองแล้ว ความไม่พึงพอใจของลูกค้าทั้งหมดมีค่ารวมเท่ากับ แต่หากเลือกทำงานที่สองก่อนจะส่งผลให้ความไม่พึงพอใจของลูกค้าทั้งหมดมีค่าเท่ากับ ดังนั้นเจ้าของร้านควรเลือกทำงานแรกให้เสร็จก่อน
จงออกแบบอัลกอริทึัมเพื่อคำนวณลำดับการทำงานที่ทำให้ความไม่พึงพอใจรวมต่ำที่สดเท่าที่จะทำได้
ข้อ 6
[Kleinberg & Tardos 4.12] สมมติว่าคุณมีวิดิโอที่จะต้องส่งให้เพื่อนทั้งหมด ไฟล์ ทีละไฟล์ผ่าน network link เส้นหนึ่ง โดยที่ไฟล์ที่ มีขนาด บิต และคุณจะต้องส่งมันในเวลา วินาทีด้วยอัตราคงที่ คุณไม่สามารถส่งวิดีโอสองไฟล์ในเวลาเดียวกันได้ ดังนั้นคุณจะต้องวางแผนว่าจะส่งไฟล์ในก่อนไฟล์ไหนหลัง หลังจากคุณตัดสินใจว่าจะส่งไฟล์ไหนก่อนไฟล์ไหนหลังแล้ว คุณจะต้องส่งไฟล์ตามลำดับที่วางไว้โดยไม่ปล่อยให้ network link ว่างเลยแม้สักช่วงเวลาเดียว อนึ่ง คุณจะเริ่มส่งวิดีโอที่เวลา 0 (ดังนั้นการส่งวิดีโอทั้งหมดจะสิ้นสุดที่เวลา
network link ที่คุณใช้นั้นมีกฎควบคุม bandwidth ดังต่อไปนี้:
(*) สำหรับจำนวนเต็มบวก จำนวนบิตที่คุณส่งตั้งแต่เวลา 0 ถึงเวลา จะต้องไม่เกิน เมื่อ เป็นค่าคงที่ของ network link
สังเกตว่ากฎนี้เป็นกฎที่วางไว้กับจำนวนบิตที่ส่งตั้งแต่เริ่มต้นเท่านั้น มันไม่ได้สร้างข้อจำกัดเกี่ยวกับจำนวนบิตที่คุณส่งได้หากคุณเริ่มส่ง ณ เวลาอื่น
เรากล่าวว่าการจัดลำดับการส่งวิดีโอเป็นการจัดลำดับที่ ใช้ได้ (valid) ถ้าหาว่ามันสอดคล้องกับกฎ (*)
ปัญหา: กำหนดไฟล์วิดิโอมาให้ ไฟล์ แต่ละไฟล์ถูกกำหนดด้วยเลข และ นอกจากนี้ยังกำหนดค่า ของ network link เราต้องการทราบว่ามีการจัดลำัดับการส่งที่ใช้ได้หรือไม่
ตัวอย่าง: สมมติว่าเรามีไฟล์วิดีโออยู่สามไฟล์ ได้แก่ และสมมติืให้ แล้วเราจะได้ว่าการส่งที่ส่งไฟล์ 1, 2, และ 3 ตามลำดับนั้นเป็นลำดับการส่งที่ใช้ได้ เนื่องจากมันสอดคล้องกับกฎ (*):
- เมื่อ วิดิโอที่ 1 ถูกส่งไปทั้งหมด และ
- เมื่อ วิดิโอที่ 2 ถูกส่งไปครึ่งหนึ่ง และ
หลังจากนั้นคุณสามารถเช็คกรณีที่ และ ได้ในทำนองเดียวกัน
จงออกแบบอัลกอริทึัมสำหรับแก้ปัญหาดังกล่าว เวลากาำรทำงานของอัลกอริทึมของคุณควรจะเป็น polynomial ในตัวแปร
ข้อ 7
[Kleinberg & Tardos 4.15] มีคนงานอยู่ ซึ่งในหนึ่งสัปดาห์จะทำงานหนึ่งกะ โดยงานหนึ่งกะจะเป็นช่วงเวลาที่ต่อเนื่องกัน (กล่าวคือกะงานของคนงานคนที่ สามารถแทนได้ด้วยเวลาเริ่มต้น และเวลาจบ
หัวหน้าของคนงานเหล่านี้ต้องการเลือกคนงานจำนวนหนึ่งใน คนนี้มาเป็นผู้ตรวจงาน (supervisor) ซึ่งจะมาประชุมกับเขาพร้อมกันอาทิตย์ละหนึ่งครั้ง หัวหน้างานต้องการให้กลุ่มของคนงานที่เป็นผู้ตรวจงานมีคุณสมบัติดังต่อไปนี้: สำหรับคนงานที่ไม่ใช้ผู้ตรวจงานทุกคน จะต้องมีผู้ตรวจงานอย่างน้อยหนึ่งคนที่กะของผู้ตรวจงานเหลื่อมกับกะของคนงานคนนั้น เพื่อทให้กลุ่มของผู้ตรวจงานจะสามารถสังเกตการทำงานของคนงานได้ทุกคน
จงออกแบบอัลกอริทึมเพื่อเลือกผู้ตรวจงานให้กลุ่มผุ้ตรวจงานมีสมบัติดังกล่าวข้างต้น และให้มีจำนวนผู้ตรวจงานน้อยที่สุดเท่าที่จะเป็นไปได้
ตัวอย่าง: สมมติว่า และกะของคนงานทั้งสามคนคือ:
- วันจันทร์ 16.00 น. - 20.00 น.
- วันจันทร์ 18.00 น. - 22.00 น.
- วันจันทร์ 21.00 น. - 23.00 น.
แล้วเราจะได้ว่าเราสามารถเลือกคนงานที่ทำงานกะตั้งแต่เวลา 18.00 น. - 22.00 น. เป็นผู้ตรวจงานได้ สังเกตว่ากะของคนงานคนนี้เหลื่อมกับกะของคนงานอื่นอีกทั้งสองคน
ข้อ 8
[Dasgupta, Papadimitriou, Vazirani 5.32] เครื่องจักรเครื่องหนึ่งมีผู้ใช้งาน คน โดยผู้ใช้งานคนที่ จะส่งงานมาให้เครื่องจักรทำหนึ่งชื้น ซึ่งจะต้องใช้เวลาทำนาน เครื่องจักรไม่สามารถทำงานสองชิ้นพร้อมกันได้ และเมื่อเครื่องจักรเริ่มทำงานชิ้นใดแล้วมันจะต้องทำงานชื้นนั้นจนเสร็จถึงจะไปเริ่มทำงานอื่นได้
คุณต้องการจัดลำดับการทำงาน โดยทำให้เวลาคอยรวมของผุ้ใช้ทุกคนมีค่าน้อยที่สุดเท่าที่จะทำได้ กล่าวคือ สมมติว่าคุณจัดให้เครื่องจักรทำงานของผู้ใช้ ตามลำดับ โดยที่ เป็น permutation ของเซต แล้ว ผุ้ใช้งานคนที่ จะต้องรอเป็นเวลา ฉะนั้นในปัญหานี้คุณต้องการทำให้ค่า มีค่าน้อยที่สุดเท่าที่จะเป็นไปได้
จงออกแบบอัลกอริทึมเพื่อจัดลำดับการทำงานเพื่อให้บรรลุวัตถุประสงค์ดังกล่าว