动态规划--算法

article/2025/9/29 20:52:02

1、动态规划:将求解问题分解成若干个子问题,求解子问题,这些子问题不是独立的

  求解后的子问题都会记录到表中,每个子问题仅求解一次,  下次遇到这些子问题直接取解

自底向上的方式计算最优解

2、最优子结构:如果一个问题的最优解中包含了子问题的最优解,说明该问题具有最优子解决

3、重叠子问题:

动态规划算法的子问题不是相互独立的,而是有公共的部分,即有重叠子问题,

4、0-1背包问题

构造最优解的时间复杂度  O(n)

算法的时间复杂度 O(n*w)

5、典型案例--最长公共子序列LCS:

6、最优子结构

7、0-1背包问题 

考虑一个背包问题,共有n=5个物品,背包容量为W=10,物品的重量和价值分别为:w={2,2,6,5,4},v={6, 3,5,4,6},求背包问题的最大装包价值。若此为0-1背包问题,分析该问题具有最优子结构,定义递归式为

其中c(i,j)表示i个物品、容量为j的0-1背包问题的最大装包价值,最终要求解c(n,W)。
采用自底向上的动态规划方法求解,得到最大装包价值为( ),算法的时间复杂度为( )。
若此为部分背包问题,首先采用归并排序算法,根据物品的单位重量价值从大到小排序,然后依次将物品放入背包直至所有物品放入背包中或者背包再无容量,则得到的最大装包价值为( ),算法的时间复杂度为( )。

问题1选项
A.11
B.14
C.15
D.16.67

问题2选项
A.Θ(nW)
B.Θ(nlgn)
C.Θ(n2)
D.Θ(nlgnW)

问题3选项
A.11
B.14
C.15
D.16.67

问题4选项
A.Θ(nW)
B.Θ(nlgn)
C.Θ(n2)
D.Θ(nlgnW)

问题1选项--解析

0-1背包问题指的是每种 物品只能选一个

动态规划:自底向上的方式,是价格从高到低依次顺序选择

由于总容量是10,

可以看到装第一个和第五个物品价值是最高的,这时候V=12了,此时已占了6的重量了,还剩4的重量,只能装一个价值为3的2,重量加起来是8,最大价值是13

问题2选项 -- 解析

算法过程是对物品n和背包容量W分别进行比较以找到最优结果,因此时间复杂度为Θ(nW)。

问题3选项 -- 解析

计算出单位重量v={3 1.5   5/6   0.8   1.5}, 可以看到1  2  5的单位价值最高,

选择1、2、5后背包重量(2+2+4)=8 ,还有2个重量可以选择3得  2*(5/6)= 5/3 的价值,就是1.67,所以第三空3 *2 + 1.5*2 +  1.5*4  + 2*(5/6)  =  16.67。

问题4选项--解析

时间复杂度,本题先进行归并排序,然后再根据有序序列来选择放入背包的物品,因此算法分两部分,首先是归并排序时间复杂度为Θ(nlgn),然后是放背包,因为已经排过序,所以只需要线性处理即可,此时时间复杂度为Θ(n),综合起来,由于Θ(nlgn)>Θ(n),因此整体时间复杂度为Θ(nlgn)。

 8、最长公共子序列LCS:中间不必连续

最优子结构

 子序列: 给定字符串str = "ABCDADNENXY",从str中任意去掉若干个(含0个)字符,剩下的就是这个str的子序列,如ABC, ABXY, DADXY等,中间不必连续.

子串:和子序列不同,子串必须是连续的,如ABCD,ENXY,CDADNE都是子串,而AXY不是,因为中间断开了,把连续.

子串必定是子序列,子序列不一定是子串.

 给出字符串str1和str2,如果一个字符串s同是str1和str2的子序列,则称s为二者的公共子序列,如果s最长,则称s为最长公共子序列,即LCS.

9、求解两个长度为n的序列X和Y的一个最长公共子序列(如序列ABCBDAB和BDCABA的一个最长公共子序列为BCBA)可以采用多种计算方法。如可以采用蛮力法,对X的每一个子序列,判断其是否也是Y的子序列,最后求出最长的即可,该方法的时间复杂度为(  )。经分析发现该问题具有最优子结构,可以定义序列长度分别为i和j的两个序列X和Y的最长公共子序列的长度为C[i,j],如下式所示。

采用自底向上的方法实现该算法,则时间复杂度为(  )。

问题1选项
A.O(n²)
B.O(n²lgn)
C.O(n³)
D.O(n2n)

问题2选项
A.O(n²)
B.O(n²lgn)
C.O(n³)
D.O(n2n)

第1题:1.X、Y的所有子序列都检查过后即可求出X、Y的最长公共子序列。X的一个子序列相应于下标序列1,2,…,n的一个子序列。因此,X共有2n个子序列。当然,Y也有2m个子序列。判断一个子序列是否也是Y的子序列的时间是n,因此时间复杂度为O(n2n)

问题2. 动态规划的一个计算最长公共子序列的方法如下,两个序列 X、Y :
设有二维数组 c[i][j] 表示 X 的 i 位和 Y 的 j 位之前的最长公共子序列的长度,则有题干给定的函数表现形式:
其中,c(i,j)当 X 的第i位与 Y 的第 j 位完全相同时为“1” ,否则为“0” 。
此时,c[i][j]中最大的数便是 X 和 Y 的最长公共子序列的长度,依据该数组回溯,便可找出最长公共子序列。该算法的空间、时间复杂度均为O(n2)。

10、在求解某问题时,经过分析发现该问题具有最优子结构性质,求解过程中子问题被重复求解,则采用(  )算法设计策略;若定义问题的解空间,以深度优先的方式搜索解空间,则采用(  )算法设计策略。

问题1选项  B
A.分治
B.动态规划
C.贪心
D.回溯

问题2选项   C
A.动态规划
B.贪心
C.回溯
D.分支限界

分治法的设计思想是将一个难以直接解决的大问题分解成一些规模较少的相同问题以便各个击破,分而治之。
动态规划法与分治法类似,其基本思想也是将待求解问题分解成若干个子问题,先求解子问题,然后从这些子问题的解得到原问题的解。与分治法不同的是,适合于用动态规划法求解的问题,经分解得到的子问题往往不是独立的。若用分治法来解这类问题,则相同的子问题会被求解多次,以至于最后解决原问题需要耗费指数级时间。动态规划法可求解的问题一般具有最优子结构和重叠子问题,因此本题第一空选择B选项动态规划法。
贪心法经常用于解决最优化问题,但他的最优往往是从局部最优来考虑的,每一步都选最优的方案,但这种方案不一定能得到整体上的最优解。
回溯法是一种既带有系统性又带有跳跃性的搜索算法。它在包含问题的所有解的解空间树中,按照深度优先的策略,从根节点出发搜索解空间树

 


http://chatgpt.dhexx.cn/article/Ho49TtCb.shtml

相关文章

TSP问题,动态规划法

TSP问题是指旅行家要旅行n个城市,要求各个城市经历且仅经历一次然后回到出发城市,并要求所走的路程最短。各个城市间的距离可以用代价矩阵来表示。 假设从顶点i出发,令d(i, V)表示从顶点i出发经过V中各个顶点一次且仅一次,最后…

动态规划法的基本知识

一、动态规划方法相关概念 1、20世纪50年代初美国数学家R.E.Bellman等人在研究多阶段决策过程(multistep decision process)的优化问题时,提出了著名的最优性原理(principle of optimality),同时,把多阶段过程转化为一系列单阶段问题,利用各阶…

动态规划法及其优化

在很多问题中,动态规划算法是我们的最优选择,比起递归算法,动态规划算法的时间复杂度和空间复杂度都更加优越,可以处理的数据规模更大。但是,动态优化算法的时间复杂度为O(N*V),也就…

算法设计与分析之动态规划法

文章目录 前言一、动态规划法概述二、动态规划法设计思想三、动态规划法的基本要素四、动态规划算法的设计步骤五、动态规划法与分治法六、动态规划法与贪心法七、动态规划法示例总结 前言 大家好,我是一只勤勤恳恳的程序猿。本篇文章小猿将跟您分享算法设计与分析中…

算法-动态规划法

动态规划是在20世纪50年代由美国数学家贝尔曼为研究最优控制问题而提出的,当该方法在应用数学中的价值被大家认同以后,在计算机学界,动态规划法成为一种通用的算法设计技术用来求解多阶段决策最优化问题。 所以,同学们&#xff0…

动态规划算法

一 动态规划算法 动态规划(Dynamic Programming)算法的核心思想是:将大问题划分为小问题进行解决,从而一步步获取最优解的处理算法。 动态规划算法与分治算法类似。其基本思想也是将待求解问题分解成若干个子问题,先求解子问题,…

经典中的经典算法:动态规划(详细解释,从入门到实践,逐步讲解)

动态规划的重要性就不多说,直接进入正题 首先,我们看一下官方定义:定义: 动态规划算法是通过拆分问题,定义问题状态和状态之间的关系,使得问题能够以递推(或者说分治)的方式去解决。 动态规划算法的基本思想与分治法类似&#xf…

目标检测中的多尺度特征结合方式

目录 简述 解构物体检测各个阶段 FPN的演进 1)无融合 2)自上而下单向融合 a)Faster/Master/Cascade RCNN中的FPN b)RetinaNet中的FPN c)Yolov3中的FPN 3)简单双向融合 4)复杂的双向融…

总结-CNN中的目标多尺度处理

Fly-AI竞赛服务平台 flyai.com 在开始学习之前推荐大家可以多在 FlyAI竞赛服务平台多参加训练和竞赛,以此来提升自己的能力。FlyAI是为AI开发者提供数据竞赛并支持GPU离线训练的一站式服务平台。每周免费提供项目开源算法样例,支持算法能力变现以及快…

【MFEN:轻量级多尺度特征提取:SR网络】

MFEN: Lightweight multi-scale feature extraction super-resolution network in embedded system (MFEN:嵌入式轻量级多尺度特征提取超分辨率网络) 深度卷积神经网络(CNN)在超分辨率(SR)方面…

深度学习笔记---多尺度网络结构归类总结

目录 1.什么是图像金字塔 1.1 高斯金字塔 ( Gaussian pyramid): 1.2 拉普拉斯金字塔(Laplacian pyramid) 1.3 DOG金字塔 2. 多尺度网络(MTCNN) 2.1 多尺度输入网络 2.2 多尺度特征融合网络 2.2.1 并行多分支网络 2.2.2 串行…

【边缘注意:深度多尺度特征】

Learning a Deep Multi-Scale Feature Ensemble and an Edge-Attention Guidance for Image Fusion (学习深度多尺度特征集成和图像融合的边缘注意指南) 在本文中,我们提出了一种用于红外和可见光图像融合的深度网络,该网络将具…

多尺度特征的提取

1、图像金字塔 将图片进行不同尺度的缩放,得到图像金字塔,然后对每层图片提取不同尺度的特征,得到特征图。一幅图像的金字塔是一系列以金字塔形状排列的分辨率逐步降低,且来源于同一张原始图的图像集合。其通过梯次向下采样获得&…

MSRN(多尺度超分辨率重建)

目前的研究倾向于使用更深层次的卷积神经网络来提高性能。然而,盲目增加网络深度不能有效改善网络。更糟糕的是,随着网络深度的增加,训练过程中出现了更多的问题,需要更多的训练技巧。在本文中,我们提出了一种新颖的多尺度残差网络 (MSRN) 来充分利用图像特征,该网络优于…

【multi_scale】多尺度训练——目标检测训练trick

文章目录 1 多尺度训练的介绍2 代码解析3 感谢链接 1 多尺度训练的介绍 多尺度训练对全卷积网络有效,在训练时,每隔一定的 iterations,在一定尺寸范围内,随机选取一种 img_size 进行训练。通过对不同尺度的图像进行训练&#xff…

“多尺度”目标检测问题

一、“多尺度”目标检测问题简介 在目标检测任务中,被测目标的大小经常是不固定的,自动驾驶相关检测任务可能要同时检测大卡车与小狗;工业质检相关检测任务可能要同时检测布料的大面积撕裂与小穿孔;医疗病灶检测任务可能要同时检测大小不一的病灶。在被测物体尺度相差极大…

图像多尺度技术

1197 多尺度图像技术也叫做多分辨率技术(MRA),指对图像采用多尺度的表达,并且在不同尺度下分别进行处理。这样做的理由是很多情况下在一种尺度中不容易看清的或者获取的特性在另外的某种尺度下就很容易发现或者是提取。所以多尺度…

目标检测中多尺度:特征金字塔FPN_Feature Pyramid Networks for Object Detection

原始内容来源于: https://blog.csdn.net/cdknight_happy/article/details/100528127 https://blog.csdn.net/WZZ18191171661/article/details/79494534 包含理解! 参考文献:https://arxiv.org/abs/1612.03144 代码实现:http://ww…

MViTv2 多尺度视觉Transformer

虽然VIT(vision transformer)模型提出后,Transformer在CV领域一路攻城拔寨,不断刷新由自己创下的记录,但VIT文章中所说明的视觉领域transformer很大程度上受transformer模型平方复杂度的限制而在大尺度图像上表现不佳的…

综述:目标检测中的多尺度检测方法

传统卷积网络通常采用从上到下的单行结构。对于大物体而言,其语义信息将出现在较深的特征图中;而对于小物体,其语义信息出现在较浅的特征图中,随着网络的加深,其细节信息可能会完全消失。 多尺度检测也是当今物体检测领…