【发布时间】:2021-04-20 01:21:40
【问题描述】:
我正在寻找一种支持 O(1) 随机访问和最坏情况 O(1) 追加的数据结构。 然而,在我的情况下,追加的 O(1) 摊销时间是 不是 我正在寻找的。p>
除了追加和访问之外,数据结构也将不会对其执行任何操作。没有删除,没有插入,只是一个只能追加的结构。
在我的例子中,上限会非常大,可能是 8GB。
此外,这个问题与 this 基本相同,但是,我对这个问题的答案的问题是它降低了内存分配的成本。 c++ 中的内存分配大部分时间是 O(1),但是,我经历过很多次 malloc 需要很长时间。
我想知道这样的结构是否甚至可以存在。我读了this pdf,但是我相信最坏情况下的时间复杂度仍然是O(1) amortized。
如果有人对可以支持这些条件的结构有任何想法(不是在寻找实现,只是一个想法),我们将不胜感激。
【问题讨论】:
-
一个同样有效的问题是这样的结构是否存在?
-
是的,这将是一个同样有效的问题
-
您对尺寸有什么限制?有上限吗?是否有合理预期的元素数量?所有这些都是如何解决这个问题的考虑因素。
-
就我而言,我认为它不会有上限,但可能会达到一定程度(例如 8GB)
-
哎哟
:)我问的原因是这个。如果您知道平均会有十亿个元素(在您的情况下),您可以通过预先分配预期数量的元素来降低分配成本。那时,您将拥有 O(1) 访问/附加,直到需要重新分配。然后知道你可能超出初始分配多少将允许一次重新分配来覆盖大多数情况。在大多数情况下,malloc现在默认为mmap,与过去相比,重新分配的成本也有所降低。
标签: c++ memory data-structures big-o