大數據筆記-外存算法


4.1外存存儲結構與外存算法

分層存儲:

做法

可擴展性問題:若程序分散地訪問磁盤上的數據,即使是好的操作系統也無法利用數據塊存取優勢

基本界限:

隊列和堆棧:

4.2外存算法示例:外存排序算法

算法的分析1:(多路歸並)

M/B路

以塊為單位進行調度

1.首先從磁盤里把磁盤塊放進內存,在內存中進行排序,每次放M/B塊,一共放N/B塊。做完后,外存中已經是在大小為M/B的區域里、分別排好序的數據。再分別取M/B-1個這些區域的第一個元素,放入內存中。

2.在內存中,將M/B-1塊用於磁盤塊的歸並,剩余的一塊用作緩存

do{

  step1.[取出]M/B-1塊中最小的數據,放於緩存中

  step2.(用於緩存的磁盤塊未滿,step1)||(緩存滿后,寫出到外存,清空緩存)||(前M/B-1個磁盤塊中的數據被取完,加載相應區域的下一個磁盤塊)

}while(將所有的磁盤塊中的數據都進行了排序)

疑問:如果step1中,排序磁盤塊的次數大於M/B-1,那么歸並排序時應該怎么做?

(演示的例子里,在內存中排序磁盤塊的次數=M/B-1=3)

 

循環停止條件:(k-1代表第k輪)

算法分析2:(快排)

根號(M/B)路

 

M=8,N=24,B=2

(8,16是選擇的分點,buffer磁盤塊的大小為B,buffer滿了以后,將里面的數據寫到外存)

此時,寫出到外存的三個區域的元素還沒進行排序,但是大小已經可以放進內存,接下來將數據放進內存進行排序。若大小仍不能放進內存,則繼續上述做法,直到數據塊的大小可以放進內存。

復雜度分析:

划分停止條件:

計算分割元素:

存在的問題:

解決方法:

改進的算法的步驟:

從而得到每一路歸並的元素上限。

 

算法復雜性分析:

其中,步驟二經過根號(M/B)次抽取分割元素,在4N/根號(M/B)的數據(第一次的抽樣的結果)內抽取

總結:

它們都是最優的。

 

4.3外存數據結構示例:外存查找樹

內存查找樹:

外存查找樹:

外部搜索樹:

存在的問題:使用紅黑樹維護BFS塊

5.1B樹

B樹上的查詢:

為符合需求,B樹應該滿足的性質:

(a,b)樹

“所有的葉子在同一層並且包括a到b個元素”:葉子節點的磁盤塊的數量為[a,b]

對(a,b)樹進行分析:

(a,b)樹中的操作

  插入:

  

 

  刪除:

注:若最后合並影響了根節點,使根節點的兒子小於a,此時根節點是不變的(參考上文對根節點數量的定義)。然而,若根節點只有一個兒子,則把根節點給刪了

B樹的結論:

5.2KD樹

 

查詢:

kdB-樹

kdB-樹的構建:

改進:

復雜度:

動態地改進:

  插入

  

  刪除

  

kdB-樹總結:

6.1 表排序及其應用

表排序(List Ranking)

表排序的困難之處:

一種高效的表排序算法:

分析:

目標:對給定的樹T,以表L表示,進而讓對T的每一種計算可用對L的一種rank來完成

 歐拉回路技術:

 

 應用場景:

1.父子關系判定

2.計算前序計數

3.計算子樹大小

 

6.2時間前向處理方法

將圖問題表示為有向無環圖的估值問題

 

 

處理過程:

 

......

測試:

求最大獨立集MIS(貪心法,不一定求得最優解):

(1的入度為0,在I中,選取后面的節點時,若其父親節點在I中,則該節點不能加入I中):

 

6.3縮圖法

即把大的圖縮到內存中

求連通性->半外存算法:結點在內存中,邊在外存中

算法分析:

M(memory)

|V|>M:  

  

  

 

  

  算法復雜度分析:

  

應用:最小生成樹

時間復雜度分析:

 

 另一種圖算法技術:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM