文章分类 - 算法设计与分析
摘要:long a=10000,b,c=2800,d,e,f[2801],g; main() { for(;b-c;)f[b++]=a/5; for(;d=0,g=c*2;c-=14,printf("%.4d",e+d/a),e=d%a) for(b=c;d+=f[b]*a,f[b]=d%--g,d/=g--,--b;d*=b); }
阅读全文
摘要:串行串匹配算法 KMP算法 KMP算法的关键是根据给定的模式串W[1,m],定义一个next函数。next函数包含了模式串本身局部匹配的信息。next函数的定义如下:KMP算法的基本思想是:假设在模式匹配的进程中,执行T[i]和W[j]的匹配检查。若T[i]=W[j],则继续检查T[i+1]和W[j+1]是否匹配。若T[i]W[j],则分成两种情况:若j=1,则模式串右移一位,检查T[i+1...
阅读全文
摘要:模式匹配的KMP算法:串的模式匹配的朴素算法是O(N^2)的,可以利用KMP(由D.E.Knuth,J.H.Morris,V.R.Pratt提出)算法改进至线性的算法。KMP算法与朴素算法的不同在于处理"失配"情况。不同于将指针完全回溯,KMP算法先根据已经部分匹配的信息,将匹配的指针跳过不必匹配的位置。匹配的算法如下: #include#includeusing namespace std;co...
阅读全文
摘要:★基本思想: 这种算法是D.E.Knuth 与V.R.Pratt和J.H.Morris同时发现的,因此人们称为KMP算法。此算法可以在O(n+m)的时间数量级上完成串的模式匹配操作。 其基本思想是:每当匹配过程中出现字符串比较不等时,不需回溯i指针,而是利用已经得到的“部分匹配”结果将模式向右“滑动”尽可能远的一段距离后,继续进行比较。 假设主串为“s1s2,...sn",...
阅读全文
摘要:欧几里德算法和扩展欧几里德算法欧几里德算法欧几里德算法又称辗转相除法,用于计算两个整数a,b的最大公约数。其计算原理依赖于下面的定理: 定理:gcd(a,b) = gcd(b,a mod b) 证明:a可以表示成a = kb + r,则r = a mod b 假设d是a,b的一个公约数,则有 d|a, d|b,而r = a - kb,因此d|r 因此d是(b,a mod b)的公约数 假设d ...
阅读全文

浙公网安备 33010602011771号