映射和最小堆以获得更好的速度

时间:2010-09-28 05:25:26

标签: language-agnostic data-structures

地图和小堆一起使用可以提供更好的摊销时间吗?

假设我有一个需要跟踪多个项目的项目。这些项目具有到期时间和唯一ID:

class Item {
  ID uid;
  Time expiration;
};

对于此示例,Time和ID都是基本的整数数据类型。我需要能够通过id快速访问项目,我还需要能够找到所有项目的最短到期时间。

此外,我将进行大量插入和删除。

使用地图,我将分期查找O(log n)的时间。 (是的,我将为此提供比较功能。)但是找到最小值是O(n)。

如果我使用最小堆,我的ID查找时间为O(n),但找到最小到期时间为O(1)。

在这两种情况下,插入都是O(log n)。对于此程序,只会删除最小项目。

或者,我可以同时使用两者。跟踪相同对象的地图和最小堆。

鉴于此设置,使用最小堆和映射来避免O(n)复杂性是否有益?

1 个答案:

答案 0 :(得分:1)

是的,使用双索引可能会对你有所帮助(给定足够数量的项目来打败所涉及的常数因素)。但是,请注意 - 您需要跟踪项目在最小堆中的位置,以便您可以快速地从堆中删除它。