跳表

參考資料

Redis為什么用跳表而不用平衡樹?

skiplist與平衡樹、哈希表的比較

  • skiplist和各種平衡樹(如AVL、紅黑樹等)的元素是有序排列的,而哈希表不是有序的。因此,在哈希表上只能做單個key的查找,不適宜做范圍查找。所謂范圍查找,指的是查找那些大小在指定的兩個值之間的所有節(jié)點。
  • 在做范圍查找的時候,平衡樹比skiplist操作要復雜。在平衡樹上,我們找到指定范圍的小值之后,還需要以中序遍歷的順序繼續(xù)尋找其它不超過大值的節(jié)點。如果不對平衡樹進行一定的改造,這里的中序遍歷并不容易實現(xiàn)。而在skiplist上進行范圍查找就非常簡單,只需要在找到小值之后,對第1層鏈表進行若干步的遍歷就可以實現(xiàn)。
  • 平衡樹的插入和刪除操作可能引發(fā)子樹的調整,邏輯復雜,而skiplist的插入和刪除只需要修改相鄰節(jié)點的指針,操作簡單又快速。
  • 從內存占用上來說,skiplist比平衡樹更靈活一些。一般來說,平衡樹每個節(jié)點包含2個指針(分別指向左右子樹),而skiplist每個節(jié)點包含的指針數(shù)目平均為1/(1-p),具體取決于參數(shù)p的大小。如果像Redis里的實現(xiàn)一樣,取p=1/4,那么平均每個節(jié)點包含1.33個指針,比平衡樹更有優(yōu)勢。
  • 查找單個key,skiplist和平衡樹的時間復雜度都為O(log n),大體相當;而哈希表在保持較低的哈希值沖突概率的前提下,查找時間復雜度接近O(1),性能更高一些。所以我們平常使用的各種Map或dictionary結構,大都是基于哈希表實現(xiàn)的。
    從算法實現(xiàn)難度上來比較,skiplist比平衡樹要簡單得多。
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

  • Redis為什么用跳表而不用平衡樹? 本文是《Redis內部數(shù)據結構詳解》系列的第六篇。在本文中,我們圍繞一個Re...
    meng_philip123閱讀 4,110評論 0 26
  • 跳躍表簡介 我們先拋開redis,單獨了解下跳越表 skiplist本質上也是一種查找結構,用于解決算法中的查找問...
    super_pirlo閱讀 3,453評論 0 59
  • Redis 之字典和跳表 字典 Redis整個數(shù)據庫其實就是一個大的字典 以上命令實際上就是設置了數(shù)據庫字典中一個...
    lxfeng閱讀 1,144評論 0 0
  • 跳表實現(xiàn) 跳躍表(skiplist)是一種有序數(shù)據結構, 它通過在每個節(jié)點中維持多個指向其他節(jié)點的指針, 從而達到...
    來年花惜閱讀 4,344評論 1 4
  • 又逢重陽,登高賞菊,品酒執(zhí)蟹已是很遙遠的事了。那時的父親偉岸英逸,豪氣干云,牽了我的手直上山頂,看腳下風物,遠山明...
    銘玥詠全閱讀 188評論 0 1

友情鏈接更多精彩內容