【发布时间】:2014-05-23 12:35:25
【问题描述】:
我以为我现在正在寻找的东西存在一个树算法,但我忘记了它的名字,谷歌搜索没有帮助。
我正在寻找一种对数据具有最佳查找性能的算法。特征: - 每次查找都有望获得成功。所以所有被查找的键都存在(可能有一些未命中,但这些将被视为“错误配置”,此类未命中的发生可以忽略不计) - 很可能(数据集为此优化)随后发生相同的查找 - 例如键 123 可能有一百万次查找,中间可能有键 456 的一次查找,然后再查找 123 的数百万次。然后查找具有可能相同键的下一组,依此类推
当然我可以使用哈希算法。但是为了给定的目的,我记得有一个搜索优化树,它以这样一种方式优化查找,即最近的查找位于树的最顶端。因此,您可能会使树的第一个节点直接命中 O(1),而无需哈希函数或哈希存储的模数。
我正在寻找这种算法来实现移动设备上图形渲染的原始性能。
【问题讨论】:
-
-
为什么不使用带有搜索计数器的简单堆?您可以将其存储在一个数组中,并执行正常的线性搜索。增加搜索到的key的计数器并对其进行upheap。这应该适用于非常不平衡的搜索模式。 @chepner 这样的树不需要在每次查找时重新组织,它需要自我更新,是的,但它很快,并且偶尔会重新组织。
-
移到最前面的列表可能对您的设置有所帮助。
-
你看过缓存策略吗,例如LRU 缓存策略?
标签: c++ algorithm data-structures tree