算法第5章上机实践

Posted lzyyy

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了算法第5章上机实践相关的知识,希望对你有一定的参考价值。

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章上机实践的主要内容,如果未能解决你的问题,请参考以下文章

算法第5章上机实践报告

算法第5章上机实践

算法第5章上机实践

算法第5章上机实践

算法第5章上机实践

算法第5章上机实践报告