Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

โปรแกรมหาเวลาขั้นต่ำเพื่อจบงานทั้งหมดใน Python


สมมติว่าเรามีอาร์เรย์ที่เรียกว่างาน โดยที่ jobs[i] ระบุระยะเวลาที่จำเป็นในการทำงาน ith ให้เสร็จสิ้น นอกจากนี้เรายังมีค่า k อีกค่าหนึ่งสำหรับพวกเขา เราสามารถกำหนดงานได้ ควรมอบหมายงานแต่ละงานให้กับผู้ปฏิบัติงานเพียงคนเดียว และเวลาทำงานของผู้ปฏิบัติงานคือเวลาทั้งหมดที่ใช้ในการทำงานทั้งหมดที่ได้รับมอบหมายให้เสร็จสมบูรณ์ เราต้องหาเวลาทำงานสูงสุดขั้นต่ำที่เป็นไปได้ของการมอบหมายงานใดๆ

ดังนั้น หากอินพุตเป็นเหมือนงาน =[2,1,3,8,5], k =2 ผลลัพธ์จะเป็น 10 เพราะเราสามารถกำหนดงานได้เช่น:

  • ผู้ปฏิบัติงาน1:2 + 5 + 3 =10

  • ผู้ปฏิบัติงาน 2:1 + 8 =9

เวลาสูงสุดคือ 10

เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -

  • เรียงลำดับรายการงานในลำดับย้อนกลับ

  • assign :=รายการ k งานแรก

  • งาน :=รายการงานที่เหลืออยู่

  • กำหนดฟังก์ชัน dp() นี่จะใช้เวลา i กำหนด

  • ถ้าฉันเท่ากับขนาดของงาน แล้ว

    • ผลตอบแทนสูงสุดที่ได้รับมอบหมาย

  • ตอบ :=อนันต์

  • สำหรับ x ในช่วง 0 ถึง k - 1 ทำ

    • assign :=รายการใหม่จากการมอบหมาย

    • assign[x] :=assign[x] + งาน[i]

    • ans :=ขั้นต่ำของ ans และ dp(i+1, กำหนด)

    • assign[x] :=assign[x] - งาน[i]

  • กลับมาอีกครั้ง

  • จากวิธีหลักส่งคืน dp(0, กำหนด)

ตัวอย่าง

ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น

def solve(jobs, k):
   jobs.sort(reverse=True)
   assign = tuple(jobs[:k])
   jobs = jobs[k:]

   def dp(i, assign):
      if i == len(jobs):
         return max(assign)

      ans = float('inf')
      for x in range(k):
         assign = list(assign)
         assign[x] += jobs[i]
         ans = min(ans, dp(i+1, tuple(assign)))
         assign[x] -= jobs[i]

      return ans

   return dp(0, assign)

jobs = [2,1,3,8,5]
k = 2
print(solve(jobs, k))

อินพุต

[2,1,3,8,5], 2

ผลลัพธ์

10