DFS深度优先搜索说明

DFS : Depth First Search 不撞南墙不回头

  1. Bachtracking和Depth First Search和Generate bit Mask的区别

    Bachtracking:使用的是DFS方法,目的是求问题的解,如果在DFS过程中发现不是问题的解那么久回溯到上一个节点

    DFS:遍历整个搜索空间不管是否是问题的解

    Generate bit Mask:是DFS的一种替代实现方法

  2. 算法框架模板

result = []

def backtrac(路径,选择列表)
	if 满足条件:
        result.add(路径)
        return
    
    for 选择 in 选择路径:
        做选择
        backtrack(路径,选择列表)
        撤销选择
  1. 一般场景
    1. 模板dfs,mask举例dfs
    2. 外部空间dfs(用stack写成iterative way,for example tree traversal)
    3. dfs+memo(DP剪枝)
    4. 使用在模拟流程,寻找所有情况全排列解
  2. 经典例题

94 额外空间的DFS

78 直接backtracking模板,因为没有任何限制条件,所以遇到全部情况都放入res,注意tmp引用需要新建一个ArrayList<>()

90 有重复数字需要1 sort 2 每个重复数字只第一个进loop的时候加一次

46 没有重复数字,每次都从头开始取数字,已经有了就不要了,也可以用set来优化时间复杂度 T(n)=O(N!) list.contains()的时间复杂度是O(N),比较差

47 如果一个数值已经被用过了,才去加入队列,如果前边的相同值没有用过则跳过

77 相当于数学题4个小球取2个的取法
T ( n ) = C N k = N ! ( N − k ) ! k ! T(n)=C_N^k={{N!}\over{(N-k)!k!}} T(n)=CNk=(Nk)!k!N!

37 数独 sudoku solver 暴利尝试所有解,把有空的地方所有数字都试一遍

51 N皇后问题

  1. 总结

    优缺点:

    BFS:踊跃解决最短或者最少问题特别有效,而且寻找深度小,但缺点是比较耗内存(需要开大量的数组单元用来存储状态)

    DFS:对于解决遍历和求解所有问题有效解,对于问题搜索深度小的时候处理速度迅速,然而在深度很大的情况下效率不高

    DFS的优点

    内存开销小,每次只需维护一个节点

    能处理子节点较多或树层次过深的情况(相比BFS)

    一般用于解决连通性问题(是否有解)

    DFS的缺点

    只能寻找有解但无法找到最优解(寻找最优解需要遍历所有路径)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值