标签:bsp 复杂 表示 空间 jpg amp 剪枝算法 回溯法 约束
1.实践题目
工作分配问题
2.问题描述
设有n件工作分配给n个人。将工作i分配给第j个人所需的费用为cij 。 设计一个算法,对于给定的工作费用,为每一个人都分配1 件不同的工作,并使总费用达到最小。
3.算法描述(包括解空间,画出测试样例的解空间树,剪枝(约束函数或限界函数)方法描述)
如图所示,解空间是一个排列树,用一个二维数组a[i][j]表示第工作i分配给第j个人所需要的费用,第i层表示第i个任务,每个任务有n个分支。剪枝的约束条件是,如果该工人已经被分配了任务,则不用再安排,利用一个数组x[i]来表示是否分配了任务,如果分配了任务则x[i]=1,不可继续安排,bc表示费用最少值,c表示当前费用,如果当前费用大于最优费用,那么也不用继续向下遍历。
void backstrack(int t){ if(t>n){ if(c<bc) bc=c; return; } for(int i=1;i<=n;i++){ if(x[i]!=1&&bc>c){ x[i]=1; c+=a[t][i]; backstrack(t+1); c-=a[t][i]; x[i]=0; } } }
4.心得体会(对本次实践收获及疑惑进行总结)
这次实践之前对回溯法的概念理解的还不够清晰,所以队友带我打了一次实践,让我终于体会到回溯法如何去实现,一开始想到的是用旅行售货员类似的思路来解,但一直想不出结果,后来把图画了出来思路就清晰了,然后剪枝算法也比较容易想,就把这道题打了出来,第一道0-1背包的问题老师有讲过,问题在于如何选择最好的,队友想到将各个物品以单位价值排序,这样一来,剪枝也变得很容易,让我更加惊叹回溯法的神奇,通过这次实践,我觉得回溯法也并没有想象中那么复杂。
标签:bsp 复杂 表示 空间 jpg amp 剪枝算法 回溯法 约束
原文地址:https://www.cnblogs.com/Lzyyy/p/10170263.html