Job Sequencing Problem | Set 3 (Using TreeSet in JAVA)

11 Dec, 2018
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.
Examples:
Input : Four Jobs with following deadlines and profits
  JobID    Deadline      Profit
    a        4            20   
    b        1            10
    c        1            40  
    d        1            30
Output : Following is maximum profit sequence of jobs
         c, a 

Input : Five Jobs with following deadlines and profits
   JobID     Deadline     Profit
     a         2           100
     b         1           19
     c         2           27
     d         1           25
     e         3           15
Output : Following is maximum profit sequence of jobs
         c, a, e

Below is the step by step algorithm to solve the problem using TreeSet in Java:
Sort all the jobs according to their respective profits in decreasing order.Create a TreeSet and insert all the integers from 0 to n-1.Traverse the array of jobs and for ith jobSearch for a time slot ‘x’ in the TreeSet with maximum value which is less than the deadline of the ith job.If any value exists then include that job in the answer and remove ‘x’ from the TreeSetElse check for the remaining jobs.
Sort all the jobs according to their respective profits in decreasing order.
Create a TreeSet and insert all the integers from 0 to n-1.
Traverse the array of jobs and for ith jobSearch for a time slot ‘x’ in the TreeSet with maximum value which is less than the deadline of the ith job.If any value exists then include that job in the answer and remove ‘x’ from the TreeSetElse check for the remaining jobs.
Search for a time slot ‘x’ in the TreeSet with maximum value which is less than the deadline of the ith job.
If any value exists then include that job in the answer and remove ‘x’ from the TreeSet
Else check for the remaining jobs.
Below is the implementation of the above algorithm:
import java.io.*;import java.util.*;  public class Solution {          // Job class    public static class Job {        char id;        int deadline;        int profit;          // Constructor        Job(char id, int deadline, int profit)        {            this.id = id;            this.deadline = deadline;            this.profit = profit;        }    }      public static class Sorted implements Comparator {                  // Function to implement comparator        public int compare(Object o1, Object o2)        {            Job j1 = (Job)o1;            Job j2 = (Job)o2;              if (j1.profit != j2.profit)                return j2.profit - j1.profit;            else                return j2.deadline - j1.deadline;        }    }          // Function to print job scheduling    public static void printJobScheduling(Job jobs[], int n)    {        // Creating object of Sorted class        Sorted sorter = new Sorted();                  Arrays.sort(jobs, sorter);              // Creating TreeSet Object        TreeSet<Integer> ts = new TreeSet<>();          for (int i = 0; i < n; i++)            ts.add(i);          for (int i = 0; i < n; i++) {            Integer x = ts.floor(jobs[i].deadline - 1);              if (x != null) {                System.out.print(jobs[i].id + " ");                ts.remove(x);            }        }    }          // Driver Code    public static void main(String[] args)    {        int n = 5;        Job[] jobs = new Job[n];          jobs[0] = new Job('a', 2, 100);        jobs[1] = new Job('b', 1, 19);        jobs[2] = new Job('c', 2, 27);        jobs[3] = new Job('d', 1, 25);        jobs[4] = new Job('e', 3, 15);          printJobScheduling(jobs, n);    }    // Contributed by Dipesh Jain (dipesh_jain)}
Time Complexity: O(N*log(N))Auxiliary Space: O(N)
Java-Collections
Java-Set-Programs
java-treeset
Java
Java
Java-Collections
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
Stream In Java
Introduction to Java
Constructors in Java
Exceptions in Java
Generics in Java
Functional Interfaces in Java
Strings in Java
Java Programming Examples
Abstraction in Java
HashSet in Java