成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

什么?跳表都不知道的你還敢去面 BAT!

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

[[434690]]

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

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

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

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

跳表1

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

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

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

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

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

跳表2

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

跳表2

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

跳表2

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

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

來看個查找邏輯吧:

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

當(dāng)不滿足時,跳表就會用到當(dāng)前查找到的結(jié)點的指針數(shù)組的下一層指針,然后沿著下一層指針繼續(xù)查找。

對于這種數(shù)據(jù)結(jié)構(gòu),我們需要從上往下依次查詢?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ù)字。

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

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

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

跳表1

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

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

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

有興趣想看推導(dǎo)的同學(xué)點個贊,點贊破100,咱寫波推導(dǎo)。(目前面試還沒卷到要證明跳表時間復(fù)雜度的程度,所以不知道咋推沒問題)

 

責(zé)任編輯:武曉燕 來源: 后端技術(shù)小牛說
相關(guān)推薦

2020-12-21 09:00:04

MySQL緩存SQL

2021-07-26 05:17:39

Linux PosixLinux 系統(tǒng)

2022-03-03 23:56:29

JavaScriptArityAnonymous

2020-06-12 09:20:33

前端Blob字符串

2020-07-28 08:26:34

WebSocket瀏覽器

2020-12-21 09:44:53

MySQL查詢緩存數(shù)據(jù)庫

2011-09-15 17:10:41

2009-12-10 09:37:43

2022-10-13 11:48:37

Web共享機制操作系統(tǒng)

2021-02-01 23:23:39

FiddlerCharlesWeb

2010-08-23 09:56:09

Java性能監(jiān)控

2022-11-04 08:19:18

gRPC框架項目

2020-09-15 08:35:57

TypeScript JavaScript類型

2020-07-29 09:53:09

VSCode編碼工具插件

2021-10-17 13:10:56

函數(shù)TypeScript泛型

2020-08-11 11:20:49

Linux命令使用技巧

2015-06-19 13:54:49

2021-12-22 09:08:39

JSON.stringJavaScript字符串

2021-12-29 11:38:59

JS前端沙箱

2012-11-23 10:57:44

Shell
點贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 免费在线观看黄视频 | 一区二区三区回区在观看免费视频 | 亚洲精品专区 | 日韩精品一区二区三区视频播放 | 在线精品亚洲欧美日韩国产 | 国产精品日韩 | 国产精品欧美一区二区三区不卡 | 羞羞视频在线观看 | 亚洲欧美日韩在线 | 成人免费看 | 国产精品成人一区二区 | 国产精品自拍一区 | 欧美日韩国产综合在线 | 免费看欧美一级片 | 欧美成人免费电影 | 99久久精品免费看国产小宝寻花 | 亚洲成人毛片 | 成人精品一区亚洲午夜久久久 | 久久国产精99精产国高潮 | 蜜桃特黄a∨片免费观看 | 日本黄色免费片 | 国产乱码精品一品二品 | 国产精品欧美一区二区 | 在线观看av网站永久 | 国产在线精品一区二区三区 | 亚洲成人免费av | 精品www | 国产精品日韩 | 日本成人免费观看 | 免费黄色av | 欧美亚洲激情 | 国产精品3区 | 在线一区视频 | 亚洲一区综合 | 国产黄色精品在线观看 | 成人欧美一区二区三区在线观看 | 久久久成人免费一区二区 | 色综合久久88色综合天天 | 99视频在线| 欧洲精品在线观看 | 婷婷综合色 |