6.7 回溯法和树的遍历

旋转数组找中位数的下标 题目描述: 比如一个原数组[1,3,5,7,9,10,13] 以任意一个数比如7作旋转操作得到一个新数组[7,9,10,13,1,3,5] 要求得到原数组的中位数的下标 注:题目中只知道旋转后的数组,不知道原数组,例如输入[5,1,3],输出2 如果数组长度为偶数,例如[3,5,7,1],则选择3或者5作为中位数都可以 要求用O(n)的方式实现。 面试中提供了一种思路:一是用快排先进行排序,再找中位数,时间复杂度是nlogn。 然而要求用O(n) 思路:中位数的特点是左边的数都比中位数小,而右边的数都比中位 阅读详情

典型应用:求含n个元素的集合的幂集

集合A的幂集是由集合A的所有子集所组成的集合。如:A={ 1, 2, 3 },则 A 的幂集 p(A) = { {1, 2, 3} , {1, 2} , {1, 3} , {2, 3} , {1} , {2} , {3} , { } }

  • 幂集 p(A) 的每个元素是一个集合,它或是空集,或含集合A中的一个元素,或含集合A中的两个元素,或者等于集合A。
    从集合A来看,它的每个元素只有两种状态:或属于幂集中的某个元素集,或不属于幂集中的元素集。

  • 求幂集p(A)的元素的过程可看成是依次对集合A中元素进行“取” 或者“弃”的过程。

  • 如下图二叉树,
    树的根结点表示幂集某个元素的初始状态(为空集)
    叶子结点表示幂集元素的终结状态(8个叶子结点表示幂集p(A)的8个元素)
    分支结点表示对集合A中前 i - 1 个元素进行取舍处理的当前状态(左分支表示取,右分支表示弃)
    综上,求幂集就是先序遍历这棵状态树的过程。
    在这里插入图片描述

  • 算法如下(伪码)

void PowerSet(int i, int n)
{
	// 求含n个元素的集合A的幂集p(A)。进入函数时已对A中前i-1个元素作了取舍处理
	// 现从第i个元素进行取弃处理。
	// 如i>n,则求得了p(A)的一个元素,并输出之
	// 初始调用: PowerSet(1, n)
	if(i > n) // n表示集合A的元素个数
	{
		输出幂集的一个元素;
	}
	else
	{
		取 / 弃 第i个元素;
		PowerSet(i+1, n);
	}
}
  • 对上面的伪码进一步细写
void GetPowerSet(int i, List A, List &B)
{
	// 线性表A表示集合A,线性表B表示幂集p(A)的一个元素
	// 进入函数时已经对前面i-1个元素做了取舍处理
	// 第一次调用本函数时,B为空表,i=1
	if(i > ListLength(A))
	{
		// 输出当前B的值,即p(A)的一个元素
		Output(B);
	}
	else
	{
		// 获取 A 的第 i 个元素
		GetElem(A, i, x);
		// B 的当前长度
		k = ListLength(B);
		// 取 / 舍
		ListInsert(B, k+1, x); / ListDelete(B, k+1, x);
		GetPowerSet(i+1, A, B);
	}
}
Java回溯法 1.定义 在包含问题的所有解的解空间树中,按照深度优先搜索的策略,从根结点出发深度探索解空间树。当探索到某一结点时,要先判断该结点是否包含问题的解,如果包含,就从该结点出发继续探索下去,如果该结点不包含问题的解,则逐层向其祖先结点回溯。(其实回溯法就是对隐式图的深度优先搜索算法)。 若用回溯法求问题的所有解时,要回溯到根,且根结点的所有可行的子树都要已被搜索遍才结束。 而若使用回溯法求任一个解... 阅读详情

相关推荐

子集和问题——回溯法

问题描述 子集和问题的一个实例为<S,c>。其中S={x1,x2,…,xn}是一个正整数的集合,c是一个正整数。子集和问题判定是否存在S的一个子集S1,使得S1中所有元素的和为c 试设计一个解子集和问题的回溯法 分析 对于每一个集合中的元素,有取和不取两种状态,可以对这两种状态进行回溯,直到找完所有情况 用i记录回溯的当前元素索引号,v保存当前子集的和 递归出口 i>n 或 v>c 代码 #include <iostream> using namespace std;

qq_43542311的博客 2164

回溯法和树的遍历

     以下内容主要参考了严蔚敏版的数据结构教材。      回溯法是求解某些计算问题的全部或部分解的通用算法,特别是带有限制条件的计算问题。它通过不断的产生完全解的片段并不断增长完全解的片段 Backtracking is a general algorithm for finding all (or some) solutions to some computational problems, nota

caoleiwe的博客 1570

【数据结构】第6章 树(下)

数据结构第6章 树(下)§6.4 树和森林6.4.1 树的储存结构①父亲表示法(利用每个(除根)结点只有唯一的父亲的性质) ②孩子表示法(用广义表实现) ③孩子兄弟表示法(二叉链表指向第一个孩子结点和下一个兄弟结点)6.4.2森林与二叉树的转换二叉树和树都可以用二叉链作为储存结构(分别是孩子表示法和孩子兄弟表示法),给定一棵树,可以找到唯一的一棵二叉树与之对应。两者的物理结构是相同的,只是解释不

Bill_Utada的成长之路 1438

【剑指offer】面试题11-旋转数组中的最小数字(二分法的进一步应用)

题目: 待续中。。。 思路: 1. 牛客网AC代码如下

刘小雨的博客 283

回溯法及其应用

参考链接: http://www.cnblogs.com/chinazhangjie/archive/2010/10/22/1858410.html http://baike.baidu.com/link?url=m-I1xz9PSYf9Hr8koWBcx2JNnHVCmKT_wA4L4ryrqHocN-I6oTp-pnEl9HB3FhhT8Gr2J50mG-aNRmF6K5QHbnO3_GdQOF

na_beginning的专栏 3361

【算法】回溯法——马的遍历问题(C语言)

题目: 在中国象棋中,马只能走“日” 字。现有一5*4棋盘,马从位置(x,y)处出发,把棋盘的每一格都走一次,且只走一次。找出所有路径。 思路: 对于棋盘上一点A(x,y)有八个拓展方向,即 A1(x+1,y+2)A2(x+2,y+1)A3(x+2,y-1)A4(x+1,y-2) A5(x-1,y-2)A6(x+2,y+1)A3(x+2,y-1)A4(x+1,y-2) 完整代码 运行结果 ...

weixin_51450101的博客 4838

回溯法与树的遍历

回溯法:其求解过程实质是一个先序遍历一棵“状态树”的过程,只是这棵树不是遍历前预先建立的,而 是隐含在遍历过程中。 题目描述:求含n个元素的集合的幂集。 例:A={1,2,3},则A的幂集为{{1,2,3},{1,2},{1, 3},{2,3},{1},{2},{3},{}} 解题思路:求幂集的过程可看成是依次对集合A中的元素进行取或舍的过程。 1. 选择合适的数据结构——假...

weixin_30751947的博客 273

读书笔记之《数据结构》---第六章 树和二叉树

本章目录 1.树的定义和基本术语 2.二叉树 3.遍历二叉树和线索树 4.树和森林 5.树与等价问题 6.赫夫曼树及其应用 7.回溯法与树的遍历 8.树的计数 树的定义和基本术语 任意一颗非空树中: 1.有且仅有一个特定的称为根的结点 2.当n&amp;gt;1时,其余结点可分为m个互不相交的子树 树的结点包含一个数据元素及若干指向其子树的分支,结点拥有的子树数称为结点的度,度为0的结点称为叶子结点,度不...

qq_25744595的博客 687

数据结构6.7_回溯法和树的遍历

参考链接: 回溯法(八皇后问题):http://data.biancheng.net/view/34.html 详细讲解回溯算法:https://blog.csdn.net/gardenpalace/article/details/84625537 回溯算法超通俗易懂详尽分析:https://blog.csdn.net/sinat_27908213/article/details/80599...

weixin_34241036的博客 446

CUDA详细安装及环境配置——环境配置指南 – CUDA+cuDNN+PyTorch 安装

本文详细介绍了如何确定显卡支持的CUDA版本、选择对应的cuDNN版本,并逐步安装CUDA、cuDNN和PyTorch。首先,通过命令行输入nvidia-smi.exe查看显卡支持的CUDA版本。接着,根据CUDA版本选择对应的cuDNN版本并下载。然后,从NVIDIA官方网站下载CUDA安装包,按照提示进行安装,并检查是否安装成功。同样地,下载cuDNN安装包,解压后将文件拷贝到CUDA安装目录中,并通过命令行验证安装是否成功。最后,根据PyTorch官网的指引,选择合适的安装命令进行PyTorch的安装

2501_90350274的博客 5098

DDR内存Prefetch机制详解:从DDR1到DDR4的技术演进与性能提升

本文深入解析DDR内存Prefetch机制从DDR1到DDR4的技术演进与性能提升。通过分析Prefetch技术的实现原理与Burst传输的协同机制,揭示DDR1的2n Prefetch、DDR2的4n Prefetch、DDR3的8n Prefetch以及DDR4的Bank Group架构创新如何显著提升内存带宽与系统性能。

weixin_30369041的博客 537

回溯法之马的遍历问题(递归)

马的遍历问题:在n*m的棋盘上,马只能走日字。马从位置(x,y)处出发,把棋盘的每一点都走一次,且只走一次,找出所有路径。 问题分析:行n,列m,马在不出边界的情况下有8个方向可以行走(走日字),如当前坐标为(x,y),则行走后的坐标可以为: (x+1,y+2) (x+1,y-2), (x+2,y+1) (x+2,y-1) (x-1,y-2) (x-1,y+2) (x-2,y-1) (x-2,y+1) 回溯法算法设计: 搜索空间是nM个点,约束条件是不出边界且每个点只经过一次,节点的扩展规则如上所述。 搜

weixin_43827397的博客 4854

ArcGIS小白必看:5分钟搞定shp矢量文件分割(附常见错误排查)

本文为ArcGIS新手详细解析了分割shp矢量文件的四种核心方法:裁剪工具、分割工具、按属性选择导出及ArcPy脚本自动化。重点强调了投影匹配等关键步骤,并提供了常见错误排查指南,帮助用户快速掌握矢量数据分割技巧,提升GIS数据处理效率。

h9j8k7l6m5n的博客 799

回溯法基本思想_LeetCode 例题精讲 | 03 从二叉树遍历到回溯算法

本篇的主题是回溯算法,共有两道例题:例题一,LeetCode 113 - Path Sum II(Medium) 给定一个二叉树和一个目标和,找到所有从根结点到叶结点的路径,使得路径上所有结点值相加等于目标和。示例: 给定如下二叉树,以及目标和 sum = 22。返回: [ [5,4,11,2], [5,8,4,5]]例题二,LeetCode 78 - Subsets(Medium) 给定一组不含...

weixin_39789499的博客 269

ESP-IDF 利用ESP32构建智能音乐播放器(一)---------- 实现SD卡MP3文件的解码与播放

本文详细介绍了如何利用ESP32和ESP-IDF开发框架,从零开始构建一个智能音乐播放器。文章重点讲解了如何通过SD卡模块读取MP3文件,并集成Helix MP3解码库进行软件解码,最终通过I2S接口驱动音频模块实现播放。内容涵盖硬件连接、软件环境搭建、核心解码与输出逻辑,为嵌入式音频开发提供了完整的实战指南。

weixin_29163797的博客 234

Gitlab+Jenkins+Docker+Harbor+K8s+Rancher集群搭建CICD平台

本文以诺依项目为例详细记录了Kubernetes集群的部署过程以及配套DevOps环境的搭建。主要内容包括:1) 配置8个节点的软硬件环境;2) 基础环境准备(网络、防火墙、Docker等);3) 三节点Kubernetes集群部署;4) GitLab代码仓库安装;5) Harbor私有镜像仓库搭建;6) Jenkins持续集成工具配置;7) 基于若依项目的CI/CD实践;8) Rancher集群管理工具部署。

hickman2023的博客 1202

【算法】回溯法

问题的解:都是向量形式搜索空间:树,可能是n叉树、子集树、排列树等,树的结点对应于部分向量,可行解在叶结点搜索方法:深度优先,跳跃式遍历搜索树,找到可行解或最优解适用:求解搜索问题和优化问题搜索空间:树,结点对应部分解向量,可行解在树叶上搜索过程:采用系统的方法隐含遍历搜索树搜索策略:深度优先结点分支判定条件满足约束条件,分支扩张解向量不满足约束条件,回溯到该结点的父结点结点状态:动态生成存储:当前路径。

weixin_44131922的博客 1068

深度学习之Pytorch---本人踩过的坑(报错总结)第十篇

深度学习之Pytorch安装时遇到的问题—本人踩过的坑(报错总结) 报错一:pip install torchvision 出现“由于目标计算机积极拒绝,无法连接”的问题 解决方案:找到自己浏览器的工具或选项,我的是火狐,具体解决方案如下图 然后找到桌面左下角,点击搜索internet,然后点击internet选项 最后回到Anaconda Prompt命令行输入pip install...

qq_41570307的博客 1914

回溯法--二叉树遍历和素数环

回溯--二叉树路径和,素数环

Xidian185的专栏 1425

复旦微实现串口在线升级BOOT.BIN

将该 demo 生成的 app(升级用)和 fsbl、最简化 bit 文件(可选)打包成 BOOT.BIN,作为 golden image 烧写在 qspi flash 偏移 0 地址开始的位置,其中最简化 bit 文件为在线升级功能提供必要的物理通道(如果不需要,可以不打包该文件),golden image 一旦发布基本不需要进行升级,由该 golden image 负责和上位机进行通信交互,完成业务 app、业务 bit 文件、uboot 以及操作系统 image 等文件在线升级,在qspi flash

wangjie36的博客 3174

Jetson AGX Orin平台Jetpack5升级Jetpack6,自研载板USB不工作问题调试

1. 问题描述将AGX Orin工业的新板放到定制的载板上当在ubuntu 22和Jetpack 6.1上使用SDKManager刷机时,lsusb为空,并且在引导时没有发现/注册xusb设备。USB C端口正常打开并供电,但似乎没有数据传输。在Ubuntu 18 Jetpack 5.1.4 SDKManager上同样刷机之后,usb C集线器在引导时被正确地发现,显示在lsusb中,并识别/挂载外部驱动器。

jzwjzw19900922的博客 1510

回溯法以及搜索遍历的方向控制

1,对于方格的回溯遍历 (1)控制方向使用基本方向数组: int[][] next = {{0, -1}, {0, 1}, {-1, 0}, {1, 0}}; (2)循环遍历取向: for (int[] n : next) if (backtracking(matrix, str, marked, pathLen + 1, r + n[0], c + n[1])) ...

纵横的博客 334

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

回溯法解决无和集问题

计算机算法设计与分析,回溯章节习题,无和集划分。

2301_79970509的博客 1270

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

算法 --- > 回溯法

回溯法 参考 - 剑指Offer 回溯法可以看成蛮力法的升级版,它从解决问题每一步的所有可能选项里系统地选择出一个可行的解决方案. 回溯法解决的问题的特性: 可以形象地用树状结构表示: 节点: 算法中的每一个步骤 节点之间的连接线: 每个步骤中的选项,通过每一天连接线,可以到达下一个子步骤 叶子节点: 代表一个步骤的最终状态 如果在叶节点的状态满足需求,那么我们找到了一个可行的解决方案...

栗子好好吃的博客 366

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

回溯法基本思想-01背包、N皇后回溯法图解

​ 对于二叉树来说,先序、中序、后序遍历都是深度优先遍历。​ 深度优先就是一条路径走到底后,再返回上一步,搜索第二条路径。​ 前面使用蛮力法解决时,对于问题的每一种状态通过数值的二进制表示,用数字二进制中为1的位置表示该位置的物品是否放入,比如:​ 1(0000 0001)表示第1个物品放入,其他都不放入;​ 2(0000 0010)表示第2个物品放入,其他都不放入;​ 3(0000 0011)表示第1和第2哥物品放入,其他都不放入。

qq_63635872的博客 1318
上一篇: 6.5 树与等价问题
下一篇: 6.6.1 赫夫曼树
你板子冒烟了
博客等级 码龄8年 1278粉丝 582原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值