【第十六天 - 动态规划 介绍】

Q1. 动态规划(Dynamic Programming)是什麽 ?

  • Dynamic programming,简称DP,是一种多阶段决策出最佳解的方法,他会将问题分成子问题、子子问题...,拆成多个子问题进行求解,并且求出最佳解

  • DP 可以大致理解为是分治法 + 记忆法

    • 首先定义出将大问题切割为子问题的方法。
    • 当一个子问题的答案被计算出来後,采取记忆法,将答案储存在记忆体中,避免未来重复计算。
  • 以计算费氏数列为例:
    https://ithelp.ithome.com.tw/upload/images/20210916/20140592kP3sIRgybc.png

  • 计算 f(5):
    https://ithelp.ithome.com.tw/upload/images/20210916/20140592ecvY7JHRxJ.png

  • 可以看到图中绿色的数字都会重复计算,而随着 n 越大,重复计算的会越多。

  • 此时可以将计算过的答案保存在记忆体中,用空间换取时间,大幅节省效能。

参考资料:https://www.gushiciku.cn/pl/pKW7/zh-tw

参考资料:https://codertw.com/程序语言/586675/

Q2. 学会 动态规划概念可以做什麽 ?

  • 动态规划问题在程序竞技比赛中,是经典的问题,常见的问题有:

Lab. 明天要解的题目:53. Maximum Subarray

  • 题目叙述:https://leetcode.com/problems/maximum-subarray/

  • 题目叙述:

    • 题目会给一个 nums 的 list,需要找出至少一个数字的连续值,他们相加的结果会是最大的

    https://ithelp.ithome.com.tw/upload/images/20210916/20140592bFVnlKI9Pf.png

  • 测资的 Input/Output

    • 会给一个 nums 的 list,需要回传连续相加最大的值
      https://ithelp.ithome.com.tw/upload/images/20210916/20140592UM2t0ez2iq.png
  • 题目的条件

    • list 长度在 1~30000 间
    • 每个值借於 -100000 ~ 100000 间
      https://ithelp.ithome.com.tw/upload/images/20210916/20140592Z5mhJoWGAd.png
  • 看完题目,你要思考:

    • 你是否把每个 list 值相加结果储存起来?
    • 你是否能不使用额外使用 list 空间解决这一题?
    • 什麽算法可以不造成超时?

<<:  铁人赛开场就决定是你了,Ruby 30 天刷题修行篇第一话

>>:  [Day 1] 身为一名普通 iOS 开发者所需的程序以外的知识 Intro

【Day10】[资料结构]-杂凑表Hash Table-实作

杂凑表(Hash Table)建立的方法 hash: 杂凑函式 add: 新增资料 search: ...

System Design: 读书心得3

这篇的主题是因为有朋友提到 Database vs Data warehouse 的差别,所以就开始...

找资安工作,怎麽找?要学甚麽?该何去何从?

今天刚好进入铁人赛的一半了, 累,真滴累。虽然单纯看文章,是看不出甚麽端倪, 内容都不是很多,可是都...

Day 6:JUCE 框架基本架构

本文介绍 Projucer 建立的 GUI Application 框架基本架构。框架(Framew...

Day 26.

更新: Bug解掉了,在第28天 今天真的没办法思考.. 还没抓到昨天的错误是为什麽,然後接下来的学...