【CMU15-445数据库】bustub Project #1:Buffer Pool

Project 1 共需完成三个任务:可扩展哈希表(Extendible Hash Table)、LRU-K 置换策略(LRU-K Replacement Policy)以及缓冲池管理(Buffer Pool Manager),其中缓冲池的实现会用到前两个,建议就按文档给的顺序实现。

关于代码,首先这里主要就是我个人的一个记录空间,文章也就一两百访问量还是中文,不会真有 CMU 学生来看吧(况且写这篇时也早已过了 DDL)。其二,我比较想展示一些具体实现上比较符合 C++ 的代码风格。另外,我对做这种项目时不知道哪里出 Bug 死活过不去测试特别想要一份参考代码的心情非常理解,所以我决定还是放出关键代码,希望能帮到和博主一样在自学这门课的同学。为了美观,代码会以图片展示为主。(毕竟都来自学了,至少跟着手写一遍,copy paste 就没意义了)

当然,因为我自己写的时候没有参考别人的代码,所以可能有一些地方的理解不对(侥幸过了测试?),欢迎交流指出~

Extendible Hash Table 可扩展哈希表

拉链法实现的哈希表当某个哈希值对应的(即存在于同一个“桶”中,Bucket)元素特别多时,查找的时间复杂度由 O ( 1 ) O(1) O(1) 退化为遍历的 O ( n ) O(n) O(n)。举个极端的例子,如果哈希函数是不管输入是什么都映射为 0,那么就和在第 0 位存储一个链表无异。如何设计散布更加均匀的哈希函数是优化的另一个方向,而另一种方法是当检测到某个桶中的元素过多时对表进行扩展。扩展最简单的做法是直接将哈希表的长度(桶数)翻倍,再将哈希函数的值域由 [ 0 , n ) [0, n) [0,n) 改为 [ 0 , 2 n ) [0, 2n) [0,2n)(这点很容易实现,因为大部分哈希函数本身就是先算出某个值,然后对 n n

评论 43
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值