随笔分类 -  算法学习

摘要:https://leetcode.cn/problems/lru-cache/ 设计并实现一个满足 LRU (最近最少使用) 缓存 约束的数据结构 配图全部来自于lc的题解 我门来看下图所示的数据结构 每个key对应着一个节点,每个节点存有key,value,prev,next。 我们现在将该图稍微 阅读全文
posted @ 2024-03-02 20:39 拾墨、 阅读(23) 评论(0) 推荐(0)
摘要:1. 定义 根其实就是一个完全二叉树 堆中某个结点的值总是不大于或不小于其父节点的值 堆中的根节点的值是整个堆的最大值或最小值 对于数组[t]位置: 左二子为[2t] 右儿子为[2t+1] 父节点为[t/2] 大根堆:父节点的值>=两个子节点的值 小根堆:父节点的值<=两个子节点的值 2. 插入数据 阅读全文
posted @ 2023-12-23 22:02 拾墨、 阅读(17) 评论(0) 推荐(0)
摘要:1. 树的直径 定义:树的任意两个节点之间最长的路径 一颗树可以有很多条直径 如图,任意黄色节点到红色节点都可以是直径 树的直径的中间节点被称为树的中心(图中m节点)。 如果一条直径上有偶数个点,那么中间两个点都可以称作树的中心。 树的中心到其他点到最长路径最短 求法:用两次搜索求得。第一次从任意一 阅读全文
posted @ 2023-12-11 21:33 拾墨、 阅读(40) 评论(0) 推荐(0)
摘要:用voj交题的时候大部分情况都是voj用一个虚拟的bot账号帮你提交到对应题目所在的oj上进行判题 但有些oj平台并不喜欢这种方式,它想让用户去用自己真实的账号提交,比如pta,洛谷,计蒜客...... 在voj上用自己的账号提交的方法如下: 拿pta举例: 在上图中我们发现我们需要一个叫做PTAS 阅读全文
posted @ 2023-11-04 10:48 拾墨、 阅读(168) 评论(0) 推荐(0)
摘要:字符串哈希板子 http://oj.daimayuan.top/course/7/problem/485 单哈希 # include<bits/stdc++.h> using namespace std; const int N = 2e5+10; const int p = 9999971,bas 阅读全文
posted @ 2023-09-25 13:45 拾墨、 阅读(48) 评论(0) 推荐(0)
摘要:引入 kmp算法要解决的就是用on的时间复杂度模式串p在文本串T中的匹配问题 过程 字符串下标从1开始 对于文本串T(上)和模式串p(下)T.size()=n , p.size()=m 设T[i]和p[j]为正在接受比对的一对字符 如果j<m-1&&T[i+1]==p[j+1],那么i++,j++。 阅读全文
posted @ 2023-09-25 01:52 拾墨、 阅读(72) 评论(0) 推荐(0)
摘要:1. 引入 树状数组可以用logn的时间进行单点修改和区间求和 在传统数组中进行单点修改时间o1,区间求和on 前缀和数组中进行单点修改时间on,区间求和o1 树状数组则是两者取了个平均 2. 定义 给定初始数组a1,a2,a3...an 设树状数组c1,c2,c3...cn \[c_i = a_{ 阅读全文
posted @ 2023-09-21 00:06 拾墨、 阅读(52) 评论(0) 推荐(0)
摘要:区间dp解决的问题是一个问题能分成好多个小区间,那么可以从小到大枚举区间长度 由小到大推出问题终解 ###区间 DP 有以下特点(摘自oiwiki): > >合并:即将两个或多个部分进行整合,当然也可以反过来; > >特征:能将问题分解为能两两合并的形式; > >求解:对整个问题设最优值,枚举合并点 阅读全文
posted @ 2023-08-19 18:10 拾墨、 阅读(53) 评论(0) 推荐(1)
摘要:## 定义 **具有单调性的栈结构,该数据结构的目的是快速找到与一个元素距离最近的元素** ## 过程(摘自oiwiki) 插入 将一个元素插入单调栈时,为了维护栈的单调性,需要在保证将该元素插入到栈顶后整个栈满足单调性的前提下弹出最少的元素。 例如,栈中自顶向下的元素为 \{0,11,45,81\ 阅读全文
posted @ 2023-07-28 22:00 拾墨、 阅读(57) 评论(2) 推荐(0)
摘要:## 引入 >有 n 个物品和一个容量为 W 的背包,每个物品有重量 w{i}和价值 v{i}两种属性,要求选若干物品放入背包使背包中物品的总价值最大且背包中物品的总重量不超过背包的容量。 我们之后涉及到的所有背包问题都会根据这个背景展开 ##1. 01背包 每个物品只能选取一次。 这样每个物品都会 阅读全文
posted @ 2023-07-28 16:53 拾墨、 阅读(101) 评论(0) 推荐(0)
摘要:一些定义 先序,中序,后序遍历中的序是遍历根的顺序 比如中序就是先看左子树再看根再看右子树 层序遍历就是这个树的bfs序列 深度:节点v到根r的唯一通路所经过边的数目。记作depth(v)。 约定根节点深度为0。设depth(r) == i,则r属于第i层 高度:树T中所有节点深度的最大值称作该点的 阅读全文
posted @ 2023-07-24 21:42 拾墨、 阅读(32) 评论(0) 推荐(1)
摘要:##**分治的核心思想是** 1. 自上而下通过递归不断将大问题拆分成两个或多个子问题,直至被拆分出来的子问题可以通过一些简单的方法解决 2. 然后再自下而上地用子问题的解求解大问题的解 3. 最终我们能得到初始问题的解 ##**解决分治问题的时候的代码基本就是** 1. 限制左边界 == 右边界的 阅读全文
posted @ 2023-07-20 00:02 拾墨、 阅读(107) 评论(0) 推荐(0)
摘要:##一. 定义 二分图是节点由两个集合组成,且两个集合内部没有边的图。 换言之,存在一种方案,将节点划分成满足以上性质的两个集合。 比如下图就是一个二分图,两个集合的元素可以用两种颜色表示,每条边上连接的点属于不同的集合,相同集合的两个点上没有边 **注意:二分图中不存在元素为奇数的环** ![]( 阅读全文
posted @ 2023-07-19 22:24 拾墨、 阅读(555) 评论(0) 推荐(0)
摘要:定义 : 对一个有向图构造拓扑序列,排序类似流程图那样按先干什么后干什么这样排序 拿大学教学安排举个例子(图来自oi wiki) ![](https://img2023.cnblogs.com/blog/3184306/202307/3184306-20230719173144329-1370939 阅读全文
posted @ 2023-07-19 20:23 拾墨、 阅读(159) 评论(0) 推荐(1)
摘要:**生成树 : 如果连通图G的一个子图是一棵包含G的所有顶点的树,则该子图称为G的生成树** **最小生成树 : 边权和最小的生成树叫做最小生成树。如果原图不连通,则没有最小生成树** **求最小生成树有两种方法 : prim 和 kurskal** ## 一. prim算法 **将最小生成树看做一 阅读全文
posted @ 2023-07-19 17:29 拾墨、 阅读(82) 评论(0) 推荐(0)