算法及数据结构
介绍几本算法和数据结构
笑看江湖路6
这个作者很懒,什么都没留下…
展开
-
离散化介绍
数的值域跨度范围很大,但数的个数很少,通常会差几个数量级。四、示例(Example)二、离散化算法的介绍。三、离散化算法的运用。原创 2023-02-22 00:24:52 · 336 阅读 · 0 评论 -
双指针算法
双指针指的是在遍历对象的过程中,不是普通的使用单个指针进行访问,而是使用两个相同方向(快慢指针)或者相反方向(对撞指针)的指针进行扫描,从而达到相应的目的。最常见的双指针算法有两种:一种是,在一个序列里边,用两个指针维护一段区间;另一种是,在两个序列里边,一个指针指向其中一个序列,另外一个指针指向另外一个序列,来维护某种次序。在利用双指针算法解题时,考虑原问题如何用暴力算法解出,观察是否可构成单调性,若可以,就可采用双指针算法对暴力算法进行优化.严格的来说,双指针只能说是是算法中的一种技巧。原创 2023-02-10 00:10:31 · 152 阅读 · 0 评论 -
位运算介绍
1.也就是求解lowbit(n)1.把第k位移动到最后一位。3.得出公式n>>k&1。求解过程:n&(-n)原创 2023-02-09 00:13:10 · 100 阅读 · 0 评论 -
高精度除法
此外,要注意我们的A是逆着计算的,因此C.begin()存放的是最高位,C.end()存放的是最低位;i–)匹配的话,需要将C逆置reverse(C.begin(),C.end());数据预处理:输入string a和int b两个数,并将a各个位的数倒置,并存放在vector[HTML_REMOVED] A中;此外,如果相除后C为100,输出时为001,与习惯不符,则需要pop出多余的0。模拟人工除法,r = A[i] + r*10,作为被除数;①从被除数的第一位开始,用此数除以除数,得出商和余数。原创 2023-02-08 00:11:30 · 518 阅读 · 0 评论 -
二分法讲解
是向下取整,当l与r只相差1的时候,即 l = r - 1,最终的结果mid = l(即结果不变还是l),补上1之后 mid = r,再次循环之后l = r 即[r , r],最终结束循环。如果不补1将会出现死循环。单调性与二分的关系:有单调性一定可以二分,用二分不一定是单调性。二分的本质不是单调性而是边界点(找符合条件的最小的数或者最大的数)二分法比较蛋疼的是由很多边界要考虑。原创 2023-02-06 00:52:42 · 544 阅读 · 0 评论 -
差分算法介绍
对于第一个数a[1]的插入,就是在[1,1]的区间段加上a[1],而对b数组而言,就是b[1]+a[1],b[1+1]-a[1],即insert(1,1,a[1])b[l] + c,效果使得a数组中 a[l]及以后的数都加上了c(红色部分),但我们只要求l到r区间加上c, 因此还需要执行 b[r+1] - c,让a数组中a[r+1]及往后的区间再减去c(绿色部分),这样对于a[r] 以后区间的数相当于没有发生改变。a[n],且令 b[i] = a[i]-a[i-1],b[1]=a[1],那么就有。原创 2023-01-08 23:35:09 · 8849 阅读 · 5 评论 -
前缀和讲解
原数组: a[1], a[2], a[3], a[4], a[5], …前缀和: S[i] = a[1] + a[2] + a[3] + …for循环求出 每个S[i] (将 S[0] 定义为 0, 避免下标的转换)注意: 前缀和的下标一定要从 1开始, 避免进行下标的转换。求 [l, r]中的和, 即为 S[r] - S[l-1]前缀和 Si为数组的前 i项和。一、一维数组求解前缀和(Si)快速求出元素组中某段区间的和。原创 2023-01-08 21:52:56 · 102 阅读 · 0 评论 -
归并排序分析
给定两个以字符串形式表示的非负整数 num1 和 num2,返回 num1 和 num2 的乘积,它们的乘积也表示为字符串形式。比较两个指针所指向的元素,选择相对小的元素放入到合并空间,并移动指针到下一位置;2.申请空间,使其大小为两个已经排序序列之和,该空间用来存放合并后的序列;3.设定两个指针,最初位置分别为两个已经排序序列的起始位置;将另一序列剩下的所有元素直接复制到合并序列尾。重复步骤 3 直到某一指针达到序列尾;数组中的第K个最大元素。1.通过递归拆分数组。原创 2022-12-26 23:22:38 · 95 阅读 · 0 评论 -
高精度乘法
如果计算机结果已经超过long long所能表示的范围,将会得到溢出后的答案(结果不正确,也不能计算)。这时候就需要用到高精度乘法算法,所谓高精度乘法算法,无非也就是通过录入字符数组的形式保存数字为字符串,然后逐一取出录入的数字字符,转换成对应的int数字,然后利用计算机善于重复循环处理数据的特点,模拟乘法竖式的计算过程,通过进位和错位相加的形式,得到高精度计算结果。如下:给定两个以字符串形式表示的非负整数 num1 和 num2,返回 num1 和 num2 的乘积,它们的乘积也表示为字符串形式。原创 2022-12-26 20:52:40 · 151 阅读 · 0 评论 -
高精度减法
2.对于 t = A[i] - B[i] - t;可以拆为 t = A[i] - t如果B[i]合法,再t -= B[i] 这么两步来做。3.将相减后t的处理 ,把 t >=0 和 t < 0 用一个式子来表示 t = (t + 10) % 10。给定两个正整数(不含前导 0),计算它们的差,计算结果可能为负数。1.先比较两个数的大小,打的数放参数前面。原创 2022-12-18 00:03:00 · 75 阅读 · 0 评论 -
高精度加法
给定两个字符串形式的非负整数 num1 和num2 ,计算它们的和并同样以字符串形式返回。再十位相加: 6 + 2 + 1(进位)= 9, 所以十位是 9,向百位进 0。先个位相加: 7 + 8 = 15,所以结果的个位是5,向十位进 1。在百位相加: 5 + 0 = 5, 所以结果的百位是 5。例如计算:567 + 28。综上,计算结果为 595。模拟手动加法计算即可。415. 字符串相加。原创 2022-12-16 22:25:50 · 112 阅读 · 0 评论 -
快速排序(双指针法)
由于while(i < j)循环结束时,i>=j,i=j时没问题,当i>j时,且只剩下两个元素,由于x = nums[l],会一直死循环。当两指针即将相遇时,停止,此时q[i]的左边全部小于x,q[j]的右边全部大于x,j从指向去q[r]开始向前移动,如果q[j]>x,就继续向前移动,否则,停止。右侧q[r],令它为x。i从指向q[l]开始向后移动,如果q[i]原创 2022-12-15 01:06:40 · 939 阅读 · 1 评论 -
哈希表的介绍
基本概念哈希表可以存储各种类型的数据,当我们从哈希表中查找所需要的数据时,理想情况是不经过任何比较,一次存取便能得到所查记录,那就必须在记录的存储位置和它的关键字之间建立一个确定的对应关系 f,使每个关键字和结构中一个唯一的存储位置相对应。(关键字就是所要存储的数据,存储位置相当于数组的索引)。哈希表常用的两种存储方法:1.开放寻址法 2.拉链法拉链法:首先对关键码集合用散列函数计算散列地址,具有相同地址的关键码归于同一子集合,每一个子集合称为一个桶,各个桶中的元素通过一个单链表链接起来,各链表的头结原创 2022-01-03 18:08:55 · 1543 阅读 · 0 评论 -
并查集介绍
一、并查集定义并查集是一种树型的数据结构,用于处理一些不相交集合(disjoint sets)的合并及查询问题。并查集通常包含两种操作查找(Find):查询两个元素是否在同一个集合中合并(Union):把两个不相交的集合合并为一个集合基本原理:每个集合用一个树来表示(不一定是二叉树),树根的编号就是整个集合的编号,每个节点存储它的父节点,p[x]表示x的父节点。问题1:如果判断树根。p[x] == x问题2:如何求集合的编号。while(p[x]!=x) x=p[x]问题3:如何合并原创 2022-01-03 12:55:30 · 886 阅读 · 0 评论 -
trie树介绍及模板
1、基本概念 字典树,又称为单词查找树,Tire数,是一种树形结构,它是一种哈希树的变种。 2、基本性质根节点不包含字符,除根节点外的每一个子节点都包含一个字符从根节点到某一节点。路径上经过的字符连接起来,就是该节点对应的字符串,每个节点的所有子节点包含的字符都不相同3、应用场景 典型应用是用于统计,排序和保存大量的字符串(不仅限于字符串),经常被搜索引擎系统用于文本词频统计。4、优点 利用字符串的公共前缀来减少查询时间,最大限度的减少无谓的字符串比较,查询效率比哈希树高。能够高效原创 2022-01-02 20:36:27 · 539 阅读 · 0 评论 -
大小根堆的介绍
堆的简介Heap是一种数据结构具有以下的特点:1)完全二叉树2)heap中存储的值是偏序小根堆: 父节点的值小于或等于子节点的值大根堆: 父节点的值大于或等于子节点的值堆的存储一般都用数组来表示堆,i结点的父结点下标就为(i–1)/2。它的左右子结点下标分别为2 * i + 1和2 * i + 2。如第0个结点左右子结点下标分别为1和2。注意:这里下标从0开始比较方便,因为0开始的话2x也是0,其子结点也是0。堆的基本操作1.down当堆中某个结点的值变大,比如下面的根结点,则与其最原创 2021-12-31 00:33:31 · 2250 阅读 · 0 评论