自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 MIT 6.S081 2020 Lab7 Multithreading 个人全流程

本实验将使你熟悉多线程编程。你将实现一个用户级线程库中的线程切换,使用多个线程加速程序运行,并实现一个屏障(Barrier)机制。

2025-06-06 18:36:02 720

原创 MIT 6.S081 2020 Lab6 Copy-on-Write Fork for xv6 个人全流程

可以阅读下 《xv6 book》 的第五章中断和设备驱动。问题在 xv6 中,fork()系统调用会将父进程的整个用户空间内存复制到子进程中。**如果父进程占用的内存较大,复制过程会非常耗时。更糟糕的是,这种复制往往是浪费的。**例如,在子进程中调用fork()后紧接着执行exec(),会导致子进程丢弃复制来的内存,很可能其中大部分根本没有被使用。另一方面,如果父子进程都使用了某个页面,并且有一个或两个要写这个页面,那就确实需要进行复制。解决方案**写时复制(COW)**的fork()

2025-05-31 23:52:44 1134

原创 MIT 6.S081 2020Lab5 lazy page allocation 个人全流程

可以阅读下4.6页面错误异常像应用程序申请内存,内核分配和映射这些内存其实是很耗费时间的。比如,一个 GB 的内存包含 262,144 个 4096 字节的页;即便每次分配的开销很小,这么多次操作累积起来仍然非常耗时。此外,一些程序会分配比实际使用更多的内存(例如,为了实现稀疏数组),或者会提前分配内存但迟迟不使用。为加快sbrk()sbrk()不再立即分配物理内存,而是仅记录下哪些用户地址被分配了,并在用户页表中将这些地址标记为无效。当进程首次尝试访问这些**“懒惰分配”**的页面时,

2025-05-25 13:50:29 1190

原创 线性基详解,线性代数的简单应用,原理分析,题目练习

3b1b线性代数基础如果对线性空间有一定理解,那么完全有能力独立发明线性基异或和设S为 一无符号整数集合(下同),其异或和为x1xorx2xorxnxi∈Sx1​xorx2​xor...xn​xi​∈S张成设T⊆ST⊆S,所有这样子集的异或和所组成的集合,称为集合S的张成,记作span(S)。即,在S中选出任意多个数,其异或和所有可能的结果组成的集合。线性相关对于一个集合, 如果存在xi∈S。

2025-05-20 23:52:39 710

原创 区间带边权并查集,XY4060泄露的测试点

目录一、题目1、题目描述2、输入输出2.1输入2.2输出3、原题链接二、解题报告1、思路分析2、复杂度3、代码详解码蹄集关于带边权并查集:并查集,扩展域并查集,带边权并查集详解,OJ练习,详细代码-CSDN博客sum(a[l, r]) = x 转化为 S[r] - S[l - 1] = x其中S[i] = sum(a[1...i]),规定 S[0] = 0考虑 带边权并查集维护 信息f[i] 为 i 的父节点,d[i] 为 S[i] - S[f[i]]对于find(x) 操作,如果 f[x] = x,那么直

2025-05-18 21:50:20 469

原创 MIT 6.S081 2020 Lab4 traps 个人全流程

做之前可以看看,了解XV6 下的陷入机制这个实验旨在探索系统调用如何实现了trap,会先做一个有关栈的练习,然后实现用户级陷入处理。: 涉及用户态 / 内核态切换的汇编代码。: 处理中断的所有代码。记得切换到 traps 分支。完整代码见:https://github.com/58164/MIT6.S081/tree/traps。

2025-05-18 14:58:44 714

原创 MIT 6.S081 2020 Lab3 page tables 个人全流程

好难哇www

2025-05-11 23:02:16 1159

原创 可撤销并查集,原理分析,题目练习

可撤销并查集代码相对简单,但是使用场景往往比较复杂,经常用于处理离线查询,比较经典的应用是结合线段树分治维护动态连通性问题。在一些较为综合的图论问题中也经常出现。并查集,扩展域并查集,带边权并查集详解,OJ练习,详细代码// 节点数int f[N];// 父节点int siz[N];// 集合size// 操作记录栈。

2025-05-09 00:09:12 1184 1

原创 MIT 6.S081 2020 Lab2 system calls 个人全流程

警钟长鸣:记得切换分支先完整代码见:https://github.com/58164/MIT6.S081/tree/syscall这个任务要求你添加一个tracing 系统调用,来帮你在后续lab中进行debug。它接收一个int 类型的参数 mask,每一位都代表一个系统调用, 1 代表追踪,0则反之。在 kernel/syscall.h中我们可以看到每一个二进制位对应的系统调用pid 系统调用名 返回值trace 系统调用可以跟踪调用它的进程以及它后续fork的子进程。

2025-05-04 16:36:29 630

原创 MIT 6.S081 2020 Lab1 Xv6 and Unix utilities 流程(未实现Optional challenge exercises)

练练手

2025-04-15 00:31:59 1013

原创 01分数规划,二分法,题目练习

那么 sum(t - w * m) >= 0,我们如何得到sum(w) >= W下最大的sum(t - w * m)?那么二分最大比率 m,有 sum(l) / sum(h) <= m,即 sum(l - m * h) <= 0。我们对于 节点i,j,以 l(i, j) - m * h(i, j) 为边权求最小生成树即可。l(i, j) 为 节点 i 和 j 之间的欧氏距离,h(i, j) 为二者高度差。sum(t) / sum(w) >= m,m 为二分最大值。考虑从推荐人向被推荐人连有向边。

2025-03-20 22:26:20 672

原创 康托展开,逆康托展开,原理分析,题目练习

对于 lemher[n - 1],它的贡献是 lemher[n - 1] * 0!对于 lemher[n - 2],它的贡献是 lemher[n - 2] * 1!n 个元素构成的排列的排名为 所有排列按字典序升序下的排名,比如 “1234” 的排名就是 1。一个直接的方法是,预处理阶乘,然后权值树状数组初始化所有数字权值为1,然后顺序根据排名填写。康托展开是指一种将自然数展开为数列的方法,类似于试填法 / 数位dp,从而求出排列的排名。加1 是因为我们试填算的是字典序严格小于该排列的排列数。

2025-03-08 00:12:39 712

原创 高斯消元法,加法,异或,同余方程组,原理分析,题目详解

高斯消元法是线代中非常基础的知识,在数据量较小的时候,可以用来求解 加法/异或/同余方程组,矩阵求逆。

2025-03-02 01:07:07 871

原创 lab4 CSAPP:Cachelab

最简单的一集实验室分为两个部分。在A部分中,实现一个缓存模拟器。在B部分中,编写一个矩阵针对高速缓存性能优化的转置功能。感觉是比较经典的问题,之前在体系结构的课程中接触过,终于能通过lab实操一下了。实验目录的 traces 子目录包含参考跟踪文件的集合,将用于评估A部分中编写的缓存模拟器的正确性。跟踪文件是由 Linux 称为valgrind的程序产生的。先安装valgrind比如 我们用valgrind 捕获 ls -l 的内存访问操作-地址-大小 三元组格式I 表示指令读取L 表示数据读取。

2025-02-20 21:03:20 1247

原创 lab3 CSAPP:AttackLab

cookie.txt 一个8位16进制数,作为攻击的特殊标志符farm.c 在ROP攻击中作为gadgets的产生源ctarget 代码注入攻击的目标文件rtarget ROP攻击的目标文件hex2raw 将16进制数转化为攻击字符,因为有些字符在屏幕上面无法输入,所以输入该字符的16进制数,自动转化为该字符ROP是什么缓冲区溢出攻击可以采用栈随机化、栈破坏检测(金丝雀)、限制可执行代码区域这三种机制来限制(详见csapp 3.10.4)为了对抗这些机制,又出现了ROP攻击技术。

2025-02-17 17:23:15 976

原创 lab2 CSAPP:BombLab

这个实验要能看懂些汇编,然后会用一些gdb的基本操作。打开bomb.c可以看到我们实际上就是要找到那6个字符串,错误的话就会爆炸。

2025-02-12 18:02:55 1121

原创 lab1 CSAPP:datalab

非常简单的一个lab,位运算好的话一会就写完了。

2025-02-12 17:59:24 234

原创 四、容斥原理与鸽巢原理,《组合数学(第4版)》卢开澄 卢华明

回顾一下加法法则:事件 A 有 m 种产生方式,事件 B 有 n 种产生方式,则事件 A 或 B 之一有 m + n 种产生方式。但是如果 |A| = m,|B| = n,A∩B∅A∩B∅,则|A ∪ B| = m + n。在算竞中,经常遇到复杂的计数问题,多种情况不能直接加法法则相加,如何做到计数不重不漏?很多时候都要用到容斥原理的思想。容斥的计数思想是:先不考虑重叠的情况,把包含于某内容中的所有对象的数目先计算出来;然后再把计数时重复计算的数目排斥出去。

2025-02-05 01:48:13 737

原创 三、递推关系与母函数,《组合数学(第4版)》卢开澄 卢华明

母函数是:计数工具不考虑收敛性不考虑实际上的数值形式幂级数(Formal power series)对于序列C_0, C_1, C_2, … 构造一函数G(x)=C0+C1x+C2x2+...G(x) = C_0 + C_1x + C_2x^2 + ...G(x)=C0​+C1​x+C2​x2+...例如 (1+x)n(1 + x)^n(1+x)n 称为序列 C(n, 0), C(n, 1), …, C(n, n) 的母函数,序列的长度可能是有限的,也可能是无限的。母函数和计数法则:母函数:为什么母

2025-02-03 16:07:23 933

原创 可持久化线段树,原理分析,题目详解

可持久化线段树学习起来难度并不大,如果学过可持久化Trie,了解怎样复用旧版本的信息,只通过少量空间维护信息的修改,其实很容易理解可持久化线段树的原理。对于普通线段树,我们可能是维护序列,维护权值,但是可持久化之后,其实我们掌握的信息更多了,可以解决很多看起来只能暴力解决的问题。

2025-01-25 04:23:58 1146

原创 二、排列与组合,《组合数学(第4版)》卢开澄 卢华明

n - 1}的 (n - 1)!相当于把 r 个小球放入n 个区域,那么相当于在n + r - 1 个位置中挑出 r 个位置放隔板,故 C(n + r - 1, r):从 n 个中取 r 个的排列的典型例子是从n个不同的球中,取出 r 个,放入 r 个不同的盒子里,每盒1个。杨辉三角每个数等于上面两个数之和:C(n, r) = C(n - 1, r) + C(n - 1, r - 1)等式右侧:(0, 0) 至 (n - r - 1, r) 和 (0, 0) 至 (n - r, r - 1)

2025-01-24 18:33:00 698

原创 3b1b线性代数基础

3b1b之前没认真看,闲了整理整理。这里给一个非严格的叉积定义,在二维平面中,我们称 向量v 和 向量w 构成平行四边形的有向面积为向量v 和向量w 的叉积。正负通过右手定则判断,右手四指从v 弯向 w,大拇指朝外,则为正,否则为负。仍以二维平面为例,计算方式如下:将v 作为 二维矩阵第一列,w 作为第二列,行列式的值就是叉积结果。事实上,叉积是通过两个三维向量生成一个新的三维向量。计算方式如下:得到的新的三维向量的长度为v 和 w 围成的平行四边形的面积。

2025-01-23 17:40:24 1725

原创 一、引论,《组合数学(第4版)》卢开澄 卢华明

发现自己数数题做的很烂,重新学一遍组合数学吧。参考卢开澄 卢华明 编著的《组合数学(第4版)》,只打算学前四章。通过几个经典问题来了解组合数学所研究的内容。

2025-01-23 16:21:12 716

原创 观察+dp+组合恒等式,Codeforces 998 div3 F - Multiplicative Arrays

C(n+1,i+1)我们拆成阶乘,化简后,分子项数是log级别的,分母预处理阶乘逆元,不再赘述。那么我们对于每个x,枚举>1的长度i,计算C(n+1,i+1)*dp[i][x]即可。我们要计算f(i,x)*ΣC(j,i),j为a[]的长度,1<=j<=n。定义状态dp(i,j)为i个>1的数乘积为j的方案数。考虑k=1E5时,a[]中>1的数最多有多少个?每个x枚举>1的数字长度i。注意到n很大,没法算。

2025-01-20 02:06:05 479

原创 线段树优化dp,abc389F - Rated Range

那么我们用懒标记线段树维护f(i),每次读入l(i)r(i),对f值在l(i)和r(i)之间的线段进行+1即可。f(i,j)=f(i-1,j)+1,如果l[i]<=f(i-1,j)<=r[i]考虑定义f(i,j)为初始分数为j,经过i场比赛后的最终分数。时间复杂度:O(nlogn+q)空间复杂度:O(nlogn)显然具有单调性f(i,j+1)>=f(i,j)否则,f(i,j)=f(i-1,j)

2025-01-19 21:25:31 319

原创 二分+贪心+观察,abc389E - Square Price

k^2=(1+2k-1)*k/2,这相当于分别买了价格为P[i],3P[i],5P[i]...(2k-1)P[i]的物品。最终计算数目如果剩的钱购买x+1的话还要加上这一部分的贡献,具体为什么可以在混合数组上模拟下最优解可能长的样子。我们假如把所有物品混合,可能是P[0],P[1],2P[0],P[3],P[4].....根据x可以计算每个物品购买的数目,从而计算花费来check。如果给你一堆价格不同的物品,金钱有限的情况下怎么买买的最多?

2025-01-19 18:15:59 496

原创 树上启发式合并

这只是人们的基于直觉,一般来说树越大往往越高,那么小树优先合并到大树上面,似乎可以使得树高较低一点,是一种启发式策略,所以称为。暴力思路:对每一个子节点进行一次遍历,每次遍历是O(N)的,因此总体时间复杂度O(N^2)处理完所有的轻儿子之后,对于重儿子我们根据欧拉序,累加整棵子树的颜色——O(N),并且保留。外,还有类似于树链剖分的做法,我们也做 轻重儿子 的划分,这样做事实上有很优秀的性质。轻儿子dfs计算答案,即dfs轻儿子后,轻儿子子树内的贡献不保存在 cnt[] 数组。轻儿子:除了重儿子之外的。

2025-01-01 17:15:39 700

原创 六、链路层,《计算机网络》,谢希仁 &《计算机网络(自顶向下方法 第7版,James F.Kurose,Keith W.Ross)》

介质访问控制MAC):多个节点共享同一个“总线型”广播信道时,可能发生“信号冲突”。应该怎么控制各节点对传输介质的访问,才能减少冲突,甚至避免冲突?

2024-12-30 14:58:36 1294

原创 二、SQL语言,《数据库系统概念》,原书第7版

1974年,由Boyce和Chamber提出1975-1979年,由IBM的SanJose研究室在System R上首次实现,称为Sequel(Structured English QUEry Language)→SQL(Structured Query Language)。1986年ANSI/ISO推出SQL标准:SQL-861989年ANSI/ISO推出SOL标准:SOL-891992年进一步推出了SQL标准:SQL-92,也称为SQL2是SQL-89的超集。

2024-12-30 14:47:12 1150

原创 分块与莫队,分块的暴力美学

很多时候,对于维护区间的问题,想到要用某种数据结构,但是实现过于繁琐,或者遇到自己的知识盲区,在数据量以及题目时限较为客观的情况下,分块/莫队可以解决我们的问题,而且大多数时候代码简单,可以在赛时更快的取得AC。

2024-12-30 03:15:00 911

原创 二分图染色+线性dp,码蹄集OJ-聚会

放假了啊

2024-12-27 17:38:47 453

原创 七、物理层

10BaseF*—— 10Mbps,光纤。*可以是其他信息,如10Baser FL,10Base FB、10Base FP。例如,在使用二进制编码时,只有两种不同的码元:一种代表0状态,另一种代表1状态。在一个信号周期内,如果只出现两种信号值,那么只能区分0和1,每种信号对应一个2进制数。10Base2——10Mbps,同轴电缆,最远传输距离200m(实际是185)信号传输通道上,如果存在强电场 / 磁场,那么是噪声,影响了数据传输速率。电磁波的公式:C=λF,C为光速,入为波长,F为频率。

2024-12-14 18:40:27 903

原创 五、网络层:控制平面,《计算机网络(自顶向下方法 第7版,James F.Kurose,Keith W.Ross)》

E = 链路集合 = { {u, v}, {u, x}, {v, x}, {v, w}, {x, w}, {x, y}, {w, y}, {w, z}, {y, z} } 边有。同单播地址一样,组播IP地址也需要相应的组播MAC地址在本地网络中实际传送帧。一个不同的(通常是远程的)控制器与本地控制代理(CAs) 交互。利用了ICMP协议类型8的回显请求和类型0的回显应答完成。中的单独路由器算法元件,在控制平面进行交互。中的单独路由器算法元件,在控制平面进行交互。: 路由器故障会发生什么 (LS胜出)

2024-12-14 18:31:44 1395

原创 四、网络层:数据平面,《计算机网络(自顶向下方法 第7版,James F.Kurose,Keith W.Ross)》

比如上面的例子,如果IPx 能够转发 200.23.20.0/23 ~ 200.23.30.0/23 和 200.23.16.0/23 这7个IP,而 200.23.18.0/23 是 IPy转发的,这个时候我们为了更为精确,:以4字节为单位指明首部长度。经过慢启动的过程,IPv6的路由器越来越多,从而,IPv4反而成了稀少的一方,那么自然可以将IPv4 放到IPv6 的数据部分来传输。,当IPv4数据报长度大于MTU,无法封装成帧,此时就需要对IP数据报进行分片,然后将每个分片封装成帧,分别发送。

2024-12-14 18:12:16 1351 1

原创 三、传输层,《计算机网络(自顶向下方法 第7版,James F.Kurose,Keith W.Ross)》

为运行在不同主机上的应 用进程提供逻辑通信传输协议运行在端系统发送方:将应用层的报文分成报文段,然后传输给网络层接收方: 将报文段重组成报文,然后传递给应用层有多个传输层协议可供应选择Internet:TCP 和 UDP发送端最多在流水线中有N个未确认的分组接收端只是发送累计型确认接收端如果发现gap,不确认新到来的分组发送端拥有对最老的未确认分组的定时器只需设置一个定时器当定时器到时时,重传所有未确认分组发送端最多在流水线中有N个未确认的分组。

2024-12-14 18:02:44 1449 1

原创 Codeforces Round 991 (Div. 3) 个人题解

最简单的一集

2024-12-06 10:38:22 887

原创 九、运行时环境,《编译原理》(本科教学版),第2版

前端我们介绍了词法分析-语法分析-语义分析然后又介绍了中间端的中间代码生成和中间代码优化,它其实是和机器无关的现在到后端,我们就要考虑目标机器了,因为目标程序运行需要一个环境。编译器为目标程序创建并管理一个运行时环境,目标程序运行在其中主要是运行时的存储空间管理各种对象的存储位置和空间分配访问变量的机制过程间的连接参数传递机制过程或函数是模块程序设计的主要手段,也是节省程序代码和扩充语言的主要途径过程定义。

2024-11-27 16:09:11 752

原创 四、语义分析,《编译原理》(本科教学版),第2版

语义分析的任务是什么?

2024-11-27 16:05:42 1178

原创 差分 + 模拟,CF 815A - Karen and Game

我们计算 minrow[i] = min{g[i]},mincol[j] = min{ g[i][j] }一个经典的差分数组的模板题目:可以进行区间 + - 1,请问将数组变相等的最少操作次数?先操作行:那么每行都得操作 minrow[i] 次,然后列再补齐。先操作列:那么每列都得操作 mincol[j] 次,然后行再补齐。列操作会对每一个行差分数组在该列的值的影响相同。行操作不影响行差分数组的值(除了第一个)因而得出结论:所有行差分数组的值都相同。对称的考虑:所有列差分数组的值都相同。

2024-11-26 18:07:13 509

原创 八、代码优化,《编译原理》(本科教学版),第2版

代码优化应该处在编译的什么位置?可以在语义分析之前吗?else 分支中的 printf(2) 显然是有类型错误的,因为 2 并非字符串程序员可能希望编译阶段检测出该错误,但是代码优化会将else 分支优化掉,这样导致后续语义分析检查不出这个错误显然,代码优化至少应该放在语义分析后面我们经过语义分析后得到一棵抽象语法树我们可以在抽象语法树上进行早期优化然后可以在中间表上上进行中间代码优化然后可以在。

2024-11-26 16:01:22 1281

空空如也

空空如也

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

TA关注的人

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