【问题标题】:Application of dynamic programming in real world programming [closed]动态规划在现实世界编程中的应用
【发布时间】:2020-11-05 16:02:54
【问题描述】:

我发现动态编程有点技巧和要求。但是由于我希望自己成为一名合格的软件工程师,我想知道DP将在哪些开发场景中大量使用,或者说在基于现代计算机的开发中是否有实际用途?

如果你想像代理模式和动态代理这样的设计模式,它们在spring框架中被广泛使用,DP似乎只在技术面试中有用。

此外,并行计算和分布式系统的应用似乎并不容易在现代计算机环境中赋能 DP。

是否有任何不罕见的场景以非常实用的方式广泛使用 DP? 请原谅我的无知,因为我没有接触过真正的生产级开发的DP,这让我怀疑挖掘DP的意义。

【问题讨论】:

  • DP 可用于编码许多不同的软件应用程序
  • 我在现实生活中多次使用 DP —— 不是为了一件普通的事情,因为人们为普通的事情编写库,而是为了一些不寻常的事情。但是,您提出这个问题的事实表明您正在以错误的方式思考事情。如果有一天你不得不使用 DP,你不会了解 DP。通过练习 DP,您可以学习思考问题的方法,这将使您成为更好的开发人员。 10 年后没人会关心 spring 框架,但是你从 DP 那里学到的技术仍然可以很好地为你服务。
  • @MattTimmermans 也许10年后没人会关心spring框架,但软件设计和架构会被继承。但我只是不确定我从 DP 学到的东西是否真的会在未来 10 年内对我有所帮助。
  • 听起来他们不会。

标签: algorithm dynamic-programming


【解决方案1】:

我同意 @Matt Timmermans 的观点。

你不了解 DP,以防有一天你必须使用 DP。通过练习 DP,您可以学习思考问题的方法,这将使您成为更好的开发人员。 10年后,没有人会关心spring框架,但你从DP那里学到的技术,仍然会为你服务。

现在,部分回答您的问题:

1) 如果我们有现代计算机,为什么要 DP?

我认为您对现代计算机的类比和对 DP 的需求感到困惑。尽管现代计算机的处理能力很强大,但您可能会想,如果我有现代快速处理器来运行我的应用程序,我为什么需要 DP。

并不是每项任务都可以在这些现代计算机上执行,因为它们会产生存储、网络和计算成本。事实上,作为一名工程师,我们应该考虑优化这些资源的使用,即让您的代码高效,使其能够在最低系统配置上运行。

在当今世界,我们拥有共享服务架构。这意味着不同的独立服务共享资源。但事实是它们间接地相互依赖。想象一下,如果未优化的代码消耗大量内存和计算时间会发生什么。这些处理器将面临为其他服务或应用程序分配资源的困难。

问题是,“如果多居室公寓既能满足我的需求,又能为其他人在同一间公寓里购买公寓创造机会,我为什么要买公寓呢?”

2) 技术面试中的 DP

让 DP 成为最具挑战性的话题的事实是 DP 的变化数量。

它检查您将困难任务分解成小任务的能力,以避免声誉受损,从而节省时间、精力和整体资源。

这是 DP 参加技术面试的最主要原因之一。

DP 不仅教你优化和学习有用的东西,而且还突出了编写代码的不良做法。

3) DP在现实生活中的使用

  1. 在 Google 地图中,从各种可用路径中找到源和一系列目的地之间的最短路径(一个接一个)。

  2. 在网络中以顺序方式将数据从发送方传输到各个接收方。

  3. 文档距离算法 - 识别 Google、Wikipedia、Quora 和其他网站等搜索引擎使用的两个文本文档之间的相似程度

  4. 编辑拼写检查器中使用的距离算法。

  5. 在内存中缓存常见查询的数据库:通过专用缓存层存储数据以避免数据库访问,Web 服务器存储常见数据,例如可跨请求使用的配置。然后在每个请求中的代码抽象中进行多级缓存,以防止多次获取相同的数据并通过避免重新计算来节省 CPU 周期。最后,在您的浏览器或手机中进行缓存,以保存不需要每次都从服务器获取的数据。

  6. Git 合并。文档差异是 LCS 最突出的用途之一。

  7. 在 TeX 的系统中使用动态编程来计算正确数量的连字符和对齐方式。

  8. 遗传算法。

另外,我在 Quora 上找到了一个很好的答案,其中列出了可以使用 DP 的领域:

运筹学, 做决定, 查询优化, 水资源工程, 经济学, 水库作业问题, 连接语音识别, 边坡稳定性分析, 使用 Matlab, 使用 Excel, 单位承诺, 图像处理, 最佳库存控制, 水库运行问题, 萨巴普, 序列比对, 下水道管理模拟, 金融, 生产优化, 置换问题的遗传算法, 哈斯克尔, HTML, 卫生保健, 水电调度、 口齿不清, 线性空间, XML 索引和查询, 商业, 生物信息学

【讨论】:

  • 感谢赐教。我不是来争论的,我只是表达我的困惑。世界上有数以百万计的程序员,他们的背景各不相同。有些人可能终其一生都无法了解或使用 DP。有些人总是不分心,总是追求编程的核心,但也有一些人总是根据实际原因学习东西。 @Matt Timmermans
  • 不用担心@BoyuZhang。请记住,即使是有史以来最伟大的程序员在开始编码时也一定遇到过问题!
猜你喜欢
  • 2012-02-27
  • 2023-03-27
  • 2010-09-12
  • 1970-01-01
  • 2011-11-14
  • 2013-11-14
  • 2010-11-04
  • 1970-01-01
相关资源
最近更新 更多