【重叠子问题定义】-你真的懂重叠子问题吗?

如果你对其他算法知识感兴趣的话,可以考虑阅读我的专栏:

算法设计与分析【专栏】

重叠子问题

事情经过

  今天,我在做动态规划算法相关实验的时候,考虑到了动态规划的两大特性: 最优子结构和重叠子问题。

  最优子结构的话,没什么好说的,就是原问题的最优解包含子问题的最优解。如果大家不理解的话,我就粗略的介绍一下我的理解:一个国家中有一名最强力的士兵(也就是问题的最优解),那么他必须是他所在军营中最强力的士兵(也是子问题的最优解),这样他才可能是这个国家最强力的士兵。

  其中重叠子问题引起了我的注意,以前我对于这个概念就是一知半解的,经过我在网上粗略的查询了一下,网上大部分人对这个概念的理解为:子问题之间计算重复太多次,可以通过填表来解决这个问题。

  此时我就纳闷了,这么说的话,那么动态规划就还应该有一个特性啊,也就是子问题之间不重叠(这个是区分分治算法的关键,我认为很重要)。

  于是我便去粗略的查找了书籍,发现书上并没有对此的专门解释(也有可能有,我没找到),于是我便自己总结了一下:

重复子问题:子问题的计算出现重复,填表解决。
重叠子问题:子问题之间有重叠。

  然后就是沉醉在:我好厉害啊!我都会自己定义名词了!以后就叫小王定理吧!

  抽完风之后,我便开始在网上认真寻找重叠子问题的概念了,皇天不负有心人,终于让我在有道上找到了专门的解释(也就是下图)。
在这里插入图片描述
  那这么说的话,动态规划的特性就可以总结为:最优子结构性质和重叠子问题。(小王定理没了!)

  虽然结果和我当初想的不太一样,但这次经历还是让我欣喜半天(尤其是我自己定义名词的时候),我也对这个名词有了更加深刻的印象,也希望大多数人也不要想我当初一样,在理解的时候被误导了。

  这时我又产生了新的疑问,导致重复计算的原因会不会是子问题之间的不重叠呢(我脑溢血想出来的)?希望大家可以发表一下自己的观点,以上都是本人的粗略看法,希望大神勿喷。

后话

  1. 首先给大家说一下,博主经常在线,如果有什么问题或者想法,可以在下方评论,我会积极反馈的。
  2. 其次还是要请大家能够多多指出问题,我也会在评论区等候大家!
    在这里插入图片描述 .
  • 18
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 11
    评论
Description 在讲动态规划课时,我们知道可用动态规划算法求解的问题应具备的一个基本要素是问题重叠性质,矩阵连乘问题能用动态规划求解正是因为它具有重叠问题。因此在解矩阵连乘问题的自顶向下的递归算法中,存在着大量的重叠问题计算。例如要计算4个矩阵A1A2A3A4最小连乘次数,要分别计算A1(A2A3A4)、(A1A2)(A3A4)和(A1A2A3)A4三种情况下的最小连乘次数,而计算A1(A2A3A4)的最小连乘次数要计算其问题A2A3A4的最小连乘次数,A2A3A4最小连乘次数的计算有二种情况(A2A3)A4和A2(A3A4),它分别包括求A2A3和A3A4两个问题。同理,计算(A1A2)(A3A4)包含A1A2和A3A4两个问题;计算(A1A2A3)A4包含计算A1A2A3、A1A2和A2A3这三个问题。故在解A1A2A3A4的最小连乘次数时,其问题的计算和重叠次数分别是: A1A2计算2次,重叠1次;A2A3计算2次,重叠1次;A3A4计算2次,重叠1次;A1A2A3只计算1次;A2A3A4只计算1次;A1A2A3A4只计算1次。因此,4个矩阵A1A2A3A4连乘的重叠问题分别为:A1A2、A2A3和A3A4的计算各重叠一次。现在你的编程任务是:对于n个矩阵连乘,求其重叠问题的计算次数。 Input 第一行是1个整数n(2≤n≤300),表示有n个矩阵连乘,接下来一行有n+1个数,表示是n个矩阵的行及第n个矩阵的列,它们之间用空格隔开. Output 输出重叠问题计算次数和对应的问题,中间以空格隔开,各问题重叠次数输出分别以A1、A2、… An打头的次序依次输出,格式如样例所示。如没有重叠问题输出NO Sample Input 4 30 35 15 5 10 Sample Output 1 A1A2 1 A2A3 1 A3A4
绝对定位是一种在网页布局中使用的技术,可以将元素从正常文档流中移除,并根据指定的位置属性放置在页面上。使用绝对定位的元素可以通过设置不同的位置属性来实现重叠效果。 要实现元素的重叠,可以使用以下步骤: 1. 确保父元素有相对定位或绝对定位的属性。这是因为绝对定位的元素是相对于最近的具有定位属性的父元素进行定位的。 2. 使用绝对定位将元素移出正常文档流,并通过设置`position: absolute;`来实现。这样元素就可以独立于其他元素进行定位。 3. 设置元素的`top`、`right`、`bottom`和`left`属性来控制元素在父元素内的位置。这些属性定义元素相对于父元素边界的距离。 4. 调整元素的`z-index`属性来控制重叠顺序。较高的`z-index`值将使元素在层叠顺序中位于较高位置。 下面是一个示例代码,演示了如何使用绝对定位实现元素重叠效果: ```html <style> .parent { position: relative; width: 200px; height: 200px; } .child { position: absolute; top: 10px; left: 10px; width: 100px; height: 100px; background-color: red; z-index: 1; } .child2 { position: absolute; top: 20px; left: 20px; width: 100px; height: 100px; background-color: blue; z-index: 2; } </style> <div class="parent"> <div class="child"></div> <div class="child2"></div> </div> ``` 在上述示例中,`.parent`是父元素,它具有相对定位。`.child`和`.child2`是绝对定位的元素,`.child2`的`z-index`值较高,所以它会覆盖在`.child`之上,实现了重叠效果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值