首页 > 编程语言 >python coding with ChatGPT 打卡第23天| 回溯算法:理论基础

python coding with ChatGPT 打卡第23天| 回溯算法:理论基础

时间:2024-03-20 17:33:52浏览次数:32  
标签:问题 递归 23 python 个数 选择 回溯 穷举 打卡

文章目录

视频讲解

回溯算法理论篇

回溯是递归的副产品,只要有递归就会有回溯。

回溯法的效率

回溯的本质是穷举,穷举所有可能,然后选出我们想要的答案,如果想让回溯法高效一些,可以加一些剪枝的操作,但也改不了回溯法就是穷举的本质。

那么既然回溯法并不高效为什么还要用它呢?

因为没得选,一些问题能暴力搜出来就不错了,撑死了再剪枝一下,还没有更高效的解法。

解决的问题

回溯法,一般可以解决如下几种问题:

  • 组合问题:N个数里面按一定规则找出k个数的集合
  • 切割问题:一个字符串按一定规则有几种切割方式
  • 子集问题:一个N个数的集合里有多少符合条件的子集
  • 排列问题:N个数按一定规则全排列,有几种排列方式
  • 棋盘问题:N皇后,解数独等等

如何理解回溯法

回溯法解决的问题都可以抽象为树形结构,是的,我指的是所有回溯法的问题都可以抽象为树形结构!

因为回溯法解决的都是在集合中递归查找子集,集合的大小就构成了树的宽度,递归的深度,都构成的树的深度。

递归就要有终止条件,所以必然是一棵高度有限的树(N叉树)。

回溯框架

它的执行过程可以用以下步骤概括:

  • 选择:从可用选项中做出一个选择。
  • 约束:确定当前选择是否符合约束条件(即是否可行)。如果当前选择导致问题无解,则放弃这个选择,回退到上一步。
  • 目标:检查当前解决方案是否满足结束条件。如果满足,将其添加到解决方案集。

这个过程可以用递归实现,递归函数通常有这样的框架:

def backtrack(路径, 选择列表):
    if 满足结束条件:
        result.add(路径)
        return
    for 选择 in 选择列表:
        做选择
        backtrack(路径, 选择列表)
        撤销选择

在这里插入图片描述
大家可以从图中看出for循环可以理解是横向遍历,backtracking(递归)就是纵向遍历,这样就把这棵树全遍历完了,一般来说,搜索叶子节点就是找的其中一个结果了。

标签:问题,递归,23,python,个数,选择,回溯,穷举,打卡
From: https://blog.csdn.net/baidu_33000721/article/details/136852397

相关文章

  • 自学Python需要多久才能学会?
    这个问题很难给到一个具体的数字,Python的自学取决于Python的基础知识掌握程度,学习的意愿以及学习的能力。下面我们分布来看。有编程基础的人自学python需要多久?Python的语法时自学的关键,而python的语法和其他编程语言也是有很多相似之处的,比如条件判断和循环、字符串和集......
  • 【Python实用教程】使用Python快速查找电脑里的文件
    电脑随着使用时间的增加,我们在电脑中储存的文件变得越来越多。当这个时候你想要查找一个文件,但是又忘记了文件的位置在哪,想通过排序查找这个文件,又由于文件夹里面文件太多,根本找不到。如果使用电脑自带的搜索,时间又很长。那么在面对海量的存储文件,其实我们可以通过其实我......
  • 【Python使用】python高级进阶知识md总结第5篇:获取进程编号,1. 获取进程编号的目的【
    python高级进阶全知识知识笔记总结完整教程(附代码资料)主要内容讲述:操作系统,虚拟机软件,Ubuntu操作系统,Linux内核及发行版,查看目录命令,切换目录命令,绝对路径和相对路径,创建、删除文件及目录命令,复制、移动文件及目录命令,终端命令格式的组成,查看命令帮助。HTTP请求报文,HTTP响应报文......
  • Python实战-飞机大战
    plane_sprites:importrandomimportpygameSCREEN_RECT=pygame.Rect(0,0,480,700)游戏基类:classGameSprite(pygame.sprite.Sprite):def__init__(self,img_name,speed=1):super().__init__()self.image=pygame.image.load(img_name)self......
  • Java调用python服务接口https遇到证书问题的具体解决
    是这样的,大概前一段时间做过一个业务,一直没有记录下来就是我们的算法部,封装好了一系列的算法,然后是python写的。而我们需要用Java去调用他们的方法。如何处理这个问题呢就是我在python里面写了一个rest-api,暴露出几个接口,供Java这边调。但是不知道为什么算法部当时那边弄了个......
  • 【python】Python实现梯度下降算法
    (文末包含完整代码)导入需要的包importnumpyasnpimportmatplotlib.pyplotasplt定义函数defget_y(x):y=x**2+x*2+1returny计算梯度defget_gradient(x):getgradient=2*x+2returngetgradient采用梯度下降计算函数最小值时自......
  • Python就该这样学,纯小白速通Python!学习大纲整理,建议保存
    一、学习建议1、找到自己感兴趣的方向,并且结合市场需求进行选择Python的应用范围测试运维web人工智能大数据爬虫及数据分析办公自动化2、学习过程中一定要勤加练习,并且尝试去使用学习过的内容实现一些简答的功能遇到技术问题不要慌,解决问题的过程也是加速自己成长的途......
  • 一个入门级python爬虫教程详解
    前言当你需要每天对Excel做大量重复的操作,如果只靠人工来做既浪费时间,又十分枯燥,好在Python为我们提供了许多操作Excel的模块,能够让我们从繁琐的工作中腾出双手。今天就和大家分享一个快速处理Excel的模块openpyxl,它的功能相对与其他模块更为齐全,足够应对日常出......
  • 人人都想自学Python,为什么坚持下来的没几个?
    随着云计算/自动化/人工智能的时代来临,Python语言也成为了当下最热门的语言之一。有的人开始自学,有的人通过面对面授课学习,也有一些人浅尝辄止。那么,为什么有一大批人最终停止在学Python的道路上呢?最后,如果大家如果在自学遇到困难,想找一个Python学习环境,可以加入我们的Py......
  • Linux环境运行python项目提示No module named '_ssl'
    版本python3.11.4控制台错误提醒File"/usr/local/python3/lib/python3.11/ssl.py",line100,in<module> import_ssl#ifwecan'timportit,lettheerrorpropagate ^^^^^^^^^^^ModuleNotFoundError:Nomodulenamed'_ssl'错误原因:ce......