[英]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.