アルゴリズムの実装例としてジョンソンのアルゴリズムを取り上げる。
ジョンソンのアルゴリズムとは、 ある種のスケジューリングを行なう時のアルゴリズムである。 作業(ジョブ)は全部で N 種類ある。また、N 個の作業はすべて、2つの機械 X と Y によって、 X -> Y の順で加工されるものとする。 それぞれの作業の所要時間は異なる。 このとき、作業の最短時間はどのようになるかを求めるのがジョンソンのアルゴリズムである。
アルゴリズムは以下の通りである。 まず作業に対する機械の所要時間を表として表し、以下を繰り返す。
製品表は下の欄に入れること。 1行にそれぞれ機械X,Yに要する時間を入力する。区切りはスペースで表す。
「計算」ボタンをクリックすると、解の欄に最短時間を実現する作業の順序を表示する。 ただし、作業の種類は、左の欄の最上段から順に0,1,2, ... と番号をふったものである。 1行に入っている数字が2個所でない場合はエラーとなる。
ここまで来れば、あとは所要時間を求めるだけとなる。これは次のように考える。 機械 Y が k 番め(k = 1...N )の作業を開始できる時刻を SY(k)とする。この時刻は、
の遅いほう(早くないほう)になる。 機械 X が k 番めの作業を開始できる時刻は機械 X の k - 1 番目の作業が終了した時刻だから、 SY(k-1)と SY(k)のあいだには次の関係が成り立つ。
SY(k) = max(SX(k) , SX(k-1) + TY(k-1))
ここで TY(k-1)は、機械 Y の k - 1 番目の作業に要する時間を表す。
例 : 次のように入力する。
5 4 3 2 6 5 3 5 1 10
順序の欄には 4->3->2->0->1 と表示される。また、所要時間は 27 と計算される。
ジョンソンのアルゴリズムは、生産管理で有名である。たとえば、本位田・皆川:生産工学では「ジョンソン法」として紹介されている。
まりんきょ学問所 > JavaScript 手習い > ジョンソンのアルゴリズム