一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

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

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

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

跳表是用來(lái)干什么的

算法與數(shù)據(jù)結(jié)構(gòu) ? 來(lái)源:后端技術(shù)小牛說(shuō) ? 作者:后端技術(shù)小牛說(shuō) ? 2021-11-21 11:20 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

跳表這一數(shù)據(jù)結(jié)構(gòu),已經(jīng)成為了Redis面試的高頻考點(diǎn)。前兩年沒(méi)這么卷的時(shí)候,可能大家從開始學(xué)習(xí),到拿到大廠offer這一過(guò)程,都可能沒(méi)聽(tīng)說(shuō)過(guò)跳表這一數(shù)據(jù)結(jié)構(gòu)。

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

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

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

當(dāng)然這個(gè)結(jié)構(gòu),查找時(shí)間復(fù)雜度妥妥的O(n),那咋改呢?

那換個(gè)問(wèn)法:一般做算法題,手撕代碼面試的時(shí)候,當(dāng)咱寫了個(gè)時(shí)間復(fù)雜度為O(n)的解法,面試官搖搖頭,問(wèn)你有沒(méi)有更好的方法,你會(huì)怎么做?

常見(jiàn)復(fù)雜度O(nlogn) O(n) O(logn) O(1),要優(yōu)化,一步步來(lái)的話,只能上O(logn)了,那復(fù)雜度logn最常見(jiàn)的算法是哪個(gè)?當(dāng)然是二分!

思路對(duì)了,那對(duì)著鏈表,咋把二分思想融合進(jìn)去呢?

要不單鏈表指針這邊動(dòng)動(dòng)刀子?讓指針除了指向后面元素,還能越過(guò)幾個(gè)節(jié)點(diǎn),指向更后面元素?類似二叉查找樹?先來(lái)看看這個(gè)數(shù)組對(duì)應(yīng)的二叉查找樹長(zhǎng)什么樣。

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

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

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

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

來(lái)看個(gè)查找邏輯吧:

當(dāng)查找到的結(jié)點(diǎn)保存的數(shù),比要查找的數(shù)小時(shí),跳表就會(huì)繼續(xù)訪問(wèn)該層上的下一個(gè)結(jié)點(diǎn)。

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

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

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

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

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

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

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

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

說(shuō)實(shí)話,還真可以,來(lái)看看這種跳表。

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

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

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

責(zé)任編輯:haq

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

    關(guān)注

    8

    文章

    7253

    瀏覽量

    91761
  • Redis
    +關(guān)注

    關(guān)注

    0

    文章

    386

    瀏覽量

    11419

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

文章出處:【微信號(hào):TheAlgorithm,微信公眾號(hào):算法與數(shù)據(jù)結(jié)構(gòu)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    主板上的顯卡的特點(diǎn)是什么?能用來(lái)干什么

    在計(jì)算機(jī)硬件系統(tǒng)中,顯卡是負(fù)責(zé)處理和輸出圖像的關(guān)鍵組件。安裝在主板上的顯卡主要分為集成顯卡和獨(dú)立顯卡,它們各自具備獨(dú)特的特點(diǎn),并在不同場(chǎng)景下發(fā)揮著重要作用。
    的頭像 發(fā)表于 05-22 09:21 ?223次閱讀

    綜合配線柜是干什么的

    綜合配線柜(也稱為綜合布線柜或綜合布線系統(tǒng)配線柜)是一種在多個(gè)領(lǐng)域中發(fā)揮關(guān)鍵作用的設(shè)備。以下是關(guān)于綜合配線柜的詳細(xì)介紹: 一、主要作用 集中管理與控制: 綜合配線柜能夠集中管理和控制網(wǎng)絡(luò)或電力系統(tǒng)中的線纜和連接設(shè)備。通過(guò)將各種線纜(如網(wǎng)線、光纖、電話線、電源線等)集中在一個(gè)柜子中,可以方便地進(jìn)行線纜的接入、分配、調(diào)度和維護(hù),提高管理效率和便捷性。 保護(hù)線纜和設(shè)備: 綜合配線柜提供了對(duì)線纜和連接設(shè)備的物理保護(hù)。合
    的頭像 發(fā)表于 03-11 11:08 ?453次閱讀

    gtta光纜是干什么的

    GTTA光纜是一種特定類型的通信光纜,主要用于滿足光學(xué)、機(jī)械或環(huán)境的性能規(guī)范,并實(shí)現(xiàn)光信號(hào)的傳輸。以下是對(duì)GTTA光纜的詳細(xì)解釋: 一、主要用途 GTTA光纜作為寬帶接入的物理平臺(tái),在通信網(wǎng)絡(luò)中扮演著重要角色。它主要用于室外通信,如饋線和配線等,特別是在接入網(wǎng)中。此外,它還可以用于管道、非金屬自承架空等常規(guī)敷設(shè)方式,以及樓道內(nèi)豎井布線。 二、結(jié)構(gòu)特點(diǎn) 纜芯:光纜的纜芯由一定數(shù)量的光纖組成,這些光纖按照一定方式排列并形成纜
    的頭像 發(fā)表于 03-06 10:21 ?466次閱讀

    如果需要使用DMD進(jìn)行成像控制,需要用到哪些部件?

    我想問(wèn)一下,如果需要使用DMD進(jìn)行成像控制,需要用到哪些部件?是只需要控制板和DMD芯片么?那么評(píng)估模塊是用來(lái)干什么的呢?
    發(fā)表于 02-28 06:40

    PLM項(xiàng)目管理系統(tǒng)主要干什么?制造業(yè)企業(yè)的PLM應(yīng)用與效益

    在制造業(yè)的數(shù)字化轉(zhuǎn)型浪潮中,PLM(Product Lifecycle Management,產(chǎn)品全生命周期管理)項(xiàng)目管理系統(tǒng)扮演著至關(guān)重要的角色。那么,PLM項(xiàng)目管理系統(tǒng)主要干什么呢?簡(jiǎn)而言之
    的頭像 發(fā)表于 12-04 11:19 ?1370次閱讀
    PLM項(xiàng)目管理系統(tǒng)主要<b class='flag-5'>干什么</b>?制造業(yè)企業(yè)的PLM應(yīng)用與效益

    在ads1261的通用c語(yǔ)言例程中的390行的if是用來(lái)區(qū)分什么的呢?

    你好我想知道在ads1261的通用c語(yǔ)言例程中的390行的if是用來(lái)區(qū)分什么的呢,在讀取數(shù)據(jù)中什么情況下取ff,什么情況寫取00呢
    發(fā)表于 11-27 07:58

    TLC555這個(gè)電路的二極管是干什么用的,它是從哪來(lái)的?

    就這個(gè)電路二極管不知道干什么用的,它是從哪來(lái)的? 仿真結(jié)果跟官方的不一樣
    發(fā)表于 11-08 15:37

    音頻子系統(tǒng)主要是用來(lái)什么的,可以用來(lái)做PCM編碼器嗎?

    請(qǐng)問(wèn),音頻子系統(tǒng)主要是用來(lái)什么的,可以用來(lái)做PCM編碼器嗎?支持PCM編碼輸出嗎?
    發(fā)表于 11-07 07:38

    安泰功率放大器是干什么的

    功率放大器是電子設(shè)備中一種非常重要的器件,主要用來(lái)將輸入的電信號(hào)轉(zhuǎn)換成更大功率的輸出信號(hào)。它在各種電子設(shè)備中都扮演著至關(guān)重要的角色,包括音頻設(shè)備、通信設(shè)備、電源系統(tǒng)、汽車電子以及工業(yè)控制系統(tǒng)等。下面
    的頭像 發(fā)表于 10-29 15:46 ?369次閱讀
    安泰功率放大器是<b class='flag-5'>干什么的</b>

    電視上的usb是用來(lái)干什么的

    電視上的USB接口是一個(gè)非常實(shí)用的功能,它允許用戶通過(guò)USB設(shè)備(如U盤、移動(dòng)硬盤等)直接播放存儲(chǔ)在這些設(shè)備上的多媒體文件,如視頻、音頻、圖片等。此外,USB接口還可以用來(lái)為電視提供額外的功能,比如
    的頭像 發(fā)表于 10-12 10:06 ?8047次閱讀

    VCA821給出的AGC電路,出來(lái)的波形奇奇怪怪的,為什么?

    我做的VCA821給出的AGC電路,給的信號(hào)50mV,頻率10kHz,出來(lái)的波形奇奇怪怪的,有78MHz。請(qǐng)問(wèn)這是什么原因,自激了嗎?還有,圖中的Vref是干什么的? 以下是我的原理圖和PCB,能否給出一些修改意見(jiàn)
    發(fā)表于 08-29 08:24

    用INA2332放大信號(hào),可以用正負(fù)電源嗎?

    本人用INA2332放大信號(hào),由于由負(fù)信號(hào)輸入(幾百毫伏脈沖信號(hào))。所以用了正負(fù)5V電源,然后好像IC就燒了(V+和V-導(dǎo)通了)。應(yīng)該是可以用正負(fù)電源的吧。還有就是8腳和14腳的shutdown腳是干什么的。是輸入信號(hào)還是輸出信號(hào)。
    發(fā)表于 08-28 07:57

    用TINA仿真LMH6505,TINA-TI如何導(dǎo)入SPICE模型?

    準(zhǔn)備用TINA仿真LMH6505,在官網(wǎng)上下載了LMH6505的PSPice Model。但是解壓后是.MOD文件。在網(wǎng)上沒(méi)找到如何導(dǎo)入,求大神指教。 1、工具菜單下的新建宏是干什么的,生成的TSM文件是用來(lái)仿真的嗎? 2、為什么TINA官網(wǎng)下的文件很多都是.LIB文件
    發(fā)表于 08-22 08:04

    浙江氣密性檢測(cè)設(shè)備主要是用來(lái)干什么的

    氣密性檢測(cè)設(shè)備主要用于檢測(cè)產(chǎn)品的密封性能,以確保產(chǎn)品的性能、安全或使用壽命不會(huì)受到泄漏或滲水的影響。具體而言,氣密性檢測(cè)設(shè)備的主要用途包括:(1)確保產(chǎn)品質(zhì)量:通過(guò)測(cè)試,我們可以判斷產(chǎn)品是否符合預(yù)期的密封性能要求,及時(shí)發(fā)現(xiàn)和消除生產(chǎn)過(guò)程中的泄漏問(wèn)題,防止不合格產(chǎn)品進(jìn)入市場(chǎng),從而確保產(chǎn)品質(zhì)量。(2)預(yù)防安全事故:對(duì)于一些特殊行業(yè),如新能源和醫(yī)療器械,產(chǎn)品泄漏可
    的頭像 發(fā)表于 08-20 14:05 ?499次閱讀
    浙江氣密性檢測(cè)設(shè)備主要是<b class='flag-5'>用來(lái)</b><b class='flag-5'>干什么的</b>

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

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