代码改变世界

算法第5章上机实践报告

2018-12-23 19:53  秤字逃  阅读(161)  评论(0编辑  收藏  举报

一、实践题目

  工作分配问题

 

二、问题描述

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

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

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

 

三、算法描述

  问题的解空间如下:

  剪枝方法:我们将当前最优解记为bestp,当前的工资记为tmp,如果我们加上下一个工人的工资 w 有tmp + w > bestp,则无需继续进行。

 

四、心得体会

  在解决这个问题时一开始并没有使用排列树的方法,而是使用解决 n 后问题的方法,代码比较简单,也通过了。在老师提醒使用排列树后思考了一下,觉得确实使用排列树的效率会高一点,因为如果用自己那种比较暴力的方法可能在某一层的搜索上画比较多的时间。所以虽然都是回溯法,但是思想的不同也会造成效率的差异。