資料結構基礎筆記(二)【嚴蔚敏】,資料結構嚴蔚敏

來源:互聯網
上載者:User

資料結構基礎筆記(二)【嚴蔚敏】,資料結構嚴蔚敏
動態儲存裝置管理:夥伴系統分配記憶體演算法思想:

當程式提出大小為n的記憶體配置請求時,首先在可利用表中尋找大小與n相匹配的子表.
◆ 若存在2^(k-1)< n ≤ 2^k-1的空閑子表結點:則將子表中的任意一個結點分配之;
◆ 若不存在2^(k-1) < n ≤ 2^k-1的空閑子表結點:則從結點大小為2^k的子表中找到一個空閑結點,將其中一半分配給程式,剩餘的一半插入到結點大小為2k-1的子表中。

註:在進行大小為n(2^(k-i-1) < n ≤ 2^(k-i)-1,i=1,2,…,k-1) 的記憶體配置請求時,若所有小於2^k的子表均為空白(沒有空閑結點),則同樣需要從大小為2^k的子表中找到一個空閑結點,將其中2^(k-i)一小部分分配給使用者,而將剩餘部分分割成若干個結點分別插入對應的子表。

回收演算法:

當程式釋放所佔用的塊時,系統將該新的空閑塊插入到可利用空閑表中,需要考慮合并成大塊問題。在夥伴系統中,只有“互為夥伴”的兩個子塊均空閑時才合并;即使有兩個相鄰且大小相同的空閑塊,如果不是“互為夥伴” (從同一個大塊中分裂出來的)也不合并。

平衡二叉樹

設深度為h的平衡二叉排序樹所具有的最少結點數為Nh,則由平衡二叉排序樹的性質知:
N0=0,N1=1,N2=2,… ,Nh= Nh-1+Nh-2

索引尋找:B樹

平衡二叉排序樹便於動態尋找,因此用平衡二叉排序樹來組織索引表是一種可行的選擇。當用於大型資料庫時,所有資料及索引都儲存在外存,因此,涉及到內、外存之間頻繁的資料交換,這種交換速度的快慢成為制約動態尋找的瓶頸。若以二叉樹的結點作為內、外存之間資料交換單位,則尋找給定關鍵字時對磁碟平均進行㏒2n次訪問是不能容忍的,因此,必須選擇一種能儘可能降低磁碟I/O次數的索引組織方式。樹結點的大小儘可能地接近頁的大小。
B_樹主要用於檔案系統中,在B_樹中,每個結點的大小為一個磁碟頁,結點中所包含的關鍵字及其孩子的數目取決於頁的大小。一棵度為m的B_樹稱為m階B_樹
一棵m階B_樹,或者是空樹,或者是滿足以下性質的m叉樹:
⑴ 根結點或者是葉子,或者至少有兩棵子樹,至多有m棵子樹;
⑵ 除根結點外,所有非終端結點至少有m/2【向上取整】棵子樹,至多有m棵子樹;
⑶ 所有葉子結點都在樹的同一層上;
設n是結點中關鍵字的個數,且m/2【取下限】-1≤n≤m-1,n+1為子樹的棵數。

  • B樹刪除
    在B_樹上刪除一個關鍵字K,首先找到關鍵字所在的結點N,然後在N中進行關鍵字K的刪除操作。
    1). 若N不是葉子結點,設K是N中的第i個關鍵字,則將指標Ai-1所指子樹中的最大關鍵字(或最小關鍵字)K’放在(K)的位置,然後刪除K’,而K’一定在葉子結點上。9-15(b),刪除關鍵字h,用關鍵字g代替h的位置,然後再從葉子結點中刪除關鍵字g。
    2). 從葉子結點中刪除一個關鍵字的情況是:
    ⑴ 若結點N中的關鍵字個數>m/2-1【取上限】:在結點中直接刪除關鍵字K;
    ⑵ 若結點N中的關鍵字個數=m/2-1【取上限】:若結點N的左(右)兄弟結點中的關鍵字個數>m/2-1【取上限】,則將結點N的左(或右)兄弟結點中的最大(或最小)關鍵字上移到其父結點中,而父結點中大於(或小於)且緊靠上移關鍵字的關鍵字下移到結點N;
    ⑶ 若結點N和其兄弟結點中的關鍵字數=m/2-1【取上限】:刪除結點N中的關鍵字,再將結點N中的關鍵字、指標與其兄弟結點以及分割二者的父結點中的某個關鍵字Ki,合并為一個結點,若因此使父結點中的關鍵字個數
B+樹

在實際的檔案系統中,基本上不使用B_樹,而是使用B_樹的一種變體,稱為m階B+樹。 它與B_樹的主要不同是葉子結點中儲存記錄。在B+樹中,所有的非葉子結點可以看成是索引,而其中的關鍵字是作為“分界關鍵字”,用來界定某一關鍵字的記錄所在的子樹。一棵m階B+樹與m階B_樹的主要差異是:
⑴ 若一個結點有n棵子樹,則必含有n個關鍵字;
⑵ 所有葉子結點中包含了全部記錄的關鍵字資訊以及這些關鍵字記錄的指標,而且葉子結點按關鍵字的大小從小到大順序連結;
⑶ 所有的非葉子結點可以看成是索引的部分,結點中只含有其子樹的根結點中的最大(或最小)關鍵字。
與B_樹相比,對B+樹不僅可以從根結點開始按關鍵字隨機尋找,而且可以從最小關鍵字起,按葉子結點的連結順序進行順序尋找。在B+樹上進行隨機尋找、插入、刪除的過程基本上和B_樹類似。
在B+樹上進行隨機尋找時,若非葉子結點的關鍵字等於給定的K值,並不終止,而是繼續向下直到葉子結點(只有葉子結點才儲存記錄) , 即無論尋找成功與否,都走了一條從根結點到葉子結點的路徑。
B+樹的插入僅僅在葉子結點上進行。當葉子結點中的關鍵字個數大於m時,“分裂”為兩個結點,兩個結點中所含有的關鍵字個數分別是(m+1)/2【取下限】和 (m+1)/2【取上限】 ,且將這兩個結點中的最大關鍵字提升到父結點中,用來替代原結點在父結點中所對應的關鍵字。提升後父結點又可能會分裂,依次類推。

著作權聲明:本文為博主原創文章,未經博主允許不得轉載。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.