地图和小堆一起使用可以提供更好的摊销时间吗?
假设我有一个需要跟踪多个项目的项目。这些项目具有到期时间和唯一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)复杂性是否有益?
答案 0 :(得分:1)
是的,使用双索引可能会对你有所帮助(给定足够数量的项目来打败所涉及的常数因素)。但是,请注意 - 您需要跟踪项目在最小堆中的位置,以便您可以快速地从堆中删除它。