回溯算法思想及子集树

基础思想代码

解空间:所有解的可能取值构成的空间,一个解往往包括了得到这个解的每一步,往往就是对应解空间树中一条从根节点到叶子节点的路径。

算法思想:深度优先搜索的策略,从根节点出发深度搜索解空间树,包含继续,反之逐层相似回溯,。

代码举例

每一个解就相当于解空间树从根节点到叶子节点的路径,共有三层叶子,两次递归,所以有2的3次方个解,也就是8个。

假设我们不打印123,打印原始序列的子集,比如123的子集是1,2,3,12....

我们可以只打印第一次进递归的数,即只打印二叉树向左的枝条,我们可以建立一个条件数组,用于储存1,0,如果进入第一次递归,把对应位置的条件数组设为1,反之设为0,最后我们只打印1位置的数

整数选择问题

给定一组整数,从里面挑选出一组整数,让选择的整数的和,和剩下的整数的和的差最小

代码如下:

 

子集数可以求所有的子集,那我们可以在每次收集子集的时候把被抛弃的数也收集起来,然后每次回溯的时候相减,更新最小值,某次回溯最小的差就是解

这是核心代码,左孩子是要保存的数,所以加在sum中,在r中减去,右孩子是被舍弃的数,所以要从sum中删去,再把删的去加到r中。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值