算法第5章上机实践

  1. 实践题目 :工作分配问题

  2. 问题描述

    7-2 工作分配问题 (20 分)

    设有n件工作分配给n个人。将工作i分配给第j个人所需的费用为cij 。 设计一个算法,对于给定的工作费用,为每一个人都分配1 件不同的工作,并使总费用达到最小。

    输入格式:

    输入数据的第一行有1 个正整数n (1≤n≤20)。接下来的n行,每行n个数,表示工作费用。

    输出格式:

    将计算出的最小总费用输出到屏幕。

    输入样例:

    在这里给出一组输入。例如:

    3
    10 2 3
    2 3 4
    3 4 5
    

    输出样例:

    在这里给出相应的输出。例如:

    9
  3. 算法描述(包括解空间,画出测试样例的解空间树,剪枝(约束函数或限界函数)方法描述)
    首先,分析这个问题的解空间,假设有工作人员(A1,A2,A3……An),有工作1,2,3……n,先给A1分配工作的方案有(1,2,3……n)一共n种,然后给A2分配工作,分配方案就有除去已经分配给A1的工作的剩下n-1种分配方案,以此类推。
    因此画出它的解空间树:

    剪枝函数如下所示:

                    if(curPay < MinPay) {
                      backtrack(t+1);
                    }
  4. 心得体会(对本次实践收获及疑惑进行总结)
    第一题一开始没有考虑到要按照单位价值从高到低先进行一个排序,导致最后两个答案一直超时,最后认真回想了一下老师上课讲的内容才想起来要按照单位价值进行一个排序,并且利用bound函数进行箭枝。通过这次实验我认识到了,在使用回溯法的时候不光只是考虑要怎么对解空间进行回溯,更加重要的是为了效率,应该适当的对某些地方进行剪枝操作。

posted @ 2018-12-22 10:30  张钧彦  阅读(194)  评论(0)    收藏  举报