🎯 什么是指派问题?
举个例子: 有n个人,n项任务 每个人做每项任务的成本(或时间)都不一样 你要一人干一活,把所有人派出去 问:怎么分配,总成本最低?
👉 这就是指派问题
直接枚举n种情况不现实(n=10就有300多万种)
所以要用匈牙利算法
🔍 匈牙利算法第一步:转化出零元素
目标:让矩阵的每一行、每一列都出现0
做法:
1、每行减去该行的最小值
2、每列减去该列的最小值
🔧 匈牙利算法第二步:试指派
目标:用已有的0,尽量给每个人分配一个任务
做法:
1、找只有一个0的行,把这个0圈起来(指派)
2、划掉该0所在列的其他0(同一列不能再派给别人)
3、重复,直到所有行处理完
那如果试指派不成功呢?下一节课为大家进行分享!