Skip to content

Commit d22a8f6

Browse files
Update lab2.2-iterator.md
1 parent c196113 commit d22a8f6

File tree

1 file changed

+1
-1
lines changed

1 file changed

+1
-1
lines changed

src/lab2/lab2.2-iterator.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
SkipList0: ("k1", "v1") -> ("k4", "") -> ("k5", "v3")
88
SkipList1: ("k2", "v2") -> ("k3", "v3") -> ("k4", "v4")
99
```
10-
`SkipList0`中的`("k4", "")`表示删除了`"k4"`, 因此如果我们先消耗了`SkipList0`的迭代器, 那么`SkipList1`中就无法获取`"k3"`的不合法性, 因此需要对不同`SkipList`的迭代器进行`merge`操作来删除这些无效的元素。
10+
`SkipList0`中的`("k4", "")`表示删除了`"k4"`, 因此如果我们先消耗了`SkipList0`的迭代器, 那么`SkipList1`中就无法获取`"k4"`的不合法性, 因此需要对不同`SkipList`的迭代器进行`merge`操作来删除这些无效的元素。
1111

1212
本实验的建议方案是:
1313
可以维护一个堆,堆首先根据`key`排序, 然后根据`SkipList id`排序, 因此相同的`key`, 后插入的记录肯定更靠近堆顶(因为`SkipList id`越小表示其越新), 因此堆顶的某个`key`一定是整个`MemTable`中该`key`的最新记录, 迭代器对该`key`只需要堆顶的这一个元素, 其余在取出堆顶后即可全部移除(因为首先按照`key`排序, 所以他们一定连续出现在堆顶)

0 commit comments

Comments
 (0)