第4-4课:状态压缩与动态规划

算法设计实战 50 讲
专栏收录该内容
¥49.90
¥99.00
50 篇文章

什么是状态压缩

动态规划问题中重要的一环就是确定状态的定义,在大多数情况下,状态中所包含的信息并不多,比如线性规划问题的状态一般表示为 d[i,j](i 表示状态的位置,j 表示状态的阶段),算法实现时可用二维数组保存计算过程中的状态。但是也有一些问题,它的状态中包含的信息很多,比如它的状态可能是一个集合中各个元素的情况,或者是像铺瓷砖问题这样,是某一行的覆盖状态。如果沿用简单的状态表示方法,则可能会用到 N 维数组,这样不仅空间占用大,而且状态的转移(状态递推公式)算法也会非常复杂。不信?读者猜猜这个状态 d[i, j, k, l, m, n, o, p, q, r, s, t] 的下一个状态是什么,是 t + 1 还是 q + 1 ?

在这种情况下,如果我们能用一种编码策略,将前面例子中的 j, k, l, m, n, o, p, q, r, s, t 编码成一个整数数字,就可以将状态简化成 d[i, encode(j, k, l, m, n, o, p, q, r, s, t)],这种情况下就可以用二维数组来保存状态,并且状态的递推公式也会简单很多。这种策略看起来好像状态被“压缩”了,所以被称为状态压缩动态规划。

状态压缩和动态规划

严格来说,状态压缩是状态压缩,动态规划是动态规划,是算法模式,它们只是碰巧一起发生了而已。这种通过某种编码和解码方式将某些离散的信息(比如集合中各个元素的状态)转化成某种简单数值类型进行计算和处理的方法,在很多算法中都有体现,并非状态规划独有的方法。最常见的就是各种 hash 算法,通过比较 hash 值的方法比较原始数据的差异要比直接比较原始数据简单高效。

根据解题的经验(很多资料都是这么认为的),当一个题目具有以下两个特征的时候,就可以高度怀

VIP 【状压DP】状态压缩动态规划入门超详解 状压DP一、概述1.状态压缩2.使用条件3.状压DP二、位运算三、例题引入入门例题【例1】填满棋盘入门例题【例二】玉米地 感觉好多讲状压DP的博客都有点乱,我就结合各路大佬的博客,加上我自己的理解,总结出一篇博客来,供初学者参考 一、概述 1.状态压缩 状态压缩就是使用某种方法,简明扼要地以最小代价来表示某种状态,通常是用一串01数字(二进制数)来表示各个点的状态。这就要求使用状态压缩的对象的点的... 开通可读全文·1.1w 阅读·86 点赞·245 收藏 阅读全文

相关推荐

C++ 算法篇 动态规划----状态压缩

一、总述 状态压缩动态规划,就是我们俗称的状压DP,是利用计算机二进制的性质来描述状态的一种DP方式。 很多棋盘问题都运用到了状压,同时,状压也很经常和BFS及DP连用。 状压dp其实就是将状态压缩成2进制来保存 其特征就是看起来有点像搜索,每个格子的状态只有1或0 ,是另一类非常典型的动态规划 举个例子:有一个大小为n*n的农田,我们可以在任意处种田,现在来描述一下某一行的某种状态: 设n = 9; 有二进制数 100011011(九位),每一位表示该农田是否被占用,1表示用了,0表示没用,这

流年的博客 3985

详解状态压缩动态规划算法

本文始发于个人公众号:TechFlow,原创不易,求个关注 今天是算法与数据结构专题的第16篇,也是动态规划系列的第5篇。 今天文章的内容是动态规划当中非常常见的一个分支——状态压缩动态规划,很多人对于状态压缩畏惧如虎,但其实并没有那么难,希望我今天的文章能带你们学到这个经典的应用。 二进制表示状态 在讲解多重背包问题的时候,我们曾经讲过二进制表示法来解决多重背包。利用二进制的性质,将多个物品拆...

TechFlow的博客 2436

动态规划(10):状态压缩

状态压缩动态规划利用二进制位运算高效处理组合优化问题,适用于状态空间较小(如n≤20)且涉及元素组合的场景。核心思想是将元素选择状态编码为整数,通过位运算实现简洁的状态表示和转移。经典应用包括旅行商问题(TSP)和集合划分问题:TSP解法用二进制位标记访问城市,空间复杂度O(n·2ⁿ);集合划分问题则优化子集分配方案。该方法的优势在于状态表示简洁、转移高效、内存占用小,特别适合解决需要枚举组合关系的NP难问题,相比暴力搜索显著提升效率。

分享一些感兴趣的技术方面 1033

动态规划之状态压缩DP详细介绍和例题练习

状态压缩DP 状态压缩DP例题练习

Carroll的博客 2360

九、状态压缩 DP

维护一个集合的状态,常常用 int 或 bool 类型的数组进行表达与描述。如果这个集合包含的元素个数很少,就把描述集合状态的数组压缩到一个整数中,这种 用一个整数来描述一个集合的方法就叫作“状态压缩”。而当状态的某个维度存储的是一个集合的状态,这类问题就称作:状态压缩动态规划。

yake1965 930

【动态规划】【状态压缩】【2次选择】【广度搜索】1494. 并行课程 II

给你一个整数 n 表示某所大学里课程的数目,编号为 1 到 n ,数组 relations 中, relations[i] = [xi, yi] 表示一个先修课的关系,也就是课程 xi 必须在课程 yi 之前上。同时你还有一个整数 k 。 在一个学期中,你 最多 可以同时上 k 门课,前提是这些课的先修课在之前的学期里已经上过了。 请你返回上完所有课最少需要多少个学期。题目保证一定存在一种上完所有课的方式。

闻缺陷则喜何志丹 3303

acm 算法 动态规划之状态压缩

动态规划之状态压缩 解决一类十分让人头痛的动态规划问题

ESP32实战指南:SPI驱动ADXL345三轴加速度传感器的精准数据采集与姿态解算

本文详细介绍了如何使用ESP32通过SPI接口驱动ADXL345三轴加速度传感器,实现精准数据采集与姿态解算。从硬件连接到SPI通信优化,再到数据处理和低功耗策略,提供了全面的实战指南。特别适合物联网开发者和硬件工程师参考,帮助快速掌握传感器数据采集技术。

vim8coder的博客 1037

微波无源器件 功分器1 新型方波导双模无功功分器

本名证明了一种基于有着特定功能的(dedicated)T性匹配元件(散射件)的进化结点的新型波导双模两路功分器的可行性。这个散射件,有着面向三个部分的匹配部分,提供了等效功分并且朝着对应的输出端口传输矩形波导的两个TE10/TE01正交模式。所提出的设计紧凑,易于比例变化并且能够级联来获得。

qq_45245770的博客 1380

2021-8-14 EDK II编译

2021-8-14 EDK II 编译为什么要写这篇文章新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入 为什么要写这篇文章 你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdo

qq_45775660的博客 2942

LabVIEW与MySQL的连接:软件下载与安装至UDL文件创建全过程

依据个人经验编辑的十分完备的使用教程

tiaowudexiaoyu的博客 5565

UE5 StateTree实战:用分层状态机重构你的AI行为逻辑(附蓝图配置避坑点)

本文详细介绍了UE5中StateTree分层状态机的实战应用,帮助开发者重构AI行为逻辑。通过核心概念解析、迁移策略、高级技巧和避坑指南,展示了StateTree在灵活性、可维护性和并行处理方面的优势,特别适合复杂AI行为的开发与优化。

weixin_42558257的博客 240

MoveIt 运动学、运动规划、混合规划、move_group

混合规划是运动规划方法的一个术语,它将异构运动规划器结合起来,以产生更稳健或反应更快的解决方案。这种通用方法在导航领域已经非常成熟,并在导航2等流行项目中成功实施。MoveIt 的混合规划架构结合了一对全局规划器和局部规划器,它们以不同的规划速度和问题范围并行、并发运行。全局规划器的任务是解决全局运动规划问题,这与 “感知-规划-行动 ”应用中使用的规划器非常相似。所使用的规划器算法应该是完整的,因此假定其计算时间相对较慢。此外,全局规划器不要求实时安全,这意味着无法保证规划器在特定期限内找到解决方案。

机器人控制与仿真应用 2122

uniapp中使用canvas生成海报,并下载保存到手机相册

如下图,是在H5中,canvas生成后的效果,首先说明,H5不支持返回图片的临时路径,不能用于保存,APP端生成成功后,会返回图片的临时路径用来保存到相册。本地测试,用的网络图片,没有出现跨域的问题,APP端也正常显示。 完整代码:可以将整个代码复制到你得uniapp项目中直接运行。代码中做了详细的注册,关于API的用法,这里只标注的简单的提示,具体还是参考 官方链接uniapp-canvas吧 <template> <view class="demo"> <c.

sunluyi的博客 3万+

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

上一篇: 第4-5课:铺瓷砖问题
下一篇: 第4-3课:凸多边形最优三角剖分问题

双11狂欢大促

盲盒赢 定制羽绒服

开启惊喜盲盒,抽取你的专属好礼

— 惊喜奖品抢先看 —
吹泡泡的小猫
吹泡泡的小猫 领域专家: 算法与数据结构技术领域 领域专家: 算法与数据结构技术领域
博客等级 码龄27年 9898粉丝 206原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

吹泡泡的小猫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值