簡體   English   中英

HashMap 具有 O(log(N)) 時間復雜度操作

[英]HashMap with O(log(N)) time complexity operations

我對 CodeSignal 進行了測試,但無法解決此問題。

創建一個允許以下操作的數據結構。
插入 xy - 插入帶有鍵 x 和值 y 的 object。
獲取 x - 返回帶有鍵 x 的 object 的值。
addToKey x - 將 x 添加到 map 中的所有鍵
addToValue y - 將 y 添加到 map 中的所有值。
每個操作的時間復雜度應該是 O(log(N))

我能夠在 Java 中使用數組和 LinkedList 制作 hash map。 但是我無法將時間復雜度提高到 O(log(N))。 在我的實現中,插入和獲取的時間復雜度為 O(1)(最壞情況下為 O(N))。 addToKey 和 addToValue 的時間復雜度是 O(N),因為我必須迭代所有元素來修改鍵和值。
對於這個問題,合適的數據結構是什么?

在 The Vee 和 Tom Elias 的有用評論后編輯以更正答案。

您不能通過迭代所有元素來實現addToKeyaddToValue ,因為正如您所意識到的那樣,這需要線性時間。

相反,您可以保留keyDeltavalueDelta int實例變量,它們保存應分別添加到每個鍵和值的值(或所有值的總和)。 這是假設addToKeyaddToValue應該將數值添加到鍵或值。

addToKeyaddToValue只需要更新那些實例變量,這需要O(1)

get(x)操作將搜索鍵x - keyDelta並在向其添加valueDelta后返回其對應的值。

請注意, add(x,y)也需要更改,因為添加到 Map 的鍵值對不應受到先前調用addToKeyaddToValue的影響。 如果insert(x,y)實際上將x - keyDelta, y - valueDelta對插入 map,則可以實現這一點。

如果您使用TreeMap來實現鍵到值的映射,則getinsert將占用O(logN)

暫無
暫無

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

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