- Data Structure
- Networking
- RDBMS
- Operating System
- Java
- MS Excel
- iOS
- HTML
- CSS
- Android
- Python
- C Programming
- C++
- C#
- MongoDB
- MySQL
- Javascript
- PHP
- Physics
- Chemistry
- Biology
- Mathematics
- English
- Economics
- Psychology
- Social Studies
- Fashion Studies
- Legal Studies
- Selected Reading
- UPSC IAS Exams Notes
- Developer's Best Practices
- Questions and Answers
- Effective Resume Writing
- HR Interview Questions
- Computer Glossary
- Who is Who
Find minimum time to finish all jobs with given constraints in Python
Suppose we have an array of jobs with different time requirements, there are k different persons to assign jobs and we also have how much time t an assignee takes to do one unit of the job. We have to find the minimum time to complete all jobs with following constraints.
An assignee can be assigned only the contiguous jobs.
Two assignees cannot share or perform a single job.
So, if the input is like k = 4, t = 5, job = {12, 6, 9, 15, 5, 9}, then the output will be 75 as we get this time by assigning [12],[6, 9],[15] and [5, 9]
To solve this, we will follow these steps −
Define a function is_valid() . This will take time, K, job
n := size of job
count := 1, curr_time := 0, i := 0
while i < n, do
if curr_time + job[i] > time, then
curr_time := 0
count := count + 1
otherwise,
curr_time := curr_time + job[i]
i := i + 1
return true when count <= K
From the main method, do the following <
n := size of job
end := 0, begin := 0
for i in range 0 to n, do
end := end + job[i]
res := end
job_max := maximum of job
while begin <= end, do
mid := ((begin + end) / 2) take integer part
if mid >= job_max and is_valid(mid, K, job) is true, then
res := minimum of res, mid
end := mid - 1
otherwise,
begin := mid + 1
return res * T
Example
Let us see the following implementation to get better understanding −
def is_valid(time, K, job): n = len(job) count = 1 curr_time = 0 i = 0 while i < n: if curr_time + job[i] > time: curr_time = 0 count += 1 else: curr_time += job[i] i += 1 return count <= K def get_minimum_time(K, T, job): n = len(job) end = 0 begin = 0 for i in range(n): end += job[i] res = end job_max = max(job) while begin <= end: mid = int((begin + end) / 2) if mid >= job_max and is_valid(mid, K, job): res = min(res, mid) end = mid - 1 else: begin = mid + 1 return res * T job = [12, 6, 9, 15, 5, 9] k = 4 T = 5 print(get_minimum_time(k, T, job))
Input
4, 5, [12, 6, 9, 15, 5, 9]
Output
75