知识储备--基础算法篇-回溯法

news2024/11/24 17:01:31

1.回溯法介绍

1.1递归和回溯

每一个递归都包含回溯,回溯是一种纯暴力搜索方法。每个回溯法都可以抽象为一种N叉树。树的宽度为子集的个数,深度为递归返回的条件。二叉树中的递归都会有回溯算法,只不过有些题目用到了,有些没有用到。

1.2回溯能解决的问题

回溯能解决包括组合排列切割子集棋盘等等问题。

1.3回溯算法的模板

回溯算法就是把栈弹出,恢复到父节点的状态。例如[1,2,3,4]求组合,我们通过递归得到数组[1,2]时,终止条件触发,然后收集结果、return,这时需要把2弹出,恢复到父节点,然后再去递归得到[1,3]。不断回溯、递归。其实就是一个N叉树

void backtracking(参数) {
    if (终止条件) {
        存放结果;
        return;
    }

    for (选择:本层集合中元素(树中节点孩子的数量就是集合的大小)) {
        处理节点;
        backtracking(路径,选择列表); // 递归
        回溯,撤销处理结果
    }
}

2.leetcode

2.1第46题-全排列

给定一个不含重复数字的数组 nums ,返回其 所有可能的全排列 。你可以 按任意顺序 返回答案。

示例 1:

输入:nums = [1,2,3]
输出:[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]
class Solution(object):
    def permute(self, nums):
        """
        :type nums: List[int]
        :rtype: List[List[int]]
        """
        # 回溯,N叉树
        # 全排列
        def backtracking(nums, result, temp):
            if nums == []:
                result.append(temp)
                return
            temp4 = copy.deepcopy(temp)
            for i in range(len(nums)):
                temp2 = nums.pop(0)
                temp.append(temp2)
                backtracking(nums, result, temp)
                nums.append(temp2)
                temp = copy.deepcopy(temp4)
        result = []
        temp = []
        backtracking(nums, result, temp)

        return result

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1050957.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

计算机竞赛 深度学习实现行人重识别 - python opencv yolo Reid

文章目录 0 前言1 课题背景2 效果展示3 行人检测4 行人重识别5 其他工具6 最后 0 前言 🔥 优质竞赛项目系列,今天要分享的是 🚩 **基于深度学习的行人重识别算法研究与实现 ** 该项目较为新颖,适合作为竞赛课题方向&#xff0c…

R语言进行孟德尔随机化+meta分析(2)----基于R和stata

目前不少文章用到了孟德尔随机化meta分析,在上一章咱们简单介绍了一下meta分析的基础知识。咱们今天来介绍一篇11分文章,由文章看看孟德尔随机化meta分析如何进行,文章的题目是:Appraising the causal role of smoking in multipl…

大数据Doris(二):Doris原理篇

文章目录 Doris原理篇 一、Doris 特点 1、支持标准SQL接口 2、列式存储引擎

百度统计配置详细图文教程包含siteId、百度统计AccessToken、百度统计代码获取步骤教程

一、前言 很多网友开发者都不知道百度统计siteId、百度统计token怎么获取,在网上找的教程都是几年前老的教程,因此给大家出一期详细百度统计siteId、百度统计token、百度统计代码获取详细步骤教程。 二、登录到百度统计 1.1 登录到百度统计官网 使用个…

【利用冒泡排序的思想模拟实现qsort函数】

1.qsort函数 1.1qsort函数的介绍 资源来源于cplusplus网站 1.2qsort函数的主要功能 对数组的元素进行排序 对数组中由 指向的元素进行排序,每个元素字节长,使用该函数确定顺序。 此函数使用的排序算法通过调用指定的函数来比较元素对,并将指…

测试用例的编写(面试常问)

作者:爱塔居 专栏:软件测试 作者简介:不断总结,才能变得更好~踩过的坑,不能再踩~ 文章简介:常见的几个测试用例。 一、淘宝购物车 二、登录页面 三、三角形测试用例 abc结果346普通三角形333等边三角形334…

文件I/O与标准I/O

如果不知道inode,请看这篇文章inode 我们知道当打开一个文件时,OS会先使用inode编号在磁盘文件系统里面去寻找这个文件,找到以后根据文件的属性为其创建一个内核层面的结构体来描述这个文件,该结构体里面含有文件的属性信息&#…

我的创作纪念日 不忘初心,砥砺前行

机缘 本来我只是记录一些自己平时安装各种软件或者组件的教程,以及记录平时遇到的一些bug。 没想到一些教程收到了各位同学的喜爱。 收获 这篇VMware虚拟机安装Linux教程(超详细) 深受大家喜爱。写这篇文章的初衷一是为了记录,二是为了分享。自己一步…

操作符详解——(比特课件)

操作符怎么搞?没办法掌握基础知识就可以 ** 需要课件完整版的可以关注私信我!!! 你的支持就是我更新的最大动力 **

String常见面试题

目录 1.String为什么不可变2.String和StringBuilder、StringBuffer的区别3.String为什么要设置为不可变4.判断定义为String类型的s1和s2是否相等5.下面这句话在内存中创建了几个对象?6.判断定义为String类型的s1和s2是否相等7.判断定义为String类型的s1和s2是否相等8.判断定义…

【PHP】如何关闭buffer实时输出内容到前端

前言 默认情况下,我们在PHP里使用echo等函数输出的内容,是不会马上发送给前端的,原因是有 buffer 的存在,buffer又分两处,一处是PHP本身的buffer,另一处是Nginx的buffer。只有当buffer满了之后&#xff0c…

unity打包工具

接手了一个项目,打包存在重大问题,故此在unity addressables 基础上弄了一个简单的打包工具,代码也都做好了注释,操作非常简单以下为操作方法: 首先设置导入Addressables插件,并设置好详细参见&#xff1a…

普通学校,普通背景,普通公司,不普通总结。

作者:阿秀 InterviewGuide大厂面试真题网站:https://top.interviewguide.cn 这是阿秀的第「313」篇原创 小伙伴们大家好,我是阿秀。 可能很多人点开牛客、知乎、B站,一看帖子的标题都是"某985xxxx"、"不入流211xxx…

一文读懂集合竞价,建议收藏,读完少交学费

集合竞价每个时间段交易规则及作用都不一样,了解集合竞价的规则,有利于琢磨主力的意图。 大部分同学都不是很关心集合竞价,也不知道如何利用集合竞价买卖股票。如上图所示,有同学在9点15看着股票涨停,立马冲进去&…

[Machine Learning][Part 2]监督学习的实现

目录 线性模型实现: cost function :代价函数或者损失函数——衡量模型优劣的一个指标 理论: 代码实现: 梯度下降——自动寻找最小的cost function 代价函数 梯度的概念: 梯度下降公式: 实现一个简单的监督学习…

web:[极客大挑战 2019]LoveSQL

题目 打开页面显示如下 查看源代码,查到一个check.php,还是get传参 尝试账号密码输入 题目名为sql,用万能密码 1or 11# 或 admin or 11 给了一段乱码,也不是flag 查看字段数 /check.php?usernameadmin order by 3%23&pass…

Go语言开发小技巧易错点100例(九)

往期回顾: Go语言开发小技巧&易错点100例(一)Go语言开发小技巧&易错点100例(二)Go语言开发小技巧&易错点100例(三)Go语言开发小技巧&易错点100例(四)Go…

Java之SpringCloud Alibaba【六】【Alibaba微服务分布式事务组件—Seata】

一、事务简介 事务(Transaction)是访问并可能更新数据库中各种数据项的一个程序执行单元(unit)。 在关系数据库中,一个事务由一组SQL语句组成。 事务应该具有4个属性: 原子性、一致性、隔离性、持久性。这四个属性通常称为ACID特性。 原子性(atomicity) ∶个事务…

无人直播间

失败!! 采用 ffmpeg 技术进行推流 推流代码: 【需要将rtmp替换为你的推流地址】 ffmpeg -re -stream_loop -1 -i "rain.mp4" -c copy -f flv ""推流地址获取 以哔哩哔哩为例 点击下方链接 开播设置 - 个人中心 - …

Java【手撕链表】LeetCode 143. “重排链表“, 图文详解思路分析 + 代码

文章目录 前言一、两数相加1, 题目2, 思路分析2,1 找到中间结点2.2, 逆序后半段链表2.3, 合并两个链表 3, 代码 前言 各位读者好, 我是小陈, 这是我的个人主页, 希望我的专栏能够帮助到你: 📕 JavaSE基础: 基础语法, 类和对象, 封装继承多态, 接口, 综合小练习图书管…