![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法笔记
文章平均质量分 86
RegulusF
这个作者很懒,什么都没留下…
展开
-
[算法笔记]kmp算法
1.kmp算法 kmp算法主要用在字符串匹配上,主要思想是在出现字符串不匹配时,可以知道一部分之前的已经皮匹配的内容,可以利用这些信息不用从头去做匹配。 2.前缀表 前缀表是用来回溯的,它记录了模式串与主串不匹配的时候,模式串应该从哪里开始重新匹配。 前缀表的核心在于,记录下表i之前的字符串中,有多大长度的相同前缀后缀。 如图所示,当指针移动到下标为5的位置,出现了不匹配,此时模式串指向f,如果是朴素比较法,指针应当跳到模式串的开头来匹配,而使用了前缀表来记录之后,**指针只需要跳转到之前字串的最长公共前原创 2021-07-26 13:51:55 · 332 阅读 · 0 评论 -
[算法笔记]数据结构算法总结-线性表
一: 线性表结构定义: #define maxSize 100 1)顺序表结构体定义: typedef struct{ int data[maxSize]; int length; }Sqlist; 2)单链表节点定义 typedef struct { int data; struct LNode *next; }Lnode; 3)双链表节点定义 typedef...原创 2019-06-16 18:50:43 · 193 阅读 · 0 评论 -
[算法笔记]排序
一.插入类排序: 1)直接插入排序 算法思想:每次把一个待排序的关键字插入到有序序列的适当位置上 最好情况:初始序列已经有序,O(n) 最坏情况:初始序列逆序,n(n-1)/2 O(n^2); 平均时间复杂度:O(n^2) 空间复杂度:O(1) 稳定性:稳定 void InsertSort(int R[],int n){ int i,j; int temp; for(in...原创 2019-06-30 20:40:21 · 298 阅读 · 0 评论 -
[算法笔记]二分查找
1.二分查找 经典问题:如何再一个严格递增的序列A中找出给定的数x 二分查找:二分查找是基于有序序列的查找算法,该算法一开始令[left,right]为整个下标区间,然后每次测试当前中间位置mid=(left+right)/2,判断A[mid]与欲查询元素x的大小。 1)如果A[mid]==x 说明查找成功,退出查询 2)如果A[mid]>x,说明x再mid位置的左边,因此往左子区间[lef...原创 2020-02-09 10:26:21 · 298 阅读 · 0 评论 -
[算法笔记]two pointers
1.two pointers 利用问题的本身与序列的特新,使用两个下标i,j对序列进行扫描(可以同向扫描,也可以反向扫描),以较低的时间复杂度解决问题,一般是O(n) eg1:给定一个递增的正整数序列和一个正整数M,求序列中的两个不同位置的数a和b,使得它们的和恰好为M,输出所有满足条件的方案。加入给定序列{1,2,3,4,5,6}与正整数M=8,就存在2+6=8与3+5=8成立。 暴力解法:时间...原创 2020-02-10 15:00:05 · 157 阅读 · 0 评论 -
[算法笔记]贪心算法
1.简单贪心 贪心算法是求解一类最优化问题的方法,它总是考虑在当前状态下的局部最优(或较优)策略,来使全局的结果达到最优。 显然如果采用较优而非最优的策略,得到的全局结果也不会是最优的,因此严谨的使用贪心法求解最优化问题需要对采取的策略出进行证明,一般采用反证法与数学归纳法,即假设策略不能导致最优解,然后通过一些列推到来得到矛盾, 以此来证明策略是最优的,最后用数学归纳法保证全局最优。 2.区间贪...原创 2020-02-07 18:39:57 · 356 阅读 · 0 评论 -
[算法笔记]递归
1.分治 分治全称为分而治之,即将原问题或分成若干个规模结构较小而结构与原问题相同或相似的子问题,然后分别解决这些子问题,最后合并子问题,即可以得到原问题的解。 分治法的三个步骤: 1)分解:将原问题分解成文若干和原问题相同或相似结构的子问题。 2)解决:递归求解所有问题。如果存在子问题规模较小的可以直接解决,就直接解决它。 3)合并:将子问题的解合并成原问题的解。 子问题的解应当是相互独立,没有...原创 2020-02-07 11:51:56 · 163 阅读 · 0 评论 -
[算法笔记]大整数运算
1.大整数存储 大整数又称高精度整数,用基本数据类型无法村存储其精度的整数,用数组存储 定义int型数组d[1000],数组中每一位存储整数的每一位,整数高位存储在数组的高位,整数的低位存储在数组的低位 运算的时候从低位到高位进行枚举,整数按字符串类型进行读入(读入的时候是逆序的 需要反转一下) struct bign { int d[1000]; int len; bign() { m...原创 2019-07-21 20:03:40 · 248 阅读 · 0 评论 -
[算法笔记]Hash散列
一.散列 1.整数散列 把输入的数作为数组下标进行来对这个数的性质进行统计。以空间换时间 eg:给出N个正整数,再给出M个正整数,问M中的每个数是否在N中出现过 思路:以空间换时间,设定bool类型数组hashTable[100010],其中hashTable[x]==true表示正整数x在N个正整数中出现过,false表示没有出现过,在读入N个正整数的时候就可以进行预处理,即读入的数为x,令ha...原创 2019-07-23 21:21:45 · 139 阅读 · 0 评论 -
[算法笔记]数学问题
1.最大公约数&&最小公倍数 欧几里得算法(辗转相除)gcd(a,b)=gcd(b,a%b) int gcd(int a,int b){ if(b==0)return a; else return gcd(b,a%b); } 得到a,b的最大公约数d之后,a,b的最小公倍数即ab/d。 2.分数四则运算 1.分数的表示 结构体表示定义分子分母 struct Fr...原创 2019-07-22 21:42:17 · 249 阅读 · 0 评论 -
[算法笔记]C++标准模板库(STL)
1.vector 1)定义 vector<typename> name; 变长数组name[size],size可以根据需要变化 vector<int> name; vector<char> name; vector<double> name; vector<vector<int> >name;//typename如果也是v...原创 2019-07-28 21:31:07 · 222 阅读 · 0 评论 -
[算法笔记]静态链表
静态链表 静态链表的实现原理是hash,通过建立一个结构体数组,并令数组的下标直接表示节点的地址,来达到直接访问数组中的元素就能访问节点的结果。 静态链表不需要头节点。 #include<cstdio> struct Node{ typename data; int data; }node[size]; 由于可能要使用sort函数,在使用静态链表时尽量不要把结构体类型...原创 2019-09-07 18:45:14 · 397 阅读 · 0 评论 -
[算法笔记]并查集
1.并查集 并查集是一种维护集合的数据结构 Union Find Set 支持下面两个操作: 1.合并:合并两个集合 2.查找:判断两个元素是否在一个集合 int father[N]; //father[i]表示i元素的父亲节点 father[i]=i说明元素i是该集合的根节点,对同一个几个来说只存在一个根节点,且将其作为所属集合的标识 2. 并查集的基本操作 1.初始化 每个元素都是一个独立的...原创 2019-09-05 08:19:07 · 127 阅读 · 0 评论 -
[算法笔记]深度优先搜索(DFS)广度优先搜索(BFS)
深度优先搜索 以一种枚举左右完整路径以遍历所有情况的搜索方法 eg1:有n件物品,每件物品的重量为w[i],价值为c[i],选出若干件物品放入一个容量为V的背包中,使得在选入背包的物品重量和不超过V的前提下,让背包中的物品价值最大 记物品编号为index 记已选的物品重量sumW,总价值sumC 定义void DFS(int index,int sumW,int sumC); 遇到每一个物品都有放...原创 2019-08-18 21:37:38 · 239 阅读 · 0 评论 -
[算法笔记]树的遍历
定义: struct node{ typename data; vector child; }Node[maxn]; 新建一个节点(考试中题目给定的数组下标可以直接做Node数组的下标) int index=0; int newNode(int v){ Node[index].data=v; Node[index].child.clear(); retur...原创 2019-08-25 22:41:04 · 155 阅读 · 0 评论 -
[算法笔记]二叉树
二叉树的存储结构与基本操作 1.二叉树的存储结构 使用二叉链表来存储 struct node{ typename data; node *lchild; node *rchild; }; 根节点开始不存在,设为NULL 新建节点: node* root=NULL; node* newNode(int v){ node *Node =new code; N...原创 2019-08-21 21:53:13 · 221 阅读 · 0 评论 -
[算法笔记]图
Dijstra算法:单源最短路径 给定图G(V,E)和起点s,求顶点s到其他顶点的最短距离 起点到终点的最短距离是这类问题第一标尺,题目中一般存在第二标尺(如在同时存在距离相同的最短路径,选出点权最大的/边权最小的等等) Dijkstra+DFS方法 基本思想:用临时数组保存下来所有的最短路径,对这些最短路径统一计算点权,边权等条件,即第二甚至第三标尺,得到最终结果 1.使用Dijkstra算法记...原创 2019-09-03 16:34:16 · 242 阅读 · 0 评论 -
[算法笔记]动态规划
一:动态规划的递归与递推写法 1)动态规划():原创 2020-03-04 17:14:23 · 506 阅读 · 0 评论