[英]O(1) worst case append only array
我正在尋找一種支持 O(1) 隨機訪問和最壞情況 O(1) append 的數據結構。 然而,就我而言,append 的 O(1) 攤銷時間並不是我想要的。
除了append和access之外,該數據結構也不會對其執行任何操作。 沒有刪除,沒有插入,只是一個僅追加的結構。
就我而言,上限會非常大,可能是 8GB。
此外,這個問題與這個問題基本相同,但是,我對該問題的答案的問題是它降低了 memory 分配的成本。 Memory 分配在c++
中大部分時間是 O(1) ,但是,我經歷過很多次malloc
需要很長時間的情況。
我想知道這樣的結構是否甚至可以存在。 我讀了這個pdf,但是我相信最壞情況下的時間復雜度仍然是O(1)
攤銷。
如果有人對可以支持這些條件的結構有任何想法(不是在尋找實現,只是一個想法),那將不勝感激。
std::deque
非常接近你想要的:
O(1)
(成本是std::vector
的兩倍,因為它必須執行兩個指針取消引用,不僅僅是一個,而是像這樣的固定倍數不會改變 big-O)O(1)
,而不僅僅是攤銷O(1)
,如果您考慮間歇性固定大小 memory 分配(沒有初始化)為O(1)
(它是;它不是恆定成本,但成本是不依賴於deque
的大小) 與鏈接問題中的分配不同(當新分配的 memory 大小翻倍,因此新分配線性增長時), std::deque
的塊分配是固定大小的,所以你要么:
由於新塊的大小是固定的,而不是連續增長,它仍然是O(1)
(有時是O(1 construction)
有時是O(1 fixed size allocation + 1 construction)
,但仍然與deque
的長度無關)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.