簡體   English   中英

O(1) 最壞情況 append 僅陣列

[英]O(1) worst case append only array

我正在尋找一種支持 O(1) 隨機訪問和最壞情況 O(1) append 的數據結構。 然而,就我而言,append 的 O(1) 攤銷時間並不是我想要的。

除了appendaccess之外,該數據結構也不會對其執行任何操作。 沒有刪除,沒有插入,只是一個僅追加的結構

就我而言,上限會非常大,可能是 8GB。

此外,這個問題與這個問題基本相同,但是,我對該問題的答案的問題是它降低了 memory 分配的成本。 Memory 分配在c++中大部分時間是 O(1) ,但是,我經歷過很多次malloc需要很長時間的情況。

我想知道這樣的結構是否甚至可以存在。 我讀了這個pdf,但是我相信最壞情況下的時間復雜度仍然是O(1)攤銷。

如果有人對可以支持這些條件的結構有任何想法(不是在尋找實現,只是一個想法),那將不勝感激。

std::deque非常接近你想要的:

  1. 隨機訪問的O(1) (成本是std::vector的兩倍,因為它必須執行兩個指針取消引用,不僅僅是一個,而是像這樣的固定倍數不會改變 big-O)
  2. 對於 append,它實際上是O(1) ,而不僅僅是攤銷O(1) ,如果您考慮間歇性固定大小 memory 分配(沒有初始化)為O(1) (它是;它不是恆定成本,但成本是不依賴於deque的大小)

與鏈接問題中的分配不同(當新分配的 memory 大小翻倍,因此新分配線性增長時), std::deque的塊分配是固定大小的,所以你要么:

  1. 將元素插入現有的分配空間,或
  2. 分配一個固定大小的塊,然后將一個元素插入到新塊的第一個槽中

由於新塊的大小是固定的,而不是連續增長,它仍然是O(1) (有時是O(1 construction)有時是O(1 fixed size allocation + 1 construction) ,但仍然與deque的長度無關)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM