码迷,mamicode.com
首页 > 编程语言 > 详细

算法第5章上机实践

时间:2018-12-24 18:59:28      阅读:212      评论:0      收藏:0      [点我收藏+]

标签: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背包的问题老师有讲过,问题在于如何选择最好的,队友想到将各个物品以单位价值排序,这样一来,剪枝也变得很容易,让我更加惊叹回溯法的神奇,通过这次实践,我觉得回溯法也并没有想象中那么复杂。

算法第5章上机实践

标签:bsp   复杂   表示   空间   jpg   amp   剪枝算法   回溯法   约束   

原文地址:https://www.cnblogs.com/Lzyyy/p/10170263.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!