随笔分类 - Algorithm
摘要:1.背景最大连续子段和是一类问题,即求一个序列最大连续子序列的和。问:给出n个元素分别为A1,A2,...,An,求出其最大连续子段和。2.求解思路2.1 动态规划:设A[ i ]为该序列第 i 个元素,C[ i ]存放前 i 个序列的最大子段和,那么C[ i ]有两...
阅读全文
摘要:以下笔记整理自:《算法设计编程实验》吴永辉1.结论1.1 莫比乌斯函数:莫比乌斯函数可以看做一个辅助函数,它在莫比乌斯反演公式中用到。1.2 莫比乌斯反演:莫比乌斯反演公式是 根据和函数来求算数函数的一个公式。1.3 算数函数:所有在正整数上运算的函数称为算数函数。1...
阅读全文
摘要:1.背景1.1 算法简介:M.O.Rabin和R.A.Karp发明了一种基于散列的字符串查找算法。我们只需要计算模式串的散列函数,然后利用相同的散列函数计算文本中所有可能的M个字符的子字符串散列值并寻找匹配。如果找到了一个散列值和模式字符串相同的子字符串,再继续验证是...
阅读全文
摘要:简介:Miller_Rabin法是一种简便的素数测试方法,一般用于测试大数是否为素数。Miller_Rabin测试原理:如果n是素数,且与a互质,则 。(1)证明:请参考费马小定理证明方法。思路:依据上述原理,我们可以不断选取与 n 互质的 a ,如果上式(1)都成立...
阅读全文
摘要:1.背景1.1 结论在有序数组中查找某个值,或者在求最优解问题时,二分搜索非常有用。思想一般是先假定一个解,并判断是否可行,接着缩小解的范围继续判断。1.2 概念二分搜索法,是通过不断缩小解可能存在的范围,从而求得问题最优解的方法。在程序设计竞赛中,经常可以见到二分搜...
阅读全文
摘要:例一:给定n堆物品,第 i 堆物品有 Ai 个。两名玩家轮流行动,每次可以任选一堆,取走任意多个物品,可把一堆取光,但不能不取。取走最后一件物品者获胜。两人都采用最优策略,问先手能否获胜。1.概念1.1 局面:游戏过程中面临的状态称为局面。1.2 先手与后手:整局游戏...
阅读全文
摘要:思路:和整数快速幂一样,唯一不同的就是存放结果的矩阵初始值为单位矩阵,通过重载运算符*后,代码可以大大简化。另外需要注意的是取模问题,我把模M放在了全局变量,这样省却一些麻烦,可以根据自身需要调整,这个无伤大雅。代码示例:#include #include #in...
阅读全文
摘要:1.异或空间相关概念1.1 异或空间:依据线性空间的概念,我们可以进一步推广,不限于向量、向量加法和标量乘法。“异或空间”也是一个很常见的形式。异或空间是一个关于异或运算封闭的非负整数集合。可以在异或空间中用类似方法定义“表出” “线性无关” “基底” 等概念。(注:...
阅读全文
摘要:原题链接:POJ2947思路:本题是用高斯消元以及同余方程做,但是需要注意整数高斯消元避免使用除法。还需注意同余方程的解的问题、方程式与未知数个数不等问题。错误报告:这题总时间花了应该有七八个小时了。第一次做忽略了方程式个数不等于未知数个数时情况,并且对于何时无解、何...
阅读全文
摘要:Manacher算法简介:1.作用:Manacher算法又名马拉车算法,用来求一个字符串中最长回文子串的长度。2.复杂度分析:时间复杂度为O(n)。算法核心思想:1.伪代码:假设str为待判断的字符串,len[ i ]数组存放以该 str[ i ] 字符为中心的最长回...
阅读全文
摘要:由于矩阵相乘是诸多算法中的基础,就像乘法之于快速幂一样,所以有必要熟练掌握,以下模板是我个人觉得用起来比较方便的,但是随着时间迁移肯定是需要对其进行精进的。代码示例:struct Matrix{ int n,m; int v[maxn][maxn]; Matrix(i...
阅读全文
摘要:介绍:BSGS(Baby Step,Giant Step)算法是用来求高次同余方程的解的算法。模板:P148//baby step giant step#include#include#includeusing namespace std;typedef long l...
阅读全文
摘要:代码示例:求出ax + by = c的所有解#includeint exgcd(int a,int b,int& x,int& y){ if(b == 0){ x = 1,y = 0; return a; } int d = exgcd(b,a%b,x,y); i...
阅读全文
摘要:代码实例:求单个欧拉函数。分解单个数,可以用循环来实现,不必借助辅助数组。线性筛求欧拉函数://求欧拉函数phi #includeint phi(int n){ int ans = n; for(int i = 2;i*i 1) ans = ans/n*(n-1);...
阅读全文
摘要:题意:给定一个正整数N(N #include #includeusing namespace std;const int maxn = 2*100000;int e[20];int primes[20];bool isPrime[maxn];int ans = 1;i...
阅读全文
摘要:本篇文章直接跳过蛮力算法以及一些简单背景,着重讨论Next数组的意义以及其是如何工作的,并对如何求Next数组做详细记录。1.背景1.1 KMP算法的应用:KMP算法用来解决模式串匹配问题。1.2 为什么要用KMP算法:普通的蛮力算法时间复杂度为O(n*m),而KMP...
阅读全文
摘要:以下内容均为本人近几天学习笔记,个人理解,并非完美答案,请抱着怀疑眼光阅读,如有错误请告知,感谢!1.kd-树简介1.1 特征:在任何情况下,kd-树都是一棵递归定义的平衡二叉搜索树1.2 用途:常用于范围查询,高效解决多维范围查询。例如:快速在校友数据库中找到197...
阅读全文
摘要:个人笔记,仅供复习1.概念1.1 定义:逆元素是指一个可以取消另一给定元素运算的元素,在数学里,逆元素广义化了加法中的加法逆元和乘法中的倒数。1.2 数论中定义:如果满足公式,a*b = 1(mod P),则a是b的逆元,同时b也是a的逆元。1.3 另一种定义:a*x...
阅读全文
摘要:1.定义二叉树:二叉树是每个结点最多有两个子树的树结构。 二叉搜索树:二叉搜索树(Binary Search Tree),它或者是一棵空树,或者是具有下列性质的二叉树: 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值; 若它的右子树不空,则右子树上所有结...
阅读全文

浙公网安备 33010602011771号