随笔分类 -  基础算法与数据结构

摘要:还是区间求和问题 线段树 时间复杂度 建树 查询区间 更新区间 参开资料 还是区间求和问题 对于单点修改,区间求和问题,我们可以用树状数组很好地解决。但是如果需要对区间进行修改(统一加上一个值),然后区间求和这种问题,那么就需要线段树了。 线段树 线段树是一颗二叉树(近似于完全二叉树),线段树的每一 阅读全文
posted @ 2023-02-24 00:55 HachikoT 阅读(40) 评论(0) 推荐(0) 编辑
摘要:求区间和的问题 树状数组 代码示例(go) 参考资料 求区间和的问题 当前有一个包含n个元素的数组arr[n],需要不断地修改其中某一元素的值,以及查询某一区间的和。 最为原始的做法就是直接修改值,然后遍历求和,那么修改的时间复杂度就是O(1),查询的时间复杂度就是O(n)。 或者采用前缀和 阅读全文
posted @ 2023-02-23 15:52 HachikoT 阅读(43) 评论(0) 推荐(0) 编辑
摘要:结构定义 操作定义 合并 插入 删除 复杂度分析 代码示例 参考资料 结构定义 斜堆(skew heap)也叫自适应堆(self-adjusting heap),它是左倾堆的一个变种。通常用来实现优先队列,支持插入,删除,合并操作,并且均摊复杂度都为O(lgn)。 斜堆在结构上没什么特殊要求,只 阅读全文
posted @ 2022-12-05 00:49 HachikoT 阅读(2394) 评论(0) 推荐(0) 编辑
摘要:红黑树性质 红黑树是一棵二叉搜索树,它在每个结点上增加了一个存储位用来表示结点颜色,可以是Red或者Black。通过对任意一条从根到叶子的简单路径上各个结点颜色的约束,红黑树可以确保没有一条路径会比其它路径长出2倍,因而是近似于平衡的。 红黑树满足下面的性质: 每个结点要么是红色的,要么是黑色的。 阅读全文
posted @ 2020-12-16 23:26 HachikoT 阅读(514) 评论(0) 推荐(0) 编辑
摘要:最大子序列和 给定一个整数数组A[1n],找到一个具有最大和的连续子数组,返回其和: 输入: [-2,1,-3,4,-1,2,1,-5,4] 输出: 6 解释: 连续子数组[4,-1,2,1]的和最大,为6 动态规划解法 令d[i]表示以A[i]结尾的最大子序列和,若$d[ 阅读全文
posted @ 2020-11-21 20:13 HachikoT 阅读(130) 评论(0) 推荐(0) 编辑
摘要:拓扑排序 对于一个有向无环图(DAG Directed Acyclic Graph)——G(V,E)来说,其拓扑排序是G中所有结点的一种线性次序,该次序满足如下条件:若图G包含边(u,v),则结点u排在结点v前面,若图G中包含环路,则不可能排出一种线性次序。 举个栗子 在实际 阅读全文
posted @ 2020-11-09 15:40 HachikoT 阅读(76) 评论(0) 推荐(0) 编辑
摘要:算法描述 快速排序采用了分治的思想: **分解:**数组A[pr]被划分为两个子数组A[pq1]A[q+1r],使得A[pq1]中的元素小于等于A[q]A[q+1r]中的元素大于等于A[q] * 阅读全文
posted @ 2020-11-07 21:58 HachikoT 阅读(122) 评论(0) 推荐(0) 编辑
摘要:堆(heap) (二叉)堆是一种用数组表示的完全二叉树,并且任意节点满足A[PARENT(i)]A[i]的大小关系(最大堆): 完全二叉树:对于高度为h的二叉树,除了h层以外,其余0到h-1层的节点都是满的,且h层的节点都靠左边。 完全二叉树高度:对于n个节点的完全二叉树,高度为$\l 阅读全文
posted @ 2020-10-18 17:32 HachikoT 阅读(390) 评论(0) 推荐(0) 编辑
摘要:算法描述 插入排序的过程和平时打牌的时候给手里的牌排序差不多: 从牌桌上抽一张牌 把抽到的牌从右到左(或者从左到右)挨个和手里的牌进行比较,当发现左边的牌大一些,右边的牌小一些,就将牌插入到该位置 重复执行步骤1,直到牌抽完了 参考动画:visualgo.net 代码实现(C++) #include 阅读全文
posted @ 2020-10-17 18:40 HachikoT 阅读(105) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示