กระเป๋าแบบแบ่งส่วนตามอัตราส่วน
เลือกสิ่งที่มีมูลค่าต่อน้ำหนักสูงสุดก่อน
กระเป๋าแบบแบ่งส่วนตามอัตราส่วน เป็นบทเรียน Competitive Programming Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Competitive Programming Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Competitive Programming Academy มีบทเรียนทั้งหมด 4 บทเรียน
การตั้งโจทย์กระเป๋าเป้
มีสิ่งของที่มีมูลค่าและน้ำหนัก พร้อมกระเป๋าที่มี ความจุ จำกัด เป้าหมายคือบรรทุกมูลค่ารวมให้ได้มากที่สุด 🎒
แบบแบ่งส่วนหมายถึงแบ่งได้
ในรูปแบบ แบ่งส่วน คุณสามารถหยิบสิ่งของเพียงบางส่วนได้ เช่น เมล็ดพืชครึ่งกระสอบ อิสระนี้เองที่ทำให้วิธีแบบละโมบใช้ได้ผล
มูลค่าต่อน้ำหนัก
ตัวชี้วัดสำคัญคือ อัตราส่วน มูลค่าต่อน้ำหนักของสิ่งของแต่ละชิ้น อัตราส่วนสูงหมายถึงบรรจุมูลค่าได้มากในพื้นที่เพียงเล็กน้อย
ratio = value / weightเรียงตามอัตราส่วนที่ดีที่สุด
เรียงลำดับ สิ่งของตามมูลค่าต่อน้ำหนัก โดยเรียงจากมากไปน้อย แผนแบบละโมบคือเลือกสิ่งของที่มีความหนาแน่นของมูลค่าสูงที่สุดที่ยังมีอยู่
items.sort(key=lambda i: i[0] / i[1], reverse=True)หยิบทั้งชิ้นตราบเท่าที่ยังใส่ได้
ไล่ดูรายการที่เรียงลำดับแล้ว และหยิบสิ่งของแต่ละชิ้น ทั้งหมด หากยังใส่ในความจุที่เหลือได้ เพิ่มมูลค่าเต็มจำนวนของสิ่งของนั้นลงในยอดรวม
if weight <= cap:
total += value
cap -= weightเติมช่องว่างสุดท้าย
เมื่อสิ่งของชิ้นหนึ่งใหญ่เกินไป ให้หยิบมาเป็น เศษส่วน ที่เติมพื้นที่ว่างที่เหลือได้พอดี จากนั้นกระเป๋าจะเต็มและหยุดได้
total += value * (cap / weight)เหตุใดลำดับตามอัตราส่วนจึงใช้ได้
ความจุแต่ละหน่วยควรบรรจุมูลค่าให้ได้มากที่สุด ดังนั้นสิ่งของที่ มีความหนาแน่นสูงที่สุด ต้องมาก่อน การสลับเป็นสิ่งของที่มีความหนาแน่นต่ำกว่าจะทำให้สูญเสียมูลค่า
กระเป๋าเป้แบบ 0/1 แตกต่างกัน
หากแบ่งสิ่งของไม่ได้ การเลือกแบบโลภตามอัตราส่วนจะใช้ไม่ได้ ปัญหาแบบ 0/1 ต้องใช้การโปรแกรมพลวัต ไม่ใช่การเรียงลำดับง่าย ๆ แบบนี้
เวลาทำงาน
การเรียงตามอัตราส่วนใช้เวลา O(n log n) และวงวนเติมของใช้เวลาเชิงเส้น ซึ่งเร็วเพียงพอสำหรับข้อจำกัดทั่วไปของการแข่งขัน
ระวังเศษส่วนสุดท้าย
ใช้เลขจุดลอยตัวหรือเศษส่วนที่คำนวณได้อย่างแม่นยำสำหรับสิ่งของบางส่วน การตัดทอนแต่เนิ่น ๆ อาจทำให้ค่าลดลงและทำให้ได้คำตอบผิด
พบการใช้งานที่ใด
ลองนึกถึงการบรรทุก สินค้า การผสมเชื้อเพลิง หรือการแบ่งทรัพยากร เมื่อใดก็ตามที่สิ่งของแบ่งเป็นส่วน ๆ ได้ วิธีโลภตามอัตราส่วนคือเครื่องมือของคุณ
ตรวจสอบอย่างรวดเร็ว
คุณกำลังบรรจุสิ่งของลงในกระเป๋าในปัญหากระเป๋าเป้แบบแบ่งได้
สรุป
เรียงสิ่งของตาม ค่าต่อน้ำหนัก หยิบสิ่งของทั้งชิ้นที่ยังใส่ได้ แล้วเติมด้วยสิ่งของบางส่วนจนเต็มกระเป๋า วิธีโลภนี้ให้คำตอบดีที่สุดเฉพาะเมื่อแบ่งสิ่งของได้เท่านั้น 🚀
คำถามที่พบบ่อย
บทเรียน “กระเป๋าแบบแบ่งส่วนตามอัตราส่วน” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “กระเป๋าแบบแบ่งส่วนตามอัตราส่วน” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Competitive Programming Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Competitive Programming Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “กระเป๋าแบบแบ่งส่วนตามอัตราส่วน”
เลือกสิ่งที่มีมูลค่าต่อน้ำหนักสูงสุดก่อน คุณปฏิบัติ Competitive Programming Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Competitive Programming Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน Competitive Programming Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน
บทเรียน “กระเป๋าแบบแบ่งส่วนตามอัตราส่วน” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน Competitive Programming Academy นี้ได้ไหม
ได้ บทเรียน Competitive Programming Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- แนวคิดแบบโลภ
- การเลือกกิจกรรมตามเวลาสิ้นสุดที่เร็วที่สุด
- กระเป๋าแบบแบ่งส่วนตามอัตราส่วน
- สังเกตว่าเมื่อใดวิธีโลภใช้ไม่ได้