
算法学习
文章平均质量分 66
Wall_F
这个作者很懒,什么都没留下…
展开
-
最小路径覆盖
最小路径覆盖 由于周五听了SKQ极为简练的“最小路径覆盖”问题,练了练手。 什么叫最小路径覆盖? 就是说,在当前的图上,找N条路径,让这N条路径覆盖图上所有的点,N的最小值就是我们要求的值。根据具体问题的不同,可分为一个顶点只能经过一次,和可以经过多次两类。 最小路径覆盖的算法原理叙述如下:由于每条路径是一串点的序列,所以除了终点之原创 2012-11-11 20:54:55 · 1051 阅读 · 0 评论 -
如何求整数A和B的二进制表示中有多少位不同?
我们一般的算法是将整数A与整数B转换为二进制数,然后通过移位操作来统计总共有多少位不同,现在我像大家介绍一种更加高效的算法。int cal(int a, int b){ int M = a ^ b; int num = 0; while(M) { M &= (M-1); num++; } return num;}如果一个整数不为0,那么这个整数至少有一位是1。如果我们原创 2013-03-23 18:26:06 · 6844 阅读 · 1 评论 -
最长上升子序列、最长下降子序列的DP算法由O(n^2)到O(nlogn)算法实现及其优化
为了更好的介绍O(nlogn)算法,我们回顾一下一般的O(n^2)的算法。令A[i]表示输入第i个元素,d[i]表示从A[1]到A[i]中以A[i]结尾的最长子序列长度。对于任意的0 DP状态转移方程:d[i] = max{1, d[j] + 1} (j = 1, 2, 3, ..., i-1 且 A[j] ①对于最长不下降子序列,怎样实现O(nlogn)算法呢?我们知道O(n原创 2012-12-14 17:10:11 · 22429 阅读 · 5 评论 -
二分查找求上、下界
提一个有趣的问题:如果数组中有多个元素是v,上面的函数返回的是哪一个下标呢?下面的程序返回它出现的第一个位置。如果不存在,返回这样一个下标i:在此处插入v,(原来的元素A[i],A[i+1]....,全部往后移动一个位置)后序列仍然有序。int lower_bound(int *A, int x, int y, int v){ int m; while(x < y) { m = x原创 2012-12-14 17:08:34 · 3936 阅读 · 0 评论 -
无向图的顶点连通度(最大独立轨)求解
无向图的最大独立轨。独立轨:设A、B是无向图G的两个顶点,从A到B的两条没有公共内部顶点的路径互称为独立轨。A到B的独立轨的最大条数,记作P(A,B)。设A、B是无向图G的两个不相邻的顶点,最少要删除多少个顶点才使得A和B不再连通?答案是P(A,B)个。关于无向图G顶点连通度K(G)与顶点独立轨之间的关系。Menger定理:K(G) = |V(G)| - 1 当G是完全图。原创 2012-11-21 22:27:35 · 2843 阅读 · 0 评论 -
DAG单源最短路径
1、基本算法我们知道DAG上一定存在拓扑排序,且若在有向图G中从顶点Vi->Vj有一条路径,则在拓扑排序中顶点Vi一定在顶点Vj之前,而因为在DAG图中没有环,所以按照DAG图的拓扑排序进行序列最短路径的更新,一定能求出最短路径。2、基本步骤处理顶点V时,对每条离开的边执行松弛运算,若果给出从源点到u的一条最短路径(经过v),则更新到u的最短路径。这个过程将检查图中每个顶点的所有路径,原创 2012-11-20 17:46:08 · 4897 阅读 · 3 评论 -
二分图最大匹配之Hopcroft-Karp算法
Hopcroft-Karp算法该算法由John.E.Hopcroft和Richard M.Karp于1973提出,故称Hopcroft-Karp算法。原理为了降低时间复杂度,可以在增广匹配集合M时,每次寻找多条增广路径。这样就可以进一步降低时间复杂度,可以证明,算法的时间复杂度可以到达O(n^0.5*m),虽然优化不了多少,但在实际应用时,效果还是很明显的。基本算法该算法主原创 2012-12-02 13:55:34 · 19451 阅读 · 2 评论 -
混合图的欧拉回路一般求解方法
预备知识 1、欧拉回路是图G中的一个回路,经过每条边有且仅一次,称该回路为欧拉回路。具有欧拉回路的图称为欧拉图,简称E图。 2、 无向图中存在欧拉回路的条件:每个点的度数均为偶数。 3、有向图中存在欧拉回路的条件:每个点的入度 = 出度。 4、欧拉路径比欧拉回路要求少一点:无向图中存在欧拉路径的条件:每个点的度数均为偶数或者有且仅有2个度数为奇数的点。 5、有向图中存原创 2012-11-29 11:11:06 · 1809 阅读 · 3 评论 -
匈牙利算法
匈牙利算法的原理为:从当前匹配M出发(如果没有匹配,则取初始匹配M = φ),检查没一个未盖点,然后从它出发寻找可增广路,找到可增广路,则沿着这条可增广路进行扩充,知道不存在增广路为止。 根据从未盖点出发寻找增广路搜索的办法,可以分为:1、DFS增广。 2、BFS增广。在算法中用到的一些变量定义以及预处理如下:#include #include #include #incl原创 2012-11-10 16:43:51 · 1022 阅读 · 0 评论 -
Dinic算法的原理与构造
为了更好的介绍Dinic算法,我们先来介绍最短增广路算法。最短增广路算法1、顶点的层次和层次网络顶点的层次:在残留网络中,把从源点到顶点u的最短路径长度(该长度仅仅是值路径上边的数目,与容量无关),称为顶点u的层次,记为level(u)。源点Vs的层次为0。将残留网络中所有的顶点的层次标注出来的过程称为分层。注意:(1)对残留网路进行分层后,弧可能有3种可能的情况。1、原创 2012-11-21 13:18:55 · 9868 阅读 · 7 评论 -
图的点连通度边连通度总结
点连通度的定义:一个具有N个点的图G中,在去掉任意k-1个顶点后(1独立轨:A,B是图G(有向无向均可)的两个顶点,我们称为从A到B的两两无公共内顶的轨为独立轨,其最大的条数记作p(A,B)。在上图中有一个具有7个定点的连通图,从顶点1到顶点3有3条独立轨,即p(1,3)=3;1—2—3 , 1—7—3 , 1—6—5—4—3如果分别从这3条独立轨中,每条轨抽出一个内点原创 2012-11-22 15:59:19 · 31174 阅读 · 0 评论 -
AOE网中关键路径的一般求法
预备知识1、由于整个工程只有一个开始点,一个结束点,故在正常情况下(无环),网中只有一个入度为0的点和一个出度为0的点。2、与AOV网不同,AOE网中有些活动可以并行的进行,所以完成工程的最短时间是从开始点到完成点的最长路径的长度。路径长度最长的路径叫做关键路径。由于在严蔚敏的《数据结构》中有详细的证明过程,我就不赘述啦,这里我只给出具体实现的代码。扩展阅读:传送门:http:原创 2012-12-01 11:26:25 · 8963 阅读 · 1 评论 -
最小边覆盖与最小路径覆盖的联系与区别
鉴于我一直没有分清楚最小边覆盖与最小路径覆盖的关系,于是我就写写总结。边覆盖集:通俗地讲,所谓边覆盖集,就是G中所有的顶点都是E*中某条边的邻接顶点(边覆盖顶点),一条边只能覆盖2个顶点。注意:在无向图中存在用尽量少的边去“覆盖”住所有的顶点,所以边覆盖集有极小与最小的区别。极小边覆盖:若边覆盖E*中的任何真子集都不是边覆盖集,则称E*是极小边覆盖集。最小边覆盖:边数最小的边覆盖称原创 2012-11-15 15:56:41 · 7718 阅读 · 3 评论 -
LCA(最近公共祖先)算法的理解。
第一次用matlab画的图,好丑额。原创 2013-09-06 20:29:35 · 1571 阅读 · 0 评论