摘要: 线段树是一种基于分治思想的类似于二叉树的数据结构,一般用于数组的信息统计,相比于树状数组,线段树有着更广阔的应用空间,但是相对的其代码量长,且常数大 一. 首先我们来讲线段树的建树过程,请看下图: 这张图就是线段树的存储结构,我们从最长的区间开始依次分成两部分,每一部分都有一个需要维护的权,建树过程 阅读全文
posted @ 2018-12-15 16:35 ACE-Shiro 阅读(177) 评论(0) 推荐(1) 编辑
摘要: 我们今天来讲一个应用比较广泛的数据结构——树状数组 它可以在O(nlogn)的复杂度下进行单点修改区间查询,下面我会分成三个模块对树状数组进行详细的解说,分别是树状数组基本操作、树状数组区间修改单点查询的实现、树状数组查询最值的实现 一. 树状数组一般分为三种操作,初始化、修改、查询 在讲基本操作之 阅读全文
posted @ 2018-12-09 12:41 ACE-Shiro 阅读(340) 评论(0) 推荐(1) 编辑
摘要: Tire树(字典树)是用于字符串检索的一种多叉树结构,其中每一个节点包含了若干个字符,在插入或检索某一个字符串时,就沿着当前节点的指针访问下一个节点,我们先来讲一下Tire树的基础操作 初始化 一颗空的Tire树仅包含根节点,且该点的指针为空 插入 当我们要插入一个字符串a时,我们先令指针p指向根节 阅读全文
posted @ 2018-12-08 22:17 ACE-Shiro 阅读(187) 评论(0) 推荐(0) 编辑
摘要: 八数码是一道经典的搜索题,解法比较多,效率也不一样,今天我们来讲两种效率较高的解法——IDA*和双向BFS 题目来源:洛谷P1379 题目描述 在3×3的棋盘上,摆有八个棋子,每个棋子上标有1至8的某一数字。棋盘中留有一个空格,空格用0来表示。空格周围的棋子可以移到空格中。要求解的问题是:给出一种初 阅读全文
posted @ 2018-12-08 14:39 ACE-Shiro 阅读(198) 评论(0) 推荐(0) 编辑
摘要: st表是解决区间RMQ(区间最值问题)的一类算法,时间复杂度为O(nlogn)的预处理和O(1)的查询,其主要运用了类似倍增的思想... 总体来说,st表的用处还是挺大的,代码也比较短,容易记... st表 若现在给定一个长度为n的序列A,每次给定两个数l,r,求出A[l]~A[r]中的最大值... 阅读全文
posted @ 2018-11-23 23:29 ACE-Shiro 阅读(348) 评论(0) 推荐(0) 编辑
摘要: 二分是一类比较常见、相对基础的算法,其代码往往是比较好写的,并且格式也比较固定,同时二分也是一类出错率比较高的算法,在你写完一份二分的代码放入测评机时,往往会发现你二分出的答案与正确答案比较接近,这都是正常现象,这也是二分比较难的地方——设定边界。那么为了防止大家犯这种错误,我接下来将会对二分算法进 阅读全文
posted @ 2018-11-22 19:46 ACE-Shiro 阅读(461) 评论(0) 推荐(0) 编辑