ข้อนี้ให้งานมา งานโดยงานที่ จะใช้เวลา และสามารถทำเป็นชุดๆ ชุดละอย่างมาก งาน
เวลาที่ใช้ในชุดหนึ่งจะเท่ากับค่า ที่สูงสุดของงานที่ถูกจัดในชุดนั้น ในโจทย์จะจัดชุดการทำงานอย่างใดก็ได้ และต้องการหาเวลารวมที่น้อยที่สุดที่เป็นไปได้
แนวคิด
โจทย์ข้อนี้เป็นโจทย์ Greedy Algorithm
เราจะสามารถพิสูจน์ว่าควรนำงานที่มีเวลามากสุดมาไว้ในชุดเดียวกัน งานแรก และทำเช่นนี้จนครบ งาน
นั่นคือหากนำค่า มาเรียงกันใหม่จากมากไปน้อยเป็น ทางที่ดีที่สุคการจุดชุดเป็น
แนวทางการพิสูจน์
สมมติว่าการจัดชุดที่ดีสุดคือเป็นชุด โดยชุด นั่นคือในชุด มีงานที่ใช้เวลา
เคส
ถ้าเหลืองานไม่เกิน งานแน่นอนว่าจะเอาทุกงานมารวมในชุดเดียวกันได้
เคส
สังเกตว่าจะต้องมีชุดใดชุดหนึ่งที่มีงานที่ใช้เวลาสูงสุด เราจึงสามารถเลือกชุดนี้ให้เป็นชุดแรก โดยไม่เสียนัยทั่วไป และให้
หาก มีน้อยกว่า งานสามารถสามารถย้ายงานใดๆ จากชุดอื่นมาเพิ่มใน โดยไม่เพิ่มเวลาเพราะ ใช้นานกว่าอยู่แล้ว ดังนั้นจะสามารถเลือกให้ มี งานโดยที่เวลารวมที่ได้ไม่เพิ่มขึ้น
สมมติว่างานที่ใช้เวลารองลงมา อยู่ในชุดอื่น ที่ จะเห็นได้ว่าสามารถสลับงาน มาแทน โดยที่เวลารวมที่ได้ไม่เพิ่มขึ้นเพราะ
- เวลาที่ใช้ในชุด จะไม่เพิ่มเพราะ ที่ถูกสลับไปจะไม่เกิน ( น้อยกว่าเพียง ซึ่งเป็น ไปแล้ว)
- เวลาที่ใช้ในชุด จะไม่เพิ่มเพราะมี อยู่แล้ว และ
ดังนั้นจะได้ว่าสามารถทำงาน ในชุดแรกเสมอโดยที่เวลารวมที่ได้ไม่เพิ่มขึ้น
เราสามารถใช้เหตุผลเดียวกันมาพิสูจน์ว่างานที่ใช้เวลา สามารถนำมาอยู่ในชุดแรกและได้ผลรวมเวลาต่ำสุด
นั่นคือชุดแรกสามารถเลือกเป็น โดยได้วิธีจัดงานที่ได้เวลารวมน้อยสุด
เมื่อเลือกชุดแรกแล้วจะเหลืออีก งานซึ่งสามารถใช้เหตุผลแบบเดิมในการเลือกจนครบ
Solution
เมื่อเรารู้แล้วว่าควรนำงานที่ใช้เวลามากสุดมาทำก่อนทีละ งานจนหมด เราจะสามารถแก้ข้อนี้โดย Sort งานก่อน สังเกตว่างานที่มีค่ามากสุดในแต่ละชุดจะเป็น เพราะนั่นเป็นงานที่ใช้เวลามากสุดในชุดนั้นๆ เราจึงเพียงต้องนำค่าดังกล่าวมาบวกกัน
การ Sort ใช้เวลา และขั้นตอนอื่นๆ ใช้เวลา ดังนั้นข้อนี้จะใช้เวลาทั้งหมด