0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內(nèi)不再提示

跳表是用來干什么的

算法與數(shù)據(jù)結(jié)構 ? 來源:后端技術小牛說 ? 作者:后端技術小牛說 ? 2021-11-21 11:20 ? 次閱讀

跳表這一數(shù)據(jù)結(jié)構,已經(jīng)成為了Redis面試的高頻考點。前兩年沒這么卷的時候,可能大家從開始學習,到拿到大廠offer這一過程,都可能沒聽說過跳表這一數(shù)據(jù)結(jié)構。

那什么是跳表呢?它是用來干啥的?AVL樹紅黑樹知道吧,對,跳表跟他干的事情差不多。我舉個例子大家就明白了。假設目前有一個有序數(shù)列:

[2, 11,22, 33, 44, 52, 63]

我們想基于單鏈表的思想,設計一個數(shù)據(jù)結(jié)構,實現(xiàn)查找時間復雜度為O(logn)。單鏈表的話,它的結(jié)構長這個樣子。

當然這個結(jié)構,查找時間復雜度妥妥的O(n),那咋改呢?

那換個問法:一般做算法題,手撕代碼面試的時候,當咱寫了個時間復雜度為O(n)的解法,面試官搖搖頭,問你有沒有更好的方法,你會怎么做?

常見復雜度O(nlogn) O(n) O(logn) O(1),要優(yōu)化,一步步來的話,只能上O(logn)了,那復雜度logn最常見的算法是哪個?當然是二分!

思路對了,那對著鏈表,咋把二分思想融合進去呢?

要不單鏈表指針這邊動動刀子?讓指針除了指向后面元素,還能越過幾個節(jié)點,指向更后面元素?類似二叉查找樹?先來看看這個數(shù)組對應的二叉查找樹長什么樣。

當然,由于我們的結(jié)構是單鏈表,所以只能有由小值,指向大值,這個二叉樹得改改。

好像有點意思在里面了,再把原先單鏈表的性質(zhì)加上。

走線有點凌亂,按單鏈表的布局顯示方式改改:(值得注意的是,我們需要新建一個數(shù)組項,每個數(shù)組項存儲一個指針,指向剛剛二叉搜索樹每一層最左側(cè)的節(jié)點)

(咋感覺越看越像B+樹了(霧))

來看個查找邏輯吧:

當查找到的結(jié)點保存的數(shù),比要查找的數(shù)小時,跳表就會繼續(xù)訪問該層上的下一個結(jié)點。

當不滿足時,跳表就會用到當前查找到的結(jié)點的指針數(shù)組的下一層指針,然后沿著下一層指針繼續(xù)查找。對于這種數(shù)據(jù)結(jié)構,我們需要從上往下依次查詢?nèi)齻€鏈表,比如我們想查大于35的數(shù)字。

首先按左側(cè)數(shù)組第一個找,發(fā)現(xiàn)中間節(jié)點是33,比較一下比35小。

發(fā)現(xiàn)33比35小,跳下一個節(jié)點。

發(fā)現(xiàn)該節(jié)點是Null,跳33的下一層節(jié)點。

發(fā)現(xiàn)52比35大,再跳下一層節(jié)點。

發(fā)現(xiàn)44比35大,跳下一層節(jié)點,但由于這是最后一層節(jié)點,即44是第一個比33大的數(shù),滿足最終條件,就找到了第一個比35大的數(shù)字。

我們知道,二叉平衡樹,如果設計插入操作,會特別特別麻煩。對于由二叉平衡樹思想改的跳表也是如此,對于我們這邊的情況,每增加,或者減少一個新節(jié)點,每個節(jié)點的高度都需要變化。。那有沒有高人改進呢?

既然把二叉平衡樹改成這四不像了,為啥再不改改,能不能讓他不平衡的同時,還能保證查找效率?

說實話,還真可以,來看看這種跳表。

雖然這個跳表跟咱剛剛講的跳表比起來,奇形怪狀的,但按剛剛的查找思路,還是能做比較好的查詢工作的。

而且既然表都長這么奇形怪狀了,那添加或者刪新元素,其他節(jié)點高度不變問題也不大了。

而且驚人的是,如果我們對新插入節(jié)點的高度進行隨機產(chǎn)生(每次隨機大于p,接著往上加高度,小于p停下來),然后別的節(jié)點高度保持不變,查找效率還是為O(logn),不會出現(xiàn)像二叉查找樹那種直接退化成O(logn)的情況。

責任編輯:haq

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 數(shù)據(jù)

    關注

    8

    文章

    6715

    瀏覽量

    88316
  • Redis
    +關注

    關注

    0

    文章

    368

    瀏覽量

    10780

原文標題:什么?跳表都不知道的你還敢去面BAT!

文章出處:【微信號:TheAlgorithm,微信公眾號:算法與數(shù)據(jù)結(jié)構】歡迎添加關注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關推薦

    LM318 COMP管腳是什么引腳,干什么用的?

    LM318 COMP 管腳是什么引腳,干什么用的,PSPICEFORTI 里面沒有318的COMP管腳在怎么應用
    發(fā)表于 07-31 07:45

    音圈電機是用來干什么的

    音圈電機(Voice Coil Motor,簡稱VCM)是一種利用電磁原理將電能轉(zhuǎn)換為直線運動的電機。它廣泛應用于各種精密定位系統(tǒng)和驅(qū)動設備中,如硬盤驅(qū)動器、光盤驅(qū)動器、光學掃描儀、精密定位臺等。本文將詳細介紹音圈電機的工作原理、結(jié)構特點、應用領域以及發(fā)展趨勢。 一、音圈電機的工作原理 音圈電機的工作原理基于法拉第電磁感應定律和洛倫茲力定律。當電流通過線圈時,線圈周圍產(chǎn)生磁場。這個磁場與永磁體產(chǎn)生的磁場相互作用,產(chǎn)生一個力,使
    的頭像 發(fā)表于 06-13 11:03 ?436次閱讀

    串口的空閑字符是用來激活空閑中斷的嗎?

    發(fā)送空閑幀。 \" [size=13.3333px]請問一般這個東西是怎么用的? [size=13.3333px]用來干什么的? [size=13.3333px]不知道該怎么激活這個中斷,有傳統(tǒng)庫的demo嗎?
    發(fā)表于 05-11 07:28

    美國云服務器是干什么的

    美國云服務器主要用于提供計算資源、托管網(wǎng)站、應用程序以及存儲數(shù)據(jù)等。很多用戶想要了解美國云服務器具體是干什么的,rak部落小編為您整理發(fā)布美國云服務器是干什么的。 美國云服務器是一種**基于云
    的頭像 發(fā)表于 04-10 10:16 ?308次閱讀

    合宙功耗分析儀Air9000是用來干什么的?

    合宙功耗分析儀Air9000,字如其名,就是用來測試電子產(chǎn)品的功耗的。
    的頭像 發(fā)表于 03-28 13:37 ?784次閱讀
    合宙功耗分析儀Air9000是<b class='flag-5'>用來</b><b class='flag-5'>干什么的</b>?

    美國云服務器是干什么的

    對于美國服務器是干什么的,相信很多小白用戶不是非常了解,接下來小編就為您整理發(fā)布美國云服務器是干什么的相關資訊,希望對您有幫助。
    的頭像 發(fā)表于 02-19 09:53 ?339次閱讀

    云服務器是干什么的

     云服務器是干什么的?很多小白用戶會有疑惑,今天小編為您整理云服務器是干什么的相關資料,希望對您了解云服務器是干什么的有幫助。
    的頭像 發(fā)表于 02-18 09:58 ?1310次閱讀

    電磁爐工作原理 電磁爐板上有個可調(diào)電位器的作用是干什么的?

    電磁爐工作原理 電磁爐板上有個可調(diào)電位器的作用是干什么的? 電磁爐是一種利用電磁感應原理來加熱食物的廚房電器。其工作原理是通過電路中的電感線圈產(chǎn)生高頻交變電磁場,使鐵制的鑲嵌在爐板下方的發(fā)熱盤產(chǎn)生
    的頭像 發(fā)表于 02-05 10:29 ?1587次閱讀

    什么是溫補晶振?溫補晶振是干什么的?

    什么是溫補晶振?溫補晶振是干什么的?? 溫補晶振是指對晶體振蕩器進行溫度補償?shù)囊环N技術。晶體振蕩器是一種電子設備,通過驅(qū)動晶體諧振頻率上的機械振動來產(chǎn)生穩(wěn)定的電信號。它在現(xiàn)代電子設備中廣泛應用,如
    的頭像 發(fā)表于 01-23 16:42 ?844次閱讀

    云服務器是干什么的?服務器的主要功能有哪些?

    云服務器是干什么的,主要功能是什么?相信很多技術人員已經(jīng)很了解,但是對于其他行業(yè)的人群云服務器又有什么用呢?擁有云服務器有什么用處呢,RAKsmart小編今天來為您做詳細的解答。
    的頭像 發(fā)表于 01-09 09:48 ?584次閱讀

    LCR數(shù)字電橋的原理是什么?LCR數(shù)字電橋是用來干什么的

    LCR數(shù)字電橋的原理是什么?LCR數(shù)字電橋是用來干什么的? LCR數(shù)字電橋原理的詳解 LCR數(shù)字電橋是一種測試電路中被稱為LCR元件的電感、電容和電阻的值的儀器。通過測量該元件在不同頻率下的電壓
    的頭像 發(fā)表于 12-21 15:37 ?1776次閱讀

    Thread是什么?Thread可以與Wi-Fi、以太網(wǎng)等通信嗎?

    看了下面這張圖,便可大概了解Thread是干什么的。
    的頭像 發(fā)表于 11-20 09:19 ?4299次閱讀
    Thread是什么?Thread可以與Wi-Fi、以太網(wǎng)等通信嗎?

    為什么電容的大小是定義為Q/U,而不是U/Q?

    我們就來看看這個電容量C到底是干什么的。
    的頭像 發(fā)表于 11-02 16:40 ?1725次閱讀
    為什么電容的大小是定義為Q/U,而不是U/Q?

    光纜是什么?光纜有哪些常用類型?光纜型號是什么意思?

    “下有光纜,嚴禁開挖”。光纜是干什么的?如果挖開了會有什么后果呢?
    的頭像 發(fā)表于 10-30 09:47 ?5370次閱讀
    光纜是什么?光纜有哪些常用類型?光纜型號是什么意思?

    LVDS中的時鐘脈沖信號是干什么的

    LVDS中的時鐘脈沖信號是干什么的? LVDS(Low Voltage Differential Signaling)中的時鐘脈沖信號(Clock)是用于同步數(shù)據(jù)傳輸?shù)模钦麄€LVDS接口的重要
    的頭像 發(fā)表于 10-18 15:38 ?1129次閱讀