递归、回溯、深度优先搜索(DFS)

1. 递归、回溯、深度优先搜索(DFS)之间的关系

深度优先搜索是递归实现的,是要搜索整个二叉树的,在这个搜索的基础上,而回溯算法建立在 DFS 基础之上的,但不同的是在搜索过程中,达到结束条件后,恢复状态,回溯上一层,再次搜索。

2.什么是递归

递归定义:在数学与计算机科学中,递归(Recursion)是指在函数的定义中使用函数自身的方法。
例如: 你打开面前这扇门,看到屋里面还有一扇门。你走过去,发现手中的钥匙还可以打开它,你推开门,发现里面还有一扇门,你继续打开它。若干次之后,你打开面前的门后,发现只有一间屋子,没有门了。然后,你开始原路返回,每走回一间屋子,你数一次,走到入口的时候,你可以回答出你到底用这你把钥匙打开了几扇门。
和什么是回溯

2.1 递归思想的内涵

正如上面所描述的场景,递归就是有去(递去)有回(归来)“有去” 是指:递归问题必须可以分解为若干个规模较小,与原问题形式相同的子问题,这些子问题可以用相同的解题思路来解决,就像上面例子中的钥匙可以打开后面所有门上的锁一样; “有回” 是指 : 这些问题的演化过程是一个从大到小,由近及远的过程,并且会有一个明确的终点(临界点),一旦到达了这个临界点,就不用再往更小、更远的地方走下去。最后,从这个临界点开始,原路返回到原点,原问题解决。
更直接地说,递归的基本思想就是把规模大的问题转化为规模小的相似的子问题来解决。 特别当遇到解决大问题和解决小问题往往是同一个方法,所以就产生了函数调用自身的情况,这也是递归的定义所在。注意,这个解决问题的函数必须有明确的结束条件,否则就会导致无限递归的情况。

3.什么是深度优先搜索

深度优先搜索的定义: 深度优先搜索属于图算法的一种,英文缩写为DFS。其过程简要来说是对每一个可能的分支路径深入到不能再深入为止,而且每个节点只能访问一次。
案列:https://www.jianshu.com/p/bff70b786bb6

3.什么是回溯

回溯定义: 回溯就是指当把问题分成若干步骤并递归求解时,如果当前步骤没有合法选择,则函数将返回上一级递归调用,这种现象称为回溯。正是因为这个原因,递归枚举算法常被称为回溯法,应用十分普遍。

例如:一个有序数列1,2,3,4,5,我要找和为5的所有集合,从前往后搜索我选了1,然后2,然后选3 的时候发现和已经大于预期,那么4,5肯定也不行,这就是一种对搜索过程的优化

参考

https://www.zhihu.com/question/31412436/answer/724915708

你可能感兴趣的:(数据结构与算法,深度优先,算法,图论)