review

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) = image-20210604211328621
排列问题

生成 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(n1n2nk1,k1)
求正整数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:n1],现要在这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 kn/logn 复杂度: n + ( k − 1 ) l o g n n+(k-1)logn n+(k1)logn

4.最大堆:当 k ≥ n / l o g n k \ge n/logn kn/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+1Aj简记为 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 是序列 XY 的公共子序列。

问题:

给定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[m1][n1]+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[m1][n],c[m][n1])

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(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,vn1]不同剖分有不同的权。找出其中权最小的三角剖分

最优子结构性质

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(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] [vi1,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]=1kmin(i,256)min(s[ik]+kbmax(ik+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的一部分。贪心算法

贪心算法求解分数背包问题的基本步骤:

  1. 首先计算每种物品单位重量的价值
  2. 然后,依贪心策略将单位重量价值最高的物品尽可能装入背包。若将这种物品全部装入背包后,背包内的物品总重量未超过,则选择单位重量价值次高的物品并尽可能多 地装入背包。
  3. 依此策略一直地进行下去,直到背包装满为止。

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)xiSi,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=1nwixic1
  • 限界函数:[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(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 fminf

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=1nwixic

上界函数:前 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=1nwixic

上界函数:前 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)]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值