自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(57)
  • 收藏
  • 关注

原创 Nand2Tetris笔记

Nand2Tetris

2024-01-12 13:32:56 1033

原创 cs61b-sp21笔记

介绍课程+基本的java语法,如果java零基础,可先阅读(optional)如何编写测试程序,以及要如何使用JUnit来简化测试流程。介绍选择排序,将其拆分成三个helper function,并编写和测试了它们。介绍接口、接口的继承(what)、实现继承(how)关于中的X静态类型(编译时期):在声明时指定的类型。确定我们需要调用方法的名字。动态类型(运行时期):在实例化时指定的类型,等于指向对象的类型。调用动态类型中有该名字的方法,可能使用Dog**重写(override)**过的方法。

2023-04-13 09:12:23 1659 3

原创 Transformer

目录介绍模型架构Encoder and DecoderMulti-Head AttentionScaled Dot-Product AttentionMulti-Head公式Masked Multi-Head AttentionAdd & NormFeed ForwardPositional EncodingTransformer的优缺点代码实现总结介绍在Encoder-Deconder模型中,引入了self-attention(自注意力机制),不像之前的RNN模型,只能获取到时序之前的信息,

2022-03-17 08:53:35 500

原创 05推公式

耍杂技的牛农民约翰的 N 头奶牛(编号为 1…N)计划逃跑并加入马戏团,为此它们决定练习表演杂技。奶牛们不是非常有创意,只提出了一个杂技表演:叠罗汉,表演时,奶牛们站在彼此的身上,形成一个高高的垂直堆叠。奶牛们正在试图找到自己在这个堆叠中应该所处的位置顺序。这 N 头奶牛中的每一头都有着自己的重量 WiW_iWi​ 以及自己的强壮程度 SiS_iSi​。一头牛支撑不住的可能性取决于它头上所有牛的总重量(不包括它自己)减去它的身体强壮程度的值,现在称该数值为风险值,风险值越大,这只牛撑不住的可能性

2022-02-07 13:19:18 458

原创 04绝对值不等式

货仓选址在一条数轴上有 N 家商店,它们的坐标分别为 A1∼ANA_1∼A_NA1​∼AN​。现在需要在数轴上建立一家货仓,每天清晨,从货仓到每家商店都要运送一车商品。为了提高效率,求把货仓建在何处,可以使得货仓到每家商店的距离之和最小。#include <iostream>#include <algorithm>using namespace std;const int N = 1e5 + 10;int n;int d[N];int main() {

2022-02-07 13:17:41 366

原创 03排序不等式

排队打水有 n 个人排队到 1 个水龙头处打水,第 i 个人装满水桶所需的时间是 tit_iti​,请问如何安排他们的打水顺序才能使所有人的等待时间之和最小?#include <iostream>#include <algorithm>using namespace std;const int N = 1e5 + 10;int n;int t[N];int main() { cin >> n; for (int i = 0; i &

2022-02-07 13:16:25 439

原创 02Huffman树

合并果子在一个果园里,达达已经将所有的果子打了下来,而且按果子的不同种类分成了不同的堆。达达决定把所有的果子合成一堆。每一次合并,达达可以把两堆果子合并到一起,消耗的体力等于两堆果子的重量之和。可以看出,所有的果子经过 n−1 次合并之后,就只剩下一堆了。达达在合并果子时总共消耗的体力等于每次合并所耗体力之和。因为还要花大力气把这些果子搬回家,所以达达在合并果子时要尽可能地节省体力。假定每个果子重量都为 1,并且已知果子的种类数和每种果子的数目,你的任务是设计出合并的次序方案,使达达耗费的体力

2022-02-07 13:15:03 88

原创 01区间问题

区间选点给定 N 个闭区间 [ai,bi],请你在数轴上选择尽量少的点,使得每个区间内至少包含一个选出的点。输出选择的点的最小数量。位于区间端点上的点也算作区间内。#include <iostream>#include <algorithm>using namespace std;const int N = 1e5 + 10;struct Range{ int l, r; bool operator< (const Range &amp

2022-02-07 13:13:28 984

原创 06二分图:染色法、匈牙利算法

染色法判定二分图给定一个 n 个点 m 条边的无向图,图中可能存在重边和自环。请你判断这个图是否是二分图。#include <iostream>#include <cstring>using namespace std;const int N = 1e5 + 10, M = 2e5 + 10;int n, m;int h[N], e[M], ne[M], idx;int st[N]; // 点被染的颜色void add(int a, int b) {

2022-02-02 15:03:22 427

原创 05最小生成树

Prim算法求最小生成树给定一个 n 个点 m 条边的无向图,图中可能存在重边和自环,边权可能为负数。求最小生成树的树边权重之和,如果最小生成树不存在则输出 impossible。给定一张边带权的无向图 G=(V,E),其中 V 表示图中点的集合,E 表示图中边的集合,n=|V|,m=|E|。由 V 中的全部 n 个顶点和 E 中 n−1 条边构成的无向连通子图被称为 G 的一棵生成树,其中边的权值之和最小的生成树被称为无向图 G 的最小生成树。#include <iostream>

2022-02-02 15:00:38 1193

原创 04最短路

Dijkstra求最短路 I给定一个 n 个点 m 条边的有向图,图中可能存在重边和自环,所有边权均为正值。请你求出 1 号点到 n 号点的最短距离,如果无法从 1 号点走到 n 号点,则输出 −1。朴素版Dijkstra#include <iostream>#include <cstring>#include <algorithm>using namespace std;const int N = 510;int n, m;int g[N]

2022-02-02 14:57:38 532

原创 03树与图的遍历、拓扑排序

树的重心给定一颗树,树中包含 n 个结点(编号 1∼n)和 n−1 条无向边。请你找到树的重心,并输出将重心删除后,剩余各个连通块中点数的最大值。重心定义:重心是指树中的一个结点,如果将这个点删除后,剩余各个连通块中点数的最大值最小,那么这个节点被称为树的重心。#include <iostream>#include <algorithm>#include <vector>using namespace std;const int N = 1e5 +

2022-02-02 14:46:12 271

原创 02BFS

走迷宫给定一个 n×m 的二维整数数组,用来表示一个迷宫,数组中只包含 0 或 1,其中 0 表示可以走的路,1 表示不可通过的墙壁。最初,有一个人位于左上角 (1,1) 处,已知该人每次可以向上、下、左、右任意一个方向移动一个位置。请问,该人从左上角移动至右下角 (n,m) 处,至少需要移动多少次。数据保证 (1,1) 处和 (n,m) 处的数字为 0,且一定至少存在一条通路。#include <iostream>#include <algorithm>#incl

2022-02-02 14:42:45 2313

原创 01DFS

排列数字给定一个整数 n,将数字 1∼n 排成一排,将会有很多种排列方法。现在,请你按照字典序将所有的排列方法输出。#include <iostream>using namespace std;const int N = 10;int n;int path[N];bool st[N];void dfs(int cur) { if (cur == n) { for (int i = 0; i < n; i ++ ) printf("%d

2022-02-02 14:35:14 378

原创 11哈希表

模拟散列表维护一个集合,支持如下几种操作:I x,插入一个数 x;Q x,询问数 x 是否在集合中出现过;拉链法#include <iostream>using namespace std;const int N = 1e5 + 3; // 最好取质数// 拉链法:每个下标存一组对应的值,值对应的下标根据取模N得到int h[N], e[N], ne[N], idx = 1; // h存放链表头节点,e和ne模拟链表void insert(int x) {

2022-01-24 14:11:56 389

原创 10堆··

堆排序输入一个长度为 n 的整数数列,从小到大输出前 m 小的数。#include <iostream>#include <algorithm>using namespace std;const int N = 1e5 + 10;int n, m;int h[N], cnt;// 堆的下沉操作void down(int k) { // 找到k和两个子节点中的最小值 int t = k; if (k * 2 <= cnt &a

2022-01-24 14:03:23 180

原创 09并查集

合并集合一共有 n 个数,编号是 1∼n,最开始每个数各自在一个集合中。现在要进行 m 个操作,操作共有两种:M a b,将编号为 a 和 b 的两个数所在的集合合并,如果两个数已经在同一个集合中,则忽略这个操作;Q a b,询问编号为 a 和 b 的两个数是否在同一个集合中#include <iostream>using namespace std;const int N = 1e5 + 10;int n, m;int father[N]; // father[

2022-01-24 14:00:05 385

原创 08Trie

Trie字符串统计维护一个字符串集合,支持两种操作:I x 向集合中插入一个字符串 x;Q x 询问一个字符串在集合中出现了多少次。共有 N 个操作,输入的字符串总长度不超过 105,字符串仅包含小写英文字母。#include <iostream>using namespace std;const int N = 1e5 + 10;// 字符串“总”长度不超过N// son[i][j]存储节点下标为i,且指向字母为j的节点下标,如果为0,说明节点不存在int s

2022-01-24 13:50:14 507

原创 07KMP

KMP字符串给定一个模式串 S,以及一个模板串 P,所有字符串中只包含大小写英文字母以及阿拉伯数字。模板串 P 在模式串 S 中多次作为子串出现。求出模板串 P 在模式串 S 中所有出现的位置的起始下标。KMP思路:两步:求next数组,匹配字符串next数组是求出每个p的下标能与前缀匹配的最长距离,求出那个点的下标。求法就是和自己做匹配匹配过程就是当遇到匹配不想等时,p字符串最少后退多少才能继续匹配,这个最少后退不长度就是我们next所求出的下标。#include <io

2021-12-05 11:11:16 248

原创 06单调队列

滑动窗口给定一个大小为 n≤106n≤10^6n≤106 的数组。有一个大小为 k 的滑动窗口,它从数组的最左边移动到最右边。你只能在窗口中看到 k 个数字。每次滑动窗口向右移动一个位置。思路:窗口用队列来存储,类似于单调栈那一题,只不过不是从右往左删除,而是从左往右删除,每次将窗口内比自己大或相等的数从左边弹出,因为窗口往右移动的过程中,最小值不可能选取比当前值还有小的数。例如:窗口 [1 3 -1] 中选最小值时应该将1,3弹出#include <iostream>

2021-12-05 11:02:52 370

原创 05单调栈

单调栈给定一个长度为 N 的整数数列,输出每个数左边第一个比它小的数,如果不存在则输出 −1。思路:将数据构造成单调栈,因为如果下标比当前数据小,并且值比当前数大或相等的话,后面的数寻找左边比它小的数,一定不会越过当前的数,因为它更近#include <iostream>using namespace std;const int N = 1e5 + 10;int n;int s[N], top = -1;int main() { scanf("%d",

2021-12-05 10:53:05 289

原创 04队列·

模拟队列实现一个队列,队列初始为空,支持四种操作:push x – 向队尾插入一个数 x;pop – 从队头弹出一个数;empty – 判断队列是否为空;query – 查询队头元素。现在要对队列进行 M 个操作,其中的每个操作 3 和操作 4 都要输出相应的结果。这里用数组模拟队列的操作过程#include <iostream>using namespace std;const int N = 1e5 + 10;int q[N], head, tail =

2021-12-05 10:46:41 580

原创 03栈··

模拟栈实现一个栈,栈初始为空,支持四种操作:push x – 向栈顶插入一个数 x;pop – 从栈顶弹出一个数;empty – 判断栈是否为空;query – 查询栈顶元素。现在要对栈进行 M 个操作,其中的每个操作 3 和操作 4 都要输出相应的结果。下面用数组模拟这个过程#include <iostream>using namespace std;const int N = 1e5 + 10;int s[N], top = -1;void push(

2021-12-05 10:43:14 489

原创 acwing算法基础课笔记汇总

笔记目录简介基础算法数学知识简介将自己在算法基础课上的笔记汇总,方便以后查看。课程地址:Here基础算法快排归并排序二分高精度前缀和与差分双指针算法位运算离散化区间合并数学知识质数约数欧拉函数快速幂扩展欧几里得算法高斯消元组合数容斥原理[]...

2021-12-01 09:46:29 1218

原创 02双链表

双链表实现一个双链表,双链表初始为空,支持 5 种操作:在最左侧插入一个数;在最右侧插入一个数;将第 k 个插入的数删除;在第 k 个插入的数左侧插入一个数;在第 k 个插入的数右侧插入一个数现在要对该链表进行 M 次操作,进行完所有操作后,从左到右输出整个链表。思路用三个数组模拟双链表操作,e存储值,l存储指向左边的下标(指针),r存储指向右边的下标。#include <iostream>using namespace std;const int N =

2021-12-01 09:42:11 642

原创 01单链表

单链表实现一个单链表,链表初始为空,支持三种操作:向链表头插入一个数;删除第 k 个插入的数后面的数;在第 k 个插入的数后插入一个数。现在要对该链表进行 M 次操作,进行完所有操作后,从头到尾输出整个链表。思路数组模拟链表操作#include <iostream>using namespace std;const int N = 1e5 + 10;// e存储值,ne存储下一个值的下标,idx为当前待分配的空间下标,head为头节点int e[N],

2021-12-01 09:35:51 238

原创 图神经网络(GNN)

原文链接原文有作者写的playground,并且网页上的图很多具有互动性,推荐大家去玩一下~~~图的几个属性图一共有三个部分:节点(node)、边(edge)、全局(global)每个结点我们都用一个embedding来编码,具体如何实现的,暂时还不清楚,现在我们先假设已经对整个图进行了编码。图信息的存储图的几类信息需要表示:nodes V, edges E, global-context U and connectivity,其中V, E, U已经用embedding向量表示出来了,主要

2021-11-19 14:14:00 1560

原创 Back Propagation

介绍首先我们优化参数是通过梯度下降法来更新参数的,即 θnew=θold−α∂L(θ)∂θold\theta_{new}=\theta_{old}-\alpha \frac{\partial L(\theta)}{\partial \theta_{old}}θnew​=θold​−α∂θold​∂L(θ)​ ,对于我们定义的L(Loss Function)如何简单的求解它的 ∂L(θ)∂θold\frac{\partial L(\theta)}{\partial \theta_{old}}∂θold​∂L

2021-09-25 15:19:16 125 2

原创 机器学习和深度学习简介

机器学习(ML)机器学习大致分为三个步骤:写出一个含有未知数(参数)的函数,一般来说这个函数是用来估计真实值的定义一个Loss Function,代入训练样本,输出与真实值的误差Loss优化,找到一组参数,使得Loss的值最小深度学习(DL)Q:如何找到一个函数取拟合任意的分段线性曲线(Piecewise Linear Curves)?我们用sigmoid函数去代替上图的类S型折线然后我们可以通过改变sigmoid function里面的w、b、c来分别使函数有不同的斜率、或者平移

2021-09-13 23:21:50 216

原创 高等代数总结

高代排列逆序数(前面的数大于后面的数称为逆序,排列中逆序的总数)为偶数称为偶排列,奇数称为奇排列。行列式,及其相关定理n级行列式等于所有取自不同行不同列的n个元素的乘积的代数和,符号由1到n行的列排列,如果是偶排列取正,奇排列取负。克拉默法则:方程的系数矩阵的行列式不为零,那么方程有解,并且解是唯一的,解可以通过系数表示出来。拉普拉斯定理:在行列式D中任取k行,由这k行元素所组成的一切k级子式与它们的代数余子式的乘积的和等于行列式D。线性相关性等价:两组向量可以互相线性表出

2021-07-04 14:06:28 2470

原创 数学分析总结

数分数列极限、性质、存在条件数列趋向于一个实数。唯一性、有界性(收敛数列有界)、保号性、保不等式性、迫敛性、四则运算。单调有界数列收敛、有界数列有收敛子列、柯西收敛准则。函数极限、性质、存在条件当x趋向于某个值时,函数值也趋向于某个定数。唯一性、局部有界性、局部保号性、局部保不等式性、迫敛性、四则运算。归结原则:函数在x0极限存在的充要条件为,任意以x0为极限的数列{xn},f(xn)极限存在且相等。(将函数与数列联系起来)证明:必要性:对于任意小的数ε\varepsilon

2021-07-04 14:05:27 5292 1

原创 其它数学专业课总结

文章目录实变实变开集、闭集每一点都是内点为开集,每一点是聚点为闭集。外测度及其性质E为RnR^nRn中一点集,对于一列覆盖E的开区间,这列开区间的体积总和的下确界,称为勒贝格外测度。单调性,次可数可加性可测集、性质E是可测的,若对于任意一点集T,T的外测度等于T与E的交的外测度,加上T与E的补集的外测度。可测集的并、交、补都是可测的。可测函数及其性质f(x)是定义在可测集E上的函数,如果对于任意的有限实数a,集合为满足f大于a的x,该集合可测可测集上的连续函数都是可测的

2021-07-04 14:04:02 1233

原创 实数系基本定理

实数系基本定理单调有界定理闭区间套定理有限覆盖定理列紧性定理(致密性定理)柯西收敛准则确界原理单调有界定理实数系中,有界的单调数列必有极限。证明:设{ana_{n}an​}为有上界的递增数列,把这个数列的各项表示成十进制无尽小数:a1=A1.b11b12b13...a2=A2.b21b22b23...a3=A3.b31b32b33......a_{1}=A_{1}.b_{11}b_{12}b_{13}... \\ a_{2}=A_{2}.b_{21}b_{22}b_{23}... \\

2021-06-09 22:33:10 771

原创 02线性DP

线性DP数字三角形最长上升子序列优化后最长公共子序列最短编辑距离编辑距离数字三角形数字三角形题目描述:给定一个如下图所示的数字三角形,从顶部出发,在每一结点可以选择移动至其左下方的结点或移动至其右下方的结点,一直走到底层,要求找出一条路径,使路径上的数字的和最大。 7 3 8 8 1 0 2 7 4 4 4 5 2 6 5#include <iostream>#include <algor

2021-05-27 09:54:45 147

原创 01背包问题

背包问题01背包问题完全背包问题多重背包问题暴力算法二进制优化分组背包01背包问题01背包问题有 N 件物品和一个容量是 V 的背包。每件物品只能使用一次。第 iii 件物品的体积是 viv_{i}vi​,价值是 wiw_{i}wi​。求解将哪些物品装入背包,可使这些物品的总体积不超过背包容量,且总价值最大。输出最大价值。#include <iostream>#include <algorithm>using namespace std;const int

2021-05-20 09:18:43 330

原创 10简单博弈论

简单博弈论Nim游戏证明结论台阶-Nim游戏思路集合-Nim游戏SG函数定理拆分-Nim游戏Nim游戏证明0 ^ 0 ^ 0 … 0 这是一个必败态。显然可得。如果a1a_{1}a1​ ^ a2a_{2}a2​ ^ … ^ ana_{n}an​ = x != 0 ,我们总能拿掉一些石子,使它们的异或为0。证明:不妨设x的二进制表示中最高一位1在第k位,那么在a1,a2,…,ana_{1},a_{2},…,a_{n}a1​,a2​,…,an​中,必然有一个数aia_{i}ai​,它的第k位是1,且

2021-05-12 12:01:39 437 2

原创 09容斥原理

容斥原理定理: 共有n个集合,它们的并可以表示为如下关系∣A1∪A2∪...∪An∣=∑i=1n(−1)i−1∑i个数的组合∣A1∩A2∩...∩Ai∣|A_{1} \cup A_{2} \cup...\cup A_{n}| = \sum_{i=1}^n{(-1)^{i-1}\sum_{i个数的组合}{|A_{1} \cap A_{2} \cap...\cap A_{i}|}}∣A1​∪A2​∪...∪An​∣=∑i=1n​(−1)i−1∑i个数的组合​∣A1​∩A2​∩...∩Ai​∣证明:goa

2021-05-12 09:26:34 176 2

原创 08组合数

组合数组合数1组合数2组合数3组合数4习题组合数1根据递推关系Cnm=Cn−1m+Cn−1m−1C_{n} ^ m = C_{n - 1} ^ m + C_{n - 1} ^ {m - 1}Cnm​=Cn−1m​+Cn−1m−1​预处理C的每个值。注:需要开n^2的空间,所以所求的n不能太大求组合数 I给定 n 组询问,每组询问给定两个整数 a,b,请你输出 CabC_{a}^bCab​ mod (10^9 + 7) 的值。输出格式共 n 行,每行输出一个询问的解。数据范围1≤n≤100

2021-05-12 08:53:22 226

原创 09区间合并

区间合并给定 n 个区间 [li, ri],要求合并所有有交集的区间。注意如果在端点处相交,也算有交集。输出合并完成后的区间个数。例如:[1,3] 和 [2,6] 可以合并为一个区间 [1,6]。思路1.先将区间按照左端点升序排序2.接下来的区间分两种情况:左端点和上一区间无交点,维护当前区间,区间个数+1左端点和上一区间有交点,两区间合并,维护的区间为合并后的区间#include <iostream>#include <algorithm>usi

2021-05-09 13:58:11 153

原创 08离散化

离散化模拟了map的操作适用:用来处理数据量较少,但数据范围较大的问题。做法:1. 用hash来映射每一个数 2. 排序去重 3.每次根据数值查找对应key区间和假定有一个无限长的数轴,数轴上每个坐标上的数都是 0。现在,我们首先进行 n 次操作,每次操作将某一位置 x 上的数加 c。接下来,进行 m 次询问,每个询问包含两个整数 l 和 r,你需要求出在区间 [l, r] 之间的所有数的和。#include <iostream>#include <vector&

2021-05-09 13:50:41 140

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除