15-445 Project1 Part1

也算是开始写好玩的代码了

Part1 其实并不算很有难度,但是也犯了一些很蠢的问题。

依旧没有记住要先理解题目

一开始的打算是一个比较精妙的设计,在Node内储存一个deque 用于储存访问记录,将这个node丢入priority_queue 这样就可以自动拿出需要Evict 的对象了,一切都是看上去那么高效和简洁

但是其实储存在pq内的是指针 否则 我们将无法access这个节点,但是储存的是指针的话,我们无法在更新节点后让优先队列进行重排序,因为这个操作对priority_queue无感的,如果要强行实现的话,则相当于需要重新建堆,相当低效。

二更

结过还是以低效的方式完成了,主要是看到了要求上说明 这一部分是独立的 所以就直接选择了 利用list来储存,在每次Evict前进行sort操作

好玩且奇怪的问题是,在通过Replacer内的list的sort之后node内的 list会改变 也不知道为什么会这样,已经查看过内存指针并没有变动,但是更神奇的是 莫名其妙打了几个cout就解决了这个问题,后续则畅通无阻了。代码的尽头真的是玄学ww

整体来说还是比较简单的? 也不需要过多的思考,只是需要遵从指使完成编码即可。不过我感觉好日子要到头咯!后续的任务可能是大项目的一部分,也有benchmark,也估计会有更多的原创性了。

附上通关截图(我也没hidden test 过了就试过了(逃

三更

才发现自己理解错了,并不是独立的项目,而只是不和其他replacer相关,只要单独实现lru-k 算法即可,后续在buffer manage中还是会用到的,阅读Part2 的时候发现了这个审题问题。目前这个情况下,可以保留目前的做法,如果后续遇到性能瓶颈,可能会需要自行实现一个heap,但是由于还有可能涉及扩容和其他问题,复杂度挺大的,暂时优先级并不很高。