栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

回溯和动态编程之间的区别

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

回溯和动态编程之间的区别

动态编程方法有两种典型的实现方式:从 底部到顶部 和从 顶部到底部

从上到下的动态编程 无非是普通的 递归
,它通过记忆中间子问题的解决方案而得到增强。当给定的子问题第二次(第三,第四…)出现时,它不是从头开始解决的,而是立即使用先前记忆的解决方案。这项技术被称为
备忘录 (在“ i”之前没有“ r”)。

这实际上就是您的斐波那契数列示例所要说明的内容。只需对Fibonacci序列使用递归公式,但

fib(i)
沿此过程构建值表,就可以针对此问题获得自上而下的DP算法(例如,如果需要
fib(5)
第二次计算,则得到而不是从表格中重新计算)。

自下而上的动态编程中,
该方法还基于将子解决方案存储在内存中,但是它们以不同的顺序(从小到大)求解,并且该算法的结果一般结构不是递归的。LCS算法是经典的从下到上的DP示例。

自下而上的DP算法通常效率更高,但是通常很难构建(有时甚至不可能),因为预测要解决整个原始问题所需的原始子问题并不总是那么容易,以及您必须从小子问题中走出的路径,以最有效的方式到达最终解决方案。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/668907.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号