“嘿,我这暴脾气,你敢说我们数据有问题!看来不教训你一下,就不知道什么是规矩!”赵虎挥着拳头就朝着康博士砸了过去。
孙嘉诚刚要拦下赵虎,但还没等伸出手来,赵虎的拳头就飞了出去。孙嘉诚心想,这下坏菜了,小康这么瘦弱的身子,挨上一拳,肯定要住院了。
“唰!唰!唰!”只见康博士轻轻向后一仰、向左一侧身、再向右一跨步,闪转腾挪间轻轻松松躲过了赵虎的三拳重击。
四人的嘴巴张得大大的,难以置信的夸张神情在脸上停留了一分多钟。
“这怎么可能?!铁锤可算是半个专业拳击运动员,夺过金腰带的,能这么轻松躲过他的重拳,除非是冠军级别的专业选手,不然就没有别的解释了。”马涵惊叹道。
殊不知,康博士曾在ZD星球接受过专业的搏斗培训。
“先别管其他的,且让人家说说,咱的数据究竟哪儿有问题?三个博士和一个硕士来来回回验证了十几遍都没发现问题。你?呵呵。。。”张龙把话题引到数据bug上面。
“好吧,那我就先说一个小问题。我刚才打扫实验台的时候,大致扫了一眼你们的数据端口,用的是最简单的FIFO缓存算法。这个原则虽然符合人们的惯性思维,具备公平性,并且实现起来相对容易,直接使用数据结构中的队列即可实现。
但是,访问效率比较低。
因此我建议使用LFU算法,为了能够淘汰最少使用的数据,LFU算法最简单的一种设计思路就是利用一个数组存储数据项,用hashmap存储每个数据项在数组中对应的位置,然后为每个数据项设计一个访问频次,当数据项被命中时,访问频次自增,在淘汰的时候淘汰访问频次最少的数据。
这样一来的话,在插入数据和访问数据的时候都能达到O(1)的时间复杂度,在淘汰数据的时候,通过选择算法得到应该淘汰的数据项在数组中的索引,并将该索引位置的内容替换为新来的数据内容即可,这样的话,淘汰数据的操作时间复杂度为O(n)。
另外还有一种实现思路就是利用小顶堆+hashmap,小顶堆插入、删除操作都能达到O(logn)时间复杂度,因此效率相比FIFO实现方法更加高效。
不过话说回来,LFU算法很少有人使用,因为其中运算环节较为复杂,数据项对应的位置难以掌握,以你们几个现在的水准,还做不倒应用自如。”
“没错,你说的太对啦,我竟无言以对。唯有献上我的膝盖。”说话间,王潮竟然来到康博士面前,用食指和中指比划出了下跪的姿势。
“铁娘子,你还有没有原则?这么快就跟他献殷勤了!”赵虎睁着铜铃般的眼睛吼道。
“他讲的就是对的嘛!我记得我导师曾经讲过LFU算法,说是只有国际顶级的团队才敢用这种超级算法。这种算法如果用的好,运行效率至少能提高一百倍!