大数据笔记-外存算法
4.1外存存儲(chǔ)結(jié)構(gòu)與外存算法:
分層存儲(chǔ):
做法:
可擴(kuò)展性問題:若程序分散地訪問磁盤上的數(shù)據(jù),即使是好的操作系統(tǒng)也無法利用數(shù)據(jù)塊存取優(yōu)勢(shì)
基本界限:
、
隊(duì)列和堆棧:
4.2外存算法示例:外存排序算法
算法的分析1:(多路歸并)
M/B路
以塊為單位進(jìn)行調(diào)度
1.首先從磁盤里把磁盤塊放進(jìn)內(nèi)存,在內(nèi)存中進(jìn)行排序,每次放M/B塊,一共放N/B塊。做完后,外存中已經(jīng)是在大小為M/B的區(qū)域里、分別排好序的數(shù)據(jù)。再分別取M/B-1個(gè)這些區(qū)域的第一個(gè)元素,放入內(nèi)存中。
2.在內(nèi)存中,將M/B-1塊用于磁盤塊的歸并,剩余的一塊用作緩存
do{
step1.[取出]M/B-1塊中最小的數(shù)據(jù),放于緩存中
step2.(用于緩存的磁盤塊未滿,step1)||(緩存滿后,寫出到外存,清空緩存)||(前M/B-1個(gè)磁盤塊中的數(shù)據(jù)被取完,加載相應(yīng)區(qū)域的下一個(gè)磁盤塊)
}while(將所有的磁盤塊中的數(shù)據(jù)都進(jìn)行了排序)
疑問:如果step1中,排序磁盤塊的次數(shù)大于M/B-1,那么歸并排序時(shí)應(yīng)該怎么做?
(演示的例子里,在內(nèi)存中排序磁盤塊的次數(shù)=M/B-1=3)
循環(huán)停止條件:(k-1代表第k輪)
算法分析2:(快排)
根號(hào)(M/B)路
M=8,N=24,B=2
(8,16是選擇的分點(diǎn),buffer磁盤塊的大小為B,buffer滿了以后,將里面的數(shù)據(jù)寫到外存)
此時(shí),寫出到外存的三個(gè)區(qū)域的元素還沒進(jìn)行排序,但是大小已經(jīng)可以放進(jìn)內(nèi)存,接下來將數(shù)據(jù)放進(jìn)內(nèi)存進(jìn)行排序。若大小仍不能放進(jìn)內(nèi)存,則繼續(xù)上述做法,直到數(shù)據(jù)塊的大小可以放進(jìn)內(nèi)存。
復(fù)雜度分析:
劃分停止條件:
計(jì)算分割元素:
存在的問題:
解決方法:
改進(jìn)的算法的步驟:
從而得到每一路歸并的元素上限。
算法復(fù)雜性分析:
其中,步驟二經(jīng)過根號(hào)(M/B)次抽取分割元素,在4N/根號(hào)(M/B)的數(shù)據(jù)(第一次的抽樣的結(jié)果)內(nèi)抽取
總結(jié):
它們都是最優(yōu)的。
4.3外存數(shù)據(jù)結(jié)構(gòu)示例:外存查找樹
內(nèi)存查找樹:
外存查找樹:
外部搜索樹:
存在的問題:使用紅黑樹維護(hù)BFS塊
5.1B樹:
B樹上的查詢:
為符合需求,B樹應(yīng)該滿足的性質(zhì):
(a,b)樹:
“所有的葉子在同一層并且包括a到b個(gè)元素”:葉子節(jié)點(diǎn)的磁盤塊的數(shù)量為[a,b]
對(duì)(a,b)樹進(jìn)行分析:
(a,b)樹中的操作:
插入:
刪除:
注:若最后合并影響了根節(jié)點(diǎn),使根節(jié)點(diǎn)的兒子小于a,此時(shí)根節(jié)點(diǎn)是不變的(參考上文對(duì)根節(jié)點(diǎn)數(shù)量的定義)。然而,若根節(jié)點(diǎn)只有一個(gè)兒子,則把根節(jié)點(diǎn)給刪了
B樹的結(jié)論:
5.2KD樹
查詢:
kdB-樹:
kdB-樹的構(gòu)建:
改進(jìn):
復(fù)雜度:
動(dòng)態(tài)地改進(jìn):
插入:
刪除:
kdB-樹總結(jié):
6.1 表排序及其應(yīng)用
表排序(List Ranking)
表排序的困難之處:
一種高效的表排序算法:
分析:
目標(biāo):對(duì)給定的樹T,以表L表示,進(jìn)而讓對(duì)T的每一種計(jì)算可用對(duì)L的一種rank來完成
歐拉回路技術(shù):
應(yīng)用場(chǎng)景:
1.父子關(guān)系判定:
2.計(jì)算前序計(jì)數(shù):
3.計(jì)算子樹大?。?/p>
6.2時(shí)間前向處理方法:
將圖問題表示為有向無環(huán)圖的估值問題
處理過程:
......
測(cè)試:
求最大獨(dú)立集MIS(貪心法,不一定求得最優(yōu)解):
(1的入度為0,在I中,選取后面的節(jié)點(diǎn)時(shí),若其父親節(jié)點(diǎn)在I中,則該節(jié)點(diǎn)不能加入I中):
6.3縮圖法:
即把大的圖縮到內(nèi)存中
求連通性->半外存算法:結(jié)點(diǎn)在內(nèi)存中,邊在外存中
算法分析:
M(memory)
若|V|>M:
算法復(fù)雜度分析:
應(yīng)用:最小生成樹
時(shí)間復(fù)雜度分析:
另一種圖算法技術(shù):
總結(jié)
以上是生活随笔為你收集整理的大数据笔记-外存算法的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: EXCEL中,将十六进制转换为十进制
- 下一篇: 通用中间语言(CIL)