查找的概念順序查找折半查找分塊查找哈希查找PPT專業(yè)課件.ppt_第1頁
查找的概念順序查找折半查找分塊查找哈希查找PPT專業(yè)課件.ppt_第2頁
查找的概念順序查找折半查找分塊查找哈希查找PPT專業(yè)課件.ppt_第3頁
查找的概念順序查找折半查找分塊查找哈希查找PPT專業(yè)課件.ppt_第4頁
查找的概念順序查找折半查找分塊查找哈希查找PPT專業(yè)課件.ppt_第5頁
已閱讀5頁,還剩25頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

查找的概念順序查找折半查找分塊查找哈希查找,第六章查找,查找也叫檢索,是根據給定的某個值,在表中確定一個關鍵字等于給定值的記錄或數據元素關鍵字是數據元素中某個數據項的值,它可以標識一個數據元素查找方法評價查找速度占用存儲空間多少算法本身復雜程度平均查找長度ASL(AverageSearchLength):為確定記錄在表中的位置,需和給定值進行比較的關鍵字的個數的期望值叫查找算法的,查找的概念,順序查找查找過程:從表的一端開始逐個進行記錄的關鍵字和給定值的比較算法描述,64,監(jiān)視哨,比較次數=5,比較次數:查找第n個元素:1查找第n-1個元素:2.查找第1個元素:n查找第i個元素:n+1-i查找失敗:n+1,順序查找#defineMAXITEM100structelementintkey;/關鍵字intdata;/其他數據;typedefstructelementsqlistMAXITEM;intseqsrch(sqlistr,intk,intn)/k為給定值,返回i為關鍵字等于k的記錄在表r中的序號,/i值為0表示查找不成功r0.key=k;i=n;while(ri.key!=k)i-;return(i);,順序查找方法的ASL,折半查找查找過程:每次將待查記錄所在區(qū)間縮小一半適用條件:采用順序存儲結構的有序表算法實現設表長為n,low、high和mid分別指向待查元素所在區(qū)間的上界、下界和中點,k為給定值初始時,令low=1,high=n,mid=(low+high)/2讓k與mid指向的記錄比較若k=rmid.key,查找成功若krmid.key,則low=mid+1重復上述操作,直至lowhigh時,查找失敗,算法描述,折半查找intbinsrch(sqlistr,intk,intn)/k為給定值,返回i為關鍵字等于k的記錄在表r中的序號,/i值為0表示查找不成功inti,low=1,high=n,mid,find=0;while(lowrmid.key)low=mid+1;elsei=mid;find=1;if(!find)i=0;return(i);,算法評價判定樹:描述查找過程的二叉樹叫有n個結點的判定樹的深度為log2n+1折半查找法在查找過程中進行的比較次數最多不超過其判定樹的深度折半查找的ASL,分塊查找(索引順序查找)查找過程:將表分成幾塊,塊內無序,塊間有序;先確定待查記錄所在塊,再在塊內查找適用條件:分塊有序表算法實現用數組存放待查記錄,每個數據元素至少含有關鍵字域建立索引表,每個索引表結點含有最大關鍵字域和指向本塊第一個結點的指針算法描述,分塊查找方法評價,哈希查找基本思想:在記錄的存儲地址和它的關鍵字之間建立一個確定的對應關系;這樣,不經過比較,一次存取就能得到所查元素的查找方法定義哈希函數在記錄的關鍵字與記錄的存儲地址之間建立的一種對應關系叫哈希函數是一種映象,是從關鍵字空間到存儲地址空間的一種映象哈希函數可寫成:addr(ai)=H(ki)ai是表中的一個元素addr(ai)是ai的存儲地址ki是ai的關鍵字,哈希表應用哈希函數,由記錄的關鍵字確定記錄在表中的地址,并將記錄放入此地址,這樣構成的表叫哈希查找又叫散列查找,利用哈希函數進行查找的過程叫,以編號作關鍵字,構造哈希函數:H(key)=keyH(1)=1H(2)=2,以地區(qū)別作關鍵字,取地區(qū)名稱第一個拼音字母的序號作哈希函數:H(Beijing)=2H(Shanghai)=19H(Shenyang)=19,從例子可見:哈希函數只是一種映象,所以哈希函數的設定很靈活,只要使任何關鍵字的哈希函數值都落在表長允許的范圍之內即可沖突:key1key2,但H(key1)=H(key2)的現象叫同義詞:具有相同函數值的兩個關鍵字,叫該哈希函數的哈希函數通常是一種壓縮映象,所以沖突不可避免,只能盡量減少;同時,沖突發(fā)生后,應該有處理沖突的方法哈希函數的構造方法直接定址法構造:取關鍵字或關鍵字的某個線性函數作哈希地址,即H(key)=key或H(key)=akey+b特點直接定址法所得地址集合與關鍵字集合大小相等,不會發(fā)生沖突實際中能用這種哈希函數的情況很少,數字分析法構造:對關鍵字進行分析,取關鍵字的若干位或其組合作哈希地址適于關鍵字位數比哈希地址位數大,且可能出現的關鍵字事先知道的情況,例有80個記錄,關鍵字為8位十進制數,哈希地址為2位十進制數,分析:只取8只取1只取3、4只取2、7、5數字分布近乎隨機所以:取任意兩位或兩位與另兩位的疊加作哈希地址,平方取中法構造:取關鍵字平方后中間幾位作哈希地址適于不知道全部關鍵字情況折疊法構造:將關鍵字分割成位數相同的幾部分,然后取這幾部分的疊加和(舍去進位)做哈希地址種類移位疊加:將分割后的幾部分低位對齊相加間界疊加:從一端沿分割界來回折送,然后對齊相加適于關鍵字位數很多,且每一位上數字分布大致均勻情況,例關鍵字為:0442205864,哈希地址位數為4,除留余數法構造:取關鍵字被某個不大于哈希表表長m的數p除后所得余數作哈希地址,即H(key)=keyMODp,pm特點簡單、常用,可與上述幾種方法結合使用p的選取很重要;p選的不好,容易產生同義詞隨機數法構造:取關鍵字的隨機函數值作哈希地址,即H(key)=random(key)適于關鍵字長度不等的情況選取哈希函數,考慮以下因素:計算哈希函數所需時間關鍵字長度哈希表長度(哈希地址范圍)關鍵字分布情況記錄的查找頻率,處理沖突的方法開放定址法方法:當沖突發(fā)生時,形成一個探查序列;沿此序列逐個地址探查,直到找到一個空位置(開放的地址),將發(fā)生沖突的記錄放到該地址中,即Hi=(H(key)+di)MODm,i=1,2,k(km-1)其中:H(key)哈希函數m哈希表表長di增量序列分類線性探測再散列:di=1,2,3,m-1二次探測再散列:di=1,-1,2,-2,3,k(km/2)偽隨機探測再散列:di=偽隨機數序列,例表長為11的哈希表中已填有關鍵字為17,60,29的記錄,H(key)=keyMOD11,現有第4個記錄,其關鍵字為38,按三種處理沖突的方法,將它填入表中,(1)H(38)=38MOD11=5沖突H1=(5+1)MOD11=6沖突H2=(5+2)MOD11=7沖突H3=(5+3)MOD11=8不沖突,38,(2)H(38)=38MOD11=5沖突H1=(5+1)MOD11=6沖突H2=(5-1)MOD11=4不沖突,38,(3)H(38)=38MOD11=5沖突設偽隨機數序列為9,則:H1=(5+9)MOD11=3不沖突,38,再哈希法方法:構造若干個哈希函數,當發(fā)生沖突時,計算下一個哈希地址,即:Hi=RHi(key)i=1,2,k其中:RHi不同的哈希函數特點:計算時間增加鏈地址法方法:將所有關鍵字為同義詞的記錄存儲在一個單鏈表中,并用一維數組存放頭指針,例已知一組關鍵字(19,14,23,1,68,20,84,27,55,11,10,79)哈希函數為:H(key)=keyMOD13,用鏈地址法處理沖突,哈希查找過程及分析哈希查找過程,哈希查找分析哈希查找過程仍是一個給定值與關鍵字進行比較的過程評價哈希查找效率仍要用ASL哈希查找過程與給定值進行比較的關鍵字的個數取決于:哈希函數處理沖突的方法哈希表的裝填因子=表中填入的記錄數/哈希表長度,例已知一組關鍵字(19,14,23,1,68,20,84,27,55,11,10,79)哈希函數為:H(key)=keyMOD13,哈希表長為m=16,設每個記錄的查找概率相等,(1)用線性探測再散列處理沖突,即Hi=(H(key)+di)MODm,H(55)=3沖突,H1=(3+1)MOD16=4沖突,H2=(3+2)MOD16=5,H(79)=1沖突,H1=(1+1)MOD16=2沖突,H2=(1+2)MOD16=3沖突,H3=(1+3)MOD16=4沖突,H4=(1+4)MOD16=5沖突,H5=(1+5)MOD16=6沖突,H6=(1+6)MOD16=7沖突,H7=(1+7)MOD16=8沖突,H8=(1+8)MOD16=9,ASL=(1*6+2+3*3+4+9)/12=2.5,14,1,68,27,55,19,20,84,79,23,11,10,H(19)=6,H(14)=1,H(23)=10,H(1)=1沖突,H1=(1+1)MOD16=2,H(68)=3,H(20)=7,H(84)=6沖突,H1=(6+1)MOD16=7沖突,H2=(6+2)MOD16=8,H(27)=1沖突,H1=(1+1)MOD16=2沖突,H2=(1+2)MOD16=3沖突,H3=(1+3)MOD16=4,H(11)=11,H(10)=10沖突,H1=(10+1

溫馨提示

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

評論

0/150

提交評論