回溯算法及其剪枝优化修改----学习笔记
视频来源:代码随想录
https://www.bilibili.com/video/BV1cy4y167mM
(递归函数)/(回溯函数):回溯就是递归的过程
回溯搜索法:是纯暴力搜索
例如:
- 组合问题:求字符串1234中的所有大小为2的组合
- 切割问题:求字符串特定切割(成回文子串)方法数量
- 子集问题:求字符串1234中所有的子集
- 排列问题:求字符串1234有顺序的排列
- 棋盘问题:N皇后、解数独等问题
思路:
一般都能看成N叉树
伪代码思路:
Void backtracking(){If (终止条件){搜集结果;return;}For(集合元素集){处理结点;递归函数;回溯操作;}return;
}
样题:
Leecode 77.组合
题目:给定字符串,求个数为k的所有组合
方法1:k重for循环
方法2:回溯算法
思路:使用二叉树。
取1,剩下234, 取2,得12;
取3,得13;
取4,得14;
取2,剩下34, 取3,得23;
取4,得24;
取3,剩下4, 取4,得34。
代码思路:
- 确定递归函数参数返回值
- 确定终止条件
- 单层递归逻辑
伪代码:
# 一维数组patch
# 二维数组result
# n维数组: 1234
# 组合长度k: 2
Void backtracking(n,k,startindex){If (patch.size==k){Return ;}For (I = startindex;i<=n;i++){Patch.push(i)backtracking(n,k,i+1)Patch.pop()}
}
回溯算法的剪枝:
当n=4,k=4时,题目二叉树变为了
单层搜索逻辑剪枝优化:
# 一维数组patch
# 二维数组result
# n维数组: 1234
# 组合长度k:4
Void backtracking(n,k,startindex){If (patch.size==k){Return ;}# n-(k-patch.size)+1 代表最多(即最极限)可以从数组哪个位置开始# n=4,k=3,得到值为2,即数组的第2个元素,但是这个地方注意由于push/pop的直接是i,不是i作为索引的数组值,所以使用+1且在for判断时使用<=,而不是<For (I = startindex;i<=n-(k-patch.size)+1;i++){Patch.push(i)backtracking(n,k,i+1)Patch.pop()}
}
回溯算法及其剪枝优化修改----学习笔记相关推荐
- 从零开始带你成为MySQL实战优化高手学习笔记(一)
重复是有必要的. 很多新入职的小朋友可能和现在的我一样,对数据库的了解仅仅停留在建库建表增删改查这些操作,日常工作也都是用封装好的代码,别说底层原理了,数据库和系统之间是如何工作都不是很懂. 长此以往 ...
- Linux性能优化实战学习笔记:第四十六讲=====实战分析
Linux性能优化实战学习笔记:第四十六讲 一.上节回顾 不知不觉,我们已经学完了整个专栏的四大基础模块,即 CPU.内存.文件系统和磁盘 I/O.以及网络的性能分析和优化.相信你已经掌握了这些基础模 ...
- Linux性能优化实战学习笔记:第十讲==中断
Linux性能优化实战学习笔记:第十讲 一.坏境准备 1.拓扑图 2.安装包 在第9节的基础上 在VM2上安装hping3依奈包 ? 1 2 3 4 5 6 7 wget http://www.tcp ...
- (java)玩转算法系列-数据结构精讲[学习笔记](一)不要小瞧数组
前言: 课程:玩转算法系列–数据结构精讲 更适合0算法基础入门到进阶(java版) 此处是个人学习笔记,用作回顾用途 不要小瞧数组 1.使用java中的数组 Main.java: public cla ...
- Apriori算法python实现(数据挖掘学习笔记)
目录 1.算法伪代码 2.算法代码 3.测试数据 4.结果 1.算法伪代码 输入:事务数据库D:最小支持度阈值. 输出:D中的频繁项集L. 方法: L1 = find_frequent_1_item ...
- 递归与回溯5:剪枝优化
我们说过,回溯法虽然是暴力搜索,但也有时候可以有点剪枝优化一下的,主要就是去掉那些不必要的递归,从而提高执行效率.例如假如有五个男孩子都和一个女生说要厮守终生.她会和这五个人都先过一辈子再确定谁会真正 ...
- java算法优化_Java学习笔记---Java简单的代码算法优化(例)
例:用一张1元纸币兑换1分.2分.5分硬币,要求兑换50枚硬币,求出所有组合. package mypackage01; public class demo { public static void ...
- c语言算法有效性,BerForest—C语言学习笔记-《算法》
这是我学习C语言的笔记,也可以算是回忆录,反正有利于我的学习,也可以让C语言的新手借鉴. 许多人都在盲目的学习编程,其实学习编程无为就是学习一些编程语法.即使学会了,也不一定能够自己独立的编写出程序了 ...
- 数据库优化(学习笔记)
前言: 数据库优化确实是比较重要的板块,也是面试数据开发岗位几乎必考的面试题. 本菜鸡这学期学了一门数据库相关课<Data Storing and Retrieving>,字面意思理解也就 ...
最新文章
- vim中权限不足时不用退出而强制保存
- python字符串/元组/列表/字典互转
- win7下如何开启远程桌面服务
- 在linux kernel中netlink的使用示例
- 【vulnhub】靶机- [DC系列]DC9(附靶机))
- 配置Nginx来支持php
- 第一部分 Java:面向对象理解
- java 图类_Java集合类,一张图说清楚!
- 新增一个主键自增长_使用技巧之——MyBatis如何返回插入主键
- vector中resize()和reserve()区别
- PrintStream 打印流、System 剖析、Java 16 进制转换
- JMeter脚本录制-快速上手篇
- 网站支付宝登录授权具体实现
- 【企业微信】自建应用可信域名验证
- 基于STM32L432KC,通过RT-Thread Studio打造一个迷你时钟
- Microsoft Teams安装教程
- iPhone/iPad屏幕投屏镜像到PC或Mac上面教程分享
- Android强制在主线程进行网络请求
- 纯css打造超能陆战队--大白
- 51单片机实战教程(六 网线测试治具设计)
热门文章
- 跟hoowa学做智能路由(五):熟悉OpenWRT
- python简单数据类型变量_(八)python的简单数据类型和变量
- 全网都在申请的微信支付零花钱是什么?一文让你读懂,附带申请入口
- Unity Hub安装及安装许可证
- emo服务器未响应,Dota2:这也能扯到Ame身上?Emo被kaka整蛊后感慨:Ame来就宰了!...
- 知识图谱实战案例完全剖析(附完整源码和数据集)-张子良-专题视频课程
- 如何更换电脑背景图片?这样做很简单!
- 【北交所周报】北证50上线首日开门红上涨2.55%;半数个股下跌,次新股海能技术大涨32.58%;...
- 原来论文排版还有这样的学问
- Word文件中嵌入的Visio文件显示为unknown对象解决方式