
算法
文章平均质量分 80
Pira
追求梦想的人,难免有些不切实际。。。
展开
-
KMP算法详解
<br /> <br /> 本文内容遵从CC版权协议 转载请注明出自matrix67.com<br /> 如果机房马上要关门了,或者你急着要和MM约会,请直接跳到第六个自然段。<br /> <br /> 我们这里说的KMP不是拿来放电影的(虽然我很喜欢这个软件),而是一种算法。KMP算法是拿来处理字符串匹配的。换句话说,给你两个字符串,你需要回答,B串是否是A串的子串(A串是否包含B串)。比如,字符串A="I'm matrix67",字符串B="matrix",我们就说B是A的子串。你可以委婉转载 2011-03-20 20:58:00 · 663 阅读 · 0 评论 -
KM算法 二分图的最佳匹配
引用:KM算法是通过给每个顶点一个标号(叫做顶标)来把求最大权匹配的问题转化为求完备匹配的问题的。设顶点Xi的顶标为A[i],顶点Yi的顶标为B [i],顶点Xi与Yj之间的边权为w[i,j]。在算法执行过程中的任一时刻,对于任一条边(i,j),A[i]+B[j]>=w[i,j]始终 成立。KM算法的正确性基于以下定理: 若由二分图中所有满足A[i]+B[j]=w[i,j]的边(i,转载 2011-03-27 18:43:00 · 896 阅读 · 0 评论 -
二分图
导读: 二分图指的是这样一种图:其所有的顶点分成两个集合M和N,其中M或N中任意两个在同一集合中的点都不相 连。二分图匹配是指求出一组边,其中的顶点分别在两个集合中,并且任意两条边都没有相同的顶点,这组边叫做二分图的匹配,而所能得到的最大的边的个数,叫 做最大匹配。计算二分图的算法有网络流算法和匈牙利算法(目前就知道这两种),其中匈牙利算法是比较巧妙的,具体过程如下(转自组合数学):令转载 2011-03-24 20:04:00 · 1040 阅读 · 0 评论 -
NEFU 155 超弦(插头DP)
超弦Time Limit 5000msMemory Limit 65536Kdescription前阵子hh看了一系列科普片>,惊讶的发现整个世界都是由弦发出不同的震动所构成的.正如优雅小提琴由几根弦就能谱出无数华美的乐章一般优雅.弦可以十分好的解释波粒二相形,测不准原理以及真空量子涨原创 2011-06-10 11:56:00 · 958 阅读 · 0 评论 -
各种字符串Hash函数比较
<br /> <br />常用的字符串Hash函数还有ELFHash,APHash等等,都是十分简单有效的方法。这些函数使用位运算使得每一个字符都对最后的函数值产生影响。另外还有以<br /> <br />MD5和SHA1为代表的杂凑函数,这些函数几乎不可能找到碰撞。<br />常用字符串哈希函数有BKDRHash,APHash,DJBHash,JSHash,RSHash,SDBMHash,PJWHash,ELFHash等等。对于以上几种哈希函数,我对其进行了一个小小<br /> <br />的评测。<br转载 2011-04-21 20:55:00 · 1044 阅读 · 0 评论 -
poj 2274
<br /> The RaceTime Limit: 15000MS Memory Limit: 65536KTotal Submissions: 2380 Accepted: 460Case Time Limit: 3000MS<br />DescriptionDuring the Annual Interstellar Competition for Tuned Spaceships, N spaceships will be competing. Each spaceship i is tuned i原创 2011-04-03 12:26:00 · 1325 阅读 · 0 评论 -
读入输出优化
当读入输出规模过大时,用来读入输出的时间往往占用程序运行的大部分时间,严重影响到程序的效率,这时我们想起字符串输入输出时putchar和getchar较快,于是将所有输入输出都改为putchar和getchar,然后再转换为所要的类型,这样程序效率就大大提升了,不过貌似只有用G++提交时才有明显的效果,C++反而比scanf和printf慢。。。此方法参考某牛的源代码,有错误之处请各位牛们纠正。。。一下为本人用来输入int类型数据的函数。。。inline int in(){ char ch; i原创 2011-03-24 16:06:00 · 1009 阅读 · 0 评论 -
转:二分图最大匹配Hopcroft_Karp算法
<br /> <br />二分图最大匹配除了匈牙利算法还有一个Hopcroft-Karp算法,匈牙利算法的复杂的为O(ne),而Hopcroft-Karp算法的<br />复杂度为O(en^0.5)。<br /> 该算法的精髓在于同时找多条增广路进行反转。我们先用BFS找出可能的增广路,这里用到BFS层次搜索的概念,<br />记录当前结点在第几层,用于后面DFS沿增广路反转时用,然后再用DFS沿每条增广路反转。这样不停地找,直至无法找<br />到增广路为止。<br /> wiki上的说明原创 2011-03-26 21:12:00 · 10565 阅读 · 2 评论 -
RMQ问题的离线近线性算法
RMQ问题的离线近线性算法北京市清华附中高逸涵 RMQ问题是这样一种问题:给定一长度为n的数组A,回答询问RMQ(A,I,J),即A[i…j]之间的最小数的下标。在不引起误会的情况下,直接用RMQ(i,j)来表示这个询问。 对于这一问题,存在一个非常好的在线算法Sparse Table,能在O(nlogn)-O(1)的时间复杂度解决问题。该算法记录了所有长度形如2i的所有询问的结果,对于一般的RMQ询问,取k=[log2(j-i+1)],则有:转载 2011-03-24 11:04:00 · 1308 阅读 · 0 评论 -
有向图的强连通分量
<br /> <br />最关键通用部分:强连通分量一定是图的深搜树的一个子树。<br /> <br />一、 Kosaraju算法<br /> <br />1. 算法思路<br />基本思路:<br />这个算法可以说是最容易理解,最通用的算法,其比较关键的部分是同时应用了原图G和反图GT。<br />(步骤1)先用对原图G进行深搜形成森林(树),<br />(步骤2)然后任选一棵树对其进行深搜(注意这次深搜节点A能往子节点B走的要求是EAB存在于反图GT),<br /> 能转载 2011-03-20 20:55:00 · 981 阅读 · 0 评论 -
RMQ (Range Minimum/Maximum Query)问题
RMQ (Range Minimum/Maximum Query)问题是指:对于长度为n的数列A,回答若干询问RMQ(A,i,j)(i,j 主要方法及复杂度如下 1.朴素(即搜索) O(n)-O(n) online 2.线段树 O(n)-O(qlogn) online 3.ST(实质是动态规划) O(nlogn)-O(1) offline ST算法(Sparse Table),以求最大值为例,设d[i,j]表示[i,i+2^j-1]这个区间内的最大值,那么在询问到[a,b]区间的最大值时答案就是m转载 2011-03-20 21:01:00 · 678 阅读 · 0 评论 -
国家集训队论文分类整理
转自:http://www.cnblogs.com/AbandonZHANG/archive/2012/07/21/2601889.html国家集训队论文分类整理距离ACM/ICPC的时间越来越少了,选择性地看一些集训队论文是很有必要的。(在此给已经看过所有论文的神牛跪了= =)所以,我在此整理了一下,供大家参考。组合数学计数与统计转载 2013-06-12 14:24:52 · 15523 阅读 · 0 评论