算法
文章平均质量分 89
算法设计与分析
Sunburst7
这个作者很懒,什么都没留下…
展开
-
NP完全性
大部分时间内,我们研究的算法都是多项式时间算法:对于规模为n的输入,在最坏情况下的运行时间是O(nk)O(n^k)O(nk),其中k是某一确定常数。那是否所有的问题都可以在多项式时间内解决呢?答案是否定的。本节的主体就是对问题的复杂性的研究。目录一 问题二 归约算法2.1 3-CNF-SAT ≤p\leq_{p}≤pCLIQUE2.2 CLIQUE ≤p\leq_{p}≤p VERTEX COVER三 问题复杂类:P与NP四 问题复杂类:NPC与NP-hard五 证明NP-Complate一 问题原创 2021-12-03 18:57:16 · 1386 阅读 · 0 评论 -
图论(六):所有节点对的最短路径
所有节点对之间的最短路问题:给定一个加权有向图G=(V,E),对于每一对结点(u,v)∈V(u,v)\in V(u,v)∈V,找到从u到v的最短路径。Input:用邻接矩阵表示有向加权图。Output:一个n×n的矩阵D=(dij)D=(d_{ij})D=(dij),dijd_{ij}dij表示从i结点到j节点的最短路径。一种简单的思路是对集合V中所有的结点使用单源最短路算法,这样就能求得所有结点之间的最短路径,时间复杂度为原时间复杂度×n(n为结点个数),但Dijkstra单源最短原创 2021-12-02 11:15:48 · 4357 阅读 · 2 评论 -
图论(五)单源最短路算法
目录一 单源最短路问题二 有向无环图的单源最短路算法三 Dijkstra算法3.1 原理3.2 伪代码与代码实现3.3 时间复杂度分析3.4 正确性证明3.5 与BFS和Prim算法的比较四 Bellman-Ford算法4.1 无负圈的最短路算法4.2 正确性分析4.3 检测负圈4.4 完整的Bellman-Ford算法一 单源最短路问题给出单源最短路的定义:给定一个有向图G=(V,E),每条边都有一个权重wiw_iwi,在现实问题中,权重可以代表长度、时间、成本、罚款损失…,我们可以简单的理解为长原创 2021-11-25 11:20:06 · 1543 阅读 · 0 评论 -
图论(四):最小生成树算法和Prim实现
设H=(V,T)是图G=(V,E)的子图,H是图G的生成树,当且仅当H是一个无环的连通图。生成树具有以下性质:H有|V-1|条边与|V|个顶点H是最小化连接的:去除任意一条边都会是H不连通H是最大无环结构:添加任意一条边都会构造一个环给出一个无向加权图G=(V,E),最小生成树问题(minimun spanning tree,MST):求一个生成树使得每条边的权值的和最小。本节在讨论解决最小生成树的两种贪心算法:Kruskal算法与Prim算法之前,先说明通用的、形式化的最小生成树的生成算法原创 2021-11-08 15:56:26 · 766 阅读 · 0 评论 -
图论(三):DFS的应用——拓扑排序与强连通分量
本节介绍如何使用DFS对有向无环图进行拓扑排序,以及求强连通分量的算法。一 拓扑排序什么是拓扑排序呢?对于一个有向无环图G=(V,E),拓扑排序是G中所有结点的一种线性次序,满足:如果图G包含边(u,v),则结点u在拓扑排序中处于结点v的前面。拓扑排序可以理解为一系列要处理的事件的先后的顺序。边(u,v)代表完成v必须先完成u。 注意的是:如果图G包含环路,则不可能排出一个线性次序。下图中,图a表示一个有向无环图,图b表示该图的拓扑序。...原创 2021-10-26 19:50:28 · 2577 阅读 · 0 评论 -
图论(二):深度优先搜索的有关性质
本节主要关注深度优先搜索的有关性质,包括:括号化定理、白色路径定理、深度优先搜索边的分类。下一节会涉及拓扑排序与强连通分支的算法,这些性质是算法的基础。一 括号化定理 深度优先搜索的一个重要的性质是,节点的发现时间与完成时间具有括号化结构。以" (u "表示节点的发现,以" u) "表示节点u的完成,则所有的括号都适当的嵌套在一起。以下图为例,我们通过DFS后获得的d[ ]与f[ ](详情见图论(一)): 该定理的本质其实就是递归栈的情况,因...原创 2021-10-22 13:20:31 · 1034 阅读 · 0 评论 -
图论(一):图结构与图的遍历
目录一 图的结构二 图的广度优先遍历三 图的深度优先遍历一 图的结构 一般我们用 G(V,E)这个集合表示一个图,V代表图中所有顶点的集合,E代表图中所有顶点的边集合。 在计算机中,我们可用两种数据结构来表示图,这两种数据结构各有优劣:邻接链表: 邻接链表用包含|V|条链表的数组Adj构成,每个节点有一条链表,对于每个节点,邻接链表Adj[u]包含所有与节点u相连的节点。保存权重只需在节点内加个权重值即可。 当图是...原创 2021-10-15 17:27:50 · 635 阅读 · 0 评论 -
分治、动态规划、贪心算法的比较
最近学习了这三种算法的思想,发现这三者之间有相似也有不同,总结一篇博客。目录一:三种算法的联系二:三种算法的区别一:三种算法的联系分治、动态规划、贪心算法都是把一个大的问题给分解成子问题,通过解决子问题来最终解决原问题的。具体的来说:分治:主要分为三个步骤递归的解决问题。divide:将问题划分为一些子问题,形式相同,规模更小conquer:递归的求解子问题,当子问题足够小进入基本情况(base case),停止递归,返回到上一层递归。combine:返回递归调用的过程,逐步将子问题的原创 2021-10-07 16:52:17 · 1471 阅读 · 1 评论 -
序列自动机
目录序列自动机构造查询例题序列自动机序列自动机是一个可以快速判断字符串t是否是字符串s的子串的一个算法。使用空间复杂度来换取时间复杂度。构造对字符串s构造序列自动机,使用nxt数组。nxt[i][j]代表从第i个位置开始,字符j出现的第一个位置。我们倒着遍历更新即可。 int nxt[N][27]; void init(char *s){ int l=strlen(s); for(int i=0;i<26;i++)原创 2021-09-30 16:38:00 · 720 阅读 · 0 评论