update
This commit is contained in:
parent
a7e16a135f
commit
babd1d4fae
@ -79,6 +79,66 @@ $$
|
|||||||
|
|
||||||
这意味着当 $ n $ 个顶点均匀地分配在两个子集中时,二分图能够包含最多的边。
|
这意味着当 $ n $ 个顶点均匀地分配在两个子集中时,二分图能够包含最多的边。
|
||||||
|
|
||||||
|
## 14
|
||||||
|
|
||||||
|
迪杰斯特拉(Dijkstra)算法是一种用于计算单源最短路径的图算法。它可以找出从起始节点到其他所有节点的最短路径,是由荷兰计算机科学家艾兹赫尔·迪杰斯特拉(Edsger W. Dijkstra)于1956年提出的。
|
||||||
|
|
||||||
|
### 迪杰斯特拉算法的基本思想
|
||||||
|
|
||||||
|
1. **初始化**:
|
||||||
|
|
||||||
|
- 从起点开始,设定起点的距离为0,其余所有节点的距离为无穷大。
|
||||||
|
- 将所有节点标记为未访问。
|
||||||
|
2. **选择节点**:
|
||||||
|
|
||||||
|
- 从未访问的节点中选择一个距离起点最近的节点(称为当前节点)。
|
||||||
|
3. **更新距离**:
|
||||||
|
|
||||||
|
- 以当前节点为中介,更新其邻居节点的距离。
|
||||||
|
- 如果通过当前节点可以使某个邻居节点的距离变得更短,则更新该邻居节点的距离值。
|
||||||
|
4. **标记已访问**:
|
||||||
|
|
||||||
|
- 将当前节点标记为已访问,不再访问。
|
||||||
|
5. **重复步骤2至4**:
|
||||||
|
|
||||||
|
- 继续选择未访问节点中距离最小的节点,重复更新操作,直到所有节点都被访问。
|
||||||
|
|
||||||
|
### 迪杰斯特拉算法的应用
|
||||||
|
|
||||||
|
迪杰斯特拉算法主要应用于以下场景:
|
||||||
|
|
||||||
|
- 网络路由:寻找最短路径以优化数据传输。
|
||||||
|
- 地图和导航系统:找出最短路径或最优路径。
|
||||||
|
- 资源管理:优化资源分配和调度。
|
||||||
|
|
||||||
|
### 伪代码
|
||||||
|
|
||||||
|
```plaintext
|
||||||
|
function Dijkstra(Graph, source):
|
||||||
|
dist[source] ← 0
|
||||||
|
for each vertex v in Graph:
|
||||||
|
if v ≠ source:
|
||||||
|
dist[v] ← INFINITY
|
||||||
|
add v to unvisitedSet
|
||||||
|
|
||||||
|
while unvisitedSet is not empty:
|
||||||
|
u ← vertex in unvisitedSet with min dist[u]
|
||||||
|
remove u from unvisitedSet
|
||||||
|
|
||||||
|
for each neighbor v of u:
|
||||||
|
alt ← dist[u] + length(u, v)
|
||||||
|
if alt < dist[v]:
|
||||||
|
dist[v] ← alt
|
||||||
|
|
||||||
|
return dist
|
||||||
|
```
|
||||||
|
|
||||||
|
### 复杂度
|
||||||
|
|
||||||
|
迪杰斯特拉算法的时间复杂度取决于实现方式。使用优先队列(二叉堆)实现的情况下,时间复杂度为 $O((V + E) \log V)$,其中 $V$ 是节点数,$E$ 是边数。
|
||||||
|
|
||||||
|
如果你有任何具体问题或者需要更详细的解释,请告诉我!
|
||||||
|
|
||||||
# 编程选择题
|
# 编程选择题
|
||||||
|
|
||||||
## 2
|
## 2
|
||||||
@ -179,6 +239,14 @@ int main() {
|
|||||||
|
|
||||||
### 总结
|
### 总结
|
||||||
|
|
||||||
|
这份代码针对性地说,单调递增是$O(n \log n)$
|
||||||
|
|
||||||
虽然快速选择算法在随机数据或一般情况下具有 `O(n)` 的平均时间复杂度,但在输入数据是**单调递增**或**单调递减**且每次选择的枢轴都很不理想(例如总是选到最小或最大值)时,算法可能退化到最坏的情况,时间复杂度变为 `O(n^2)`。
|
虽然快速选择算法在随机数据或一般情况下具有 `O(n)` 的平均时间复杂度,但在输入数据是**单调递增**或**单调递减**且每次选择的枢轴都很不理想(例如总是选到最小或最大值)时,算法可能退化到最坏的情况,时间复杂度变为 `O(n^2)`。
|
||||||
|
|
||||||
要改善这种情况,可以采用随机化策略选择枢轴(如现在代码中所做的)或者使用“三点取中”的方式选择枢轴,以减少最坏情况发生的概率,从而保证算法的效率。
|
要改善这种情况,可以采用随机化策略选择枢轴(如现在代码中所做的)或者使用“三点取中”的方式选择枢轴,以减少最坏情况发生的概率,从而保证算法的效率。
|
||||||
|
|
||||||
|
# 完善程序
|
||||||
|
|
||||||
|
## 分数背包
|
||||||
|
|
||||||
|
> 辗转相除法,最大公约数名曰gcd
|
||||||
|
15
20240826/计划.md
Normal file
15
20240826/计划.md
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
# 2024年8月26日~8月31日安排
|
||||||
|
|
||||||
|
## 每日训练
|
||||||
|
|
||||||
|
### 初赛题目
|
||||||
|
|
||||||
|
> 由于初赛本省难度较高,所以优先攻克初赛,每天写一套初赛题目
|
||||||
|
|
||||||
|
### 《算法竞赛·进阶指南》
|
||||||
|
|
||||||
|
有八大块内容,争取5天线浏览一遍,有初步印象,对复赛和初赛都有帮助
|
||||||
|
|
||||||
|
### 《信息学奥赛·一本通》
|
||||||
|
|
||||||
|
此书主要讲解初赛内容,5天内阅读并理解,为初赛打好基础
|
Loading…
Reference in New Issue
Block a user