IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> zlatan的算法笔记1.1--回溯中的组合问题(力扣77题)【对于剪枝的理解】 -> 正文阅读

[数据结构与算法]zlatan的算法笔记1.1--回溯中的组合问题(力扣77题)【对于剪枝的理解】

算法笔记1.1

本次内容是对于上次的组合问题进行的优化操作,优化的方法称之为剪枝,字面意思就是省去一些没有必要的操作,从而提高效率。

剪枝

在组合问题当中,我们在取节点的时候我们要注意一个问题,在同一层且取数不重复的情况下,假设我们的n = 4,数组为【1,2,3,4】,如果我们一开始取的数为1,那之后在分支上再取就要在2,3,4当中选,同理我们先取2,在它的分支我们就只能取3,4,这是为了让组合不重复。

回到题目里,当k = 2的时候,不好体现剪枝的作用,所以选取k = 3的情况。从下图可以看出来,有些元素组合的k不满3,很多遍历都是没有意义的,那么优化掉这些不必要的分支是不是就可以提高效率。
请添加图片描述上节谈到树的宽度表示集合的大小,深度表示递归的深度,我们每次剪枝的地方就处于递归过程当中每层for循环的起始位置,那么就可以理解为,如果我们改变for循环中i的条件,是不是就可以就此实现剪枝操作本身。

优化过程

1.找到已经选好的元素个数:原本条件为i <= n,n为元素总个数,已经选好的元素个数就是指在path数组当中被push进去的内容,个数就是path数组的大小,即path.size()。
2.还有没选择过的元素个数:题目要求k个数的组合,没有被选择的元素个数是不是要求个数减去已经选择个数,即k-path.size()。
3.在整个集合当中要在起始位置进行遍历:拿元素总个数n减去未选择过的元素个数即可,n-(k-path.size()),这里就会出现问题,如果就这样设置条件可以发现最后得到的结果会缺少组合,这里是因为没有将初始位置的条件考虑在内,如果不理解可以自行去选择n与k代入式子中就可以理解,所以要在后面+1,就变为了n-(k-path.size())+1

代码部分

for(int i=startIndex; i<=n-(k-path.size())+1; i++){
            path.push_back(i);
            backtracking(n, k, i+1);
            path.pop_back();
        }
    }

总结

剪枝操作比较灵活,面对不一样的题目,考虑的点也会有所不同,但剪枝操作一般会在for循环中i的范围当中去操作,可以让我们更好地提前锁定范围,剩下的部分可能就需要通过题目的积累去慢慢完善本部分的内容,相应的视频讲解为组合剪枝优化,希望大家也能理解题目,有所收获,变得更强!

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2022-10-17 12:59:49  更:2022-10-17 13:03:32 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 19:42:03-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码