簡體   English   中英

如果Redis Sorted Set是用Skip List實現的,為什么ZPOPMIN時間復雜度是O(log n)?

[英]If Redis Sorted Set is implemented with Skip List, why ZPOPMIN time complexity is O(log n)?

我已經閱讀了這個問題,這不是我要找的。

據我所知,刪除包含n元素的跳過列表中的前m n元素需要O(m)或者我們可以說O(1)如果m不重要。 但是為什么 Redis 中的ZPOPMIN需要O(log n)

我不知道 Redis 的確切實現。 但是,如果使用跳過列表實現排序集,則刪除將花費O(log n)

從對如何構建跳過列表的觀察來看,我想您可能會明白。 這不是使用簡單的單個數組來實現的,該數組將花費O(m)時間來刪除前m元素。 相反,它使用多個數組(將其視為一個鏈表)並巧妙地存儲值以支持O(log n)時間內的添加/刪除/搜索。

如果它是使用單個數組實現的,那么您是對的 - 刪除應該花費O(m)時間。 但是,對於跳過列表,情況並非如此。 我正在嘗試添加一張圖片,您可以從中了解列表的構建方式。

在此處輸入圖片說明

希望有幫助!

更新

請記住,跳過列表具有級別。 跳過列表可以具有的最大級別數是O(log n) 讓我們考慮刪除這里的前三個元素(即 12、17、20)。 要首先刪除 12,我們必須修改級別 2 和級別 1,因為我們必須在兩個級別中將- ∞指向 17。 移除 12 后,我們移除 17 並在此處執行相同操作。 對於每個刪除,我們可能必須迭代最多O(log n)級別,如上所述關於最大級別數。 我希望你能明白。

暫無
暫無

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

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