第8章:动态规划——《算法笔记

多阶段决策过程最优

问题由交叠的子问题构成

子问题:一次求解,永久保存

函数幂等

动态规划不但可以作为特殊的空间换时间权衡技术,

也可以经改进避免使用额外的空间

经典自底向上:需要求解所有子问题

试图避免不必要的子问题求解:递归

共同点:递推式

最优化法则:问题最优——子问题最优

反例:最长简单路径

例子:

一排硬币,选不相邻,总金额最大

前 i 枚最大+是否选i+1

问题描述

无限硬币,最少数目找零

总金额为n的最少的硬币数=某个面值d+总金额为(n-d)的最少的硬币数

左上角到右下角爬格子收集硬币

当前位置=max(左一格,上一格)

背包

n个物品,重量wi,价值vi,总承重W,最大化价值

是否包含物品i

记忆化功能:

自顶向下求解,记录已求解子问题

问题分解(递归思想)

问题构造(迭代思想)

问题分解为子问题的第一步:分解出最小可执行子问题

或分解为两个子问题

最优二叉查找树

满足左<父<右

元素查找概率已知  

 最优=左子树最优+右子树最优+父节点

C(i,j)=min(C(i,k-1)+C(i,k+1))+all(p(i-j))

Warshall:有向图传递闭包

Flody:全部最短路径

有向图传递闭包:两点是否存在路径

深搜广搜得到:路径重复

n阶布尔矩阵

R0——Rn

自身可达——最大长度路径n-1!

不是矩阵乘法

完全最短路径

最短路径:距离矩阵

不包含负回路,包含?

矩阵中任意元素可由直接前驱计算得到

斐波那契

问题转换为斐波那契形式:内存优化

矩阵k:中间节点编号不大于k

适当初始化完成减枝?

习题:

1.

单元格路径:存在不可达点

木条切割:不同长度价格不同

堆分配可以借鉴么

象棋车

对角到对角

最短路径数目

排列组合/动态规划

计算二项式系数

有向无环图最长路径

决定了有前驱依赖任务的最少?时间

币值问题转化

矩阵内寻找最大0子方阵

AB比赛,直到一方n场胜利

A单场胜概率

AB已胜场次

获胜概率

背包:

自顶向下,自底向上

表每行每列

行间列间关系

数量不限

表格:不被求解的问题

直接可用的表格

最长公共子列

最优串?

多边形三角划分

3.

线性时间构造最优二叉树

常量时间

求和公式

构造最优二叉树的动态规划

查找概率的分布

等查找概率

构造不同的二叉查找树

数目

推广到搜索不成功

记忆功能求解最优二叉树

4.

传递闭包

不使用额外存储空间

改写循环,优化部分输入情况

矩阵:行列表

位串列表(位或操作)

有向图无向图

权重为负

.4.8

加强Floyd:同时求出最短路径

原文地址:https://www.cnblogs.com/qmcj/p/9131764.html