
算法&数据结构
文章平均质量分 90
iwts_poi
个人博客:https://iwts.github.io/
展开
-
最长公共子序列(LCS)-动态规划
什么是最长公共子序列?给一个poj的传送门:poj 1458 Common Subsequence这就是标准的最长公共子序列了。例如我们有2个字符串S1“abcae”与S2“acbea”,那么最长公共子序列就是“ace”。也就是说,子序列是按照顺序的,但是并不是连续的。我们可以用动态规划的思想来完成这个算法。状态分析首先考虑我们应该如何分析“状态”以及状态的“值”。如果了解一点动态规划的情况下,对...原创 2018-02-09 15:52:11 · 296 阅读 · 1 评论 -
二叉查找树(Binary Sort Tree)的解析与实现
二叉查找树 关于性质之类的可以参考wiki、百度百科或者其他博客,其实也很简单,推荐看标准的描述。而博主写的内容主要是想写成类似Map底层的。所以有泛型,并且是Key-Value结构。关于二叉查找树,我们一般是类比二分搜索,仿佛跟Key-Value这样的结构并不一致。但是,在Java上,如果我们能在定义节点的时候,专门声明了Key与Value,并且在Key上定义comparato...原创 2019-01-31 21:40:45 · 2243 阅读 · 0 评论 -
有环链表及以此为基础的一些问题
链表有环及其延伸问题 首先,问题涉及的有环链表是指链表的尾节点不是null,而是指向链表中的其中一个节点,从而使得链表的其中一段是循环的,如果用图的话可以得到这样的数据结构:那么基于这样的数据结构有一系列问题需要处理。最基础的则是判定是否有环。也就是说判定一个链表是否是有环链表。判定是否有环之后,又可以要求返回到底是链表的哪一个节点开始进入环的,然后环的长度是多少,链表的...原创 2018-10-26 23:01:28 · 265 阅读 · 1 评论 -
Kadane算法详解及求解最大子数列和问题
最大子数列和问题 给出一个数列,现在求其中一个子数列,要求是所有子数列的和的最大值。另外还有其他问法,例如给出一个数组,要求求出连续的元素和的最大值。可以一个例子来解释:假设有数列:[-1,2,3,-5,6,-2,4],那么总共有7^2=49种子数列,如果分别求和,其中最大的子数列为:[6,-2,4],其和为8。暴力求解 最暴力的算法是枚举,双重for循...原创 2018-10-25 16:53:08 · 2338 阅读 · 1 评论 -
树状数组的原理与实现
树状数组的作用 实际上,树状数组算是线段树的小弟角色,树状数组能解决的问题线段树一定能解决,而线段树能解决的问题树状数组却不一定能解决。两者都是在区间进行操作,但是树状数组是不如线段树厉害的。但是树状数组的有点就在于常数小,并且短小精悍,手搓的时候就几行代码快的一匹。并且lowbit函数的思想非常精妙,能从代码行中感受到美感啊(突然中二)位运算 树状数组涉及...原创 2018-09-07 16:10:18 · 4085 阅读 · 2 评论 -
尺取法(取尺法)及模板题 poj-3061 Subsequence
什么是尺取法(取尺法) 其实我也不太懂到底是尺取法还是取尺法,好像都可以= =下文统一尺取法。其实很多人写的双指针就就是尺取法,只是突然换个名字,大概的思路以及应用都是类似的,双指针是2个指针移动,尺取法就是设定尺子的两端位置,然后移动。简单的例子 假设给出一串01组成的字符串,要求找出连续的0或者连续的1的最长长度,比较简单的写法就是双指针,定义两个指针,...原创 2018-09-09 19:16:26 · 1049 阅读 · 0 评论 -
Manachar 算法
关于Manachar Manachar主要是为了处理回文串问题,回文串的定义不再赘述。一般来讲,判定一个字符串中的子串是否是回文串,常规的方法是遍历字符串的每一个字符,然后向左右扩展,这样可以判定是否是回文串、回文串的长度,以及字符串中最长的回文子串是什么。这样的方法比较暴力,算法复杂度是,实际使用上是比较慢了。1975年,Manachar发明了Manachar算法,能以的算法复...原创 2018-09-06 17:10:46 · 990 阅读 · 1 评论 -
树状dp入门-poj2342-Anniversary party 题解
树状DP 树状dp,一个问题我们能够转化成树这个数据结构,并且在其基础上使用dp。树这个数据结构本身就带有递归的性质,同时无环、分层,所以跟dfs有非常紧密的联系。那么我们利用深搜,配合dp的状态转移方程,就能够在树上非常自然地写出代码。 树状dp是否能够构造的重要特点就是,父子关系是否满足dp的要求。当然首先要满足这个题可以使用dp来求解,这个是最基础的。如果...原创 2018-08-29 16:56:05 · 714 阅读 · 0 评论 -
RMQ问题的ST算法解法
RMQ问题 RMQ (Range Minimum/Maximum Query)问题是指:对于长度为n的数列A,回答若干询问RMQ(A,i,j)(i,j<=n),返回数列A中下标在i,j里的最小(大)值,也就是说,RMQ问题是指求区间最值的问题。 以上来自百度百科。也就是说RMQ实际上是一个问题,而很多人说的RMQ算法实际上是RMQ问题的一种解法,也就是这...原创 2018-08-15 17:34:53 · 372 阅读 · 1 评论 -
线段树进阶-染色问题 附poj-2777题解
区域染色覆盖问题 假设某大学有一面文化墙,各个学院都可以在上面涂色,要求涂色区域高必须和墙一样,宽度任意但必须是整数(以米为单位)。涂色可以覆盖其他学院的涂色。现在若干个学院涂色之后最终这面墙上能看见多少种颜色。 这就是简单的染色问题了。当然有很多种不同的说法,但整体上离不开这两个问题:1.区域覆盖。2.多种染色方式。既然是区域操作,那么用线段树是比较合理了。用...原创 2018-08-12 10:53:29 · 4946 阅读 · 10 评论 -
线段树的原理与模板
如果会树状数组的同学应该就很容易理解线段树了,在一定程度上,两者是有一点类似的。首先,了解一下我们为什么要使用线段树,以及线段树的主要作用。区间求和问题-医院卖药 假设有一家医院,医院有卖药的地方,不同的药品有不同的数量。每次开药、进药都要在计算机里面记录数量变化,这样方便医院的管理。那么我们该如何实现这样的程序?当然,药品数量的储存用数组是比较合适的(真实的...原创 2018-08-08 20:10:34 · 16669 阅读 · 11 评论 -
区间dp状态的考虑与临界的分析
最近在写一些关于dp的题,春节左右搞的时间也不算多(肝空境复刻了- -),区间dp在刚看比较经典的堆石子的时候还能理解,但是加深难度后就比较迷了,尤其头铁在区间的状态划分上。让几个题搞的分不清区间开始于末尾的2个元素到底包括不包括。总而言之还是对于区间dp的状态的定义很模糊。此篇博文会写一下我个人对于区间dp的理解以及心得。什么是区间dp之前看过一些视频,感觉讲的不是特别好,我个人理解为:从一个线...原创 2018-02-19 15:25:20 · 299 阅读 · 1 评论 -
红黑树的理解与代码实现
红黑树 我们知道对于二叉搜索树而言,无法保证树的平衡性,从而使得进行操作的时候时间复杂度在O(logn)与O(n)之间。这样是不稳定的。而2-3树则借助于3-结点和临时的4-结点,通过分解,解决了平衡问题。例如对于插入,在最终是3-结点的情况下,临时构成4-结点,然后再分解成3个2-结点,这样令树高度+1,但是整体平衡性不变。而红黑树就是为了实现自平衡这个功能而对2-3树进行了扩...原创 2019-02-11 23:01:20 · 3006 阅读 · 1 评论