算法分析与设计——回溯法实验报告

 

   算法导论  课程设计

 

 

题    目:    回 溯 法    

 

 

 

 

 

 

学院班级:        1613013        

学    号:      16130130216      

姓    名:        库 妍          

主讲教师        张立勇         

日    期:       2019.5.30        

 

 

 

 

 

 

 

一、0/1 Knapsack Problem

1、实验题目

运用回溯法实现实验3中的0/1背包问题

2、使用的算法

回溯法

3、算法分析与设计

利用回溯法试设计一个算法求出0-1背包问题的解,也就是求出一个解向量xi (即对n个物品放或不放的一种的方案) 其中, (xi = 0 或1,xi = 0表示物体i不放入背包,xi =1表示把物体i放入背包)。在递归函数Backtrack中:

i>n时,算法搜索至叶子结点,得到一个新的物品装包方案。此时算法适时更新当前的最优价值。    

i<n时,当前扩展结点位于排列树的第(i-1)层,此时算法选择下一个要安排的物品,以深度优先方式递归的对相应的子树进行搜索,对不满足上界约束的结点,则剪去相应的子树。

4、项目测试(功能与性能)

因为物品只有选与不选2个决策,而总共有n个物品,所以时间复杂度为O(2^n)。因为递归栈最多达到n层,而且存储所有物品的信息也只需要常数个一维数组,所以最终的空间复杂度为O(n)。

 

5、实验总结

0/1背包属于找最优解问题,用回溯法需要构造解的子集树。对于每一个物品i,对于该物品只有选与不选2个决策,总共有n个物品,可以顺序依次考虑每个物品,这样就形成了一棵解空间树:基本思想就是遍历这棵树,以枚举所有情况,最后进行判断,如果重量不超过背包容量,且价值最大的话,该方案就是最后的答案。

二、8-Queen problem

1、实验题目

用回溯法实现8-queen问题。

2、使用的算法

回溯法

3、算法分析与设计

1)使用一个一维数组表示皇后的位置,其中数组的下标表示皇后所在的行,数组元素的值表示皇后所在的列。

2)假设前n-1行的皇后已经按照规则排列好,那么可以使用回溯法逐个试出第n行皇后的合法位置, 所有皇后的初始位置都是第0列, 那么逐个尝试就是从0试到N-1,如果达到N,仍未找到合法位置, 那么就置当前行的皇后的位置为初始位置0,然后回退一行,且该行的皇后的位置加1,继续尝试, 如果目前处于第0行,还要再回退,说明此问题已再无解。

3)如果当前行的皇后的位置还是在0到N-1的合法范围内,那么首先要判断该行的皇后是否与前几行的皇后互相冲突,如果冲突,该行的皇后的位置加1,继续尝试,如果不冲突,判断下一行的皇后, 如果已经是最后一行,说明已经找到一个解,输出这个解,然后最后一行的皇后的位置加1,继续尝试下一个解。

4、项目测试(功能与性能)

 

5、实验总结

理解回溯法解题思路:

1)针对所给问题,定义问题的解空间;   
2)确定易于搜索的解空间结构;   
3)以深度优先方式搜索解空间,并在搜索过程中用剪枝函数避免无效搜索。

 

 

posted @ 2019-06-30 01:47  库妍  阅读(1448)  评论(0编辑  收藏  举报