算法学习---回溯算法(笔记总结+Leetcode题解析)

本文深入探讨了回溯算法的本质和应用,强调其作为一种穷举策略的不高效性,但同时指出在某些问题上的实用性。通过树形结构来抽象回溯法解决的问题,并提供了标准的算法框架。文章还以LeetCode的76组合和216组合求和为例,讲解如何利用回溯法进行问题求解,并提出了通过剪枝优化算法效率的方法。
摘要由CSDN通过智能技术生成

理论介绍

回溯算法的本质是穷举 这点非常重要 穷举就决定了这不是一个高效的算法

事实上有些问题能够通过暴力搜索求解出来就很不错了

我们穷举出所有可能情况 然后选出我们想要的答案

回溯法解决的问题都能够抽象成树形结构

算法框架

void backtracking(参数) {
    if (终止条件) {
        存放结果;
        return;
    }

    for (选择:本层集合中元素(树中节点孩子的数量就是集合的大小)) {
        处理节点;
        backtracking(路径,选择列表); // 递归
        回溯,撤销处理结果
    }
}

Leetcode例题

76 组合

216组合求和

题目很相似 画出回溯的树形图 然后根据问题实际情况 制定好相应的优化给树减枝即可

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值