算法分析与设计-回溯法

19 篇文章 0 订阅
5 篇文章 0 订阅

在这里插入图片描述

一、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)以深度优先方式搜索解空间,并在搜索过程中用剪枝函数避免无效搜索。
在这里插入图片描述

感谢看到这里,需要帮助可以私信哈!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值