【算法设计与分析】-回溯法的回忆-学习【期末复习篇章】

在这里插入图片描述

引言

简单说,迷宫问题的求解方法就是走的通就走,走不通 就回头寻找另外的路径的一种满足某约束条件的穷举式 搜索技术

回溯法是一种在解空间中搜索可行解最优解的方法。
该方法通常将解空间看做树形结构,即状态空间树。从根结
点开始,以深度优先对状态空间树进行遍历避免遗漏可行解。

外,该过程以跳跃式搜索改善算法的运行效率,即不满足约束条
件的内结点的子树将被剪掉,

此时,搜索过程将回溯至该结点的父结点进行后续深度遍历。
通俗的讲,就是走的通就走,走不通就回头寻找另外的路径
的一种满足某约束条件的穷举式搜索技术。

回溯法的概述

回溯法适合于求解那些涉及到寻找一个或全部可行解的问
题(搜索问题)或者求满足某些约束条件的一个或全部最优解
的最优化问题

适合于用回溯法求解的问题应具备以下特征:
q 问题的解可表示成n-元组形式;
q 问题提供 显示约束确定状态空间树(解空间),并提供
来判定可行解;
q 应能设计有效的约束函数 ,缩小检索空间

问题的解空间

相关概念:
解向量:一个问题的解能够表示成一个n元式(x0,x1,…,xn-1)
的形式。
显约束:规定每个分量xi的取值的约束条件,称为~。
解空间:满足显式约束条件的所有多元组(侯选解),构成了一
个解空间。
隐约束:判定一个侯选解是否是可行解的约束条件。
判定函数:判定部分元组是否满足隐式约束的函数。
目标函数:用来衡量每个可行解的优劣程度的函数。
最优解:使目标函数取最大值(或最小值)的可行解。

问题的解空间

相关概念:
•状态空间树:描述问题解空间的树型结构。

例:n=3时 w=[2,4,3],p=[5,10,3],背包容量M=5
在这里插入图片描述
n=3时的0-1背包问题用完全二叉树表示的解空间

求解过程分为3步,分别对第0、1、2个物品做决策,该解空间的每
个叶子结点都构成一个解

问题的解空间

问题状态:状态空间树中的每个结点称为一个问题状态。
解状态:从根到树中某结点的路径代表一个作为侯选解的元组,则该
结点称为解状态。
答案状态:从根到某个解结点的路径代表一个作为可行解的元组,则
称该解状态为答案状态。
最优答案状态:使目标函数取最优值的答案结点称为最优答案结点。

通过搜索状态空间树来寻找答案状态的方法
最简单的方法是:使用某种搜索方法,检查树中每个问题状态,
如果是解状态,则用判定函数判定它是否是答案状态;对于最优化问
题,在搜索过程中还需对每个答案结点计算其目标函数值,并记录下
其中最优者。
注:状态空间树不需要事先生成,只需在求解的过程中,随着搜
索算法的进展,逐个生成状态空间树的问题状态结点

扩展结点:正在产生儿子的结点称为扩展结点
活结点:自身已生成但其儿子还没有全部生成的节点称做活结点
死结点:一个所有儿子已经产生的结点称做死结点
生成问题状态的基本方法
深度优先的问题状态生成法:对一个扩展结点R,一旦产生了它
的一个儿子C,就把C当做新的扩展结点。在完成对子树C(以C为
根的子树)的穷尽搜索之后,将R重新变成扩展结点,继续生成R
的下一个儿子(如果存在)
宽度优先的问题状态生成法:在一个扩展结点变成死结点之前,
它一直是扩展结点。

为了提高搜索效率,在搜索过程中,可使用剪枝函数,剪去
那些不必要搜索的子树,减少问题求解所需实际生成的状态结
点树。
l常用的剪枝函数
l 约束函数:剪去那些已知不含答案状态的子树
l 限界函数:剪去那些不可能包含最优答案结点的子树

例:n=3时 w=[2,4,3],p=[5,10,3]
背包容量M=5

在这里插入图片描述
约束函数如何定义?
设Y是状态空间树中的一个问题状态,从根到Y的一条路径
代表正在构造中的n元组的一部分(x0
,x1…xk
),可称之为部分向量.
约束函数是关于部分向量的函数Bk
(x0
,x1…xk
),它被定义为:
如果可以断定Y的子树上不含任何答案状态,则Bk
(x0
,x1…xk
)为
false,否则为true.

回溯法:深度优先生成结点,并使用剪枝函数的求解方法.
•分枝限界法:广度优先生成结点,并使用剪枝函数的方法

针对所给问题,定义问题的解空间;
(2)确定易于搜索的解空间结构,并构造判定函数;
(3)以深度优先方式搜索解空间,并在搜索过程中用剪枝函数
避免无效搜索

在这里插入图片描述
递归回溯法

void RBacktrack (int k)
{
for(每个x[k],使得x[k]T(x[0],x[1]…x[k-1])&& (Bk
(x[0],x[1]…x[k])))
{
if((x[0],x[1]…x[k])是一个可行解)
输出x[0],x[1]…x[k]else
RBacktrack(k+1);
}
}

迭代回溯法

void IBacktrack (int n)
{ int k=0;
while(k>=0)
{
if(还有尚未检测的x[k]T(x[0],x[1]…x[k-1])&& (Bk
(x[0],x[1]…x[k]))
{
if((x[0],x[1]…x[k])是一个可行解)
输出x[0],x[1]…x[k];
k++;
}
else
k--;
}
}

回溯算法的效率取决于状态空间树上实际生成的那部分
问题状态的数目。
估算回溯法处理一个实例时,所实际生成的结点数的方
法—蒙特卡洛方法

皇后问题

【问题描述】在一个n×n的棋盘上放置n个皇后使得他们
互不攻击。所谓相互攻击:是指任意两个皇后,都不能在同一
行、同一列或同一斜线上。
n皇后问题,即求互不攻击的放置方案。

)解的结构形式:
∵每个皇后不能在同一行
∴不失一般性,假设第i个皇后放在第i行上,故可用n-元
组(x0
,x1…xn-1)表示n-皇后问题的解,其中xi表示第i个皇后
所在的列号。(0≤xi≤n-1)

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

李沐读论文-启发点记录2:Resnet--残差连接--kaiming老师神作

(一)可以借鉴: 1. 计算机视觉的论文,都会在第一页的右上角,放上一张好看的图! 2.bottleNet的设计——很大程度上节省了计算FLOPs开销,这是Resnet50及其更大版本都会用到的设计。 3.Resnet在de…

[RK3566-Android11] 使用SPI方式点LED灯带-JE2815/WS2812,实现呼吸/渐变/随音量变化等效果

问题描述 之前写了一篇使用GPIO方式点亮LED灯带的文章 https://blog.csdn.net/jay547063443/article/details/134688745?fromshareblogdetail&sharetypeblogdetail&sharerId134688745&sharereferPC&sharesourcejay547063443&sharefromfrom_link 使用GPIO…

OceanBase 首席科学家阳振坤:大模型时代的数据库思考

2024年 OceanBase 年度大会 即将于10月23日,在北京举行。 欢迎到现场了解更多“SQL AI ” 的探讨与分享! 近期,2024年金融业数据库技术大会在北京圆满举行,聚焦“大模型时代下数据库的创新发展”议题,汇聚了国内外众多…

详细尝鲜flutter

flutter 161由于官方的汉化文档感觉还是有很多没有汉化的地方 ,所以自己打一遍的同时写下了以下笔记 社区生态 官方文档 所有的控件:Widget 目录 | Flutter 中文文档 - Flutter 中文开发者网站 - Flutter 官方论坛的教程 Flutter Widget框架概述 - Flutter中文网…

微信小程序中关闭默认的 `navigationBar`,并使用自定义的 `nav-bar` 组件

要在微信小程序中关闭默认的 navigationBar,并使用自定义的 nav-bar 组件,你可以按照以下步骤操作: 1. 关闭默认的 navigationBar 在你的页面的配置文件 *.json 中设置 navigationBar 为 false。你需要在页面的 JSON 配置文件中添加以下代码…

JS 中 reduce()方法及使用

摘要: 开发中经常会遇到求合计的状况!比如和,积等!这次遇到的是求合计的和! reduce()方法是JavaScript中Array对象的一种高阶函数,用于对数组中的每个元素执行一个由您提供的reducer函数(回调函…

内置数据类型、变量名、字符串、数字及其运算、数字的处理、类型转换

内置数据类型 python中的内置数据类型包括:整数、浮点数、布尔类型(以大写字母开头)、字符串 变量名 命名变量要见名知意,确保变量名称具有描述性和意义,这样可以使得代码更容易维护,使用_可以使得变量名…

STM32-Modbus协议(一文通)

Modbus协议原理 RT-Thread官网开源modbus RT-Thread官方提供 FreeModbus开源。 野火有移植的例程。 QT经常用 libModbus库。 Modbus是什么? Modbus协议,从字面理解它包括Mod和Bus两部分,首先它是一种bus,即总线协议,和…

学习threejs,利用THREE.ExtrudeGeometry拉伸几何体实现svg的拉伸

👨‍⚕️ 主页: gis分享者 👨‍⚕️ 感谢各位大佬 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍⚕️ 收录于专栏:threejs gis工程师 文章目录 一、🍀前言1.1 ☘️THREE.ExtrudeGeometry拉伸…

通过ssh端口反向通道建立并实现linux系统的xrdp以及web访问

Content 1 问题描述2 原因分析3 解决办法3.1 安装x11以及gnome桌面环境查看是否安装x11否则使用下面指令安装x11组件查看是否安装gnome否则使用下面指令安装gnome桌面环境 3.2 安装xrdp使用下面指令安装xrdp(如果安装了则跳过)启动xrdp服务 3.3 远程服务…

C2W4.LAB.Word_Embedding.Part1

理论课:C2W4.Word Embeddings with Neural Networks 文章目录 Word Embeddings First Steps: Data PreparationCleaning and tokenizationSliding window of wordsTransforming words into vectors for the training setMapping words to indices and indices to w…

七,Linux基础环境搭建(CentOS7)- 安装Scala和Spark

Linux基础环境搭建(CentOS7)- 安装Scala和Spark 大家注意以下的环境搭建版本号,如果版本不匹配有可能出现问题! 一、Scala下载及安装 Scala是一门多范式的编程语言,一种类似java的编程语言,设计初衷是实现…

合并数组的两种常用方法比较

在 JavaScript 中,合并数组的两种常用方法是使用扩展运算符 (...) 和使用 push 方法。 使用扩展运算符 this.items [...this.items, ...data.items]; 优点: 易于理解:使用扩展运算符的语法非常直观,表达了“将两个数组合并成一个…

24.redis高性能

Redis的单线程和高性能 Redis是单线程吗? Redis 的单线程主要是指 Redis 的网络 IO 和键值对读写是由一个线程来完成的,这也是 Redis 对外 提供键值存储服务的主要流程。 Redis 的多线程部分,比如持久化、异步删除、集群数据同步等&#xff…

合合信息亮相PRCV大会,探讨生成式AI时代的内容安全与系统构建加速

一、前言 在人工智能技术的飞速发展下,生成式AI已经成为推动社会进步的重要力量。然而,随着技术的不断进步,内容安全问题也日益凸显。如何确保在享受AI带来的便利的同时,保障信息的真实性和安全性,已经成为整个行业待解…

C#/.NET/.NET Core全面的自学入门指南

自学入门建议 确认学习目标:自学C#/.NET首先你需要大概了解该门语言和框架的发展、前景和基本特点,从自身实际情况和方向出发确认学习的必要性。 制定学习计划:制定一个详细的学习计划(比如每天学习一个C#/.NET知识点、小技能&am…

【web安全】缓慢的HTTP拒绝服务攻击详解

文章目录 前言一、攻击原理二、攻击类型三、攻击特点四、HTTP慢速攻击实战工具简介使用参数介绍五、修复建议前言 缓慢的HTTP拒绝服务攻击是一种专门针对于Web的应用层拒绝服务攻击,攻击者操纵网络上的肉鸡,对目标Web服务器进行海量http request攻击,直到服务器带宽被打满,造成…

微服务网关Zuul

一、Zuul简介 Zuul是Netflix开源的微服务网关,包含对请求的路由和过滤两个主要功能。 1)路由功能:负责将外部请求转发到具体的微服务实例上,是实现外部访问统一入口的基础。 2)过滤功能:负责对请求的过程…

入侵检测算法平台部署LiteAIServer视频智能分析平台行人入侵检测算法

在当今科技日新月异的时代,行人入侵检测技术作为安全防护的重要组成部分,正经历着前所未有的发展。入侵检测算法平台部署LiteAIServer作为这一领域的佼佼者,凭借其卓越的技术实力与广泛的应用价值,正逐步成为守护公共安全的新利器…

R5:天气预测-探索式数据分析

🍨 本文为🔗365天深度学习训练营 中的学习记录博客🍖 原作者:K同学啊 一、实验目的: 根据数据对 RainTomorrow 进行预测,熟悉探索式数据分析(EDA) 二、实验环境: 语言环境…