0. 概念
程序与算法的异同点
算法:算法是有穷的合式规则集合,它规定了解决某一特定类型问题的一系列操作。算法是解决问题的方法和过程,是满足下述性质的指令序列:输入,输出,确定性,有限性。
程序:程序是算法用某种程序设计语言的具体实现。程序可以不满足算法的有限性,如操作系统。
程序=编程语言+算法+数据结构
分治法与动态规划的异同点
分治法:分治算法要求子问题相互独立,存在子问题重叠时,分治法复杂度高。分治法对相同子问题将被重复计算多次,浪费计算资源。(重复计算的次数可能超过多项式复杂度)
动态规划:动态规划求解时每个子问题计算一次后保存答案,避免重复计算,节省计算资源。(多项式复杂度)
贪心算法与动态规划算法的异同点
共同点:贪心算法和动态规划算法都要求问题具有最优子结构性质
不同点:
- 动态规划:保留所有子问题的最优解
- **贪心算法:**只求解根据贪心策略确定下来的一个子问题的最优解,只保留一条求解路径。
分支限界法与回溯法比较
BFS 与 DFS
1.算法引论
算法含义:求解一确定问题的某种方法。
算法的性质:输入,输出,确定性,有限性。
程序 = 编程语言 + 算法 + 数据结构
程序可以不满足算法的性质有限性,如操作系统。
研究范畴:数值计算,非数值计算
1.正确性
2.工作量
3.空间用量
4.简单性
5.最佳性
数据分析
(1)比率测试
(2)幂测试
算法复杂度分析
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fXnk7ydR-1629253887319)(C:/Users/DELL/AppData/Roaming/Typora/typora-user-images/image-20210603173419697.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wMxZ9gph-1629253887326)(C:/Users/DELL/AppData/Roaming/Typora/typora-user-images/image-20210603174509612.png)]
时间复杂度的度量
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NFzTuUWy-1629253887329)(C:/Users/DELL/AppData/Roaming/Typora/typora-user-images/image-20210603174619035.png)]
渐进复杂度
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pJhtaVb4-1629253887335)(C:/Users/DELL/AppData/Roaming/Typora/typora-user-images/image-20210603175212620.png)]
O的定义
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZIPvmweh-1629253887340)(C:/Users/DELL/AppData/Roaming/Typora/typora-user-images/image-20210603175450060.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jZ3ddNgO-1629253887344)(C:/Users/DELL/AppData/Roaming/Typora/typora-user-images/image-20210603175529600.png)]
f ( n ) f(n) f(n)是一个具体的函数
g ( n ) g(n) g(n)是一个具体的函数
O ( g ( n ) ) O(g(n)) O(g(n))所有以 g ( n ) g(n) g(n)为上界的函数的集合
在数学中, f ( n ) ∈ O ( g ( n ) ) f(n) ∈ O(g(n)) f(n)∈O(g(n))
在算法中, f ( n ) = O ( g ( n ) ) f(n)=O(g(n)) f(n)=O(g(n))
不能反过来写
O ( g ( n ) ) O(g(n)) O(g(n))也可以表示任意一个以 g ( n ) g(n) g(n)为上界的函数
O ( 1 ) O(1) O(1)表示常数
O O O的运算规则
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-T6ELnNsm-1629253887346)(C:/Users/DELL/AppData/Roaming/Typora/typora-user-images/image-20210603180046154.png)]
例题:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-iG88ldd6-1629253887348)(C:/Users/DELL/AppData/Roaming/Typora/typora-user-images/image-20210603180458986.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XRhRwXsI-1629253887351)(C:/Users/DELL/AppData/Roaming/Typora/typora-user-images/image-20210603180510442.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yUOJga9h-1629253887354)(C:/Users/DELL/AppData/Roaming/Typora/typora-user-images/image-20210603180520769.png)]
Ω Ω Ω数学形式定义
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zdCLjWIO-1629253887357)(C:/Users/DELL/AppData/Roaming/Typora/typora-user-images/image-20210603180921416.png)]
θ \theta θ的定义
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TgIasGFT-1629253887360)(C:/Users/DELL/AppData/Roaming/Typora/typora-user-images/image-20210603181007513.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7DhbpeTM-1629253887362)(C:/Users/DELL/AppData/Roaming/Typora/typora-user-images/image-20210603181019468.png)]
o o o与 ω \omega ω的定义
非紧确上界和非紧确下界
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MgxhR03A-1629253887364)(C:/Users/DELL/AppData/Roaming/Typora/typora-user-images/image-20210603181328134.png)]
常见复杂度
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9w4beEcU-1629253887367)(C:/Users/DELL/AppData/Roaming/Typora/typora-user-images/image-20210603181058239.png)]
2. 递归与分治
递归:
直接或间接地调用自身的算法称为递归算法。用函数自身给出的定义的函数称为递归函数。
分治
将难以直接解决的大问题分割为若干子问题
分别求解各个子问题
再通过子问题的解合并出大问题的解
递归举例
两个要素:边界条件和递归方程
1.阶乘函数
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Kdu4sHyz-1629253887370)(C:/Users/DELL/AppData/Roaming/Typora/typora-user-images/image-20210604210838692.png)]
Fibonacci数列
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CMgE0b2J-1629253887372)(C:/Users/DELL/AppData/Roaming/Typora/typora-user-images/image-20210604211007793.png)]
Ackerman函数
双递归函数
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9RB2szS9-1629253887373)(C:/Users/DELL/AppData/Roaming/Typora/typora-user-images/image-20210604211052321.png)]
- 当 m = 1时,A(n,1) = 2n
- 当 m = 2时,A(n,2) = 2 n 2^n 2n
- 当 m = 3时,A(n,3) =
排列问题
生成 R = r 1 , r 2 , … , r n R = {r_1,r_2,\dots,r_n} R=r1,r2,…,rn中元素的全排列[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4WOO18Pm-1629253887374)(C:/Users/DELL/AppData/Roaming/Typora/typora-user-images/image-20210604211620517.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HBkskgNa-1629253887376)(C:/Users/DELL/AppData/Roaming/Typora/typora-user-images/image-20210604211702585.png)]
整数划分问题
将正整数n表示成一系列正整数之和
n
=
n
1
+
n
2
+
⋯
+
n
k
(
其
中
n
1
≥
n
2
≥
⋯
≥
n
k
≥
1
,
k
≥
1
)
n = n_1+n_2+\dots +n_k (其中n_1 \ge n_2 \ge \dots \ge n_k \ge 1,k \ge 1)
n=n1+n2+⋯+nk(其中n1≥n2≥⋯≥nk≥1,k≥1)
求正整数n的不同划分
按照划分定义,划分最大加数为 n 1 n_1 n1
将最大为m和为n的划分个数记作 q ( n , m ) q(n,m) q(n,m)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yYfwuPku-1629253887378)(C:/Users/DELL/AppData/Roaming/Typora/typora-user-images/image-20210604212638240.png)]
Hanoi塔问题
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-282oi3L0-1629253887379)(C:/Users/DELL/AppData/Roaming/Typora/typora-user-images/image-20210604214118491.png)]
递归优点:
- 结构清晰,可读性强
- 而且容易用数学归纳法证明算法的正确性
递归缺点:
- 运行效率低
- 计算时间和存储空间都比非递归算法多
解决缺点
- 非递归算法:栈
- 迭代
- 尾递归
分治法主要思想
(1)自顶向下分解问题
将较大规模问题分割成k个更小规模的子问题,反复分治,直到问题易求解为止。
(2)自顶向上合成答案
将求出的较小规模子问题的解合并为上一层父问题的解,自底向上逐步求出原来问题的解。
分治法的适用条件
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YTjqou09-1629253887381)(C:/Users/DELL/AppData/Roaming/Typora/typora-user-images/image-20210604215234079.png)]
分治法基本步骤
1.分解问题(Divide)
2.递归的解各子问题(Conquer)
3.将各子问题的解合并为原问题的解(Merge)
分治法的复杂度分析
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4lu5ykHo-1629253887383)(C:/Users/DELL/AppData/Roaming/Typora/typora-user-images/image-20210604215716357.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TVRPE9Oz-1629253887385)(C:/Users/DELL/AppData/Roaming/Typora/typora-user-images/image-20210604222517275.png)]
主方法求复杂度
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kYYJ81GO-1629253887386)(C:/Users/DELL/AppData/Roaming/Typora/typora-user-images/image-20210605093128167.png)]
2.3 二分搜索技术
题目:给定已按排好序的n个元素 a [ 0 : n − 1 ] a[0:n-1] a[0:n−1],现要在这n个元素中找出一个特定元素x
二分搜索:向下取整
T
(
n
)
=
T
(
n
/
2
)
+
O
(
1
)
复
杂
度
O
(
l
o
g
n
)
T(n)=T(n/2)+O(1) \\ 复杂度O(logn)
T(n)=T(n/2)+O(1)复杂度O(logn)
快速幂:求 a n a^n an
2.4 大整数的乘法
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GElfOL7I-1629253887388)(C:/Users/DELL/AppData/Roaming/Typora/typora-user-images/image-20210605094642044.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zOxCSq2P-1629253887389)(C:/Users/DELL/AppData/Roaming/Typora/typora-user-images/image-20210605095015644.png)]
此时, T ( n ) = O ( n 2 ) T(n)=O(n^2) T(n)=O(n2)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xKmp1ybi-1629253887390)(C:/Users/DELL/AppData/Roaming/Typora/typora-user-images/image-20210605095244427.png)]
2.5 Strassen矩阵乘法
朴素直接相乘: O ( n 3 ) O(n^3) O(n3)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fiAFVKZd-1629253887392)(C:/Users/DELL/AppData/Roaming/Typora/typora-user-images/image-20210605100146643.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dB0fEgyL-1629253887393)(C:/Users/DELL/AppData/Roaming/Typora/typora-user-images/image-20210605100130864.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-amGNEeoN-1629253887395)(C:/Users/DELL/AppData/Roaming/Typora/typora-user-images/image-20210605100212597.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rVvaU0li-1629253887398)(C:/Users/DELL/AppData/Roaming/Typora/typora-user-images/image-20210605100235430.png)]
2.6 棋盘覆盖
题目:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TQZcGsEd-1629253887400)(C:/Users/DELL/AppData/Roaming/Typora/typora-user-images/image-20210605100603458.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wMCpNdMm-1629253887402)(C:/Users/DELL/AppData/Roaming/Typora/typora-user-images/image-20210605100740223.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-l2pu7eZw-1629253887403)(C:/Users/DELL/AppData/Roaming/Typora/typora-user-images/image-20210605100805388.png)]
2.7 归并排序
基本思想: 将待排序元素分成大小大致相同的2个子集合,分别对2个子集合进行排序,最终将排好序的子集合合并成为所要求的排好序的集合。
示例
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qmnZFGaz-1629253887405)(C:/Users/DELL/AppData/Roaming/Typora/typora-user-images/image-20210605102123302.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9zNKJOHH-1629253887406)(C:/Users/DELL/AppData/Roaming/Typora/typora-user-images/image-20210605102140447.png)]
- 最坏时间复杂度 O ( n l o g n ) O(nlogn) O(nlogn)
- 平均时间复杂度 O ( n l o g n ) O(nlogn) O(nlogn)
- 辅助空间 O ( n ) O(n) O(n)
- 稳定性:稳定
寻找逆序对数
2.8 快速排序
-
选择第一个元素作为pivot
-
双指针遍历(头和尾)
-
当一个比pivot大,一个比pivot小。两个元素交换位置
-
最后当两个指针重合时,从尾开始遍历的指针继续找到一个比pivot小的数,与pivot进行交换。
-
稳定性:不稳定
-
最坏时间复杂度: O ( n 2 ) O(n^2) O(n2)
-
平均时间复杂度: O ( n l o g n ) O(nlogn) O(nlogn)
-
辅助空间:原地
复杂度分析
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-l6wED9WJ-1629253887408)(C:/Users/DELL/AppData/Roaming/Typora/typora-user-images/image-20210605104127659.png)]
随即快排
随机选择pivot
线性时间选择
问题描述:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OvBOkB2w-1629253887410)(C:/Users/DELL/AppData/Roaming/Typora/typora-user-images/image-20210605104337068.png)]
1.排序: O ( n l o g n ) O(nlogn) O(nlogn)
2.特殊情况:找最小元素(线性扫描)
3.最小堆:当 k ≤ n / l o g n k \le n/logn k≤n/logn 复杂度: n + ( k − 1 ) l o g n n+(k-1)logn n+(k−1)logn
4.最大堆:当 k ≥ n / l o g n k \ge n/logn k≥n/logn 复杂度同上
随机选择算法
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kWEYjP2u-1629253887412)(C:/Users/DELL/AppData/Roaming/Typora/typora-user-images/image-20210605105034947.png)]
如果k=j,即为要选择的数,推出算法。
如果k<j,则递归求解左侧子问题
如果k>j,则递归求解右侧子问题
复杂度分析
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-el63YWQ7-1629253887414)(C:/Users/DELL/AppData/Roaming/Typora/typora-user-images/image-20210605105334112.png)]
基于最坏时间的先行选择算法
算法思路
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nNSR8Zp9-1629253887417)(C:/Users/DELL/AppData/Roaming/Typora/typora-user-images/image-20210605110020202.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-joUhcIkw-1629253887419)(C:/Users/DELL/AppData/Roaming/Typora/typora-user-images/image-20210605110427756.png)]
复杂度分析
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-18KbtBZq-1629253887420)(C:/Users/DELL/AppData/Roaming/Typora/typora-user-images/image-20210605110538541.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cilTtemr-1629253887421)(C:/Users/DELL/AppData/Roaming/Typora/typora-user-images/image-20210605110600030.png)]
2.10最近点对问题
一维情形:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-IlPP9KUj-1629253887423)(C:/Users/DELL/AppData/Roaming/Typora/typora-user-images/image-20210605113205066.png)]
case3中: S 1 S_1 S1中最大点与 S 2 S_2 S2中最小点之间的距离
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-30xJvEeR-1629253887424)(C:/Users/DELL/AppData/Roaming/Typora/typora-user-images/image-20210605113554911.png)]
二维情形:
选垂线l:x=m(所有点x坐标的中位数)分割
答案在分割的区域内或跨越分割区域
在线性时间内找到点对:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jC0pcfVg-1629253887426)(C:/Users/DELL/AppData/Roaming/Typora/typora-user-images/image-20210605114228466.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HUfKOqwK-1629253887427)(C:/Users/DELL/AppData/Roaming/Typora/typora-user-images/image-20210605114601289.png)]
复杂度分析
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-me8XHLmS-1629253887428)(C:/Users/DELL/AppData/Roaming/Typora/typora-user-images/image-20210605114624553.png)]
2.11 循环赛日程表
问题描述
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Bto74QGO-1629253887429)(C:/Users/DELL/AppData/Roaming/Typora/typora-user-images/image-20210605111111982.png)]
分治策略
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MmdGM3Wo-1629253887431)(C:/Users/DELL/AppData/Roaming/Typora/typora-user-images/image-20210605111202792.png)]
示例
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6RkaD6Ez-1629253887432)(C:/Users/DELL/AppData/Roaming/Typora/typora-user-images/image-20210605111231133.png)]
3. 动态规划
3.1 算法总体思想
与分治法区别
分治算法要求子问题相互独立,存在子问题重叠时,分治法复杂度高。
存在子问题重叠时,应用动态规划算法。动态规划求解每个子问题时,保存计算后的答案,避免重复计算,节省计算资源。
动态规划算法常用于全局寻优
对待求解问题,分解成若干子问题,当满足一定条件时,原问题的最优解即可由子问题的最优解计算得出。
- 证明解具有最优子结构性质
- 递归定义解或最优解
- 以自底向上的方式计算出解或最优解
- 根据已计算得到的信息,构造解或最优解
3.2 矩阵连乘积
问题:给定n个矩阵 ( A 1 , A 2 , … , A n ) (A_1,A_2,…,A_n) (A1,A2,…,An),其中 A i A_i Ai与 A i + 1 A_{i+1} Ai+1是可乘的。i = 1,2,… n-1
给出数乘次数最少的矩阵连乘积顺序
穷举法
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QzteF0QW-1629253887434)(C:/Users/DELL/AppData/Roaming/Typora/typora-user-images/image-20210607143931268.png)]
动态规划求解
A i A i + 1 … A j A_iA_{i+1}…A_j AiAi+1…Aj简记为 A [ i : j ] A[i:j] A[i:j],若最后一次在k处结合
A [ i : k ] A[i:k] A[i:k]与 A [ k + 1 : j ] A[k+1:j] A[k+1:j]都是子问题
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CrVRsFD1-1629253887435)(C:/Users/DELL/AppData/Roaming/Typora/typora-user-images/image-20210607144201772.png)]
最优子结构性质(反证法)
A [ i : j ] A[i:j] A[i:j]的最优计算次序所包含的矩阵子链 A [ i : k ] A[i:k] A[i:k]和 A [ k + 1 : j ] A[k+1:j] A[k+1:j]的计算次序也一定是最优的。
递归关系
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3pcP1I9v-1629253887437)(C:/Users/DELL/AppData/Roaming/Typora/typora-user-images/image-20210607144850231.png)]
重叠子问题
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-27FCIUGf-1629253887439)(C:/Users/DELL/AppData/Roaming/Typora/typora-user-images/image-20210607145043664.png)]
子问题个数
i ≠ j i \ne j i=j C n 2 C_n^2 Cn2个
i = j i = j i=j n个
复杂度
动态规划算法依据其递归式以自底向上的进行计算。在计算中保存已解决的子问题答案,而在后面需要时只要简单查表获取,每个子问题只计算一次,避免大量的重复计算。
时间复杂度:多项式。 O ( n 3 ) O(n^3) O(n3)
备忘录方法每个子问题求解一次后将其解保存于备忘录中,再次遇到
相同子问题时只需查看备忘录中已保存的的结果,从而避
免了相同子问题的重复求解。
自上而下方式:递归 + 备忘录方法
自下而上方式:非递归
3.3 动态规划算法的基本要素
最优子结构特性
大规模问题的最优解包含其子问题的最优解
反证法:先假设原问题最优解导出的子问题解不是最优,再说明此时可构造出比原问题最优解更好的解,故矛盾。
构造递推关系式
以自底向上递归地从子问题的最优解逐步构造出整个问题的最优解
重叠子问题特性
分解问题时会反复产生相同子问题
3.4 最长公共子序列
基本概念
子序列:[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6pBBIxEG-1629253887441)(C:/Users/DELL/AppData/Roaming/Typora/typora-user-images/image-20210607150819760.png)]
公共子序列
序列 Z 既是 X 的子序列,又是 Y 的子序列时,称 Z 是序列 X 和Y 的公共子序列。
问题:
给定2个序列 X = [ x 1 , x 2 , … , x m ] X=[x_1,x_2,…,x_m] X=[x1,x2,…,xm]和 Y = [ y 1 , y 2 , … , y n ] Y = [y_1,y_2,…,y_n] Y=[y1,y2,…,yn],求X和Y的一个最长公共子序列。
递推关系:
- case 1: m = 0 m=0 m=0或 n = 0 n=0 n=0(即有一个序列为空)
c [ m ] [ n ] = 0 c[m][n] = 0 c[m][n]=0
- case 2: x m = y n x_m=y_n xm=yn(即最后元素相等)
c [ m ] [ n ] = c [ m − 1 ] [ n − 1 ] + 1 c[m][n] = c[m-1][n-1]+1 c[m][n]=c[m−1][n−1]+1
- case 3: x m ≠ y n x_m \ne y_n xm=yn
c [ m ] [ n ] = m a x ( c [ m − 1 ] [ n ] , c [ m ] [ n − 1 ] ) c[m][n] = max(c[m-1][n],c[m][n-1]) c[m][n]=max(c[m−1][n],c[m][n−1])
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KjsZk11L-1629253887443)(C:/Users/DELL/AppData/Roaming/Typora/typora-user-images/image-20210607151640063.png)]
3.5 凸多边形的最优三角剖分
基本概念
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GMuB8AW2-1629253887444)(C:/Users/DELL/AppData/Roaming/Typora/typora-user-images/image-20210607152312347.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tfcLQbbR-1629253887446)(C:/Users/DELL/AppData/Roaming/Typora/typora-user-images/image-20210607152511479.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-aUYIrpUd-1629253887447)(C:/Users/DELL/AppData/Roaming/Typora/typora-user-images/image-20210607152540077.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nm9NFtTd-1629253887449)(C:/Users/DELL/AppData/Roaming/Typora/typora-user-images/image-20210607152628914.png)]
凸多边形 P = [ v 0 , v 1 , … , v n − 1 ] P=[v_0,v_1,…,v_{n-1}] P=[v0,v1,…,vn−1]不同剖分有不同的权。找出其中权最小的三角剖分
最优子结构性质
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2BCwltI5-1629253887451)(C:/Users/DELL/AppData/Roaming/Typora/typora-user-images/image-20210607153010657.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UXpVKJKe-1629253887452)(C:/Users/DELL/AppData/Roaming/Typora/typora-user-images/image-20210607153241381.png)]
用 t [ i ] [ j ] t[i][j] t[i][j]表示凸子多边形 [ v i − 1 , v i , … , v j ] [v_{i-1},v_i,…,v_j] [vi−1,vi,…,vj]的最优三角剖分的权值
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3TMzhBld-1629253887453)(C:/Users/DELL/AppData/Roaming/Typora/typora-user-images/image-20210607154636817.png)]
3.6 多边形游戏
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-y8O1dzkn-1629253887456)(C:/Users/DELL/AppData/Roaming/Typora/typora-user-images/image-20210607154833003.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JHkPad7O-1629253887458)(C:/Users/DELL/AppData/Roaming/Typora/typora-user-images/image-20210607154852000.png)]
最优子结构性质
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pIm0Wmi4-1629253887460)(C:/Users/DELL/AppData/Roaming/Typora/typora-user-images/image-20210607160415361.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LmizSVqc-1629253887461)(C:/Users/DELL/AppData/Roaming/Typora/typora-user-images/image-20210607160645553.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zhLMeGZ3-1629253887463)(C:/Users/DELL/AppData/Roaming/Typora/typora-user-images/image-20210607160938889.png)]
3.7 图像压缩
基本概念
将图像中n个素用灰度值序列 [ p 1 , p 2 , … , p n ] [p_1,p_2,…,p_n] [p1,p2,…,pn]表示。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xsOJSOMs-1629253887465)(C:/Users/DELL/AppData/Roaming/Typora/typora-user-images/image-20210610143319988.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cBMKAoXS-1629253887468)(C:/Users/DELL/AppData/Roaming/Typora/typora-user-images/image-20210610143759967.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zFu3GMu5-1629253887470)(C:/Users/DELL/AppData/Roaming/Typora/typora-user-images/image-20210610144515128.png)]
问题描述
确定像素序列 < p 1 , p 2 , … p n > <p_1,p_2,…p_n> <p1,p2,…pn>的最优分段S,按此分段所需的存储空间最少,约定其中每个分段的长度不超过256像素。
最优子结构性质
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7iePC4zJ-1629253887472)(C:/Users/DELL/AppData/Roaming/Typora/typora-user-images/image-20210610144955992.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ujBKgR4g-1629253887473)(C:/Users/DELL/AppData/Roaming/Typora/typora-user-images/image-20210610145003903.png)]
递推关系
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dZbbWNkR-1629253887474)(C:/Users/DELL/AppData/Roaming/Typora/typora-user-images/image-20210610145144302.png)]
s
[
i
]
=
min
1
≤
k
≤
min
(
i
,
256
)
(
s
[
i
−
k
]
+
k
∗
b
m
a
x
(
i
−
k
+
1
,
i
)
+
11
)
s[i]= \min_{1 \le k \le \min(i,256)} (s[i-k]+k*bmax(i-k+1,i)+11)
s[i]=1≤k≤min(i,256)min(s[i−k]+k∗bmax(i−k+1,i)+11)
3.10 最优二叉搜索树
基本概念
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BUiyz1ld-1629253887477)(C:/Users/DELL/AppData/Roaming/Typora/typora-user-images/image-20210610145548191.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-uLsL1VO6-1629253887479)(C:/Users/DELL/AppData/Roaming/Typora/typora-user-images/image-20210610145830738.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wIAuBTTJ-1629253887480)(C:/Users/DELL/AppData/Roaming/Typora/typora-user-images/image-20210610150221110.png)]
最优子结构性质
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-goAMdG8v-1629253887482)(C:/Users/DELL/AppData/Roaming/Typora/typora-user-images/image-20210610150412029.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gEYVd7H2-1629253887483)(C:/Users/DELL/AppData/Roaming/Typora/typora-user-images/image-20210610150442158.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vpanKNlE-1629253887486)(C:/Users/DELL/AppData/Roaming/Typora/typora-user-images/image-20210610150702092.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wBvosSYI-1629253887488)(C:/Users/DELL/AppData/Roaming/Typora/typora-user-images/image-20210610150722196.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9ZyJaygk-1629253887489)(C:/Users/DELL/AppData/Roaming/Typora/typora-user-images/image-20210610151052080.png)]
递推关系
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0ho4uGtC-1629253887490)(C:/Users/DELL/AppData/Roaming/Typora/typora-user-images/image-20210610151121933.png)]
4. 贪心算法
贪心算法总是作出在当前的最好选择,并不从整体最优考虑。
4.1 活动安排问题
问题描述
- 有n个活动的集合 E = [ 1 , 2 , … , n ] E=[1,2,…,n] E=[1,2,…,n]
- 活动 i i i持续时间 [ s i , f i ) [s_i,f_i) [si,fi)内占用资源
- 活动 i i i与活动 j j j相容:区间 [ s i , f i ) [s_i,f_i) [si,fi)与区间 [ s j , f j ) [s_j,f_j) [sj,fj)不相交
算法描述
1.先对活动按结束时间按非减序排列
2.然后从第1项活动开始进行贪心选择(检查相容性判断能否选择)
复杂度分析
不计排序时间:算法复杂度为 O ( n ) O(n) O(n)
计入排序时间:算法复杂度为 O ( n log n ) O(n\log n) O(nlogn)
贪心选择属性
贪心算法能够得到活动安排的整体最优解,即它最终所确定的相容活动集合的规模最大。
数学归纳法证明
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-32JGR91r-1629253887492)(C:/Users/DELL/AppData/Roaming/Typora/typora-user-images/image-20210611105327759.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-edSIWWON-1629253887494)(C:/Users/DELL/AppData/Roaming/Typora/typora-user-images/image-20210611105352006.png)]
4.2 贪心算法的基本要素
贪心选择性质
贪心选择性质:问题的整体最优解可以用过一系列局部最优策略(即贪心选择)得到。
- 贪心算法通常以自顶向下的方式,每作一次贪心选择后问题简化为规模更小的子问题。
- 对每一个具体问题,要确定它是否具有贪心选择性质,须证明每一步所作的贪心选择最终能导致问题的整体最优解。
最优子结构性质
一个问题的最优解包含其子问题的最优解
贪心算法与动态规划算法的比较
- 共同点:贪心算法和动态规划算法都要求问题具有最优子结构性质
- 不同点:
-
- 动态规划:保留所有子问题的最优解
- 贪心算法:只求解根据贪心策略确定下来的一个子问题的最优解,只保留一条求解路径
两类背包问题
- 0-1背包问题:对于物品 i i i,要么不装,要么整件装入。动态规划
- 分数背包问题:对于物品 i i i,可装入物品 i i i的一部分。贪心算法
贪心算法求解分数背包问题的基本步骤:
- 首先计算每种物品单位重量的价值
- 然后,依贪心策略将单位重量价值最高的物品尽可能装入背包。若将这种物品全部装入背包后,背包内的物品总重量未超过,则选择单位重量价值次高的物品并尽可能多 地装入背包。
- 依此策略一直地进行下去,直到背包装满为止。
4.3 最优装载
问题描述
有一批集装箱要装上一艘载重量为 c c c的轮船。其中集装箱 i i i的重量为 w i w_i wi。在不超过轮船载重量的条件下将尽可能多的集装箱装上轮船。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2Sp132k8-1629253887496)(C:/Users/DELL/AppData/Roaming/Typora/typora-user-images/image-20210611112811995.png)]
贪心选择属性(数学归纳法)
每次选择是,从剩余集装箱中重量最小的,直至总载重量为不 超过容量限制的最大值。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3nMpybU6-1629253887498)(C:/Users/DELL/AppData/Roaming/Typora/typora-user-images/image-20210611113633658.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8euuDx1a-1629253887501)(C:/Users/DELL/AppData/Roaming/Typora/typora-user-images/image-20210611113834366.png)]
最优子结构性质
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZSWzsds2-1629253887503)(C:/Users/DELL/AppData/Roaming/Typora/typora-user-images/image-20210611113926660.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UqoXulF8-1629253887505)(C:/Users/DELL/AppData/Roaming/Typora/typora-user-images/image-20210611114054885.png)]
复杂度分析
O ( n log n ) O(n \log n) O(nlogn)
4.4 哈夫曼编码
哈夫曼编码:根据字符在文件中出现的频率,建立一个用0,1串表示各字符的最优表示方式
基本概念
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dxACKtJV-1629253887507)(C:/Users/DELL/AppData/Roaming/Typora/typora-user-images/image-20210611114657574.png)]
复杂度分析
最小堆优先队列
O ( n log n ) O(n \log n) O(nlogn)
贪心选择性质(反证法)
以自底向上构造表示最优前缀码的二叉树T
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GvcYOf09-1629253887509)(C:/Users/DELL/AppData/Roaming/Typora/typora-user-images/image-20210611120502546.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SEo6jYKY-1629253887510)(C:/Users/DELL/AppData/Roaming/Typora/typora-user-images/image-20210611120404909.png)]
最优子结构性质
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0sSvEcdT-1629253887512)(C:/Users/DELL/AppData/Roaming/Typora/typora-user-images/image-20210611120600251.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-iGS5wzjQ-1629253887513)(C:/Users/DELL/AppData/Roaming/Typora/typora-user-images/image-20210611120653902.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Bm9AzJST-1629253887514)(C:/Users/DELL/AppData/Roaming/Typora/typora-user-images/image-20210611120702274.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-80dA0Jmo-1629253887516)(C:/Users/DELL/AppData/Roaming/Typora/typora-user-images/image-20210611120743810.png)]
4.5 单源最短路径问题
问题描述
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cSicSBRh-1629253887518)(C:/Users/DELL/AppData/Roaming/Typora/typora-user-images/image-20210611121802438.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-y978eYwp-1629253887519)(C:/Users/DELL/AppData/Roaming/Typora/typora-user-images/image-20210611121846743.png)]
算法描述
每次选择剩余路径中最短的一条路径,直到求出所有路径。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yEEeGgCf-1629253887520)(C:/Users/DELL/AppData/Roaming/Typora/typora-user-images/image-20210611132312985.png)]
贪心选择性质
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-F8PNSDJu-1629253887522)(C:/Users/DELL/AppData/Roaming/Typora/typora-user-images/image-20210611133810202.png)]
- case 1
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hICYVx8Y-1629253887523)(C:/Users/DELL/AppData/Roaming/Typora/typora-user-images/image-20210611133834533.png)]
- case 2
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2quuoUuB-1629253887526)(C:/Users/DELL/AppData/Roaming/Typora/typora-user-images/image-20210611133842927.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2rZJzY2r-1629253887528)(C:/Users/DELL/AppData/Roaming/Typora/typora-user-images/image-20210611133856687.png)]
最优子结构性质
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6u6kCimT-1629253887529)(C:/Users/DELL/AppData/Roaming/Typora/typora-user-images/image-20210611134259437.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3xrCKwl3-1629253887530)(C:/Users/DELL/AppData/Roaming/Typora/typora-user-images/image-20210611134340425.png)]
复杂度分析
邻接矩阵: O ( n 2 ) O(n^2) O(n2)
4.6 最小生成树
基本概念
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-sPsTR3e4-1629253887532)(C:/Users/DELL/AppData/Roaming/Typora/typora-user-images/image-20210611140013763.png)]
贪心选择性质(MST性质)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kKMY7mYD-1629253887533)(C:/Users/DELL/AppData/Roaming/Typora/typora-user-images/image-20210611140246270.png)]
算法描述与复杂度分析
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UKcRDr0X-1629253887535)(C:/Users/DELL/AppData/Roaming/Typora/typora-user-images/image-20210611140408192.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vJ7oas4h-1629253887537)(C:/Users/DELL/AppData/Roaming/Typora/typora-user-images/image-20210611140530150.png)]
5. 回溯法
5.1 回溯法的算法框架
基本概念
- 状态空间(n元向量)
E = [ ( x 1 , x 2 , … , x n ) ∣ x i ∈ S i , i = 1 , 2 , … , n ] E = [(x_1,x_2,\dots,x_n)|x_i∈S_i,i=1,2,\dots,n] E=[(x1,x2,…,xn)∣xi∈Si,i=1,2,…,n]
-
并给定 n n n元组一个约束集 D D D
-
- 显示约束:对分量 x i x_i xi的取值限定
- 隐示约束:不同分量之间的约束
完备性特点
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZO0ChrcW-1629253887538)(C:/Users/DELL/AppData/Roaming/Typora/typora-user-images/image-20210613100114161.png)]
问题的解空间
解向量:问题的解可用 n n n元向量 ( x 1 , x 2 , … , x n ) (x_1,x_2,\dots,x_n) (x1,x2,…,xn)表示
解空间:对于一个问题的实例,满足显示约束条件的所有解向量,构成了该问题实例的一个解空间
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3BbaiFKv-1629253887541)(C:/Users/DELL/AppData/Roaming/Typora/typora-user-images/image-20210613100442002.png)]
关于结点的基本概念
活结点:自身已生成但其儿子还没有全部生成的结点
扩展结点:活结点中,一个正在产生儿子结点的称为扩展结点
死结点:不再进行扩展的结点
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mCnunG4X-1629253887542)(C:/Users/DELL/AppData/Roaming/Typora/typora-user-images/image-20210613100710117.png)]
回溯法
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-J3aJMZ86-1629253887544)(C:/Users/DELL/AppData/Roaming/Typora/typora-user-images/image-20210613100833201.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HPkOphaK-1629253887545)(C:/Users/DELL/AppData/Roaming/Typora/typora-user-images/image-20210613100900274.png)]
剪枝
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BwH8rLVR-1629253887547)(C:/Users/DELL/AppData/Roaming/Typora/typora-user-images/image-20210613101149473.png)]
回溯法的空间复杂度
回溯法在搜索过程中动态产生问题的解空间,只保存从根结点到当前扩展结点的路径,空间复杂度为 O ( h ( n ) ) O(h(n)) O(h(n))。( h ( n ) h(n) h(n)为解空间树中根结点到叶结点的最长路径的长度)
两种解空间的结构
(1)子集树:适用于组合问题(时间复杂度: O ( 2 n ) O(2^n) O(2n))
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2gbY2u7A-1629253887548)(C:/Users/DELL/AppData/Roaming/Typora/typora-user-images/image-20210613101829996.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-otlgH9pD-1629253887550)(C:/Users/DELL/AppData/Roaming/Typora/typora-user-images/image-20210613101910553.png)]
(2)排列数:适用于排列问题(时间复杂度: O ( n ! ) O(n!) O(n!))[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xUuBSz8n-1629253887552)(C:/Users/DELL/AppData/Roaming/Typora/typora-user-images/image-20210613102000875.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MqYBnXzg-1629253887553)(C:/Users/DELL/AppData/Roaming/Typora/typora-user-images/image-20210613102247829.png)]
5.2 装载问题
问题描述
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-uI8M4Szt-1629253887555)(C:/Users/DELL/AppData/Roaming/Typora/typora-user-images/image-20210613102406024.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cTuXooT4-1629253887556)(C:/Users/DELL/AppData/Roaming/Typora/typora-user-images/image-20210613102639273.png)]
回溯法思路
构建解空间:子集树
剪枝函数
- 可行性约束函数: ∑ i = 1 n w i x i ≤ c 1 \sum_{i=1}^nw_ix_i \le c_1 ∑i=1nwixi≤c1
- 限界函数:[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4aANSubR-1629253887557)(C:/Users/DELL/AppData/Roaming/Typora/typora-user-images/image-20210613102959743.png)]
时间复杂度: O ( 2 n ) O(2^n) O(2n)
5.3 批处理作业调度
基本概念
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-53HtIz7z-1629253887558)(C:/Users/DELL/AppData/Roaming/Typora/typora-user-images/image-20210613103127818.png)]
问题描述
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nqZkZMOo-1629253887560)(C:/Users/DELL/AppData/Roaming/Typora/typora-user-images/image-20210613103232402.png)]
回溯法思路
**解空间:**排列树
可行性约束函数(选择当前元素):无
限界函数: f ≥ m i n f f\ge minf f≥minf
5.5 n后问题
问题描述
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-veFNxGOc-1629253887561)(C:/Users/DELL/AppData/Roaming/Typora/typora-user-images/image-20210613104003856.png)]
回溯法思路
解向量: ( x 1 , x 2 , … , x n ) (x_1,x_2,\dots,x_n) (x1,x2,…,xn),(第 i i i行皇后位于第 x i x_i xi列)
**解空间:**组合树(子集树)
约束条件:
- 显约束: x i = 1 , 2 , … , n x_i=1,2,\dots,n xi=1,2,…,n
- 隐约束:$x_i \ne x_j 且 且 且|i-j|\ne |x_i-x_j|$
5.6 0-1背包问题
回溯法思路
**解空间:**子集树
可行性约束函数: ∑ i = 1 n w i x i ≤ c \sum_{i=1}^nw_ix_i \le c ∑i=1nwixi≤c
上界函数:前 j j j件物品,若当前方案已价值 c p cp cp,剩余容量装剩余物品,假设用分数背包求解为 m m m,则 c p + m cp+m cp+m为按照当前装载方案继续装入物品的上界
6. 分支限界法
6.1 分支限界法基本思想
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DgIDLd3U-1629253887562)(C:/Users/DELL/AppData/Roaming/Typora/typora-user-images/image-20210613105754932.png)]
两种分支限界的基本方法
(1)队列式(FIFO)分支限界法
按照队列先进先出(FIFO)原则选取下一个节点为扩展结点
(2)优先队列式分支限界法
按照优先级选取优先级最高的节点成为当前扩展结点
6.2 单源最短路径问题
优先队列式分支限界法
用优先队列式分支限界法求解,产生解空间树(注意剪枝)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-AD4jle0Y-1629253887564)(C:/Users/DELL/AppData/Roaming/Typora/typora-user-images/image-20210613110910787.png)]
算法思想:
- **优先级:**结点的当前路长较小者优先
- 数据结构: 最小堆作为活结点的优先队列
6.3 装载问题
问题描述
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Kyv5fUAp-1629253887565)(C:/Users/DELL/AppData/Roaming/Typora/typora-user-images/image-20210613111151153.png)]
队列式分支限界法
- 解空间:子集树
- 活结点存储数据结构:队列(FIFO)
-
- 扩展结点选取:取队首元素作为当前扩展结点
- 扩展过程:广度优先和剪枝
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-f8fWIauH-1629253887567)(C:/Users/DELL/AppData/Roaming/Typora/typora-user-images/image-20210613111422348.png)]
优先队列式分支限界法
- 优先级:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TfTSAwxR-1629253887568)(C:/Users/DELL/AppData/Roaming/Typora/typora-user-images/image-20210613112109620.png)]
- 数据结构:用最大堆实现优先队列存储活结点
- **终止条件:**一旦有一个叶结点成为当前扩展结点,则该叶结点所对应的解即为最优解。此时可终止算法。
6.4 布线问题
问题描述
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-arB9bxHD-1629253887570)(C:/Users/DELL/AppData/Roaming/Typora/typora-user-images/image-20210613112653329.png)]
队列式分支限界(BFS)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jJmwjuck-1629253887570)(C:/Users/DELL/AppData/Roaming/Typora/typora-user-images/image-20210613112959728.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wzbjSPXH-1629253887572)(C:/Users/DELL/AppData/Roaming/Typora/typora-user-images/image-20210613113115122.png)]
6.5 0-1背包问题
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-h5hIN34O-1629253887573)(C:/Users/DELL/AppData/Roaming/Typora/typora-user-images/image-20210613113229699.png)]
显约束: x i = 1 , 2 , … , n x_i=1,2,\dots,n xi=1,2,…,n
- 隐约束:$x_i \ne x_j 且 且 且|i-j|\ne |x_i-x_j|$
5.6 0-1背包问题
回溯法思路
**解空间:**子集树
可行性约束函数: ∑ i = 1 n w i x i ≤ c \sum_{i=1}^nw_ix_i \le c ∑i=1nwixi≤c
上界函数:前 j j j件物品,若当前方案已价值 c p cp cp,剩余容量装剩余物品,假设用分数背包求解为 m m m,则 c p + m cp+m cp+m为按照当前装载方案继续装入物品的上界
6. 分支限界法
6.1 分支限界法基本思想
[外链图片转存中…(img-DgIDLd3U-1629253887562)]
两种分支限界的基本方法
(1)队列式(FIFO)分支限界法
按照队列先进先出(FIFO)原则选取下一个节点为扩展结点
(2)优先队列式分支限界法
按照优先级选取优先级最高的节点成为当前扩展结点
6.2 单源最短路径问题
优先队列式分支限界法
用优先队列式分支限界法求解,产生解空间树(注意剪枝)
[外链图片转存中…(img-AD4jle0Y-1629253887564)]
算法思想:
- **优先级:**结点的当前路长较小者优先
- 数据结构: 最小堆作为活结点的优先队列
6.3 装载问题
问题描述
[外链图片转存中…(img-Kyv5fUAp-1629253887565)]
队列式分支限界法
- 解空间:子集树
- 活结点存储数据结构:队列(FIFO)
-
- 扩展结点选取:取队首元素作为当前扩展结点
- 扩展过程:广度优先和剪枝
[外链图片转存中…(img-f8fWIauH-1629253887567)]
优先队列式分支限界法
- 优先级:
[外链图片转存中…(img-TfTSAwxR-1629253887568)]
- 数据结构:用最大堆实现优先队列存储活结点
- **终止条件:**一旦有一个叶结点成为当前扩展结点,则该叶结点所对应的解即为最优解。此时可终止算法。
6.4 布线问题
问题描述
[外链图片转存中…(img-arB9bxHD-1629253887570)]
队列式分支限界(BFS)
[外链图片转存中…(img-jJmwjuck-1629253887570)]
[外链图片转存中…(img-wzbjSPXH-1629253887572)]
6.5 0-1背包问题
[外链图片转存中…(img-h5hIN34O-1629253887573)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-20DuKIZb-1629253887574)(C:/Users/DELL/AppData/Roaming/Typora/typora-user-images/image-20210613113237902.png)]