算法设计思想之“回溯算法”

  • 回溯算法是什么?
  • 什么问题适合用回溯算法解决?
  • 适合回溯算法解决的问题
  • 全排列
  • LeetCode:46.全排列
  • LeetCode:78.子集
  • 思考题
  • 回顾

回溯算法是什么?

回溯算法是算法设计中的一种方法
回溯算法是一种渐进式寻找并构建问题解决方式的策略
回溯算法会先从一个可能的动作开始解决问题,如果不行,就回溯并选择另一个动作,直到问题解决
有点类似鬼吹灯之寻龙诀,探险会碰到很多路,只能一条条试,不通就返回选择另一条路

什么问题适合用回溯算法解决?

有很多路
这些路里,有死路,也有出路
通常需要递归来模拟所有的路

适合回溯算法解决的问题

全排列
子集

全排列

用递归模拟出所有情况
遇到包含重复元素的情况,就回溯
收集所有到达递归终点的情况,并返回

LeetCode:46.全排列


解题思路
要求:1、所有排列情况;2、没有重复元素
有出路、有死路
考虑使用回溯算法
解题步骤
用递归模拟出所有情况
遇到包含重复元素的情况,就回溯
收集所有到达递归终点的情况,并返回

时间复杂度:O(n!),n!=123*…*(n-1)*n
空间复杂度:O(n)

LeetCode:78.子集


解题思路
要求:1、所有子集;2、没有重复元素
有出路、有死路
考虑使用回溯算法
解题步骤
用递归模拟出所有情况
保证接的数字都是后面的数字
收集所有到达递归终点的情况,并返回

时间复杂度:O(2^N),因为每个元素都有两种可能(存在或不存在)
空间复杂度:O(N)

思考题

1、说出回溯算法的套路步骤。
2、用回溯算法的套路步骤,描述走迷宫的过程,无需Coding。

回顾

数据结构:栈、队列、链表、集合、字典、树、图、堆
算法:链表/树/图的遍历、数组的排序和搜索…
算法设计思想:分而治之、动态规划、贪心。回溯
重点难点
数据结构:所有数据结构都很重要,跟前端最相关的是链表和树
算法:链表/树/图的遍历、数组的排序和搜索…
设计思想:分而治之、动态规划较常考,贪心、回溯次之
经验心得
搞清楚数据结构与算法的特点和应用场景
用JS实现一遍,最好能用第二第三语言再实现一遍
学会分析时间/空间复杂度
提炼前端和算法的结合点,用于工作实战
拓展建议
多刷题,最好能保证300道以上
多总结各种套路、模板
多阅读源码,比如React、Lodash、V8
多实战,将数据结构与算法用于工作

(十五)算法设计思想之“回溯算法”相关推荐

  1. (十四)算法设计思想之“贪心算法”

    算法设计思想之"贪心算法" 贪心算法是什么 LeetCode:455.分饼干 LeetCode:122.买卖股票的最佳时机II 思考题 贪心算法是什么 贪心算法是算法设计中的一种方 ...

  2. (十二)算法设计思想之“分而治之”

    算法设计思想之"分而治之" 分而治之是是什么 场景一:归并排序 场景二:快速排序 LeetCode:374.猜数字大小 LeetCode:226.翻转二叉树 LeetCode:10 ...

  3. 算法分析与设计-实验四 回溯算法设计

    文章目录 1.0-1背包问题 2.旅行售货员问题 3.图的m着色问题 一.实验目的: 掌握用回溯法解题的算法框架:根据回溯法解决实际问题. 二.实验所用仪器及环境 Windows 7 以上操作系统,P ...

  4. 极客时间——数据结构与算法(39) 回溯算法:从电影《蝴蝶效应》中学习回溯算法的核心思想

    转载地址:https://time.geekbang.org/column/article/74287 我们在第 31 节提到,深度优先搜索算法利用的是回溯算法思想.这个算法思想非常简单,但是应用却非 ...

  5. (十三)算法设计思想之“动态规划”

    算法设计思想之"动态规划" 动态规划是什么? 动态规划的步骤 LeetCode:70.爬楼梯 LeetCode:198.打家劫舍 思考题 动态规划是什么? 动态规划是算法设计中的一 ...

  6. JAVA算法:走迷宫回溯算法设计(JAVA版本)

    JAVA算法:走迷宫回溯算法设计(JAVA版本) 迷宫数组 int[][] maze = {                 {0, 1, 0, 0, 0},                 {0, ...

  7. 算法设计与分析_[04] 天牛须算法设计思想分析

    原文链接: https://arxiv.org/abs/1710.10724​arxiv.org 算法实现: 首先,初始化参数 ,分别代表初始解,初始的搜索范围,以及更新步长,且通过原文我们知道: 在 ...

  8. 算法设计之五大常用算法设计方法总结

    算法设计之五大常用算法设计方法总结 一.[分治法] 在计算机科学中,分治法是一种很重要的算法.字面上的解释是"分而治之",就是把一个复杂的问题分成两个或更多的相同或相似的子问题,再 ...

  9. 计算机算法设计与分析读后感,算法设计与分析基础经典读后感有感

    <算法设计与分析基础>是一本由Anany levitin著作,清华大学出版社出版的胶版纸图书,本书定价:49.00元,页数:409,特精心从网络上整理的一些读者的读后感,希望对大家能有帮助 ...

最新文章

  1. 对话高通孟樸:5G发展离不开中国,高通坚定pick全球化
  2. python小结价格_036 Python进阶小结
  3. 使用LiveGBS将GB28181流转成RTSP流上大屏
  4. C++学习之路 | PTA乙级—— 1026 程序运行时间(精简)
  5. 两组树形数据的比对_Python数据分析-可视化“大佬”之Seaborn
  6. 《基于Nginx的中间件架构》学习笔记---3.nginx的目录分析
  7. 如何安装JRE8.0.202
  8. IC卡CPU卡32位单片机S3系列接触式读写模块分类与性能攻略
  9. 蓝牙耳机连接笔记本声音卡顿解决办法
  10. apkg格式怎么打开_PDF文件怎么压缩?这里有几个小技巧~
  11. 网络流——基础,Dinic和Sap(Gap优化)算法
  12. Javascript 版万年历
  13. flutter pdf 插件使用
  14. 自动驾驶/机器人 SLAM算法 面经1
  15. tws蓝牙耳机哪个牌子好?2022蓝牙耳机排行榜
  16. AIWIN 心电图智能诊断Baseline【线上0.719】
  17. tcpcopy填坑实践。
  18. 【CC2530的点对点无线通讯开发(包含BasicRf协议栈、双击、长按、呼吸灯、跑马灯)】
  19. ubuntu ble c语言编程,Ubuntu通过蓝牙连手机上网
  20. Sentence-BERT 论文阅读

热门文章

  1. SQL实战篇:SQL优化问题
  2. 剑指offer 从头到尾打印链表
  3. python3爬虫初探(七)使用MySQL
  4. Akka并发编程——第六节:Actor模型(五)
  5. 如何计算Java对象所占内存的大小
  6. Java注解解析-搭建自己的注解处理器(CLASS注解使用篇)
  7. 深度学习表征的不合理有效性——从头开始构建图像搜索服务(一)
  8. python字符串讲解
  9. Go非阻塞channel的常见写法
  10. 内存监控及报警shell脚本