有4个工人,要指派他们分别完成4项工作,每人做各项工作所消耗的时间如表
问指派哪个人去完成哪项工作,可使总的消耗时间为最小?
PS:用匈牙利算法来说明。
1、以各个员工完成各项任务的时间构造矩阵一。
15 18 21 24
19 23 22 18
26 17 16 19
19 21 23 17
2、对矩阵一进行行约减,即每一行数据减去本行数据中的最小数,得矩阵二。
0 3 6 9
1 5 4 0
10 1 0 3
2 4 6 0
3、检查矩阵二,若矩阵二各行各列均有“0”,则跳过此步,否则进行列约减,即每一列数据减去本列数据中的最小数,本侧属于后一种情况,经变换得矩阵三。
0 2 6 9
1 4 4 0
10 0 0 3
2 3 6 0
4、画“盖0”线。即画最少的线将矩阵三中的0全部覆盖住,得矩阵操作技巧:从含“0”最多的行或列开始画“盖0”线。
5、数据转换。若“盖0”线的数目等于矩阵的维数则直接跳到第七步,若“盖0”线得数目小于矩阵得维数则进行数据转换,本例属于后一种情况,应进行转换,操作步骤如下:
(1)找出未被“盖0”线覆盖的数中的最小值.=1,例中A=1。
(2)将未被“盖0”线覆盖住的数减去。
(3)将“盖0”线交叉点的数加上A。
0 0 4 10
0 1 1 0
12 0 0 6
1 0 3 0
6、重复第4步和第5步,直到“盖0”线的数目等于矩阵的维数。本例最终矩阵见矩阵六。
0 0 4 10
0 1 1 0
12 0 0 6
1 0 3 0
7、求最优解。对竹维矩阵,找出不同行、不同列的竹个“0”,每个“0”的位置代表一对配置关系,具体步骤如下:
(1)先找只含有一个“0”的行(或列),将该行(或列)中的“0”打
“√”。
(2)将带“√”的“0”所在列(或行)中的“0”打“×”。
(3)重复(1)步和(2)步至结束。若所有行列均含有多个“0”,则从“0”的数目最少的行或列中任选一个“0”打“√”。
0√ 0× 4 10
0× 1 1 0√
12 0× 0√ 6
1 0√ 3 0×
所以:消耗时间最小: A B C D
甲 15
乙 18
丙 16
丁 21