版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
檢索(查找)數(shù)據(jù)結(jié)構(gòu)與算法1何謂查找表?查找表是由同一類型的數(shù)據(jù)元素(或記錄)構(gòu)成的集合。
由于“集合”中的數(shù)據(jù)元素之間存在著松散的關(guān)系,因此查找表是一種應(yīng)用靈便的結(jié)構(gòu)。2對查找表經(jīng)常進行的操作1)查詢某個“特定的”數(shù)據(jù)元素是否在查找表中;2)檢索某個“特定的”數(shù)據(jù)元素的各種屬性;3)在查找表中插入一個數(shù)據(jù)元素;4)從查找表中刪去某個數(shù)據(jù)元素。3僅作查詢和檢索操作的查找表。靜態(tài)查找表有時在查詢之后,還需要將“查詢”結(jié)果為“不在查找表中”的數(shù)據(jù)元素插入到查找表中;或者,從查找表中刪除其“查詢”結(jié)果為“在查找表中”的數(shù)據(jù)元素。動態(tài)查找表查找表可分為兩類4是數(shù)據(jù)元素(或記錄)中某個數(shù)據(jù)項的值,用以標(biāo)識(識別)一個數(shù)據(jù)元素(或記錄)。關(guān)鍵字若此關(guān)鍵字可以識別唯一的一個記錄,則稱之謂“主關(guān)鍵字”。若此關(guān)鍵字能識別若干記錄,則稱之謂“次關(guān)鍵字”。5檢索的方式精確匹配查詢(exact-matchquery)模糊匹配查詢(fuzzy-matchquery)范圍查詢(rangequery)6根據(jù)給定的某個值,在查找表中確定一個其關(guān)鍵字等于給定值的數(shù)據(jù)元素或(記錄)。
精確匹配查找若查找表中存在這樣一個記錄,則稱“查找成功”。查找結(jié)果給出整個記錄的信息,或指示該記錄在查找表中的位置;否則稱“查找不成功”。查找結(jié)果給出“空記錄”或“空指針”。7檢索的方法1.順序表和線性表方法(lists,tables,arrays).2.根據(jù)關(guān)鍵碼值直接訪問方法(hashing)3.樹索引方法.8
由于查找表中的數(shù)據(jù)元素之間不存在明顯的組織規(guī)律,因此不便于查找。為了提高查找的效率,需要在查找表中的元素之間人為地附加某種確定的關(guān)系,換句話說,
用另外一種結(jié)構(gòu)來表示查找表。如何進行查找?查找的方法取決于查找表的結(jié)構(gòu)。9查找方法目錄基于順序(線性)結(jié)構(gòu)的查找基于有序順序(線性)結(jié)構(gòu)的查找10基于線性結(jié)構(gòu)的檢索11順序檢索問45是否已經(jīng)保存?11132050323360459053477123456789101112位置值12ListFindFunction//ReturntrueiffKisinlistboolfind(List<int>&L,intK){
intit;for(L.setStart();L.getValue(it); L.next())if(K==it)returntrue;//Founditreturnfalse;//Notfound}Cost:對一個未排序的線性表進行順序檢索,在平均情況和最差情況下需要(n)13順序檢索(2)問保存的值中最大值是多少?11132050323360459053477123456789101112位置值11132050505060609090909014在數(shù)組中找最大值//Findlargestvalueint
largest(intarray[],intn){int
currlarge=0;//Largestvalueseenfor(inti=1;i<n;i++)//Foreachvalif(array[currlarge]<array[i])
currlarge=i;//Rememberposreturncurrlarge;//Returnlargest}15
定義:
查找算法的平均查找長度
(AverageSearchLength)
為確定記錄在查找表中的位置,需和給定值
進行比較的關(guān)鍵字個數(shù)的期望值
其中:n
為表長,Pi
為查找表中第i個記錄的概率,且,Ci為找到該記錄時,曾和給定 值比較過的關(guān)鍵字的個數(shù)。分析順序查找的時間性能16在等概率查找的情況下,
順序表查找的平均查找長度為:對順序表而言,Ci=n-i+1ASL=nP1+(n-1)P2++2Pn-1+Pn17
若查找概率無法事先測定,則查找過程采取的改進辦法是,在每次查找之后,將剛剛查找到的記錄直接移至表尾的位置上。在不等概率查找的情況下,ASLss
在
Pn≥Pn-1≥···≥P2≥P1時取極小值18順序查找表的查找算法簡單,但平均查找長度較大,特別不適用于表長較大的查找表。19基于有序順序結(jié)構(gòu)的檢索20二分查找法問45是否已經(jīng)保存?41113203233455053607790123456789101112位置值21BinarySearch//Returnpositionofelementinsorted//arrayofsizenwithvalueK.int
binary(intarray[],intn,intK){
intl=-1;
intr=n;//l,rarebeyondarrayboundswhile(l+1!=r){//Stopwhenl,rmeet
inti=(l+r)/2;//Checkmiddleif(K<array[i])r=i;//Lefthalfif(K==array[i])returni;//Founditif(K>array[i])l=i;//Righthalf}returnn;//Searchvaluenotinarray}22假設(shè)n=2h-1并且查找概率相等則
在n>50時,可得近似結(jié)果
一般情況下,表長為n的折半查找的判定樹的深度和含有n個結(jié)點的完全二叉樹的深度相同。23字典檢索檢索一般不從辭典的中間開始。如果要查找的詞以's'開頭,查找者會估計到以's'開頭的條目從詞典的四分之三處開始。這樣,他就會先翻到詞典的四分之三處,然后根據(jù)所看到的內(nèi)容決定接下來向哪里翻。也就是說,人們一般根據(jù)關(guān)鍵碼值預(yù)期分布的知識“計算出”接下來向哪里翻。這種經(jīng)過計算的二分法檢索的形式稱為詞典檢索(dictionarysearch)或者插值檢索(interpolationsearch)24自組織線性表25根據(jù)訪問頻率排列列表根據(jù)估算的訪問頻率排列記錄.執(zhí)行順序檢索訪問第一條記錄的代價:1訪問第二條記錄的代價:2預(yù)期的檢索代價:26例子(1)(1)每一條記錄被訪問的機會都相同.27例子(2)(2)指數(shù)頻率28Zipf
分布應(yīng)用:自然語言(如英語)中單詞使用頻率的分布.城市中的人口規(guī)模的分布,等.80/20規(guī)則:80%的訪問都是對20%的記錄進行的.當(dāng)按照80/20規(guī)則分布時,29自組織線性表自組織線性表根據(jù)實際的記錄訪問模式在線性表中修改記錄順序.自組織線性表使用啟發(fā)式規(guī)則決定如何重新排列線性表.這些啟發(fā)式規(guī)則類似于管理緩沖池的規(guī)則.30啟發(fā)式規(guī)則計數(shù)方法:為每條記錄保存一個訪問計數(shù),而且一直按照這個順序維護記錄.(類似于緩沖池替代策略中的“最不頻繁使用”LFU法.)移至前端法:如果找到一條記錄就把它放到線性表的最前面,而把其他記錄后退一個位置.轉(zhuǎn)置:把找到的記錄與它在線性表中的前一條記錄交換位置.31例子假定有8條記錄,其關(guān)鍵碼值為A到H,而且最初以字母順序排列 訪問序列FDFGEGFAFGE(12次訪問)線性表根據(jù)計數(shù)法組織最后結(jié)果FGDEABCH總代價是45次比較根據(jù)移至前端啟發(fā)式規(guī)則最后結(jié)果EGFDABCH總代價是54次比較根據(jù)轉(zhuǎn)置啟發(fā)式規(guī)則最后結(jié)果ABFDGECH總代價是62次比較32文本壓縮的例子應(yīng)用:文本壓縮.線性表是根據(jù)移至前端規(guī)則自組織的.如果單詞前面已經(jīng)出現(xiàn),就傳送這個單詞在線性表中的位置.如果單詞是第一次出現(xiàn),就傳送這個單詞.ThecaronthelefthitthecarIleft.Thecaron3lefthit35I5.這種壓縮方法的思想類似于Ziv-lempel編碼算法.33集合的檢索34集合的檢索Fordensesets(smallrange,highpercentageofelementsinset).可以使用邏輯上的位操作.例子:為了尋找數(shù)字0到15之間奇素數(shù)集合,計算:0011010100010100&010101010101010135分塊和索引(索引順序查找)36分塊查找的存儲結(jié)構(gòu)表分為b塊,每一塊中的關(guān)鍵字不一定有序,但前一塊中的最大關(guān)鍵字必須小于后一塊中的最小關(guān)鍵字,即表是“分塊有序”的。抽取各塊中的最大關(guān)鍵字及其起始位置構(gòu)成一個索引表,由于表R是分塊有序的,所以索引表是一個遞增有序表。
37分塊查找的基本思想1)首先查找索引表
索引表是有序表,可采用二分查找或順序查找,以確定待查的結(jié)點在哪一塊。
2)然后在已確定的塊中進行順序查找
由于塊內(nèi)
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 電力建設(shè)招議標(biāo)管理辦法
- 旅游景區(qū)宣傳演員聘用協(xié)議
- 城市綠化景觀設(shè)計改造提升合同
- 車牌租賃代售合同范本模板
- 瑜伽館裝修協(xié)議
- 生態(tài)園苗木采購施工合同
- 交通運輸業(yè)工傷員工管理手冊
- 農(nóng)村交通改善項目合同
- 高速公路稽查業(yè)務(wù)培訓(xùn)
- 水泵房消防安全管理規(guī)程
- 循證護理學(xué)(理論部分)智慧樹知到答案章節(jié)測試2023年復(fù)旦大學(xué)
- 醫(yī)院開展老年友善醫(yī)療機構(gòu)建設(shè)工作總結(jié)
- 馬克思主義基本原理概論智慧樹知到答案章節(jié)測試2023年泰山學(xué)院
- 餐飲檔口和門店消防安全培訓(xùn)
- 噴錫培訓(xùn)教程
- 幼兒園衛(wèi)生知識講座
- (完整)土地復(fù)耕實施方案
- 馬工程政治學(xué)概論思考題答案
- 關(guān)于加強校園欺凌行為預(yù)防治理的說明報告
- 汽車露營營地質(zhì)量5c標(biāo)準(zhǔn)等級劃分認定細則(2021版)
- 地理實踐力ppt課件版 地理實踐力 彭春蓮組
評論
0/150
提交評論