同时维护分数和排队时间,也是采用与VMTF一样以双链表形式队列来实现。

为了减少排队时间,作者提出了三个优化和两个修改的碰撞顺序。


 

第一个优化:

第一个优化是受到桶排序的启发,并且已经为evsid提供了可接受的碰撞时间。
我们不使用单个队列,而是保留一个队列堆栈,根据变量得分的指数进行索引。变量属于其得分的浮点指数的队列。

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

 

两个碰撞顺序修改:

对变量碰撞顺序的第一次修改:在实际执行之前,首先将一个已碰撞的变量退出队列,然后更新它的分数,最后再将它重新加入队列,我们对已看到的变量堆栈w.r.t.递增分数进行排序。但是,如果所有的碰撞变量都具有相同的分数指数,则会出现类似的问题,而且在更新期间分数指数也不会改变。以INC为例,几乎总是如此。

第二个修改通过首先在seen-variables堆栈上删除所有变量,然后更新它们的分数和enqueu来防止这种情况。

-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

第二个优化:

虽然EVSIDS的可变分数指数或多或少是分散的,但其他方案没有这种特性,显然不是INC,但也可能是SUM和ACIDS到一个较小的程度。对于这些方案,分数指数可能会聚集在几个值周围。因此,我们的第二个优化重复bucket sort参数w.r.t.,即变量分数尾数的最高位的固定数目。对于每个队列(按指数索引),我们添加另一个缓存表(按尾数最高位索引)的引用,这些引用指向具有匹配最高尾数位的队列中的最后一个元素。

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

 第三个优化:

为每个(子)队列额外缓存last-enqueued变量,该队列由具有相同最高尾数位的变量组成。

-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

posted on 2020-04-09 21:52  海阔凭鱼跃越  阅读(205)  评论(0编辑  收藏  举报