cmu15-445课程所用到的Extendible Hash Table的一个性质证明
在Fall2023的P2中,对特定bucket_idx_i
进行Remove后,可能会触发merge,
设:在 merge 前,bucket_idx_i
对应了local_depth_i
和page_id_i
一次 merge 的过程涉及到两个page_id
,而一个page_id所对应的 bucket_idx 数量是2 ^ ( global_depth - local_depth)
个,
于是原本的两个page_id涉及到的bucket_idx
数量是2 ^ (global_depth - (local_depth_i- 1))
个
这也体现出来merge
后local_depth
会减小1
这里提供另一个可能不直观但是帮助理解Extendible Hash Table结构的思路。
对任意bucket_idx
及其对应local_depth
,它对应了一个邻居 nb_bucket_idx
,如果这个邻居的nb_local_depth
和local_depth
相同,则可以考虑 merge ,也就是说,这两个bucket_idx
和他们所对应的page_id
实际上以2 ^ (local_depth - 1)
的间隔遍布了整个directory
,这种性质可以通过分析EHT的split操作逻辑得到。
首先,对最简单的global_depth
=0或1的情况这种性质是显然成立的。
然后,EHT的Grow和插入一定伴随着 split,而每次 split,实际上是把原本以2 ^ (local_depth)
的间隔遍布了整个directory
的所有page_id
中的一半赋成了另一个新的page_id
,这也就符合了前面提到的这种“遍布”性质