上一篇讲了DFS,那么与之对应的就是BFS,也就是 宽度优先遍历,又称广度优先搜索算法。首先,让我们回忆一下什么是“深度”: 更学术点的说法,可以看做“单位距离下,离起始状态的长度” 那么广度是什...
前方大坑预警!先讲讲什么是搜索吧。有一天你去一个果园摘梨子,果农告诉你,有一棵树上有一个金子做的梨子,找到就是你的,你该怎么找? 地图如下: S 0 0 0 0 0 0 0 0 0 0 0 0...
与栈相对的就是队列了,二者都是容器适配器一级的数据结构。Queue的默认实现也是通过Deque实现的(这丫的通吃啊),也就最大程度保证了效率和空间的平衡。 Queue是 先进先出(FIFO)...
在聊Stack之前,要说到一个概念:容器适配器。 之前我们接触了两种容器:顺序容器(也有叫序列容器的)和关联容器。那么已知的数据结构有那么多,我们是不是都需要去一一实现呢? 当然不用,因为那些数据...
Set也属于关联容器,而且和Map的实现方法相同,都是红黑树。 简单来说,Set就是key和Value相等的Map。 值得注意的是,由于红黑树的自平衡性(额,也就是自动排序的结果),所以不能直接修...
Map的直译是图,但是STL里的map容器和图半毛钱关系都没有~Map属于关联容器,而之前讨论的List,Vector,Deque都属于顺序容器。 差别么…… 个人觉得,关联容器是单纯查找用的,顺...
和前两个不同,双端队列(double-end queue)更像是一种折衷的产物。可能是人们发现Vector和List的水火不容,于是发明了这么一个集两家所长的东西。 双端队列具有Vector和Li...
和链表相对的就是数组了,这两种结构是最基本的数据结构类型了。 C++自身实现了一个array容器,但是STL里的动态数组Vector(直译为向量)使用更方便,这里还是讨论下Vector。 Vec...
额,这个真的有必要说么~~ 链表是空间动态分配的,内存不连续,不能随机进行访问和储存的结构。 链表的存储方式注定了链表在查找时面临着O(n)的时间复杂度,虽然看起来不算很大,但是这是单次查找的复杂...
贪心,递推,动态规划,这三种算法思想都是很难掌握的。因为没有死板的公式和套路的代码,只能通过日常的学习和思考,去不断加深自己对这类题目的敏感度和熟练度,提高自己的思维能力,才能对这类题目游刃有余。 ...
关于区间相关贪心算法的讨论,点击这里,有一份详细的资料,还有几个问题没有说到 《浅谈信息学竞赛中的区间问题》 在贪心算法的层面上,我们能够进行解决的区间覆盖,指的就是最小区间覆盖问题。 ...
部分背包问题虽说是归于背包问题的一种,而且背包问题大多数是通过动态规划的出的结果,但是贪心算法解部分背包,不管是思想还是操作上来说,都是非常简单的。首先,我们来看一下什么叫做部分背包。 有N个商品...
区间选点的问题大致可以描述为: 给定N个区间[a,b],取尽量少的点,使得每个区间内都至少有一个点(不同区间内含的点可以重复)。关于贪心算法的验证过程就不再赘述,现在思考一下贪心策略的制定。 对于...
之前基本了解了贪心的基本思想,现在我们来看一下比较经典的几个贪心问题。 这篇文章讨论的是”选择不相交区间“,具体什么意思,我们同样先看一道题。题目来源:NYOJ 14 ...
等待了一年时间,这个系列的坑终于又开始填了……不说废话,直接开始正题。1.何为贪心? 贪心算法实际上指的是把问题划分成一个一个的子问题,然后针对当前的子问题,求出局部最优解,然后将子问题的最优解合...
打算写算法学习的系列很久了,看到网上那些大牛一个个都写了很多总结和知识点讲解,逐渐明白自己的不足主要就是在基本功上。很多算法和思路需要重新梳理才能更好的掌握和运用,正好集训还有一个月时间,够自己慢慢的...