lec12 Command Line Programming, Git
Git
方案 1
每一次更改都保存所有文件。
方案 2
对于不变的文件,保存之前文件的指针。只保存更改后的文件。
如果要恢复文件,则需要遍历历史,比较麻烦。
方案 3
每次记录下每个文件对应的版本,相当于 map 或 dict。如果某个版本和之前的版本,则不用存储新文件。
方案 4
使用时间和日期作为版本号码。然而,可能有相同的时间。
方案 5
使用 hash。Git 使用的是 git-SHA 1 hash,有 160 bit 长。
- 计算 git-SHA 1 hash。例如为 66ccdc…
- 创造文件夹
.git/objects/66
- 将文件储存在名为 66ccdc… 的文件中(使用了压缩)
Hash 可能会碰撞,但是概率相当相当小,可以忽略。同时,Hash 也可以更安全。
Commit
Commit 的命令也储存在 objects 中。Commit 包含作者,日期,message,文件和版本的表格,parent ID。对这些使用 git-SHA 1。
Merge
在解决冲突过后,新的 commit 拥有两个 parents。这种结构是图。
lec13 Asymptotics I
时间复杂度
将各种操作看成消耗单位时间,计算操作次数。消耗的最多时间记为 $O()$, 消耗的最小时间记为 $\Omega()$。这都只用看等价无穷大。那么,如果消耗的时间等价与同一个阶数,可以记为 $\Theta$。