算法笔记
文亘习丶
这个作者很懒,什么都没留下…
展开
-
求最大公约数——欧几里德算法(辗转相除)
原创 2020-07-30 17:24:31 · 246 阅读 · 0 评论 -
扩展欧几里得算法的原理及其代码实现
引例:求满足ax+by+c=0的x的最小正整数解;扩展欧几里德给出的结论是:给定a,b,则一定存在整数x,y,使得ax+by=gcd(a,b);证明可以在看完引例求解之后随便找一篇讲证明的文章就能看懂,因为思路是一致的,是引例求解思路的逆用,用数学归纳法证明,这里不赘述;引例求解思路:代码实现:细节都在注释里了,上面理解了看完注释应该可以理解代码的写法//扩展欧几里德,给定a,b,则一定存在整数x,y,使得ax+by=gcd(a,b);可以用于二元一次方程求整数解//整个过程是,先得到了题原创 2020-07-28 20:02:47 · 946 阅读 · 0 评论 -
得到互质数的个数——轻松认识欧拉函数
欧拉函数用来求 在小于x的正整数且与x互质(公约数只有1)的数的个数,一般用φ(x)表示,这个φ(x)就是欧拉函数,也就是用来解决 “在1-x之间有多少个数与x构成互质关系”的问题通式:特别的,φ(1)=1,∏ 是直积符号,表示连乘其中p1,p2…pi…pn为x的所有质因数,x是一个正整数证明:根据唯一分解定理,我们可以把一个整数唯一地分解为多个质数幂次的乘积,即找其中的特殊情况(或者理解成取出连乘因子中的其中一个也是满足唯一分解定理的形式),也就是一个数可以分解成一个质数的幂次的特殊情况,原创 2020-07-27 23:52:47 · 3410 阅读 · 0 评论 -
查找字符串子串——逐步理解字符串Hash算法
引出字符串hash一般应用在字符串匹配问题:给定一个长度为n的s串,以及一个长度为m的t串,求t串在s串出现的次数或者位置。因为查询整数有很多技巧,比字符串要快和丰富(比如二分),所以字符串hash的思路就是利用特殊的公式将一个字符串与一个整数对应,并且尽量保证互相唯一对应,这样只要查到对应的整数出现了,就表明字符串出现了,这对应整数叫字符串的hash值。有许多种构建字符串和整数对应公式的办法,通常情况下字符串很容易只对应一个整数,但是反过来很可能有一个整数对应了多个字符串的情况,这种不唯一对应的情况原创 2020-07-26 00:16:35 · 837 阅读 · 0 评论 -
线性的质数判断——欧拉筛法
素数本身这个概念很简单,要找因子只有1和它本身的数,最简单的求法就是1到根号n遍历判断因子如果要遍历1到n的话,复杂度是O(n3/2),处理小规模的数据没问题,但是大规模就会比较慢。当然如果只要判断一个数,那直接用这个也很快;还能更快吗?蒋委员长说过一句名言:以空间换时间,这句话在历史上被人臭骂,但是在计算机领域确实是个很不错的思想,因为大部分情况时间复杂度比空间要宝贵的多。那么这里就有一种以空间换时间的方法,叫筛法;筛法的基础思想就是当我们遍历从2开始的数时,每遍历一个,把它的倍数全部标记了,原创 2020-07-18 18:59:41 · 1342 阅读 · 0 评论 -
O(n)解决查找回文串问题——马拉车manacher算法
通常的思路:按照字符串顺序选取一个字符作为中心,向两边遍历判断是否相同,时间复杂度O(n^2) ;Manacher的方法能在这个通常思路的基础上进行一些修改, 从而将时间复杂度降到O(n)。本篇文章是边学边写的,将每一个结论推导的背后原理尽力的说明了,有些文章直接给出了结论,我自己在学习的时候就纠结了很久这个公式为什么可以这么写。当然后文有结论总结,不想深入理解的或者只是复习的,可以直接记结论然后直接用,一般也是当作模板用的。简单介绍思路:基础思路是以一个字符为中心向两遍拓展判断是否相同,然后记录最原创 2020-07-17 23:57:44 · 1023 阅读 · 0 评论