![](https://img-blog.csdnimg.cn/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Algorithm
文章平均质量分 74
Ederick
这个作者很懒,什么都没留下…
展开
-
拓展欧几里德算法
拓展欧几里德定理:对于不完全为0的非负整数a,b,必然存在整数对x,y,使得ax+by=gcd(a,b)。 利用拓展欧几里德定理,可以对形如ax+by=c的式子进行是否存在整数解的判断,以及存在时解为何值的运算,整个过程称为拓展欧几里德算法。 首先,对于ax+by=c这一式子,根据拓展欧几里得定理ax+by=gcd(a,b),若c%gcd(x,y)=0成立,则表原创 2012-02-19 23:59:38 · 831 阅读 · 0 评论 -
匈牙利算法
匈牙利算法是常见的二分图最大匹配算法,核心在于寻找增广路径。 首先来说,设G=(V,E)是一个无向图,如果顶点V可分割为两个互不相交的子集(A,B),并且图中的每条边(i,j)所关联的两个顶点i和j分别属于这两个不同的顶点集(i在A,j在B),则称图G为一个二分图(二部图)。如下图所示:原创 2012-02-21 22:08:20 · 721 阅读 · 0 评论 -
MD5算法
MD5是输入不定长度信息,输出固定长度128-bits的算法。经过程序流程,生成四个32位数据,最后联合起来成为一个128-bits散列。基本方式为,求余、取余、调整长度、与链接变量进行循环运算,得出结果。 MD5的具体实现好像有所区别,起码维基百科和百度百科的就不一样。但经过验证都是正确的,而这里采用的是维基百科的方法(http://zh.wikipedia.org/wiki/原创 2012-10-21 12:15:01 · 991 阅读 · 0 评论 -
快速幂
快速幂,顾名思义就是快速求幂,时间复杂度可以从常规的O(n)下降到O(lgn)。 对于a^b这样的式子,快速幂的原理就是把b转换成二进制表示,例如:若b=11,则其二进制表示为1011,解析为11 = 2^3*1 + 2^2*0 + 2^1*1 + 2^0*1,所以: a^11 = a^(2^0+2^1+2^3)= a^(2^0) * a^(2^1) * a^(2原创 2013-04-20 16:42:09 · 817 阅读 · 0 评论 -
KMP算法
KMP算法,适用于寻找子串的问题,其核心思路是先将子串进行自我匹配,构建出一个next数组。当寻找子串时匹配失败,就可以回到下标为当前位置的next数组里,继续开始匹配,避免了每次都得从头再来的麻烦,以此来节省时间,达到线性时间的复杂度。 构建next数组的核心在于自匹配。首先遍历字符串,寻找与0号等同的字符,找到就记录下当前下标到next数组内,并同步检查下一位是否一样等同,是原创 2013-04-21 00:50:44 · 737 阅读 · 0 评论