[第三章]动态规划

自底向下

最优子结构

承接子问题

简介

基本思想:分解成若干个子问题,产生许多重复问题;记录中间值,节省时间
基本结构
  • 最优子结构
  • 重叠子问题
  • 备忘录方法
→ 一般求极值问题

矩阵连乘问题

完全加括号的矩阵连乘积

由于矩阵相乘不满足交换律,即a*b*c≠b*c*a
故不同相乘需要的算力不同

穷举法

最长公共子序列

X Y Z,Z是X、Y的公共子序列
  • X最后=Y最后=Z最后,则Zk-1 是Xm-1 和Yn-1的公共子序列
  • X最后≠Y最后=Z最后,则Zk-1 是Xm-1 和Y的公共子序列
  • Y最后≠X最后=Z最后,则Zk-1 是X 和Yn-1 的公共子序列

凸多边形最优三角部分

多边形游戏

n个顶点n条边,每个顶点一个数字,每个边是“+”或“*”
  • 设给的多边形顶点为op[i],边为v[i],i=1~n
    • 设m1是对子链p(i,s)的任意一种合并方式得到的值,设a,b是最小值和最大值,则a≤m≤b。划分之后剩下的

    图像压缩

    • 一个字节八位数
    • l[i]=字数
    • b[i]=n,n指2^n大小的字来存储

    电路布线

    (i)排列从1到n

    流水作业调度

    • Johnson

    01背包问题

     

    课后题


    int a[n],n大约 到n^9
    int a[n][n],n大约到n^5
    • 假设已经找到一段最小值,该最小值开始时间为i,结束时间为k
    • 列出从i到k需要的解的式子
    • 然后找min(本式子加下一个项(递归))
    • 优化算法:剪枝(减少肯定不行的)
    • c++变量可以出现在数组[]的下标,c语言不可以

    编程技巧

    • 前缀/后缀数组
    t[i] 1 3 5 7 9 11数组
    tt[i] 1 4 9 16 25 36前缀数组
    不用嵌套两层循环便可获取当前数组中ai到aj的加和
    dp[i] = min {dp[i] , dp[j]+ fei(i,j) }
     
    • 如果每次循环都会改变循环条件,可以用数组(也可能是二维数组)记录当前值并用于判断
    Prev
    [第二章]递归与分治策略
    Next
    [第四章]贪心算法
    Loading...
    Article List
    一个NotionNext搭建的博客
    数据库系统概论
    大数据原理与应用
    javaWeb应用开发基础教程
    python
    毕业设计
    大数据技术综合应用
    实训-航空数据系统
    java面向对象程序设计
    数据结构
    算法分析与设计
    SPARK
    Python爬虫大数据采集与挖掘
    云计算
    概率论与数理统计
    数字逻辑
    计算机网络
    计算机组成原理
    linux
    操作系统
    人工智能导论
    数据仓库与数据挖掘
    数据可视化
    大数据安全与隐私保护
    c语言
    C++