ListOptimum #
Graham's ω₀ is the optimum: for nonnegative lengths every assignment τ is matched or improved
by a list schedule
(helpers carry the prefix lo_). The order is the start times of τ with each machine's jobs
run back to back in index order, s j = loadBefore p τ j (τ j). In that order every list schedule
starts each job of
positive length no later than τ does (lo_core): if job k found every machine busy past s k, each machine would
carry an earlier job running at time s k; those m jobs run at s k under τ too, on m
distinct machines of τ,
one of them τ k, which overlaps k. Hence every list-schedule load is at most max_j (s j + p j) ≤ makespan p τ.
A machine whose load before k exceeds T ≥ 0 carries a job before k that is running at
time T.
In an order by nondecreasing times t that are the start times of a schedule ρ (no two jobs
of one machine of
ρ overlap), every list schedule starts each job of positive length no later than ρ does.
Every list schedule in such an order has makespan at most any bound C ≥ 0 on the completion
times t j + q j.
Graham's ω₀ is attained: for nonnegative lengths every assignment τ is matched or improved
by a list schedule
in some order (the jobs listed by their start times when each machine of τ runs its jobs in
index order).