视频来源:代码随想录

https://www.bilibili.com/video/BV1cy4y167mM

(递归函数)/(回溯函数):回溯就是递归的过程

回溯搜索法:是纯暴力搜索

例如:

  1. 组合问题:求字符串1234中的所有大小为2的组合
  2. 切割问题:求字符串特定切割(成回文子串)方法数量
  3. 子集问题:求字符串1234中所有的子集
  4. 排列问题:求字符串1234有顺序的排列
  5. 棋盘问题: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。

代码思路:

  1. 确定递归函数参数返回值
  2. 确定终止条件
  3. 单层递归逻辑

伪代码:

# 一维数组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()}
}

回溯算法及其剪枝优化修改----学习笔记相关推荐

  1. 从零开始带你成为MySQL实战优化高手学习笔记(一)

    重复是有必要的. 很多新入职的小朋友可能和现在的我一样,对数据库的了解仅仅停留在建库建表增删改查这些操作,日常工作也都是用封装好的代码,别说底层原理了,数据库和系统之间是如何工作都不是很懂. 长此以往 ...

  2. Linux性能优化实战学习笔记:第四十六讲=====实战分析

    Linux性能优化实战学习笔记:第四十六讲 一.上节回顾 不知不觉,我们已经学完了整个专栏的四大基础模块,即 CPU.内存.文件系统和磁盘 I/O.以及网络的性能分析和优化.相信你已经掌握了这些基础模 ...

  3. Linux性能优化实战学习笔记:第十讲==中断

    Linux性能优化实战学习笔记:第十讲 一.坏境准备 1.拓扑图 2.安装包 在第9节的基础上 在VM2上安装hping3依奈包 ? 1 2 3 4 5 6 7 wget http://www.tcp ...

  4. (java)玩转算法系列-数据结构精讲[学习笔记](一)不要小瞧数组

    前言: 课程:玩转算法系列–数据结构精讲 更适合0算法基础入门到进阶(java版) 此处是个人学习笔记,用作回顾用途 不要小瞧数组 1.使用java中的数组 Main.java: public cla ...

  5. Apriori算法python实现(数据挖掘学习笔记)

    目录 1.算法伪代码 2.算法代码 3.测试数据 4.结果 1.算法伪代码 输入:事务数据库D:最小支持度阈值. 输出:D中的频繁项集L. 方法:  L1 = find_frequent_1_item ...

  6. 递归与回溯5:剪枝优化

    我们说过,回溯法虽然是暴力搜索,但也有时候可以有点剪枝优化一下的,主要就是去掉那些不必要的递归,从而提高执行效率.例如假如有五个男孩子都和一个女生说要厮守终生.她会和这五个人都先过一辈子再确定谁会真正 ...

  7. java算法优化_Java学习笔记---Java简单的代码算法优化(例)

    例:用一张1元纸币兑换1分.2分.5分硬币,要求兑换50枚硬币,求出所有组合. package mypackage01; public class demo { public static void ...

  8. c语言算法有效性,BerForest—C语言学习笔记-《算法》

    这是我学习C语言的笔记,也可以算是回忆录,反正有利于我的学习,也可以让C语言的新手借鉴. 许多人都在盲目的学习编程,其实学习编程无为就是学习一些编程语法.即使学会了,也不一定能够自己独立的编写出程序了 ...

  9. 数据库优化(学习笔记)

    前言: 数据库优化确实是比较重要的板块,也是面试数据开发岗位几乎必考的面试题. 本菜鸡这学期学了一门数据库相关课<Data Storing and Retrieving>,字面意思理解也就 ...

最新文章

  1. vim中权限不足时不用退出而强制保存
  2. python字符串/元组/列表/字典互转
  3. win7下如何开启远程桌面服务
  4. 在linux kernel中netlink的使用示例
  5. 【vulnhub】靶机- [DC系列]DC9(附靶机))
  6. 配置Nginx来支持php
  7. 第一部分 Java:面向对象理解
  8. java 图类_Java集合类,一张图说清楚!
  9. 新增一个主键自增长_使用技巧之——MyBatis如何返回插入主键
  10. vector中resize()和reserve()区别
  11. PrintStream 打印流、System 剖析、Java 16 进制转换
  12. JMeter脚本录制-快速上手篇
  13. 网站支付宝登录授权具体实现
  14. 【企业微信】自建应用可信域名验证
  15. 基于STM32L432KC,通过RT-Thread Studio打造一个迷你时钟
  16. Microsoft Teams安装教程
  17. iPhone/iPad屏幕投屏镜像到PC或Mac上面教程分享
  18. Android强制在主线程进行网络请求
  19. 纯css打造超能陆战队--大白
  20. 51单片机实战教程(六 网线测试治具设计)

热门文章

  1. 跟hoowa学做智能路由(五):熟悉OpenWRT
  2. python简单数据类型变量_(八)python的简单数据类型和变量
  3. 全网都在申请的微信支付零花钱是什么?一文让你读懂,附带申请入口
  4. Unity Hub安装及安装许可证
  5. emo服务器未响应,Dota2:这也能扯到Ame身上?Emo被kaka整蛊后感慨:Ame来就宰了!...
  6. 知识图谱实战案例完全剖析(附完整源码和数据集)-张子良-专题视频课程
  7. 如何更换电脑背景图片?这样做很简单!
  8. 【北交所周报】北证50上线首日开门红上涨2.55%;半数个股下跌,次新股海能技术大涨32.58%;...
  9. 原来论文排版还有这样的学问
  10. Word文件中嵌入的Visio文件显示为unknown对象解决方式