Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion algorithm/category.json
Original file line number Diff line number Diff line change
Expand Up @@ -70,7 +70,8 @@
"etc": {
"name": "Uncategorized",
"list": {
"flood_fill": "Flood Fill"
"flood_fill": "Flood Fill",
"job_scheduling": "Job Scheduling Problem"
}
}
}
16 changes: 16 additions & 0 deletions algorithm/etc/job_scheduling/desc.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
{
"Job Scheduling Algorithm": "An array of jobs along with their deadline and profit (if job completes within deadline) where every job takes single unit of time. Maximize total profit if only one job can be scheduled at a time.",
"Applications": [

],
"Complexity": {
"time": " O(N<sup>2</sup>)",
"space": "O(N)"
},
"References": [
"<a href='http://ocw.mit.edu/courses/civil-and-environmental-engineering/1-204-computer-algorithms-in-systems-engineering-spring-2010/lecture-notes/MIT1_204S10_lec10.pdf'>mit.edu</a>"
],
"files": {
"job_scheduling": "Job Scheduling Algorithm"
}
}
54 changes: 54 additions & 0 deletions algorithm/etc/job_scheduling/job_scheduling/code.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
// sort according to decreasing order of profit
// Bubble sort implemented ... Implement a better algorithm for better performance
for ( var i = 0; i < N - 1; i++ ) {
for ( var j = 0; j < N - i - 1; j++ ) {
if ( profit[j] < profit[ j + 1 ] ) {
var temp = profit[j];
profit[j] = profit[j+1];
profit[j+1] = temp;
temp = deadline[j];
deadline[j] = deadline[j+1];
deadline[j+1] = temp;
var t = jobId[j];
jobId[j] = jobId[j+1];
jobId[j+1] = t;
}
}
}

var slot = new Array (N);
var result = new Array (N);
for (var i = N - 1; i >= 0; i--) {
result[i] = '-';
}
tracer._setData(jobId);
tracer1._setData(deadline);
tracer2._setData(profit);
tracer3._setData(result);

// Initialise all slots to free
for (var i = 0; i < N; i++ ) {
slot[i] = 0;
}

// Iterate through all the given jobs
for ( var i = 0; i < N; i++ ) {
/*
Start from the last possible slot.
Find a slot for the job
*/
tracer._select( i )._wait();
tracer1._select( i )._wait();
for ( var j = Math.min ( N, deadline[i]) - 1; j >= 0; j-- ) {
if ( slot[j] === 0 ) {
tracer3._notify( j, jobId[i] )._wait();
result[j] = jobId[i];
slot[j] = 1;
tracer3._denotify(j);
break;
}
}
tracer._deselect( i );
tracer1._deselect( i );
}

9 changes: 9 additions & 0 deletions algorithm/etc/job_scheduling/job_scheduling/data.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
var jobId = ['a','b','c','d','e'];
var deadline = [2,1,2,1,3];
var profit = [100,19,27,25,15];
var N = deadline.length;

var tracer3 = new Array1DTracer('Schedule');
var tracer = new Array1DTracer('Job Ids');
var tracer1 = new Array1DTracer('Deadlines');
var tracer2 = new Array1DTracer('Profit');