【发布时间】:2014-01-21 17:24:11
【问题描述】:
我可以有一个集合,其中平均添加/删除操作为 O(1)(这对于基于哈希表的集合是典型的)并且最差的 max/min 小于 O(n),可能是 O(log n)(典型对于基于树的集合)?
upd 嗯,在最简单的情况下,我似乎可以在每次 max/min 消失时重新扫描所有 N 个元素,通常它给我 O(1)。但是我将我的算法应用于股票交易,其中接近最小值/最大值的变化更有可能,所以我只是不想在每次最大值或最小值消失时重新扫描所有内容,我需要比完全重新扫描更智能的东西,它给出了 O(n)。
upd2 在我的例子中,集合包含 100-300 个元素。 max/min 元素的变化很可能,因此 max/min 经常变化。我需要跟踪最大/最小。我仍然希望 O(1) 用于添加/删除。
【问题讨论】:
-
我假设您也想要高效删除?
-
@JanDvorak 是的,我想要像哈希表这样的东西。所有基本操作都使用 O(1),但 + 快速 max/min,并且更有可能更改接近 max/min 的元素。
-
排序跳过列表怎么样?不给 O(1) 添加/删除,但对于所有操作仍然相当快
-
O(1) 添加/删除是强制性的,因为它是主要操作。
-
通过哈希表和专用堆的组合,您可以获得 O(1) 插入、O(1) 查找最小值和查找最大值以及 O(log(n)) 删除。这不是你所要求的,但它非常接近。不过,堆可能有一个不好的常数因子。