ฉันต้องการความช่วยเหลือในปัญหา ICM ACM นี้ แนวคิดปัจจุบันของฉันคือการสร้างแบบจำลองนี้เป็นปัญหาเส้นทางที่สั้นที่สุดซึ่งอธิบายไว้ในคำชี้แจงปัญหา
ปัญหา
มีN = 1000
ภาชนะบรรจุกากนิวเคลียร์ที่ตั้งอยู่ตามแนวเส้นจำนวน 1-D ที่แตกต่างจากตำแหน่งยกเว้น-500,000 to 500,000
x=0
บุคคลได้รับมอบหมายให้รวบรวมถังขยะทั้งหมด แต่ละวินาทีที่ไม่ได้เก็บขยะก็จะปล่อยรังสีออกมา 1 หน่วย บุคคลนั้นเริ่มต้นที่x = 0
และสามารถเคลื่อนย้าย1
หน่วยทุกวินาทีและการรวบรวมขยะต้องใช้เวลาเล็กน้อย เราต้องการค้นหาปริมาณรังสีขั้นต่ำที่ปล่อยออกมาขณะรวบรวมภาชนะทั้งหมด
ตัวอย่างอินพุต:
4
[-12, -2, 3, 7]
ตู้คอนเทนเนอร์ที่ตั้งอยู่ที่
คำสั่งที่ดีที่สุดในการรวบรวมภาชนะเหล่านี้คือ[-2, 3, 7, -12]
สำหรับการปล่อย50
หน่วยขั้นต่ำ คำอธิบาย: บุคคลนั้นจะไป-2
ใน 2 วินาทีและในช่วงเวลา2 units
ของการแผ่รังสีนั้นจะถูกปล่อยออกมา จากนั้นเขาก็ไปที่3
(ระยะทาง:) 5
เพื่อให้ถังปล่อย2 + 5 = 7
หน่วยรังสี เขาใช้เวลา4
ไม่กี่วินาทีที่จะได้รับไปx = 7
ที่บาร์เรลที่ได้ปล่อยออก2 + 5 + 4 = 11
หน่วย เขาใช้เวลาไม่19
กี่วินาทีเพื่อไปยังx = -12
จุดที่บาร์เรลปล่อย2 + 5 + 4 + 19 = 30
หน่วย 2 + 7 + 11 + 30 = 50
ซึ่งเป็นคำตอบ
หมายเหตุ
มีO(N!)
ทางออกชัดเจน อย่างไรก็ตามฉันได้สำรวจวิธีโลภเช่นย้ายไปยังที่อยู่ใกล้ที่สุดหรือย้ายไปยังกลุ่มที่อยู่ใกล้ที่สุด แต่ก็ไม่ได้ผล
ฉันเคยคิดเกี่ยวกับปัญหานี้มาระยะหนึ่งแล้วและได้จัดทำแบบจำลองเป็นปัญหาการค้นหากราฟ:
- เราแทรก
0
เป็นตำแหน่งพื้นฐาน (นี่จะเป็นสถานะเริ่มต้น) - จากนั้นเราจัดเรียงตำแหน่งจากน้อยไปหามากที่สุด
- จากนั้นเราจะทำ BFS / PFS ซึ่ง
state
ประกอบด้วย- จำนวนเต็มสองจำนวน
l
และr
นั่นหมายถึงช่วงที่ต่อเนื่องกันในอาร์เรย์ตำแหน่งที่เรียงลำดับซึ่งเราได้เข้าชมแล้ว - จำนวนเต็มที่
loc
บอกเราว่าเราอยู่ทางด้านซ้ายหรือขวาของช่วง - จำนวนเต็มที่
time
บอกเวลาที่เราผ่านไป - จำนวนเต็ม 'ต้นทุน' ที่บอกเราถึงค่าใช้จ่ายทั้งหมดจนถึงขณะนี้ (ขึ้นอยู่กับโหนดที่เราเคยเยี่ยมชม)
- จำนวนเต็มสองจำนวน
- จากแต่ละสถานะเราสามารถย้ายไปที่ [l - 1, r] และ [l, r + 1], tweaking อีก 3 จำนวนเต็มตามลำดับ
- สถานะสุดท้ายคือ [0, N] ตรวจสอบตำแหน่งสิ้นสุดทั้งสอง
อย่างไรก็ตามดูเหมือนว่า[L, R, loc]
จะไม่ได้กำหนดสถานะที่ไม่ซ้ำกันและเราต้องจัดเก็บL, R, loc, and time
ในขณะที่ลดลงcost
ในแต่ละเหล่านี้ สิ่งนี้นำไปสู่อัลกอริธึมแบบเอ็กซ์โปเนนเชียลซึ่งยังคงช้าเกินไปสำหรับผลดีใด ๆ
ใครสามารถช่วยฉันขยายความคิดของฉันหรือผลักดันฉันไปในทิศทางที่ถูกต้อง?
แก้ไข:บางทีนี่อาจเป็นรูปแบบเป็นปัญหาการเพิ่มประสิทธิภาพการเขียนโปรแกรมแบบไดนามิก? เมื่อนึกถึงมันมีปัญหาเช่นเดียวกับวิธีแก้ปัญหาการค้นหากราฟ - เนื่องจากกระแสไฟฟ้าcost
ต่ำไม่ได้หมายความว่ามันเป็นคำตอบที่ดีที่สุดสำหรับปัญหาย่อยนั้นเนื่องจากtime
มีผลกระทบต่อคำตอบอย่างมากเช่นกัน
โลภไม่ทำงาน: ฉันมีอัลกอริธึมการเลือกโลภที่ประเมินค่าใช้จ่ายในการย้ายไปยังสถานที่หนึ่ง (เช่นถ้าเราย้ายไปทางขวา
คุณสามารถค้นหาด้วยลำดับความสำคัญก่อนด้วยการเรียนรู้แบบฮิวริสติกหรือไม่? ฮิวริสติกสามารถรวมค่าใช้จ่ายของการเดินทางปัจจุบันกับจำนวนเวลาที่ผ่านไป