文章目录
重点1 三种表示方法
主定理
2. 递归式求解(递归树法)
3.
4.排序
5.DP
5.1 装配线调度问题 O(n)
递归表达式
5.2 矩阵链乘问题 O(n3)
递归表达式
5.3 最长公共子序列问题
c[i,j] 从左边起长度i的s1的子串和长度j的s2的子串的最长公共子序列
思考:
1.当s1(i)和s2(j)的最后一个字符相等时,c[i-1,j-1]就比c[i,j]小1
2.当最后一个字符不等时,i-1和j-1都有可能和c[i,j]相等,取两者中最大的即可。
5.3 0-1背包的DP求解 O(C*n)
c[i,w] 表示选前i项物品 背包容量w
填表时选最大值填入,rec数组记录是否将第i个物品放入了背包
追踪时从最终态的商品5开始,13-4=9 去i=5-1 c=9查看上个商品是否在最优解中
前i件商品装背包的最优解,等于
1.前i-1件商品装背包的最优解(第i件商品重量大于背包容积)
2.前i-1件商品 容积-wi的最优解+第i件的价格(说明最后一件可装入)
5.4 最大子数组问题
D[i] 从i开始的子数组的最大和
从最右边开始递归 D[i+1]>0时说明D[i]一定包含D[i+1]
6.贪心策略
6.1 分数背包问题
物品可拆分拿,那么选择价格/重量最高的商品优先即可
6.2 哈夫曼编码
6.3 迪杰斯特拉(单源最短路径算法)O(n2)
注意:环路权值不能为负 否则不能求
松弛定理
每次选最小距离的节点加入s集合中作为新的一跳
利用堆实现dj
V节点数贪心查找跳点最小值的代价,E边数松弛代价
不同的实现方法时间复杂度不同
对于无权值或权值全相等
广度优先搜索(先进先出队列)替代优先队列
BellMan_Ford(O(V*E))
回溯法(八皇后)
回溯法思路的简单描述是:把问题的解空间转化成了图或者树的结构表示,然后使用深度优先搜索策略进行遍历,遍历的过程中记录和寻找所有可行解或者最优解。
分支限界法
广度优先搜索 LCS(最小代价搜索)
分支限界法的基本思想:
求解目标:分支限界法的求解目标则是找出满足约束条件的一个解,或是在满足约束条件的解中找出在某种意义下的最优解。
搜索方式:以广度优先或以最小耗费优先的方式搜索解空间树。分支限界法常以广度优先或以最小耗费(最大效益)优先的方式搜索问题的解空间树。
在分支限界法中,每一个活结点只有一次机会成为扩展结点。活结点一旦成为扩展结点,就一次性产生其所有儿子结点。在这些儿子结点中,导致不可行解或导致非最优解的儿子结点被舍弃,其余儿子结点被加入活结点表中。
此后,从活结点表中取下一结点成为当前扩展结点,并重复上述结点扩展过程。这个过程一直持续到找到所需的解或活结点表为空时为止。