塊狀鏈表

介紹

有時(shí)候我們需要設(shè)計(jì)這樣一種數(shù)據(jù)結(jié)構(gòu):它能快速在要求位置插入或者刪除一段數(shù)據(jù)。先考慮兩種簡(jiǎn)單的數(shù)據(jù)結(jié)構(gòu):數(shù)組和鏈表。數(shù)組的優(yōu)點(diǎn)是能夠在O(1)的時(shí)間內(nèi)找到所要執(zhí)行操作的位置,但其缺點(diǎn)是無(wú)論是插入或刪除都要移動(dòng)之后的所有數(shù)據(jù),復(fù)雜度是O(n)的。鏈表優(yōu)點(diǎn)是能夠在O(1)的時(shí)間內(nèi)插入和刪除一段數(shù)據(jù),但缺點(diǎn)是在尋找操作位置時(shí),卻要遍歷整個(gè)鏈表,復(fù)雜度同樣時(shí)O(n)的。這兩種數(shù)據(jù)結(jié)構(gòu)各有優(yōu)缺點(diǎn),我們可以把數(shù)組和鏈表的優(yōu)點(diǎn)結(jié)合來(lái),這就構(gòu)成了一個(gè)新的數(shù)據(jù)結(jié)構(gòu):塊狀鏈表,結(jié)合數(shù)組和鏈表的優(yōu)缺點(diǎn)的塊狀鏈表其各種操作的時(shí)間復(fù)雜度均為O(sqrt(n))。
從總體上來(lái)看,維護(hù)一個(gè)鏈表,鏈表中的每個(gè)單元中包含一段數(shù)組,以及這個(gè)數(shù)組中的數(shù)據(jù)個(gè)數(shù)。每個(gè)鏈表中的數(shù)據(jù)連起來(lái)就是整個(gè)數(shù)據(jù)。設(shè)鏈表長(zhǎng)度為a,每個(gè)單元中的數(shù)組長(zhǎng)度是b。無(wú)論是插入或刪除,在尋址時(shí)要遍歷整個(gè)鏈表,復(fù)雜度是O(a); 對(duì)于插入和刪除操作,需要移動(dòng)數(shù)組的元素,所以總的復(fù)雜度是O(a+b)。因?yàn)閍b=n,取a=b=√n,則總的復(fù)雜度是O(√n)。
問(wèn)題是如何維護(hù)a和b大致等于√n?
在執(zhí)行插入操作后,如果當(dāng)前單元中的數(shù)據(jù)個(gè)數(shù)>2√n,則將當(dāng)前單元分割成兩個(gè)新單元,每個(gè)單元中的數(shù)據(jù)個(gè)數(shù)保持為√n。在執(zhí)行刪除操作后,如果當(dāng)前單元和當(dāng)前單元的下一個(gè)單元的數(shù)據(jù)個(gè)數(shù)和<√n,則將兩個(gè)單元合并成一個(gè)新單元。執(zhí)行上述維護(hù)操作需要移動(dòng)數(shù)組中的數(shù)據(jù),復(fù)雜度是O(b),對(duì)于單元的分割和合并均是O(1)的,總的復(fù)雜度是O(b)的。這樣,維護(hù)操作并不會(huì)使總復(fù)雜度增加。最終得到一個(gè)復(fù)雜度是O(√n)的數(shù)據(jù)結(jié)構(gòu)。

在STL中,deque內(nèi)部就是使用塊狀鏈表保證在首尾能夠快速插入。并能夠以索引的方式查找元素。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 1 序 2016年6月25日夜,帝都,天下著大雨,拖著行李箱和同學(xué)在校門口照了最后一張合照,搬離寢室打車去了提前租...
    RichardJieChen閱讀 5,377評(píng)論 0 12
  • 大學(xué)的時(shí)候不好好學(xué)習(xí),老師在講臺(tái)上講課,自己在以為老師看不到的座位看小說(shuō),現(xiàn)在用到了老師講的知識(shí),只能自己看書(shū)查資...
    和玨貓閱讀 1,552評(píng)論 1 3
  • 本文內(nèi)容取自于小甲魚(yú)的數(shù)據(jù)結(jié)構(gòu)與算法。http://www.itdecent.cn/p/230e6fde9c75 ...
    阿阿阿阿毛閱讀 3,094評(píng)論 0 7
  • 煙灰曾經(jīng)是火焰 燃燒過(guò)沸騰過(guò) 但此刻他們已安靜了 他們毫不張揚(yáng)的聚精會(huì)神的 等著下一次的乘風(fēng)而起 攜帶著全部的能量...
    沫小草閱讀 500評(píng)論 0 0
  • 高貴 世上有多少對(duì)與不對(duì), 愛(ài)恨交加的感情錯(cuò)覺(jué)。 裝得高貴的身心疲憊, 紳士般的按順序排隊(duì)。 人們所說(shuō)的品...
    生來(lái)彷徨ii閱讀 331評(píng)論 0 2

友情鏈接更多精彩內(nèi)容