數(shù)據(jù)結(jié)構(gòu)課程的內(nèi)容1ppt課件_第1頁(yè)
數(shù)據(jù)結(jié)構(gòu)課程的內(nèi)容1ppt課件_第2頁(yè)
數(shù)據(jù)結(jié)構(gòu)課程的內(nèi)容1ppt課件_第3頁(yè)
數(shù)據(jù)結(jié)構(gòu)課程的內(nèi)容1ppt課件_第4頁(yè)
數(shù)據(jù)結(jié)構(gòu)課程的內(nèi)容1ppt課件_第5頁(yè)
已閱讀5頁(yè),還剩23頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、8.1 8.1 根本概念根本概念8.2 8.2 靜態(tài)查找表靜態(tài)查找表8.3 8.3 動(dòng)態(tài)查找表動(dòng)態(tài)查找表8.4 8.4 哈希表哈希表教材第教材第8 8、1111和和1212章省略,因章省略,因 課程會(huì)涉及。課程會(huì)涉及。假設(shè)表中存在特定元素,稱(chēng)查找勝利,應(yīng)輸出假設(shè)表中存在特定元素,稱(chēng)查找勝利,應(yīng)輸出該記錄;該記錄;否那么,稱(chēng)查找不勝利也應(yīng)輸出失敗標(biāo)志或否那么,稱(chēng)查找不勝利也應(yīng)輸出失敗標(biāo)志或失敗位置失敗位置查找表查找表 查查 找找查找勝利查找勝利查找不勝利查找不勝利靜態(tài)查找靜態(tài)查找動(dòng)態(tài)查找動(dòng)態(tài)查找關(guān)鍵字關(guān)鍵字主關(guān)鍵字主關(guān)鍵字次關(guān)鍵字次關(guān)鍵字由同一類(lèi)型的數(shù)據(jù)元素或記錄構(gòu)成的集合。由同一類(lèi)型的數(shù)據(jù)元素

2、或記錄構(gòu)成的集合。查詢(xún)查詢(xún)(Searching)特定元素能否在表中。特定元素能否在表中。只查找,不改動(dòng)集合內(nèi)的數(shù)據(jù)元素。只查找,不改動(dòng)集合內(nèi)的數(shù)據(jù)元素。既查找,又改動(dòng)集合內(nèi)的數(shù)據(jù)元素。既查找,又改動(dòng)集合內(nèi)的數(shù)據(jù)元素。記錄中某個(gè)數(shù)據(jù)項(xiàng)的值,可用來(lái)識(shí)別一個(gè)記錄記錄中某個(gè)數(shù)據(jù)項(xiàng)的值,可用來(lái)識(shí)別一個(gè)記錄 ( 預(yù)先確定的記錄的某種標(biāo)志預(yù)先確定的記錄的某種標(biāo)志 ) 可以獨(dú)一標(biāo)識(shí)一個(gè)記錄的關(guān)鍵字可以獨(dú)一標(biāo)識(shí)一個(gè)記錄的關(guān)鍵字例如例如“學(xué)號(hào)學(xué)號(hào)例如例如“女女是一種數(shù)據(jù)構(gòu)造是一種數(shù)據(jù)構(gòu)造識(shí)別假設(shè)干記錄的關(guān)鍵識(shí)別假設(shè)干記錄的關(guān)鍵字字2對(duì)查找表常用的操作有哪些?對(duì)查找表常用的操作有哪些? 查詢(xún)某個(gè)查詢(xún)某個(gè)“特定的數(shù)據(jù)

3、元素能否在表中;特定的數(shù)據(jù)元素能否在表中;查詢(xún)某個(gè)查詢(xún)某個(gè)“特定的數(shù)據(jù)元素的各種屬性;特定的數(shù)據(jù)元素的各種屬性;在查找表中插入一元素;在查找表中插入一元素;從查找表中刪除一元素。從查找表中刪除一元素。 3) 有哪些查找方法?有哪些查找方法? 查找方法取決于表中數(shù)據(jù)的陳列方式查找方法取決于表中數(shù)據(jù)的陳列方式;1查找的過(guò)程是怎樣的?查找的過(guò)程是怎樣的? 給定一個(gè)值給定一個(gè)值K,在含有,在含有n個(gè)記錄的文件中進(jìn)展搜索,個(gè)記錄的文件中進(jìn)展搜索,尋覓一個(gè)關(guān)鍵字值等于尋覓一個(gè)關(guān)鍵字值等于K的記錄,如找到那么輸出的記錄,如找到那么輸出該記錄,否那么輸出查找不勝利的信息。該記錄,否那么輸出查找不勝利的信息。例

4、如查字典例如查字典針對(duì)靜態(tài)查找表和動(dòng)態(tài)查找表的查找方法也有所不同。針對(duì)靜態(tài)查找表和動(dòng)態(tài)查找表的查找方法也有所不同。“特定的特定的=關(guān)鍵關(guān)鍵字字明確:查找的過(guò)程就是將給定的明確:查找的過(guò)程就是將給定的K值與文件中各記錄的關(guān)鍵字值與文件中各記錄的關(guān)鍵字項(xiàng)進(jìn)展比較的過(guò)程。所以用比較次數(shù)的平均值來(lái)評(píng)價(jià)算法的優(yōu)項(xiàng)進(jìn)展比較的過(guò)程。所以用比較次數(shù)的平均值來(lái)評(píng)價(jià)算法的優(yōu)劣。稱(chēng)為平均查找長(zhǎng)度劣。稱(chēng)為平均查找長(zhǎng)度ASL:average search length。其中:其中:n是文件記錄個(gè)數(shù);是文件記錄個(gè)數(shù);Pi是查找第是查找第i個(gè)記錄的查找概率通常取等概率個(gè)記錄的查找概率通常取等概率,即即Pi =1/n;Ci是

5、找到第是找到第i個(gè)記錄時(shí)所閱歷的比較次數(shù)。個(gè)記錄時(shí)所閱歷的比較次數(shù)。統(tǒng)計(jì)意義上的統(tǒng)計(jì)意義上的數(shù)學(xué)期望值數(shù)學(xué)期望值物理意義:假設(shè)每一元素被查找的概率一樣,那么查找物理意義:假設(shè)每一元素被查找的概率一樣,那么查找每一元素所需的比較次數(shù)之總和再取平均,即為每一元素所需的比較次數(shù)之總和再取平均,即為ASL。顯然,顯然,ASLASL值越小,時(shí)間效率越高。值越小,時(shí)間效率越高。 針對(duì)靜態(tài)查找表的查找算法主要有:針對(duì)靜態(tài)查找表的查找算法主要有: 靜態(tài)查找表的籠統(tǒng)數(shù)據(jù)類(lèi)型參見(jiàn)教材靜態(tài)查找表的籠統(tǒng)數(shù)據(jù)類(lèi)型參見(jiàn)教材P216。一、順序查找線性查找一、順序查找線性查找二、折半查找二分或?qū)Ψ植檎叶⒄郯氩檎叶只驅(qū)Ψ植?/p>

6、找三、靜態(tài)樹(shù)表的查找三、靜態(tài)樹(shù)表的查找四、分塊查找索引順序查找四、分塊查找索引順序查找1順序表的機(jī)內(nèi)存儲(chǔ)構(gòu)造:順序表的機(jī)內(nèi)存儲(chǔ)構(gòu)造:typedef struct ElemType *elem; /表基址,表基址,0號(hào)單元留空。表容量為全號(hào)單元留空。表容量為全部元素部元素 int length; /表長(zhǎng),即表中數(shù)據(jù)元素個(gè)數(shù)表長(zhǎng),即表中數(shù)據(jù)元素個(gè)數(shù)SSTable;順序查找:即用逐一比較的方法順序查找關(guān)鍵字,這顯然是最順序查找:即用逐一比較的方法順序查找關(guān)鍵字,這顯然是最直接的方法。直接的方法。 對(duì)順序構(gòu)造如何線性查找?見(jiàn)下頁(yè)之例或教材對(duì)順序構(gòu)造如何線性查找?見(jiàn)下頁(yè)之例或教材P216;對(duì)單鏈表構(gòu)造如

7、何線性查找?函數(shù)雖未給出,但也很容易編寫(xiě);對(duì)單鏈表構(gòu)造如何線性查找?函數(shù)雖未給出,但也很容易編寫(xiě);只需知道頭指針只需知道頭指針head就可以就可以“順藤摸瓜;順藤摸瓜;對(duì)非線性樹(shù)構(gòu)造如何順序查找對(duì)非線性樹(shù)構(gòu)造如何順序查找?可借助各種遍歷操作!可借助各種遍歷操作!技巧:把待查關(guān)鍵字技巧:把待查關(guān)鍵字key存入表頭或表尾俗稱(chēng)存入表頭或表尾俗稱(chēng)“哨兵,哨兵,這樣可以加快執(zhí)行速度。這樣可以加快執(zhí)行速度。例:例:假設(shè)將待查找的特定值假設(shè)將待查找的特定值keykey存入順序表的首部如存入順序表的首部如0 0號(hào)單號(hào)單元,那么順序查找的實(shí)現(xiàn)方案為:從后向前逐個(gè)比較!元,那么順序查找的實(shí)現(xiàn)方案為:從后向前逐個(gè)比

8、較!int Search_Seq( SSTable ST , KeyType key ) /在順序表在順序表ST中,查找關(guān)鍵字與中,查找關(guān)鍵字與key一樣的元素;一樣的元素;假設(shè)勝利,前往其位置信息,否那么前往假設(shè)勝利,前往其位置信息,否那么前往0 ST.elem0.key =key; /設(shè)立哨兵,可免去查找過(guò)設(shè)立哨兵,可免去查找過(guò)程中每一步都要檢測(cè)能否查找終了。當(dāng)程中每一步都要檢測(cè)能否查找終了。當(dāng)n1000時(shí),查找時(shí)間將減少一半。時(shí),查找時(shí)間將減少一半。 for( i=ST.length; ST.elem i .key!=key; - - i ); /不要用不要用for(i=n; i0; -

9、 -i) 或或 for(i=1; i=n; i+) return i; /假設(shè)到達(dá)假設(shè)到達(dá)0號(hào)單元才終了循環(huán),闡明不號(hào)單元才終了循環(huán),闡明不勝利,前往勝利,前往0值值(i=0)。勝利時(shí)那么前往找到的那。勝利時(shí)那么前往找到的那個(gè)元素的位置個(gè)元素的位置i。 / Search_Seq前往特殊標(biāo)志,例如前往空記錄或空指針。前例中設(shè)立前往特殊標(biāo)志,例如前往空記錄或空指針。前例中設(shè)立了了“哨兵,就是將關(guān)鍵字送入末地址哨兵,就是將關(guān)鍵字送入末地址ST.elem0.key使之終了使之終了并前往并前往 i=0。討論討論 查找效率怎樣計(jì)算?查找效率怎樣計(jì)算?用平均查找長(zhǎng)度用平均查找長(zhǎng)度ASL衡量。衡量。討論討論

10、如何計(jì)算如何計(jì)算ASL?分析:分析:查找第查找第1個(gè)元素所需的比較次數(shù)為個(gè)元素所需的比較次數(shù)為1;查找第查找第2個(gè)元素所需的比較次數(shù)為個(gè)元素所需的比較次數(shù)為2;查找第查找第n個(gè)元素所需的比較次數(shù)為個(gè)元素所需的比較次數(shù)為n;總計(jì)全部比較次數(shù)為:總計(jì)全部比較次數(shù)為:12n = (1+n)n/2未思索查找不勝利的未思索查找不勝利的情況:查找哨兵所需情況:查找哨兵所需的比較次數(shù)為的比較次數(shù)為n+1n+1這是查找勝利的情況這是查找勝利的情況假設(shè)求某一個(gè)元素的平均查找次數(shù),還該當(dāng)除以假設(shè)求某一個(gè)元素的平均查找次數(shù),還該當(dāng)除以n等概等概率,率,即:即: ASL1n/2 ,時(shí)間效率為,時(shí)間效率為 O(n)思索

11、不勝利的計(jì)算思索不勝利的計(jì)算優(yōu)點(diǎn):算法簡(jiǎn)單,且對(duì)順序構(gòu)造或鏈表構(gòu)造均適用。優(yōu)點(diǎn):算法簡(jiǎn)單,且對(duì)順序構(gòu)造或鏈表構(gòu)造均適用。缺陷:缺陷: ASL 太長(zhǎng),時(shí)間效率太低。太長(zhǎng),時(shí)間效率太低。這是一種容易想到的查找方法。這是一種容易想到的查找方法。先給數(shù)據(jù)排序例如按升序排好,構(gòu)成有序表,然后再將先給數(shù)據(jù)排序例如按升序排好,構(gòu)成有序表,然后再將key與正中元素相比,假設(shè)與正中元素相比,假設(shè)key小,那么減少至左半部?jī)?nèi)查找;再取小,那么減少至左半部?jī)?nèi)查找;再取其中值比較,每次減少其中值比較,每次減少1/2的范圍,直到查找勝利或失敗為止。的范圍,直到查找勝利或失敗為止。v 對(duì)順序表構(gòu)造如何編程實(shí)現(xiàn)折半查找算法

12、?對(duì)順序表構(gòu)造如何編程實(shí)現(xiàn)折半查找算法? v 見(jiàn)下頁(yè)之例,或見(jiàn)教材見(jiàn)下頁(yè)之例,或見(jiàn)教材P219v 對(duì)單鏈表構(gòu)造如何折半查找?對(duì)單鏈表構(gòu)造如何折半查找?v 無(wú)法實(shí)現(xiàn)!因全部元素的定位只能從頭指針無(wú)法實(shí)現(xiàn)!因全部元素的定位只能從頭指針head開(kāi)場(chǎng)開(kāi)場(chǎng)v 對(duì)非線性對(duì)非線性(樹(shù)樹(shù))構(gòu)造如何折半查找?構(gòu)造如何折半查找?v 可借助二叉排序樹(shù)來(lái)查找屬動(dòng)態(tài)查找表方式??山柚媾判驑?shù)來(lái)查找屬動(dòng)態(tài)查找表方式。 如何改良?如何改良?討論討論 順序查找的特點(diǎn):順序查找的特點(diǎn): 運(yùn)算步驟:運(yùn)算步驟:(1) low =1,high =11 ,mid =6 (1) low =1,high =11 ,mid =6 ,待查范

13、圍是,待查范圍是 1,11 1,11;(2) (2) 假設(shè)假設(shè) ST.elemmid.key key ST.elemmid.key key ST.elemmid.key key,闡明,闡明keykeylow ,mid-low ,mid-11, 那么令:那么令:high =mid1;high =mid1;重算重算 mid mid ;(4)(4)假設(shè)假設(shè) ST.elem mid .key = key ST.elem mid .key = key,闡明查找勝利,元素,闡明查找勝利,元素序號(hào)序號(hào)=mid;=mid;終了條件:終了條件: 1 1查找勝利查找勝利 : ST.elemmid.key = ke

14、y ST.elemmid.key = key 2 2查找不勝利查找不勝利 : highlow highlow 意即區(qū)間長(zhǎng)意即區(qū)間長(zhǎng)度小于度小于0 0解:解: 先設(shè)定先設(shè)定3個(gè)輔助標(biāo)志個(gè)輔助標(biāo)志: low,high,mid,LowLow指向待查元素指向待查元素所在區(qū)間的下界所在區(qū)間的下界highhigh指向待查元素所指向待查元素所在區(qū)間的上界在區(qū)間的上界midmid指向待查元素所在指向待查元素所在區(qū)間的中間位置區(qū)間的中間位置 知如下知如下11個(gè)元素的有序表:個(gè)元素的有序表:05 13 19 21 37 56 64 75 80 88 92, 請(qǐng)查找關(guān)鍵字為請(qǐng)查找關(guān)鍵字為21 和和85的數(shù)據(jù)元素。的

15、數(shù)據(jù)元素。顯然有:顯然有:mid= mid= (low+high)/2(low+high)/2 mjjj112典型標(biāo)志是:當(dāng)查找范圍的上界典型標(biāo)志是:當(dāng)查找范圍的上界下界時(shí)停頓查找。下界時(shí)停頓查找。討論討論 二分查找的效率二分查找的效率ASLASL1次比較就查找勝利的元素有次比較就查找勝利的元素有1個(gè)個(gè)20,即中間值;,即中間值;2次比較就查找勝利的元素有次比較就查找勝利的元素有2個(gè)個(gè)21,即,即1/4處或處或3/4處;處;3次比較就查找勝利的元素有次比較就查找勝利的元素有4個(gè)個(gè)22,即,即1/8處或處或3/8處處 4次比較就查找勝利的元素有次比較就查找勝利的元素有8個(gè)個(gè)23,即,即1/16處

16、或處或3/16處處 那么第那么第m次比較時(shí)查找勝利的元素會(huì)有次比較時(shí)查找勝利的元素會(huì)有2m-1個(gè);個(gè);為方便起見(jiàn),假設(shè)表中全部為方便起見(jiàn),假設(shè)表中全部n個(gè)元素個(gè)元素 2m-1個(gè),此時(shí)就不討論第個(gè),此時(shí)就不討論第m次比較后還有剩余元素的情況了。次比較后還有剩余元素的情況了。全部比較總次數(shù)為全部比較總次數(shù)為120221322423m2m1 推推導(dǎo)導(dǎo)過(guò)過(guò)程程詳細(xì)推導(dǎo)過(guò)程見(jiàn)教材詳細(xì)推導(dǎo)過(guò)程見(jiàn)教材P221的附錄的附錄課堂練習(xí)多項(xiàng)選擇:課堂練習(xí)多項(xiàng)選擇:采用鏈?zhǔn)酱尜A構(gòu)造采用鏈?zhǔn)酱尜A構(gòu)造 記錄的長(zhǎng)度記錄的長(zhǎng)度128 采用順序存貯構(gòu)造采用順序存貯構(gòu)造 記錄按關(guān)鍵字遞增有序記錄按關(guān)鍵字遞增有序nnnnjnASL

17、mjj2211log1) 1(log121運(yùn)用折半查找算法時(shí),要求被查文件:運(yùn)用折半查找算法時(shí),要求被查文件:思索:假設(shè)在有序線性表思索:假設(shè)在有序線性表a20上進(jìn)展折半查上進(jìn)展折半查找,那么平均查找長(zhǎng)度為找,那么平均查找長(zhǎng)度為 。查找過(guò)程可用二叉樹(shù)描畫(huà):每個(gè)記錄用一個(gè)結(jié)點(diǎn)表示;結(jié)點(diǎn)中值為查找過(guò)程可用二叉樹(shù)描畫(huà):每個(gè)記錄用一個(gè)結(jié)點(diǎn)表示;結(jié)點(diǎn)中值為該記錄在表中位置,這個(gè)描畫(huà)查找過(guò)程的二叉樹(shù)稱(chēng)為斷定樹(shù)。該記錄在表中位置,這個(gè)描畫(huà)查找過(guò)程的二叉樹(shù)稱(chēng)為斷定樹(shù)。n個(gè)個(gè)元素的表的折半查找的斷定樹(shù)是獨(dú)一的,即:斷定樹(shù)由表中元素個(gè)元素的表的折半查找的斷定樹(shù)是獨(dú)一的,即:斷定樹(shù)由表中元素個(gè)數(shù)決議。數(shù)決議。 找到

18、有序表中任一記錄的過(guò)程就是:走了一條從根結(jié)點(diǎn)到與該記錄找到有序表中任一記錄的過(guò)程就是:走了一條從根結(jié)點(diǎn)到與該記錄相應(yīng)的結(jié)點(diǎn)的途徑。相應(yīng)的結(jié)點(diǎn)的途徑。 比較的關(guān)鍵字個(gè)數(shù):為該結(jié)點(diǎn)在斷定樹(shù)上的層次數(shù)。比較的關(guān)鍵字個(gè)數(shù):為該結(jié)點(diǎn)在斷定樹(shù)上的層次數(shù)。 查找勝利時(shí)比較的關(guān)鍵字個(gè)數(shù)最多不超越樹(shù)的深度查找勝利時(shí)比較的關(guān)鍵字個(gè)數(shù)最多不超越樹(shù)的深度 d : d = log2 n + 1 假設(shè)一切結(jié)點(diǎn)的空指針域設(shè)置為一個(gè)指向一個(gè)方形結(jié)點(diǎn)的指針,假設(shè)一切結(jié)點(diǎn)的空指針域設(shè)置為一個(gè)指向一個(gè)方形結(jié)點(diǎn)的指針,稱(chēng)方形結(jié)點(diǎn)為斷定樹(shù)的外部結(jié)點(diǎn);對(duì)應(yīng)的,圓形結(jié)點(diǎn)為內(nèi)部結(jié)點(diǎn)。稱(chēng)方形結(jié)點(diǎn)為斷定樹(shù)的外部結(jié)點(diǎn);對(duì)應(yīng)的,圓形結(jié)點(diǎn)為內(nèi)部結(jié)點(diǎn)。

19、 查找不勝利的過(guò)程查找不勝利的過(guò)程 就是走了一條從根結(jié)點(diǎn)到外部結(jié)點(diǎn)的途徑。就是走了一條從根結(jié)點(diǎn)到外部結(jié)點(diǎn)的途徑。做習(xí)題新建做習(xí)題新建 Microsoft Word 文檔文檔.doc討論討論2:當(dāng)有序表中各記錄的查找概率不相等時(shí),該如何查?:當(dāng)有序表中各記錄的查找概率不相等時(shí),該如何查?首先要明確,此時(shí)用折半查找法未必最優(yōu)!參見(jiàn)教材首先要明確,此時(shí)用折半查找法未必最優(yōu)!參見(jiàn)教材P222例例改良:假設(shè)將各記錄概率看作是二叉樹(shù)之權(quán)值,那么轉(zhuǎn)為研改良:假設(shè)將各記錄概率看作是二叉樹(shù)之權(quán)值,那么轉(zhuǎn)為研討帶權(quán)途徑長(zhǎng)度最小的二叉樹(shù)類(lèi)似最優(yōu)二叉樹(shù)。討帶權(quán)途徑長(zhǎng)度最小的二叉樹(shù)類(lèi)似最優(yōu)二叉樹(shù)。討論討論1:對(duì)有序表還

20、有其他查找算法嗎?:對(duì)有序表還有其他查找算法嗎?靜態(tài)最優(yōu)查找樹(shù)算法靜態(tài)最優(yōu)查找樹(shù)算法時(shí)間代價(jià)高;時(shí)間代價(jià)高;適用算法:近似最優(yōu)查找樹(shù)次優(yōu)查找樹(shù)適用算法:近似最優(yōu)查找樹(shù)次優(yōu)查找樹(shù) 參見(jiàn)教材參見(jiàn)教材P222225有,如斐波那契查找和插值查找等參見(jiàn)教材有,如斐波那契查找和插值查找等參見(jiàn)教材P221222這是一種順序查找的另一種改良方法。這是一種順序查找的另一種改良方法。先讓數(shù)據(jù)分塊有序,即分成假設(shè)干子表,要求每個(gè)子表中的先讓數(shù)據(jù)分塊有序,即分成假設(shè)干子表,要求每個(gè)子表中的數(shù)值用關(guān)鍵字更準(zhǔn)確都比后一塊中數(shù)值小但子表內(nèi)部未數(shù)值用關(guān)鍵字更準(zhǔn)確都比后一塊中數(shù)值小但子表內(nèi)部未必有序。必有序。然后將各子表中的最

21、大關(guān)鍵字構(gòu)成一個(gè)索引表,表中還要包然后將各子表中的最大關(guān)鍵字構(gòu)成一個(gè)索引表,表中還要包含每個(gè)子表的起始地址即頭指針。含每個(gè)子表的起始地址即頭指針。索引表索引表最大關(guān)鍵字起始地址第第1 1塊塊第第2 2塊塊第第3 3塊塊224886例:例:特點(diǎn):塊間有特點(diǎn):塊間有序,塊內(nèi)無(wú)序序,塊內(nèi)無(wú)序 對(duì)索引表運(yùn)用折半查找法由于索引表是有序表;對(duì)索引表運(yùn)用折半查找法由于索引表是有序表; 確定了待查關(guān)鍵字所在的子表后,在子表內(nèi)采用順序確定了待查關(guān)鍵字所在的子表后,在子表內(nèi)采用順序查找法由于各子表內(nèi)部是無(wú)序表;查找法由于各子表內(nèi)部是無(wú)序表;查找效率:查找效率:ASL=Lb+LwASL=Lb+Lw對(duì)索引表查找的對(duì)索

22、引表查找的ASL對(duì)塊內(nèi)查找的對(duì)塊內(nèi)查找的ASL)21(log2) 1(log22nASLnssnASLbsbsS為每塊內(nèi)部的記錄個(gè)數(shù),為每塊內(nèi)部的記錄個(gè)數(shù),n/s即塊的數(shù)目即塊的數(shù)目例如當(dāng)例如當(dāng)n=9n=9,s=3s=3時(shí),時(shí),ASLbs=3.5,ASLbs=3.5,而折半法為而折半法為3.1,3.1,順序法為順序法為5 5特點(diǎn):特點(diǎn):一、二叉排序樹(shù)的定義一、二叉排序樹(shù)的定義二、二叉排序樹(shù)的插入與刪除二、二叉排序樹(shù)的插入與刪除三、二叉排序樹(shù)的查找分析三、二叉排序樹(shù)的查找分析四、平衡二叉樹(shù)四、平衡二叉樹(shù)表構(gòu)造在查找過(guò)程中動(dòng)態(tài)生成。表構(gòu)造在查找過(guò)程中動(dòng)態(tài)生成。要求:要求: 對(duì)于給定值對(duì)于給定值ke

23、y,key,假設(shè)表中存在其關(guān)鍵字等于假設(shè)表中存在其關(guān)鍵字等于keykey的記錄,那么查找勝利的記錄,那么查找勝利前往;前往;否那么插入關(guān)鍵字等于否那么插入關(guān)鍵字等于key key 的記錄。的記錄。典型的動(dòng)態(tài)表典型的動(dòng)態(tài)表二叉排序樹(shù)二叉排序樹(shù)ab練:以下練:以下2種圖形中,哪個(gè)不是二叉排序樹(shù)種圖形中,哪個(gè)不是二叉排序樹(shù) ?-或是一棵空樹(shù);或者是具有如下性質(zhì)的非空二叉樹(shù):或是一棵空樹(shù);或者是具有如下性質(zhì)的非空二叉樹(shù): 1 1左子樹(shù)的一切結(jié)點(diǎn)均小于根的值;左子樹(shù)的一切結(jié)點(diǎn)均小于根的值; 2 2右子樹(shù)的一切結(jié)點(diǎn)均大于根的值;右子樹(shù)的一切結(jié)點(diǎn)均大于根的值; 3 3它的左右子樹(shù)也分別為二叉排序樹(shù)。它的左右

24、子樹(shù)也分別為二叉排序樹(shù)。將數(shù)據(jù)元素構(gòu)呵斥二叉排序樹(shù)的優(yōu)點(diǎn):將數(shù)據(jù)元素構(gòu)呵斥二叉排序樹(shù)的優(yōu)點(diǎn): 查找過(guò)程與順序構(gòu)造有序表中的折半查找類(lèi)似,查找效率高;查找過(guò)程與順序構(gòu)造有序表中的折半查找類(lèi)似,查找效率高; 中序遍歷此二叉樹(shù),將會(huì)得到一個(gè)關(guān)鍵字的有序序列即實(shí)現(xiàn)中序遍歷此二叉樹(shù),將會(huì)得到一個(gè)關(guān)鍵字的有序序列即實(shí)現(xiàn)了排序運(yùn)算;了排序運(yùn)算; 假設(shè)查找不勝利,可以方便地將被查元素插入到二叉樹(shù)的葉子假設(shè)查找不勝利,可以方便地將被查元素插入到二叉樹(shù)的葉子結(jié)點(diǎn)上,而且插入或刪除時(shí)只需修正指針而不需挪動(dòng)元素。結(jié)點(diǎn)上,而且插入或刪除時(shí)只需修正指針而不需挪動(dòng)元素。注:假設(shè)數(shù)據(jù)元素的輸入順序不同,那么得到的二叉排序樹(shù)注

25、:假設(shè)數(shù)據(jù)元素的輸入順序不同,那么得到的二叉排序樹(shù)形狀也不同!形狀也不同!這種既查找又插入的過(guò)程稱(chēng)為動(dòng)態(tài)查找。這種既查找又插入的過(guò)程稱(chēng)為動(dòng)態(tài)查找。二叉排序樹(shù)既有類(lèi)似于折半查找的特性,又采用了鏈表存儲(chǔ),二叉排序樹(shù)既有類(lèi)似于折半查找的特性,又采用了鏈表存儲(chǔ),它是動(dòng)態(tài)查找表的一種適宜表示。它是動(dòng)態(tài)查找表的一種適宜表示。45452424535312129090假設(shè)待查找的關(guān)鍵字序列輸入順序?yàn)椋杭僭O(shè)待查找的關(guān)鍵字序列輸入順序?yàn)椋?424,5353, 45 45,4545,1212,2424,9090,24245353454512129090查查找找勝勝利,利,前前往往查查找找勝勝利,利,前前往往那么生成

26、二叉排那么生成二叉排序樹(shù)的過(guò)程為:序樹(shù)的過(guò)程為:例:輸入待查找的關(guān)鍵字序列例:輸入待查找的關(guān)鍵字序列= =4545,2424,5353,4545,1212,2424,9090那么生成的二叉那么生成的二叉排序樹(shù)形狀不同:排序樹(shù)形狀不同:查查找找勝勝利,利,前前往往查查找找勝勝利,利,前前往往查找算法參見(jiàn)教材查找算法參見(jiàn)教材P228算法算法9.5a,b;插入算法參見(jiàn)教材插入算法參見(jiàn)教材P228算法算法9.6;對(duì)于二叉排序樹(shù),刪除樹(shù)上一個(gè)結(jié)點(diǎn)相當(dāng)于刪除有序序列中對(duì)于二叉排序樹(shù),刪除樹(shù)上一個(gè)結(jié)點(diǎn)相當(dāng)于刪除有序序列中的一個(gè)記錄,刪除后仍需堅(jiān)持二叉排序樹(shù)的特性。的一個(gè)記錄,刪除后仍需堅(jiān)持二叉排序樹(shù)的特性。

27、對(duì)鏈表進(jìn)展刪除操作是很方便的對(duì)鏈表進(jìn)展刪除操作是很方便的如何刪除一個(gè)結(jié)點(diǎn)?如何刪除一個(gè)結(jié)點(diǎn)?假設(shè):假設(shè):* *p p表示被刪結(jié)點(diǎn)的指針;表示被刪結(jié)點(diǎn)的指針; PLPL和和PR PR 分別表示分別表示* *P P的左、的左、右孩子指針;右孩子指針;* *f f表示表示* *p p的雙親結(jié)點(diǎn)指針;并假定的雙親結(jié)點(diǎn)指針;并假定* *p p是是* *f f的左孩子;那么能的左孩子;那么能夠有三種情況:夠有三種情況:PR PR 為為 * * S S 的右子樹(shù);的右子樹(shù); SL SL 為為 Q Q * * S S的雙親結(jié)點(diǎn)右孩子的雙親結(jié)點(diǎn)右孩子* *p p為葉子:為葉子: 刪除此結(jié)點(diǎn)時(shí),直接修正刪除此結(jié)點(diǎn)時(shí),直接修正* *f f指針域即可;指針域即可;* *p p只需一棵子樹(shù)或左或右:令只需一棵子樹(shù)或左或右:令PLPL或或PRPR為為* *f f的左孩子即可;的左孩子即可;* *p p有兩棵子樹(shù):情況最復(fù)雜有兩棵子樹(shù):情況最復(fù)雜 分析:分析:設(shè)刪除前的中序遍歷序列為:設(shè)刪除前的中序遍歷序列為:. s p PR . /. s p PR . /顯然顯然p p的直接前驅(qū)是的直接前驅(qū)是s s希望刪除希望刪除p p后,其它元素的相對(duì)位置不變。有兩種處理方法:后,其它元素的相對(duì)位置不變。有兩種處理方法:法法1 1:令:令* *p p的左子樹(shù)為的左子

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論