树或其他数据结构最有效地查找“最近的搜索”

时间:2014-05-23 12:35:26

标签: c++ algorithm data-structures tree

我认为我现在正在寻找一种树算法,但我忘记了它的名字,谷歌搜索并没有帮助。

我正在搜索对数据具有最佳查找性能的算法。特点: - 每次查找都会受到欢迎。因此,所有被查找的键都存在(可能有一些未命中,但这些将被视为&#34;错误配置&#34;,并且此类未命中的发生可忽略不计) - 很可能(数据集针对此优化)随后发生相同的查找 - 例如密钥123可能有一百万次查找,其间可能有一次查找密钥456,然后再查找数百万次查找123.然后查找下一个可能具有相同密钥的组,依此类推< / p>

当然可以使用哈希算法。但是出于给定的目的,我记得有一个搜索优化树,它以这样的方式优化查找,使得最近的查找位于树的最顶层。因此,您可能直接将树的第一个节点命中为O(1),而不需要散列函数或散列存储的模数。

我正在寻求这种算法来实现移动设备上图形渲染的原始性能。

2 个答案:

答案 0 :(得分:6)

也许是splay tree

  

splay树是一个自我调整的二叉搜索树,具有附加属性,最近访问过的元素可以再次快速访问。

但是哈希表可以预期是O(1),所以你不应该期望那个明显优于另一个。

答案 1 :(得分:2)

我建议使用哈希表来完成这项工作。要加速后续搜索,您可以缓存阵列中最近访问的K个不同元素。如果K很小(<20左右),那么该阵列中的线性搜索将非常快,因为它可以保留在L1缓存中。