Boy*_*ang -1 algorithm dynamic-programming
我发现动态编程有点技巧性和要求。但是由于我希望自己成为一名合格的软件工程师,所以我想知道DP会在哪些开发场景中大量使用,或者换句话说,在基于现代计算机的开发中是否有实际用途?
如果您考虑在 spring 框架中广泛使用的代理模式和动态代理等设计模式,DP 似乎只在技术面试中有用。
此外,并行计算和分布式系统的应用似乎并不容易在现代计算机环境中赋能 DP。
是否有一些不罕见的场景,DP 以非常实用的方式被广泛使用?请原谅我的无知,因为我没有在真正的生产级开发中遇到DP,这让我怀疑深入DP的意义。
我同意@ Matt Timmermans。
如果有一天你不得不使用 DP,你就不会了解 DP。通过练习 DP,您将学习思考问题的方法,这将使您成为更好的开发人员。10年后,没有人会关心spring框架,但你从DP学到的技术仍然会很好地为你服务。
现在,逐个回答您的问题:
1) 如果我们有现代计算机,为什么要使用 DP?
我认为您对现代计算机的类比和对 DP 的需求感到困惑。尽管现代计算机的处理能力很强大,但您可能会想,如果我有现代快速处理器来运行我的应用程序,为什么我需要 DP。
并非所有任务都可以在这些现代计算机上执行,因为它们会带来存储、网络和计算成本。事实上,作为工程师,我们应该考虑优化这些资源的使用,即让您的代码高效,使其能够在最低系统配置下运行。
在当今世界,我们有一个共享的服务架构。这意味着不同的独立服务共享资源。但事实是它们是间接相互依存的。想象一下如果未优化的代码消耗大量内存和计算时间会发生什么。这些处理器在为其他服务或应用程序分配资源时将面临困难。
问题是,“如果多卧室公寓可以满足我的需求,并且为其他人在同一公寓购买公寓创造了机会,我为什么还要买公寓?”
2)技术面试中的DP
使 DP 成为对 ace 最具挑战性的主题的事实是 DP 中的变体数量。
它会检查您将困难任务分解为小任务的能力,以避免声誉受损,从而节省时间、精力和整体资源。
这是DP成为技术面试一部分的最主要原因之一。
DP 不仅教你优化和学习有用的东西,而且还突出了编写代码的不良做法。
3)DP在现实生活中的使用
在谷歌地图中从各种可用路径中找出源和一系列目的地(一个一个)之间的最短路径。
在网络中以顺序方式将数据从发送方传输到各个接收方。
文档距离算法——识别谷歌、维基百科、Quora 和其他网站等搜索引擎使用的两个文本文档之间的相似程度
编辑拼写检查器中使用的距离算法。
将常见查询缓存在内存中的数据库:通过专用缓存层存储数据以避免数据库访问,Web 服务器存储常见数据,如可跨请求使用的配置。然后在每个请求中的代码抽象中进行多级缓存,以防止多次获取相同的数据并通过避免重新计算来节省 CPU 周期。最后,浏览器或手机中的缓存会保存不需要每次都从服务器获取的数据。
Git合并。文档差异是 LCS 最突出的用途之一。
TeX 的系统中使用了动态编程来计算正确数量的连字符和理由。
遗传算法。
另外,我在Quora上找到了一个很好的答案,其中列出了可以使用 DP 的领域:
运筹学、决策制定、查询优化、水资源工程、经济学、水库运营问题、连接语音识别、斜坡稳定性分析、使用 Matlab、使用 Excel、单位承诺、图像处理、最优库存控制、水库运营问题、Sap Abap、序列比对、下水道管理模拟、财务、生产优化、置换问题的遗传算法、Haskell、HTML、医疗保健、水电调度、LISP、线性空间、XML 索引和查询、商业、生物信息学