OSDI 2020论文摘要
完整版链接:https://www.usenix.org/sites/default/files/osdi20-full_proceedings.pdf ...
完整版链接:https://www.usenix.org/sites/default/files/osdi20-full_proceedings.pdf ...
其实不只是这一本教材,国内对英文计算机文献的翻译质量普遍不高,以至于我直接读英文原著都要比读这种狗屁不通的汉语句子流畅许多。下面这个例子是第14章开头的第一段话,我来试试把原版翻译改良一下,你们品评一下有没有好读许多。 ...
本章提及了数据结构的“扩张”概念。当我们需要支持一种特殊操作的时候,应该优先考虑去扩展现有的数据结构,而不是自创一种。扩展的方法就是“加信息”,然后用原有的基本操作去维护它。作为例子,本章讲了“顺序统计树”和“区间树”,并给出了扩展数据结构的一般方法。 ...
并查集的基本操作 并查集是一种由不相交集合组成的数据结构,它可以用 S={S1,S2,...,Sk}S=\{S_1,S_2,...,S_k\} 表示,其中 SiS_i 是由若干元素组成的集合,任意两个集合之间的交集都为 ∅\empty,每个集合都有一个元素作为它的代表。 并查集需要支持以下操作: MAKE-SET(x)创建一个仅含 x 的新集合(x 不得同时属于其他集合) UNION(x,y)将集合 x、y 合并到一起,形成新的集合 FIND-SET(x)返回集合 x 的代表 一般来说,每个元素都会先通过 MAKE-SET 形成只包含自己的集合,然后通过 UNION 相互兼并。MAKE-SET 和 UNION的运行次数是有限的,不会超过所有元素的总数 nn。与此同时,外部会通过FIND-SET查询某个元素当前属于哪个集合,该操作的次数没有上限。所以,一个并查集的运行效率可以通过两个变量衡量——MAKE-SET 的运行次数 nn,以及上述所有三种操作的总次数 mm。这里假设了每个元素都会先形成自己的集合。 ...
这一章主要研究这几个问题: 怎么求最大/最小 怎么同时求最大&最小 怎么求第二大/小(习题9.1-1) 怎么求第k小 这些问题的算法并不难,本质上我们是想探讨它们所需要的最小比较次数,所以希望大家把重点放在理解证明过程上,学习证明思路,理解排序的本质。下文中,数据规模都用 nn 表示。 ...
今天来讲个有挑战性的内容——红黑树。这是我从本科开始一直没敢去碰的东西,主要是嫌麻烦,实际编程中又不怎么用,但最近就想看着玩。本文只能让你了解红黑树大概的样子,真要理解并形成深刻印象,还得去看《算法导论》的第12、13章。第12章(平衡二叉树)的笔记在上一篇文章里。 ...
本文简单介绍二叉搜索树,为下一篇文章讲红黑树作铺垫。 二叉搜索树 二叉搜索树(Binary Search Tree, BST)是一棵二叉树,每个结点都记录着左子left、右子right、父结点p、关键字key。BST里的关键字总是满足二叉搜索树性质:对于每个结点,其关键字都大于或等于它的任意左子,小于或等于它的任意右子。简单来说,就是“左小右大”。下面比较结点大小时,指的就是比较结点关键字的大小。 ...
一道并不怎么难的题,提交了N次才成功,究其原因是边缘情况特别多,所以一定得好好复盘,练好我一直写不清楚的二分法——我经常绕不清楚奇偶两种情况,也常常照顾不好数组越界。 ...
上次我们编译并成功运行了myOS,这次我们来仔细看看这个简单的操作系统有哪些构成要素,要以怎样的方法去安装它。 编译环境的建立 源代码的编译是靠shell脚本而不是Makefile总控的,不过这并不影响我们学习。大致来讲: ...
前几天跑通了一个空空如也的内核(教程里叫做Bare Bone),只能说是搭建好了环境,接下来要搭建的myOS会稍微正式一点。如同教程标题“Meaty Skeleton”所说的那样,myOS虽然有一点“meat”,但依然只是一具“skeleton”,没有实际功能。我们既可以从中学到一个科学的OS源代码的结构,也可以直接以myOS为基础,向里面添加新的功能。 ...