the jobs are given in an ordered list. Whenever a machine becomes available, the algorithm scans the list and assigns the first ready job to it. A job is ready if all its predecessors have already completed.
Algorithm
List rule
Given m identical machines and a fixed list L of jobs:
while (some job is unscheduled) { wait until some machine is available; scan L from left to right; choose the first unscheduled job j whose predecessors are complete; assign j to the available machine;}
The list order is arbitrary input to the algorithm. The approximation guarantee holds for every list.
Approximation
Approximation ratio
For P∣prec∣Cmax on m identical machines, Graham’s list scheduling algorithm produces a schedule with makespanCmax satisfying
Idle-time argument jx be the job that finishes last in the schedule produced by the algorithm. Let jx−1 be the predecessor of jx that finishes last. Continue backwards in the same way to obtain a chain
Let
j1≺j2≺⋯≺jx.
This chain is a precedence path, so every feasible schedule must process it in this order. Therefore
i=1∑xpji≤OPT.
Let y be the total time during the algorithm’s schedule in which at least one machine is idle. A machine can be idle only while some job on the chain is being processed. Otherwise, the next chain job would have been ready and the algorithm would have assigned it earlier. Hence
y≤i=1∑xpji≤OPT.
Let P=∑j∈Jpj be the total processing time. During the Cmax−y time units in which all machines are busy, mjobs are processed in parallel. During the remaining y time units, at least one machine may be idle. Equivalently, the average load per machine gives
Cmax≤y+m1(P−y)=y(1−m1)+mP.
Since every feasible schedule needs at least the average load,
mP≤OPT.
Together with y≤OPT, this yields
Cmax≤(1−m1)OPT+OPT=(2−m1)OPT.
Intuition
The proof separates the schedule into two kinds of time. Busy time is controlled by the total processing work P. Idle time is controlled by one precedence chain leading to the last job. Both quantities are lower bounds on the optimal makespan.
Complexity
With a priority queue of machine availability times and explicit predecessor counts, the algorithm can be implemented in polynomial time. The exact running time depends on how the ordered list and precedence graph are represented.