0% found this document useful (0 votes)
403 views

Job Scheduling Problem

This document describes the job scheduling problem and provides a greedy algorithm solution. It begins by defining the problem of scheduling jobs with deadlines and profits to maximize total profit. It then describes a greedy approach that sorts jobs by decreasing profit and schedules the most profitable jobs in empty time slots respecting deadlines. An example is provided and the solution schedules jobs [J2, J1, J3] for maximum profit of 180. Finally, C code is provided to implement the greedy algorithm with time complexity of O(n^2).

Uploaded by

Akash Katara
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
403 views

Job Scheduling Problem

This document describes the job scheduling problem and provides a greedy algorithm solution. It begins by defining the problem of scheduling jobs with deadlines and profits to maximize total profit. It then describes a greedy approach that sorts jobs by decreasing profit and schedules the most profitable jobs in empty time slots respecting deadlines. An example is provided and the solution schedules jobs [J2, J1, J3] for maximum profit of 180. Finally, C code is provided to implement the greedy algorithm with time complexity of O(n^2).

Uploaded by

Akash Katara
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 15

Job Scheduling Problem

Definition
• Given an array of jobs where every job has a deadline and associated profit
if the job is finished before the deadline. It is also given that every job takes a
single unit of time, so the minimum possible deadline for any job is 1. How
to maximize total profit if only one job can be scheduled at a time.
Greedy Approach for Job Scheduling Problem

• Sort all jobs in decreasing order of profit.


• Iterate on jobs in decreasing order of profit.For each job , do the following :
• For each job find an empty time slot from deadline to 0. If found empty
slot put the job in the slot and mark this slot filled.
Example
• Let us consider a set of given jobs as shown in the following tables.we have
to find a sequence of jobs,which will be completed within their deadlines and
will give maximum profit.Each job is associated with deadline and profit.

Job J1 J2 J3 J4 J5
Deadline 2 1 3 2 1
Profit 60 100 20 40 20
Solution
• To solve this problem, the given jobs are sorted according to their profit in a
descending order. Hence, after sorting, the jobs are ordered as shown in the
following table.

Job J2 J1 J4 J3 J5
Deadline 1 2 2 3 1
Profit 100 60 40 20 20
Solution
• From this set of jobs, first we select J2, as it can be completed within its
deadline and contributes maximum profit.
• Next, J1 is selected as it gives more profit compared to J4.
• In the next clock,J4 cannot be selected as its deadline is over, hence J3 is
selected as it executes within its deadline.
• The job J5 is discarded as it cannot be executed within its deadline.
Solution
• Thus, the solution is the sequence of jobs (J2, J1, J3) which are being
executed within their deadline and gives maximum profit.
• Total profit of this sequence is 100 + 60 + 20 = 180.
Program
• #include <stdio.h>
• #define MAX 100
• typedef struct Job {
• char id[5];
• int deadline;
• int profit;
• } Job;

• void jobSequencingWithDeadline(Job jobs[], int n);

• int minValue(int x, int y) {


• if(x < y) return x;
• return y;
• }
Program
• int main(void) {
• int i, j;
• //jobs with deadline and profit
• Job jobs[5] = {
• {"j1", 2, 60},
• {"j2", 1, 100},
• {"j3", 3, 20},
• {"j4", 2, 40},
• {"j5", 1, 20},
• };
• Job temp;

• //number of jobs
• int n = 5;
Program
• for(i = 1; i < n; i++) {
• for(j = 0; j < n - i; j++) {
• if(jobs[j+1].profit > jobs[j].profit) {
• temp = jobs[j+1];
• jobs[j+1] = jobs[j];
• jobs[j] = temp;
• }
• }
• }

• printf("%10s %10s %10s\n", "Job", "Deadline", "Profit");


• for(i = 0; i < n; i++) {
• printf("%10s %10i %10i\n", jobs[i].id, jobs[i].deadline, jobs[i].profit);
• }
• jobSequencingWithDeadline(jobs, n);
• return 0;
• }
Program
void jobSequencingWithDeadline(Job jobs[], int n) {
int i, j, k, maxprofit;
int timeslot[MAX];
int filledTimeSlot = 0;
int dmax = 0;
for(i = 0; i < n; i++) {
if(jobs[i].deadline > dmax) {
dmax = jobs[i].deadline;
}
}
//free time slots initially set to -1 [-1 denotes EMPTY]
for(i = 1; i <= dmax; i++) {
timeslot[i] = -1;
}

printf("dmax: %d\n", dmax);


Program
for(i = 1; i <= n; i++) {
k = minValue(dmax, jobs[i - 1].deadline);
while(k >= 1) {
if(timeslot[k] == -1) {
timeslot[k] = i-1;
filledTimeSlot++;
break;
}
k--;
}

//if all time slots are filled then stop


if(filledTimeSlot == dmax) {
break;
}
}
Program
//required jobs
printf("\nRequired Jobs: ");
for(i = 1; i <= dmax; i++) {
printf("%s", jobs[timeslot[i]].id);

if(i < dmax) {


printf(" --> ");
}
}
//required profit
maxprofit = 0;
for(i = 1; i <= dmax; i++) {
maxprofit += jobs[timeslot[i]].profit;
}
printf("\nMax Profit: %d\n", maxprofit);
}
Time Complexity
• The time complexity of this problem is O(n^2).
Thank You

• Mahyavanshi Rohan
• Katara Aryan

You might also like