From babd1d4fae1db28178abd7597b1db62962fa4eb4 Mon Sep 17 00:00:00 2001 From: Zengtudor Date: Mon, 26 Aug 2024 20:42:14 +0800 Subject: [PATCH] update --- 20240826/learn.md | 68 +++++++++++++++++++++++++++++++++++++++++++++++ 20240826/计划.md | 15 +++++++++++ 2 files changed, 83 insertions(+) create mode 100644 20240826/计划.md diff --git a/20240826/learn.md b/20240826/learn.md index abd468f..9f84c29 100644 --- a/20240826/learn.md +++ b/20240826/learn.md @@ -79,6 +79,66 @@ $$ 这意味着当 $ 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 @@ -179,6 +239,14 @@ int main() { ### 总结 +这份代码针对性地说,单调递增是$O(n \log n)$ + 虽然快速选择算法在随机数据或一般情况下具有 `O(n)` 的平均时间复杂度,但在输入数据是**单调递增**或**单调递减**且每次选择的枢轴都很不理想(例如总是选到最小或最大值)时,算法可能退化到最坏的情况,时间复杂度变为 `O(n^2)`。 要改善这种情况,可以采用随机化策略选择枢轴(如现在代码中所做的)或者使用“三点取中”的方式选择枢轴,以减少最坏情况发生的概率,从而保证算法的效率。 + +# 完善程序 + +## 分数背包 + +> 辗转相除法,最大公约数名曰gcd diff --git a/20240826/计划.md b/20240826/计划.md new file mode 100644 index 0000000..b0c20d5 --- /dev/null +++ b/20240826/计划.md @@ -0,0 +1,15 @@ +# 2024年8月26日~8月31日安排 + +## 每日训练 + +### 初赛题目 + +> 由于初赛本省难度较高,所以优先攻克初赛,每天写一套初赛题目 + +### 《算法竞赛·进阶指南》 + +有八大块内容,争取5天线浏览一遍,有初步印象,对复赛和初赛都有帮助 + +### 《信息学奥赛·一本通》 + +此书主要讲解初赛内容,5天内阅读并理解,为初赛打好基础