mirror of
https://github.com/Estom/notes.git
synced 2026-02-03 02:23:31 +08:00
123
This commit is contained in:
@@ -2,6 +2,6 @@
|
||||
|
||||
> 每日计划包括三方面的内容:数据结构与算法、基础知识与项目经历、联邦学习与恶意软件
|
||||
|
||||
- [ ] 数据结构预算法——回溯剪枝和分支限界整理完成
|
||||
- [x] 数据结构预算法——回溯剪枝和分支限界整理完成
|
||||
- [ ] 基础知识与项目经历——计算机网络整理完成
|
||||
- [ ] 联邦学习与恶意软件——TensorFlow federated学习开始part1
|
||||
|
||||
@@ -0,0 +1,32 @@
|
||||
## 矩阵连乘问题
|
||||
|
||||
|
||||
### 问题描述
|
||||
给定n个矩阵{A1,A2,…,An},其中Ai与Ai+1是可乘的,i=1,2…,n-1。如何确定计算矩阵连乘积的计算次序,使得依此次序计算矩阵连乘积需要的数乘次数最少。例如,给定三个连乘矩阵{A1,A2,A3}的维数分别是`10*100,100*5`和`5*50`,采用(A1A2)A3,乘法次数为`10*100*5+10*5*50=7500`次,而采用A1(A2A3),乘法次数为`100*5*50+10*100*50=75000`次乘法,显然,最好的次序是(A1A2)A3,乘法次数为7500次。
|
||||
|
||||
### 问题分析
|
||||
矩阵链乘法问题描述:给定由n个矩阵构成的序列{A1,A2,...,An},对乘积A1A2...An,找到最小化乘法次数的加括号方法。
|
||||
|
||||
|
||||
### 策略选择
|
||||
|
||||
* 算法思想:动态规划
|
||||
|
||||
### 算法设计
|
||||
|
||||
* 问题分解划分阶段:相邻连乘的个数。相邻连乘的个数为1,的时候0次乘法。两个相邻连乘的次数固定。三个相邻连乘的时候分两次讨论。规模增长的方向主要由两个一个是k表示矩阵连乘的个数,第二个是i表示矩阵的个数。
|
||||
* 确定状态变量:dp[k][i]。表示连乘为k的时候,第i个矩阵开始的最优的乘积方式。
|
||||
* 确定状态转移方程,每一个分,k-1总情况讨论。
|
||||
$$
|
||||
dp[k][i]=min\{dp[1][i]+dp[k-1][i+1]+time[i+1],dp[2][i]+dp[k-2][i+2]+time[i+2],...\}
|
||||
$$
|
||||
* 确定边界实现过程:从1开始。矩阵连成为1的时候。乘法次数都为0.
|
||||
|
||||

|
||||
### 算法分析
|
||||
* 时间复杂度O(n^3)
|
||||
|
||||
### 算法实现
|
||||
|
||||
```
|
||||
```
|
||||
@@ -1,6 +1,6 @@
|
||||
# n个骰子的点数
|
||||
|
||||
|
||||
> 生成幂集的循环方法。完全一致,也是动态规划问题。
|
||||
|
||||
## 1 n个骰子的点数
|
||||
|
||||
|
||||
@@ -0,0 +1,27 @@
|
||||
## 作业调度问题
|
||||
|
||||
> 参考文献
|
||||
> * [https://zhuanlan.zhihu.com/p/30705914](https://zhuanlan.zhihu.com/p/30705914)
|
||||
|
||||
### 问题描述
|
||||
|
||||
有n个作业需要在2台机器M1 和M2组成的流水线上完成加工。每个作业都必须先在 M1 上加工,然后在 M2 上加工。M1和M2加工作业i所需的时间分别记作 a_i和b_i,每台机器同一时间最多只能执行一个作业。
|
||||
|
||||
请确定这n个作业的最优加工顺序,使得从第一个作业在机器上开始加工,到最后一个作业在机器上加工完成所需的时间最少。
|
||||
|
||||
### 问题分析
|
||||
|
||||
### 算法设计
|
||||
|
||||
|
||||
* johnson不等式。满足min{bi,aj}>= min{bj,ai}则表示i和j满足johnson不等式。则意味着i在j前执行,不会使的结果变坏。
|
||||
* 查参考文献。
|
||||
|
||||
|
||||
### 算法分析
|
||||
|
||||
* 时间复杂度O(nlogn)按json不等式排序的时间复杂度。
|
||||
|
||||
|
||||
### 算法实现
|
||||
|
||||
|
||||
@@ -19,43 +19,45 @@
|
||||
* **解空间**:
|
||||
对于一个实例,解向量满足显示约束条件的所有多元组,构成了该实例的一个解空间。
|
||||
|
||||
### 基本方法
|
||||
|
||||
* 明确定义问题的解空间,将问题的解空间组织成树的结构,通过采用系统的方法隐含搜索解空间树,从而得到问题解。回溯法的基本做法是搜索,是一种组织的井井有条的,能避免不必要搜索的穷举式搜索。搜索策略主要有:深度优先、广度优先、函数优先、广度深度结合。
|
||||
|
||||
**节点分支判定条件:**
|
||||
* 满足约束条件:分支扩展解向量。
|
||||
* 不满足约束条件:回溯到当前节点的父结点。
|
||||
|
||||
|
||||
**结点状态:**
|
||||
* 白结点:尚未访问的节点
|
||||
* 灰节点:正在访问以该节点为跟的子树。
|
||||
* 黑节点:以该节点为根的子树遍历完成。
|
||||
|
||||
**存储当前索索路径**
|
||||
|
||||
**搜索策略(避免无效搜索)**
|
||||
* **约束函数**:在扩展节点处减去不满足约束条件的子树。
|
||||
* **界限函数**:在扩展节点处减去得不到最优解的子树。
|
||||
|
||||
### 回溯法的适用条件
|
||||
* 适用于搜索问题和优化问题
|
||||
|
||||
必要条件
|
||||
|
||||
* **多米诺性质**:叶子节点的解一定满足其父节点。叶子结点为真则父节点一定为真。同理父节点为假则叶子结点一定为假(逆否命题)。用父节点为假的情况进行剪枝操作。
|
||||
|
||||
* 设P(x1,x2,…,xi)是关于向量<x1,x2,…,xi>的某个性质,那么P(x1,x2,…,xi+1)真蕴含P(x1,x2,…,xi) 为真,即P(x1,x2,…,xi+1) → P(x1,x2,…,xi) (0<i<n) (n为向量维数)
|
||||
|
||||
## 2 求解过程
|
||||
### 基本方法
|
||||
|
||||
1. 明确定义问题的解空间。
|
||||
* 将问题的解空间组织成树的结构,通过采用系统的方法隐含搜索解空间树,从而得到问题解。回溯法的基本做法是搜索,是一种组织的井井有条的,能避免不必要搜索的穷举式搜索。搜索策略主要有:深度优先、广度优先、函数优先、广度深度结合。
|
||||
|
||||
2. 节点分支判定条件:
|
||||
* 满足约束条件:分支扩展解向量。
|
||||
* 不满足约束条件:回溯到当前节点的父结点。
|
||||
|
||||
|
||||
3. 结点状态:
|
||||
* 白结点:尚未访问的节点
|
||||
* 灰节点:正在访问以该节点为跟的子树。
|
||||
* 黑节点:以该节点为根的子树遍历完成。
|
||||
|
||||
4. 存储当前索索路径
|
||||
|
||||
5. 搜索策略(避免无效搜索)
|
||||
* **约束函数**:在扩展节点处减去不满足约束条件的子树。
|
||||
* **界限函数**:在扩展节点处减去得不到最优解的子树。
|
||||
|
||||
### 具体的步骤
|
||||
1. 针对问题定义解空间
|
||||
> 判断问题是否满足多米诺性质
|
||||
1. **定义解空间**
|
||||
* 问题解向量
|
||||
* 解向量分量取值集合
|
||||
* 构造解空间树
|
||||
2. 判断问题是否满足多米诺性质
|
||||
3. 搜索解空间树,确定**剪枝函数**
|
||||
4. 确定存储搜索路径的数据结构
|
||||
2. **确定剪枝函数**
|
||||
3. **搜索解空间树**
|
||||
4. **存储搜索路径**,确定存储的数据结构
|
||||
|
||||
### 两种典型的解空间树
|
||||
* **子集树**:当所给的问题是从n个元素的集合S中找出满足某种性质的子集时,相应的解空间树称为子集树。
|
||||
@@ -112,6 +114,10 @@ void iterativeBacktrack ()
|
||||
* 求解目标不同:回溯法的求解目标是找出解空间树中满足约束条件的所有解。而分支限界的求解目标是找出满足约束条件的一个解。这个解可能是最优解。
|
||||
* 搜索方式不同:回溯法以深度优先的方式搜索解空间。而分支限界法则以广度优先或以最小消耗优先的方式搜索解空间。
|
||||
|
||||
## 2 常见问题
|
||||
## 3 常见问题
|
||||
|
||||
### 着色问题
|
||||
### m着色问题
|
||||
|
||||
### 装载问题
|
||||
|
||||
### 批作业调度问题
|
||||
@@ -30,4 +30,14 @@
|
||||
|
||||
### 分支限界法的程序结构
|
||||
|
||||
* 队列+循环的方法
|
||||
* 队列+循环的方法
|
||||
|
||||
## 2 分治限界实现
|
||||
|
||||
|
||||
## 3 常见问题
|
||||
|
||||
1. 01背包问题
|
||||
2. 旅行商问题
|
||||
3. 装载问题
|
||||
|
||||
|
||||
BIN
算法/A类:基本算法/image/2021-04-01-22-33-51.png
Normal file
BIN
算法/A类:基本算法/image/2021-04-01-22-33-51.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 392 KiB |
Reference in New Issue
Block a user