算法的原理:
範例:
有四位教授被分派開設四門課程,如何指派使所需的總準備時間為最小。已知個人對各課程之準備時間如下表所示:
|
課程1 |
課程2 |
課程3 |
課程4 |
教授A |
2 |
10 |
9 |
7 |
教授B |
15 |
4 |
14 |
8 |
教授C |
13 |
14 |
16 |
11 |
教授D |
4 |
15 |
13 |
9 |
解法:
Step 1. 在各列中找最小值,將該列中各元素檢去此值,對各行重複一次。
0 |
8 |
7 |
5 |
本列各減2 |
11 |
0 |
10 |
4 |
本列各減4 |
2 |
3 |
5 |
0 |
本列各減11 |
0 |
11 |
9 |
5 |
本列各減4 |
0 |
8 |
2 |
5 |
11 |
0 |
5 |
4 |
2 |
3 |
0 |
0 |
0 |
11 |
4 |
5 |
本欄各減0 |
本欄各減0 |
本欄各減5 |
本欄各減0 |
Step 2. 檢驗各列,對碰上之第一個零,做記號,同列或同欄的其他零則畫X (由零較少的列先做,可不依順序)
0 |
8 |
2 |
5 |
11 |
0 |
5 |
4 |
2 |
3 |
0 |
0 |
0 |
11 |
4 |
5 |
Step 3. 檢驗可否完成僅含零的完全指派,若不能,則畫出最少數目的垂直與水平的刪除線來包含所有的零至少一次。
0 |
8 |
2 |
5 |
11 |
0 |
5 |
4 |
2 |
3 |
0 |
0 |
0 |
11 |
4 |
5 |
Step 4. 找出未被畫線的元素中之最小值 K,將含有此些未被畫線的元素的各列所有元素減去K (Step 4.1),若造成負值,則將該欄加上K (Step 4.2)。形成新矩陣後回到Step 2.
Step 4.1
-2 |
6 |
0 |
3 |
11 |
0 |
5 |
4 |
2< |