面试必问:动态规划

hello大家好 我是大家的学习成长小伙伴
在这里插入图片描述

动态规划,大家肯定都听过这个名词,这个是很经典的一个解决问题的思路,也是很有技巧的,一般大厂也喜欢问这种类型的问题

今天我们一起来学习一下动态规划到底是个什么

什么是动态规划?

动态规划(英语:Dynamic programming,简称DP)是一种在数学、管理科学、计算机科学、经济学和生物信息学中使用的,通过把原问题分解为相对简单的子问题的方式求解复杂问题的方法。

动态规划常常适用于有重叠子问题[1]和最优子结构性质的问题,动态规划方法所耗时间往往远少于朴素解法。

动态规划背后的基本思想非常简单。大致上,若要解一个给定问题,我们需要解其不同部分(即子问题),再合并子问题的解以得出原问题的解。

通常许多子问题非常相似,为此动态规划法试图仅仅解决每个子问题一次,从而减少计算量:一旦某个给定子问题的解已经算出,则将其记忆化(en:memoization)存储,以便下次需要同一个子问题解之时直接查表。

这种做法在重复子问题的数目关于输入的规模呈指数增长时特别有用。

核心思想

动态规划算法是通过拆分问题,定义问题状态和状态之间的关系,使得问题能够以递推(或者说分治)的方式去解决。

动态规划算法的基本思想与分治法类似,也是将待求解的问题分解为若干个子问题(阶段),按顺序求解子阶段,前一子问题的解,为后一子问题的求解提供了有用的信息。

在求解任一子问题时,列出各种可能的局部解,通过决策保留那些有可能达到最优的局部解,丢弃其他局部解。依次解决各子问题,最后一个子问题就是初始问题的解。

按照定义来看,动态规划就是把一个大问题然后拆分成很多小问题,这个本身是没啥问题的,其实啊,我个人觉得这不是动态规划的核心思想

事实上是任何大问题都能拆解成许多小问题,一个大问题之所以能用动态规划来解决,并不是因为它可以拆解成很多小问题,这不是关键

动态规划的本质不在于是递推或是递归,也不需要纠结是不是内存换时间,本质是解决的这些小问题是否能够被重复调用,这就是问题是否可以用动态规划解决的要素

在这里插入图片描述

我们先来看一个最熟悉的例子

斐波那契数列(Fibonacci polynomial)

计算斐波那契数列(Fibonacci polynomial)的一个最基础的算法是,直接按照定义计算(函数递归):

   function fib(n)
       if n = 0 or n = 1
           return n
       return fib(n − 1) + fib(n − 2

当n=5时,fib(5)的计算过程如下:

 fib(5)
 fib(4) + fib(3)
 (fib(3) + fib(2)) + (fib(2) + fib
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Mybatis是一个流行的Java持久层框架,它提供了许多优点和核心组件。在面试中,以下是一些可能会被到的题和答案: 1. Mybatis的优点有哪些? Mybatis有以下几个优点: - Mybatis提供了灵活且强大的映射机制,可以通过XML或注解来配置和映射原生信息,将POJO映射成数据库的记录。这样可以避免编写大量的JDBC代码,并且不需要手动设置参数和获取结果集。 - Mybatis支持动态SQL,可以根据不同的条件动态生成SQL语句,提供了更好的灵活性和可扩展性。 - Mybatis具有良好的性能和可维护性,可以通过缓存机制来提升查询性能。 - Mybatis与现有的数据库交互技术无缝集成,可以很方便地与Spring等框架集成。 2. Mybatis如何处理#{}? 在处理#{}时,Mybatis会将其转换为?,然后使用PreparedStatement的set方法来设置参数的值。 3. 在使用Mybatis的<if>标签时,为什么需要@Param注解? 当只有一个参数并且在<if>标签里使用时,Mybatis需要通过@Param注解来指定参数的名称,以便正确地组装SQL语句。 4. Mybatis的核心组件有哪些? Mybatis的核心组件包括: - SqlSessionFactory:用于创建SqlSession对象的工厂。 - SqlSession:用于执行数据库操作的核心接口。 - Mapper接口:用于定义数据访接口,通过调用Mapper接口的方法来执行SQL语句。 - Configuration:用于配置并管理Mybatis的各种设置和属性。 以上是一些关于Mybatis的面试常见题和答案,希望对你有帮助。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值