
数据结构
Markland_l
这个作者很懒,什么都没留下…
展开
-
跳表简析
package cn.com.supermonkey.trainer.smartschedule.bo;import java.util.Random;public class SkipList { /** 最大层数 */ private static final int MAX_LEVEL = 32; /** 初始层树 */ public int levelCount = 1; /** 头节点 */ public Node head;原创 2021-03-04 00:38:16 · 103 阅读 · 1 评论 -
简析红黑树
红黑树节点public class RbTreeNode { /** 节点颜色 */ public boolean color; /** 左孩子 */ public RbTreeNode left; /** 右孩子 */ public RbTreeNode right; public int value; /** 父节点 */ public RbTreeNode parent; public RbTreeNod原创 2021-03-03 00:32:01 · 146 阅读 · 0 评论 -
习题课1-3(并查集、BST)
习题课1-3(并查集、BST)等式第一行整数T,表示数据组数接下来会有T组数据,对于每组数据第一行是两个整数n,m,表示变量个数和约束条件个数接下来m行,每行三个整数a,b,e,表示第a个变量的和第b个变量的关系若e=0则表示第a个变量不等于第b个变量若e=1则表示第a个变量等于第b个变量将两个元素所在集合合并起来查询两个元素是否在同一个集合中注意e=1的操作要在e=0的操作之前解法1第i个元素所在集合ID(i)把=1的条件提到前面来原创 2020-11-11 21:54:22 · 243 阅读 · 0 评论 -
习题课1-2(逆序对、哈希、哈夫曼树)
习题课1-2(逆序对、哈希、哈夫曼树)数字盒子维护一个集合S支持两种操作insert delete要求输出操作是否成功,操作次数5X10的5次方集合中元素不重复,使用一个bool数组记录每一个数是否出现过通过哈希函数把原数变小,对一个质数取余,但是并不是真的变小,而是作为原数的代号,代码实现Hash()vector<ll>::iterator ptr = table[h].end()删除时,没有进行元素的移动*ptr = tab原创 2020-11-09 08:52:44 · 277 阅读 · 0 评论 -
习题5-3(打牌问题、动态规划最大方案问题)
习题5-3(打牌问题、动态规划最大方案问题)纸牌给你n张牌,对手同样有n张牌所有的牌都互不相同每轮你和你的对手都打出一张牌牌的点数更小的获胜问你运气最好能获胜几轮分析n<=10^5怎么枚举不同的情况解法1我出一张牌,对方出一张牌,牌就没了可以用一张表格来表达流程,表格确定,比赛就比完了枚举完所有的表格,找到赢得最多的即为答案枚举我可能出的牌,枚举地方可能出的牌我的复杂度O(n!) 敌方O(n!)总共O((n!)^2)重要的是你的牌的对局对象,你这次牌第几轮打原创 2020-11-02 07:59:58 · 578 阅读 · 0 评论 -
习题课5-2(最近点对、线段相交)
习题课5-2(最近点对、线段相交)最近点对给定n个二维平面的点,求距离最近的点对,并输出它们的距离分治子序列那道题,把序列分成两半,分别求解左右两边解法1分治算两边令solve(l,r)表示第l个点到第r个点的最近点对的距离solve(l,r) = min(solve(l,mid),solve(mid+1,r),cal(l,r,mid))mid = (l+r)>>1; call(l,r,mid)表示第一个点在(l,mid),第二个点在(mid+1,r)所得到的最近点原创 2020-11-02 07:58:21 · 299 阅读 · 0 评论 -
习题5-1(凸壳、拓扑排序)
习题5-1(凸壳、拓扑排序)凸包卷包裹求凸壳解法1求上下凸壳,类似卷包裹,但是不是极角排序(任取一个点,做极角排序)按照先x轴后y轴的方式升序排序,这是为了找到一个一定在凸包上的点然后求上凸壳和下凸壳,可以想象在y轴负无穷处有一个点,然后求凸包得到上凸壳,y轴正无穷有一个点,然后求凸包得到下凸壳单调栈代码解析convex函数,对a数组求凸包,求的结果存储在b数组中可以想象在y轴负无穷处有一个点,然后求凸包得到上凸壳,上凸壳加上y轴无穷远处的点,可以把内部原创 2020-10-31 15:01:42 · 582 阅读 · 0 评论 -
习题课4-3(哈希桶、KMP)
习题课4-3字符串匹配kmp算法1.构造next数组2.匹配next数组从第一位开始匹配,直到不相同,记录了最长长度的匹配,下次匹配,直接从这个位置开始匹配大串ababcabcaba 模式串abcabafori 从start开始,a匹配上,移动到a,b匹配,移动b,c不匹配,回到start,回到start,重新匹配,不匹配的话一直往回走,直到回到start,前两位匹配上,一直比较到最后一位,不匹配,回到模式串的倒数第二位b,一直回退到模式串的第三位c,发现匹配原创 2020-10-29 08:47:27 · 226 阅读 · 0 评论 -
习题课4-2(子串(动态规划)、前缀串问题(trie树))
习题课4-2(子串(动态规划)、前缀串问题(trie树))回文串比较正反hash值线性时间计算出hash值?后缀和计算邓老师数质数是除了1与自身不再有其他因数的正整数是一个合数质数用筛法求解代码解析i从2到n枚举把它的2倍到若干倍但是小于等于n的数标记为合数筛掉质数倍数的数(质数倍数的数不是质数,但是要判断一下)子序列解法1O(2^n)的时间吧所有的子序列求出来,然后去重解法2(动态规划)递推,在竞赛中也称为动态规划f(i)表示s(i)所拥有的不同原创 2020-10-26 08:42:04 · 247 阅读 · 2 评论 -
习题课4-1(hash、回文串问题)
习题课4-1(hash、回文串问题)矩形给定两个矩阵,判断第二个矩阵在第一个矩阵哪些位置出现过输出位置的左上角有多个答案,按字典序输出解法1用一个数字来代替一个矩阵枚举两个矩阵,n4,,504是1亿以内的解法2哈希字符串ebacdhash(ebacd) = (5B4+2B3+B2+3B1+4B^0) mod moB是大于26的任意指数 mo为一个很大的质数如何尽量减少碰撞的可能取两套B mo,如果算出来的hash1和hash2都相等,则认为这两原创 2020-10-25 15:29:32 · 951 阅读 · 0 评论 -
习题3-3(动态规划)
习题3-3(动态规划)倒水问题三种操作,倒满、倒空、把A杯中的水倒向B杯t<=4 搜索 t<=100的量级用DP(有一种是类似搜索记忆法) t<=200记录当前的状态,两个水杯的水量,操作数,当这三者相等时的操作,这两者是等价的,不管中间经历了什么,经过了若干次操作后,A杯和B杯最终的水量是各自相等的dp(i)(u)(v) 经过i次操作能否把A杯倒出u这么多水,或者把B杯倒出v这么多水标答demon=3 m=2[外链图片转存失败,源站可能有防盗链机制,建原创 2020-10-25 10:03:49 · 405 阅读 · 1 评论 -
习题课3-2(动态规划2、计算可行方案)
习题课3-2(动态规划2、计算可行方案)刷油漆n辆车排成1排,还有m种涂料,第i中涂料可以涂ai辆车,恰好可以涂n辆车,要保证相邻车辆油漆不同问题分析排成一排恰好涂完相邻车的油漆种类不同解法1(动态规划)令f(x,p,c1,c2,…,cm)表示第x辆车到第n辆车,第x-1辆车涂的油漆种类是p,第i种油漆还剩下ci次,得到的方案数f(n+1,p,0,…0) = 1f(x,p,c1,c2,…,cm) = f(x+1,q,c1,c2,…,cq-1,…,cm)求和 其中n等于ai求和原创 2020-10-20 08:44:05 · 292 阅读 · 0 评论 -
习题课3-1(动态规划)
习题课3-1(动态规划)数字三角形解法1写一个搜索,自上而下搜索会有大量重复解法2d(i,j)能得到的最优路径之和某一个点的d(i,j),只能是d(i-1,j)和d(i-1,j-1)走过来,找出其大者,同时加上当前点a(i,j),即可写出状态转移方程i-1 j-1有可能越界,在外面包一层0最后在底端一行里面比较出最大者启发不会走回头路,不会走到重复的地方,等价于有向无环图背包问题1物品有两类,一类只有一个,一类是无限个给定体积,求一种装填方案使价值最大问题分析原创 2020-10-19 08:13:17 · 404 阅读 · 0 评论 -
算法4A----字符串
算法4A----字符串preliminaries一系列的字符连起来一种退化的线性结构,只能存储字符的向量 ascii/unicode一般很长局部整体性,单独拿出一部分,call-by-pattern子串substr,也叫做切片前缀prefix,也可以写成子串形式后缀suffix,也可以写成子串形式pattern matching在test中找打潜在的patterntest很大,pattern比test小2到3个数量级随机的生成test和pattern,去测试算法性能的方法是不原创 2020-10-15 08:33:16 · 230 阅读 · 1 评论 -
算法5A----计算几何
算法5A----计算几何某个点是否在三角形内正确且简洁一种解法,发射射线,穿过次数是奇数次,但是求交过程是很复杂的分而治之和减而治之都是reduction 简化或减化三角形是最简单的多边形了转换成3个问题[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Jgf5927Z-1602634390559)(C:\Users\liusiping\AppData\Roaming\Typora\typora-user-images\image-2020原创 2020-10-14 08:13:48 · 353 阅读 · 0 评论 -
算法5B-----凸包2
算法5B-----凸包2r.graham scan(葛立桓)1972波音公司数字情种 P .Erados金芳蓉graham scan : pre sortingpolar angle : 极坐标系,3、4、5、6、6、7、8分别与极坐标系构成的极角,进行排序但是极角并不需要逐一算出来排序,实际是在判断谁在谁之前[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BALBlKmp-1602548490796)(C:\Users\liusipi原创 2020-10-13 08:21:48 · 238 阅读 · 0 评论 -
习题课2-3
习题课2-3楼尔邦德二分查找的前提是序列有序所在可以在搜索的过程中缩短搜索序列二分查找 找到>=x的最小值找到分界线,<x在分界线左侧,>=x在分界线右侧[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zn8J9ftE-1602290586169)(C:\Users\liusiping\AppData\Roaming\Typora\typora-user-images\image-20201010073202783.png)]原创 2020-10-10 08:45:06 · 146 阅读 · 0 评论 -
算法4B-----散列
算法4B-----散列散而列之建立快速查询的索引BC[j,‘x’],j相当于身份证号,call-by-value需要查电话簿才能拨打电话建立一个表格,直接输索引,就可以打出响应的值java:hashMap+hashTable可以把key-value存储到容器中通过key直接获取valueperl:%hash typepython:dictionary classruby:hash tablehashing:table+function昨天的例子原创 2020-10-05 21:44:46 · 205 阅读 · 0 评论 -
习题2-2
习题2-2象棋利用二分图的思想,画出二分图每个点最多匹配一个点最优解可能不唯一next是指向下一条边,to是下一条边所连接的节点位置曾广路:未匹配点出发,到终点是一个未匹配点,中间的点是交错的,有匹配点,也有未匹配点匈牙利算法:一直寻找曾广路,直到没有就停止mc==0 ,未匹配点,直接cnt+1;dfs(mc[y]),又从y点跳回x集合,寻找新的可能序列计数蛮力法,枚举左端点和右端点,记录所有的情况bbst解法tree.insert(a原创 2020-10-02 09:48:24 · 162 阅读 · 0 评论 -
算法3A----图搜索
算法3A----图搜索BFSMetaphor[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SKnsEOjV-1601600407770)(C:\Users\liusiping\AppData\Roaming\Typora\typora-user-images\image-20201001121901033.png)]在一个草原上,火种向外传播饶绍的过程S点是火种,在把自己耗尽前,它会把它周围的一圈点着蓝色的点会像火种一样向外继续扩展,注意不能向内,因为里面已经燃原创 2020-10-02 09:00:25 · 1493 阅读 · 0 评论 -
习题课2-1
习题课2-1排序解法1 选择排序[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qzTdI4mu-1601525682842)(C:\Users\liusiping\AppData\Roaming\Typora\typora-user-images\image-20201001105902910.png)]复杂度一直都是O(n^2)每次扫描,用一个额外变量记录最小元素的下标扫描完毕,通过记录的最小元素下标,将初始最小元素和记录的最小元素交换。解法2 插入排序原创 2020-10-01 12:14:57 · 198 阅读 · 0 评论 -
算法3B----动态规划
算法3B分而治之,彼此有关联时,不太适用动态规划一定程度上可以解决彼此关联的子任务fibonacci recursion斐波拉契数列任何一项都是前两项的和0 1 1 2 3 5 8 13输出到43项左右的时候,打印的速度变得很慢,并且越来越慢可以把递归过程中生成的实例画出来[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-uJjm0hbk-1601321277522)(C:\Users\liusiping\AppData\Roaming\Typora\t原创 2020-09-29 03:28:10 · 259 阅读 · 0 评论 -
习题课1-1
习题课1-1栈提示[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kbCqwkpY-1600889567786)(C:\Users\liusiping\AppData\Roaming\Typora\typora-user-images\image-20200923220044984.png)]模板import java.io.BufferedReader;import java.io.IOException;import java.io.Input原创 2020-09-24 03:33:12 · 131 阅读 · 0 评论 -
算法2B----分而治之
算法2B----分而治之divide-and-conquer把问题一分为二如果一分为二后,两部分的耦合性还很强,用动态规划每个子问题的解,还需要做汇总的工作,从而得到原始问题的答案过程中需要利用到递归,而减而治之不如分而治之更适合递归,有爆栈风险两个部长分别做完各自的工作,主席需要做完整体的工作master theorem 主定理[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-AqhlVNgN-1600721749747)(C:\Users\liusipi原创 2020-09-22 04:56:05 · 306 阅读 · 0 评论 -
算法2A----堆、减而治之的策略
算法2A堆完全二叉树[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6bX6siUn-1600633772860)(C:\Users\liusiping\AppData\Roaming\Typora\typora-user-images\image-20200920194436358.png)]堆是一种特殊的树型结构,称为完全二叉树基本是孩子双全的底层和次底层才有可能是非双全的而且缺失的只能右节点便于存储,任意一个节点的左右孩子有一个简明的关系节点值k的左右原创 2020-09-21 04:30:21 · 231 阅读 · 0 评论 -
最小生成树的生成模板
最小生成树的生成模板class Main{ static class UnionSet{ // 序号i的父亲节点 int[] father; // 序号的等级 int[] rank; void init(int n){ father = new int[n+1]; rank = new int[n+1]; for(int i=1;i<=n;i++){原创 2020-09-19 13:23:33 · 137 阅读 · 0 评论 -
算法1B----最小支撑树的两种算法实现思想(prim和kruskal)
算法1-BBST && BBST 二叉搜索树 平衡二叉树从根开始根据比较的大小,来决定是往左(左子树)还是往右(右子树)逐级加深比较越深的地方,所需要的比较次数也就越多,因此倾向于构造平衡、偏平的二叉树Hashtable + Dictionary + Map根据一个"名字",快速的找到一个元素散列表,或哈希表时间复杂度O(1)哈希冲突:两个元素在同一个位置存储,此时会像拉链条一样往后存储关键点,怎么取模?取模值一般是散列表长度一般是素数原创 2020-09-15 04:07:31 · 1031 阅读 · 0 评论 -
算法1A----基础数据结构和基础算法策略
算法1ABig-O消耗的资源越少越好时间空间函数缩放的复杂度变化O(f(n)) = O(c*f(n))O(na+nb)= O(n^a)(a>b)数据结构基础知识线性结构vector & ArrayA[n] , A[0,n),A[lo,hi) 左闭右开查询方便,增删需要移动元素List & LinkedListcallby postion,需要相对关系查找增删方便,只需要修改增删两侧的关系查询慢,需要逐一查找与数组原创 2020-09-13 21:53:55 · 218 阅读 · 0 评论