回溯算法_ BackTracking
目前还存在的疑问:
1. 所谓的该分支满足条件之后就回退到上一层节点,可是加谁呢? x[i+1] ??
加到 N, 不满足target sum条件就返回上一级(同时改变上一级数为 i+1...纵向继续从 i+1 加到++ N中间有满足的sum就返回组合,没有就一直加到N 自动结束,结束后再返回上一级 i+1。。。。。)
2. 可以通过提前排序的方法来优化这个算法
we can improve the above algorithm by strengthening the constraint checks and presorting the data;By sorting the initial array, we need not to consider rest of the array, once the sum so far is greater than target number. We can backtrack and check other possibilities.
3. Geek案例用的是后续遍历?
post order traversal
总感觉 37行这里不对:不应该是减去 sum - s[ite], 应为在 47行加过 1 了 i+1 ?????????????????????????
38行这个 唯一的return我表示很费解?他前面的递归调用函数怎么走呢???
我一定要在java代码里把下面改为ite-1 否则怎么都解释不通:




对的,因为 ite 和 i+1就是再同一个参数位置:



1. 看上图好像只有subset sum 符合条件采取增加节点:ite 而且直接return了,不再继续找子集?
2. 关于这可二叉树的解释:
2.1
n the above tree, a node represents function call and a branch represents candidate element.
从下图可以看出来,横向是把s里的元素挨个走一遍,depth纵向是不断增加 subset里的元素个数,直到把set 里的所有元素都加入subset,即使我们知道越加越大已经超过了 target sum

if( target_sum == sum )
    {
        // We found subset
        printSubset(t, t_size);
        // Exclude previously added item and consider next candidate,减去这个符合条件的元素,再选后面的元素肯定就不止俩元素了
        subset_sum(s, t, s_size, t_size-1, sum - s[ite], ite + 1, target_sum); //ite+1就是第二层横向扩节点?是不是每多一个节点就进行下一个子集组合
        return;
    }
我理解这是退回上一层, subset size退回上一级,可是元素s[i] 是怎么挪动的?如下图理解:

下图i+1有疑问:我就是认为这个t_size不应该+1 , 因为刚才已经回退了一层呀??!!不对我理解错了,人家这样是对的;
我的新发现:那就是横向和纵向扩展其实都是在加s[i], 也就是s 里所有的元素都要试一遍,加到最后一个元素。注意那个for循环,我所考虑的,如果一个分支加到最后一个元素还是得不到target sum,那么就结束了for循环, 也不输出什么,也不return.....随着循环的结束而结束程序。。。

回溯算法_ BackTracking的更多相关文章
- Java求解迷宫问题:栈与回溯算法
		
摘要: 使用栈的数据结构及相应的回溯算法实现迷宫创建及求解,带点JavaGUI 的基础知识. 难度: 中级 迷宫问题是栈的典型应用,栈通常也与回溯算法连用. 回溯算法的基本描述是: (1) 选择一个 ...
 - 回溯算法——解决n皇后问题
		
所谓回溯(backtracking)是通过系统地搜索求解问题的方法.这种方法适用于类似于八皇后这样的问题:求得问题的一个解比较困难,但是检查一个棋局是否构成解很容易. 不多说,放上n皇后的回溯问题代码 ...
 - LeetCode37 使用回溯算法实现解数独,详解剪枝优化
		
本文始发于个人公众号:TechFlow,原创不易,求个关注 数独是一个老少咸宜的益智游戏,一直有很多拥趸.但是有没有想过,数独游戏是怎么创造出来的呢?当然我们可以每一关都人工设置,但是显然这工作量非常 ...
 - LeetCode46 回溯算法求全排列,这次是真全排列
		
本文始发于个人公众号:TechFlow,原创不易,求个关注 今天是LeetCode的26篇文章,我们来实战一下全排列问题. 在之前的文章当中,我们讲过八皇后.回溯法,也提到了全排列,但是毕竟没有真正写 ...
 - LeetCode通关:连刷十四题,回溯算法完全攻略
		
刷题路线:https://github.com/youngyangyang04/leetcode-master 大家好,我是被算法题虐到泪流满面的老三,只能靠发发文章给自己打气! 这一节,我们来看看回 ...
 - 3、回溯算法解题套路框架——Go语言版
		
前情提示:Go语言学习者.本文参考https://labuladong.gitee.io/algo,代码自己参考抒写,若有不妥之处,感谢指正 关于golang算法文章,为了便于下载和整理,都已开源放在 ...
 - 46. Permutations 回溯算法
		
https://leetcode.com/problems/permutations/ 求数列的所有排列组合.思路很清晰,将后面每一个元素依次同第一个元素交换,然后递归求接下来的(n-1)个元素的全排 ...
 - ACM/ICPC 之 最长公共子序列计数及其回溯算法(51Nod-1006(最长公共子序列))
		
这道题被51Nod定为基础题(这要求有点高啊),我感觉应该可以算作一级或者二级题目,主要原因不是动态规划的状态转移方程的问题,而是需要理解最后的回溯算法. 题目大意:找到两个字符串中最长的子序列,子序 ...
 - c语言数据结构:递归的替代-------回溯算法
		
1.要理解回溯就必须清楚递归的定义和过程. 递归算法的非递归形式可采用回溯算法.主要考虑的问题在于: 怎样算完整的一轮操作. 执行的操作过程中怎样保存当前的状态以确保以后回溯访问. 怎样返回至上一次未 ...
 
随机推荐
- Python Django orm操作数据库笔记之QuerySet API
			
什么时候Django会将QuerySet转换为SQL去执行: 根据Django的数据库机制,对于QuerySet来说,当QuerySet被第一次构建,然后又调用他的filter方法,接着在对其进行切片 ...
 - Python小练习(一)
			
1:有一个列表,其中包括10个元素,例如这个列表是[1,2,3,4,5,6,7,8,9,0],要求将列表中的每个元素一次向前移动一个位置,第一个元素到列表的最后,然后输出这个列表.最终样式是[2,3, ...
 - ubuntu18.04 apt-get换国内源 阿里源 163源 清华源 中科大源
			
服务器上安装了最新的Ubuntu Server 18.04,代号为bionic.使用apt-get命令安装软件时,有时候速度比较慢,有时候会失败.因此考虑用国内的镜像源更换下apt-get的默认源. ...
 - 微信支付,退款时,出现了内部错误-网站中X509Certificate2加载证书时出错
			
今天给阿里云,虚拟主机 网站配置了加密证书文件,用类X509Certificate2加载证书文件时,一直报出现了内部错误,但是Demo中用控制台程序加载证书没任何问题 读取证书文件的语句: X509C ...
 - Redis 总结精讲 看一篇成高手系统-4
			
本文围绕以下几点进行阐述 1.为什么使用redis2.使用redis有什么缺点3.单线程的redis为什么这么快4.redis的数据类型,以及每种数据类型的使用场景5.redis的过期策略以及内存淘汰 ...
 - 关于bit,bin文件的一些研究
			
关于bit,bin文件的一些研究 bit文件里面有head information 但bin文件里面并不包含 bit 文件里面包含如下信息 SPI flash 时钟需要用到的源语 watchdog 设 ...
 - 如何将maven的jar项目简单快速的转变成war项目
			
第一种方法: 首先在pom文件中的version标签下下方加入 <packaging>war</packaging>标签 然后右键项目 Java EE Tools 选择 Gen ...
 - Batch Close process
			
@echo offecho.rem Kill all chrome drivertaskkill /im chromedriver.exe /f pause
 - 过滤器手动注入Service Bean方法
			
@Override public void init(FilterConfig arg0) throws ServletException { ServletContext servletContex ...
 - base64 压缩上传上传图片
			
@{ ViewBag.Title = "dddddddd"; Layout = "~/Areas/Wap/Views/Shared/_Head.cshtml"; ...