第五章实验报告
第五章实验报告
1. 实践题目 :
工作分配问题
2. 问题描述 :
设有n件工作分配给n个人,将工作i分配给第j个人所需的费用为cij,对于给定的工作费用,为每一个人都分配1 件不同的工作,设计一个算法,并使总费用达到最小。
3. 算法描述 :
1)解空间 : 其解空间为一颗排列树,类似于旅行售货员问题的解空间。
2)解空间树 : 当n = 3时,其解空间树如下
(A)
| 1
(B)
2 / 3| \ 4
(C) (D) (E)
3 / \ 4 2 / \ 4 2 / \ 3
(F) (G) (H) (I) (J) (K)
4 | | 3 4 | | 2 3 | | 2
(L) (M) (O) (P) (R) (S)
3)剪枝方法描述 :
for(int i=t; i<=n; i++){ if(bestf > nf){ //剪枝,仅当bestf > nf时才进入搜索,否则跳过 nf += fee[t][flag[i]]; swap(flag[t], flag[i]); Backtrack(t + 1); swap(flag[t], flag[i]); nf -= fee[t][flag[i]]; } }
4. 心得体会 :
个人认为回溯法比之前的章节要难,虽然看起来理解了,但是到真正实践的时候会发现思路并没有十分清晰。我的队友对于算法思路比较清晰,做起来也比较快。我觉得回溯法与之前的递归法最大的不同在于剪枝,通过剪枝函数的效率有大大提高。