2020暑期算法学习
Rati0nal
这个作者很懒,什么都没留下…
展开
-
算法学习记录——暑假第二周(3)——Trie树、并查集以及哈希
本文复习内容概括:Trie树和并查集都是针对集合插入/处理/查询操作所提出的高效处理算法其中Trie树侧重于字符串集合的维护,并查集侧重于数字集合的合并Trie树基本思路示意:树的存储方式:声明一个二维数组int son[N][26]。其意义是对于每个节点有26个子节点,但只有当这些节点上有非0值的时候才被视为真的子节点,然后再更新当前位置处理子节点的子节点。【在字符串结尾进行标记可区分abc与abcdf(如图所示)】Tire树的插入与查询操作全局变量声明char str[N];int原创 2020-08-06 12:11:38 · 133 阅读 · 0 评论 -
算法学习记录——暑假第二周(2)——单调栈、单调队列、KMP
本文目录单调栈与单调队列KMP算法单调栈与单调队列适用题目:适用于’输出每个数左/右边第一个比它小的数’或’定长范围内的最大(最小)值’类型的题目核心思维:在每次都输出最值的题目中,每有一个新值进来,都与目前队列/栈里面的一端极值进行比较,只有有可能被输出出来的东西可以进栈,永远不可能被输出的东西直接从输入阶段就被淘汰,这样下来最终形成队列/栈的值是单调递增/递减的代码略因为单调队列/栈主要的是思路,实现很简单KMP算法KMP类型题目描述:给定一个模式串S,以及一个模板串P,所有字原创 2020-08-03 11:13:31 · 92 阅读 · 0 评论 -
算法学习记录——暑假第二周(1)——数组实现单双链表
前言:经典链表节点的实现经典结构体创建节点方式:结构体方法struct Node{ int val; Node *next;}其缺点比较明显:每添加一个节点都要new Node();一下,这样和数组模拟相比会慢很多。所以比较适合在笔试时候用,实际操作的时候用数组可能会更好一些。数组模拟实现单链表单链表能实现的东西:邻接表存储图存储树实现单链表需要声明的东西:数组模拟实现双链表双链表能实现的东西:优化某些问题...原创 2020-07-31 13:19:54 · 104 阅读 · 0 评论 -
算法学习记录——暑假第一周(4)——双指针算法、位运算、离散化、区间合并
双指针算法双指针算法有效地降低了时间复杂度,是一个十分有价值的思考方法这种算法可以用来求最长连续不重复子序列基本模板for(int i=0,j=0;i<n;i++){ while(j<=i&&check(j,i)) { 具体操作 }}位运算这里主要介绍树状数组的灵魂函数——lowbit函数,此函数用来返回x的最后一位1//返回x的最后一位1,在返回时附带其后面的0//例:14=1110 lowbit(15)返回二进制10,十进制2int lowb原创 2020-07-11 14:37:26 · 139 阅读 · 0 评论 -
算法学习记录——暑假第一周(3)——前缀和、差分
前缀和前缀和即前n项和。题目i部分代码如下 int n; //数组元素个数 int a[100003],s[100003]; cin>>n; for (int i = 1; i <=n ; ++i) cin>>a[i]; //s[n]为前n项和(前缀和) for (int j = 1; j <=n ; ++j) s[i]=s[i-1]+a[i]; //查询 //区间[l,r]的区间和 cout<原创 2020-07-10 23:57:35 · 233 阅读 · 0 评论 -
算法学习记录——暑假第一周(2)——高精度运算(大数运算)
本文主要内容:高精度算法高精度加法高精度减法高精度乘法高精度除法高精度算法是一种必须熟练掌握的算法,在C++领域中要解决大数问题的基本方式。注:本文的高精度算法的处理顺序除了除法都是从低位到高位,除法是从高位到低位(与竖式计算方法保持一致)本文的数字顺序是大数在符号前小数在后高精度加法核心思想:声明一个进位变量t模拟进位//C=A+B//注意此函数是从高位处理到低位的vector<int> add(vector<int> &A,vecto原创 2020-07-10 00:08:27 · 128 阅读 · 0 评论 -
算法学习记录——暑假第一周(1)——排序、二分查找
基本复习板块:原创 2020-07-09 16:30:35 · 117 阅读 · 0 评论