版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
Ch.9查找§9.1基本概念
查找和排序是兩個重要的運算對象:表、文件等。其中每個結(jié)點(記錄)由多個數(shù)據(jù)項構(gòu)成,假設(shè)每個結(jié)點有1個能唯一標(biāo)識該結(jié)點的key。定義:給定1個值K,在含有n個結(jié)點的表中找出關(guān)鍵字等于K的結(jié)點,若找到(查找成功),則返回該結(jié)點信息或它在表中的位置;否則(查找失?。祷叵嚓P(guān)指示信息。分類:查找過程中是否修改表?動態(tài)查找、靜態(tài)查找查找過程是否均在內(nèi)存中進(jìn)行?內(nèi)部查找、外部查找1§9.1基本概念效率:與存儲結(jié)構(gòu)、文件狀態(tài)(有序、無序)有關(guān)
平均查找長度(ASL),即平均的比較次數(shù),作為衡量查找效率的標(biāo)準(zhǔn):
Pi:查找第i個結(jié)點的概率Ci:查找第i個結(jié)點的比較次數(shù)設(shè)Pi=1/n,1≤i≤n約定:typedefintKeyType;2
§9.2線性表的查找對象:用線性表作為表的組織形式。分類:靜態(tài)查找、內(nèi)部查找方式:順序查找、二分查找、分塊查找#definen100//
§9.2.1順序查找基本思想
從表的一端開始,順序掃描線性表,依次將掃描到的結(jié)點的Key與給定值K進(jìn)行比較,若當(dāng)前掃描到結(jié)點Key=K,則查找成功返回;若掃描完整個表后,仍未找到,則查找失敗。適用范圍:順序表、鏈表算法:3§9.2.1順序查找
typedefstruct{KeyTypekey;InfoTypeotherinfo;//應(yīng)用相關(guān)}NodeType,SeqList[n+1];//0號單元作為哨兵intSeqSearch(SeqListR,KeyTypeK){
//在R[1..n]中查找,成功時返回結(jié)點位置,失敗時返回0intn;R[0].key=K;//設(shè)置哨兵for(i=n;R[i].key!=K;i--);//從后往前找returni;//若i為0,則失敗}4
§9.2.1順序查找哨兵的作用
for中省略了下標(biāo)越界i>=1判定,節(jié)約了約一半時間時間分析
成功:ASLss=(n+1)/2,key的平均比較次數(shù)約為表長的一半
失敗:n+1次比較優(yōu)缺點優(yōu)點:簡單,對存儲結(jié)構(gòu)、Key之間的關(guān)系均無特殊要求
缺點:效率低,當(dāng)n較大時不宜用5
§9.2.2二分(折半)查找適用范圍:順序表、有序基本思想(分治法)
(1)設(shè)R[low..high]是當(dāng)前查找區(qū)間,首先確定該區(qū)間的中點位置:mid=
(low+high)/2//整除(2)將待查的K值與R[mid]比較,
①K=R[mid].key:查找成功,返回位置mid②K<R[mid].key:則左子表R[low..mid-1]是新的查找區(qū)間③K>R[mid],key:則右子表R[mid+1..high]是新的查找區(qū)間初始的查找區(qū)間是R[1..n],每次查找比較K和中間點元素,若查找成功則返回;否則當(dāng)前查找區(qū)間縮小一半,直至當(dāng)前查找區(qū)間為空時查找失敗。6
§9.2.2二分(折半)查找算法:
intBinSearch(SeqListR,KeyTypeK){intmid,low=1,high=n;while(low<high){//當(dāng)前查找區(qū)間R[low..high]非空mid=
(low+high)/2;//整除if(R[mid].key==K)returnmid;//成功返回位置midif(K<R[mid].key)//兩個子問題求解其中的一個high=mid-1;//在左區(qū)間中查找
elselow=mid+1;//在右區(qū)間中查找}//endwhilereturn0;//當(dāng)前查找區(qū)間為空時失敗}7查找過程
判定(比較)樹:分析查找過程的二叉樹,形態(tài)只與結(jié)點數(shù)相關(guān),與輸入實例的取值無關(guān)(為什么?)。例如n=11的形態(tài)如下圖所示。1234567891011(05,13,19,21,37,56,64,75,80,88,92),找21成功,找85失敗。6R[1..11]19437102R[1..5]R[7..11]R[10..11]R[5..5]ΦR[11..11]-14-51-22-33-4R[1..2]R[2..2]Φ58R[4..5]ΦΦΦ5-66-77-8ΦΦΦ11R[7..8]ΦR[8..8]8-99-10ΦΦ11-10-11Φ=><內(nèi)部結(jié)點外部結(jié)點8
§9.2.2二分(折半)查找時間分析
查找R[6]:比較1次;查找R[3]、R{9]:比較2次;查找R[1]、R[4]、R[7]、R[10]:比較3次;查找R[2]、R[5]、R[8]、R[11]:比較4次6R[1..11]19437102R[1..5]R[7..11]R[10..11]R[5..5]ΦR[11..11]-14-51-22-33-4R[1..2]R[2..2]Φ58R[4..5]ΦΦΦ5-66-77-8ΦΦΦ11R[7..8]ΦR[8..8]8-99-10ΦΦ11-10-11Φ=><9
§9.2.2二分(折半)查找時間分析
總結(jié):查找過程走了一條從判定樹的根到被查結(jié)點的路徑。
成功:終止于一個內(nèi)部結(jié)點,所需的Key比較次數(shù)恰為該結(jié)點在樹中的層數(shù);
失敗:終止于一個外部結(jié)點,所需的Key比較次數(shù)為該路徑上內(nèi)部結(jié)點總數(shù)。(層數(shù)-1)平均查找長度(ASL):
設(shè)n=2h-1,則樹高h(yuǎn)=lg(n+1)//不計外部結(jié)點的滿二叉樹第k層上結(jié)點數(shù)為2k-1,找該層上每個結(jié)點的比較次數(shù)為k,在等概率假設(shè)下:最壞時間:查找失敗,不超過樹高?lg(n+1)?
在鏈表上可做折半查找嗎?10
§9.2.3分塊查找(索引順序查找)存儲結(jié)構(gòu)
將R[1..n]均分成b塊,前b-1塊中結(jié)點數(shù)為s=?n/b?
,最后一塊中的結(jié)點數(shù)可能小于s,引入索引表標(biāo)記塊。關(guān)鍵字狀態(tài)分塊有序:塊間有序,塊內(nèi)不一定有序;例子:n=18,b=3,s=62248861713最大關(guān)鍵字起始地址221213892033424438244860587449865311
§9.2.3分塊查找(索引順序查找)查找過程(兩步查找)
索引表查找:確定塊。n較大時用折半查找,n較小時用順序查找。塊內(nèi)查找:只能順序查找。性能分析以折半查找確定塊:ASL=ASLbs+ASLss=lg(b+1)-1+(s+1)/2≈lg(n/s+1)+s/2以順序查找確定塊:ASL=ASLss+ASLss=(b+1)/2+(s+1)/2=(s2+2s+n)/(2s)當(dāng)s=時,ASL取極小值+1塊不一定等分EX.9.312
§9.3樹上的查找(動態(tài)查找)
折半查找效率最高,但它不適應(yīng)插刪操作。本節(jié)討論適用于動態(tài)查找,即查找過程中動態(tài)維護(hù)表結(jié)構(gòu)?!?.3.1二叉查找樹(BST)定義:二叉查找樹或是空樹,或滿足下述BST性質(zhì)的二叉樹:①若它的左子樹非空,則左子樹上所有結(jié)點的keys均小于根的key②若它的右子樹非空,則右子樹上所有結(jié)點的keys均大于根的key③左右子樹又都是二叉查找樹Note:性質(zhì)1或2中,可以將“﹤”改為“≤”;或“﹥”改為“≥”BST性質(zhì)
二叉查找樹的中序序列是一個遞增有序序列13§9.3.1二叉查找樹(BST)舉例存儲結(jié)構(gòu):typedefstructnode{KeyTypekey;InfoTypeotherinfo;structnode*lchild,*rchild;}BSTNode,*BSTree;53729414§9.3.1二叉查找樹(BST)1.查找基本思想
從根結(jié)點開始比較,若當(dāng)前結(jié)點的key與待查的key相等,則查找成功,返回該結(jié)點的指針;否則在左子樹或右子樹中繼續(xù)查找。若樹中沒有待查結(jié)點,則失敗于某個空指針上。算法
BSTNode*SearchBST(BSTreeT,KeyTypekey){
//在T上查找key=K的節(jié)點,成功時返回該節(jié)點,否則返回NULLif(T==NULL||key==T->key)returnT;//若T為空,查找失??;否則成功if(key<T->key)returnSearchBST(T->lchild,key);//查找左子樹elsereturnSearchBST(T->rchild,key);//查找右子樹}53729415§9.況3.險1二叉嘗查找蝴樹(BS遇T)1.查找時間若成裹功,婚則走醬了一勉條從欣根到匪待查卻節(jié)點咳的路榜徑若失筐敗,濾則走才了一旋條從鞭根到另葉子單的路源徑?降(不仆一定控)上界胃:O(猶h)分析窯:與樹烈高相吊關(guān)①最壞打情況:單支菌樹,AS堅L=鏡(n企+1描)/誼2,與順集序查翻找相清同②最好是情況:AS揭L≈lg翅n,形遍態(tài)與情折半印查找?guī)У呐猩讯淞晗嗨脾燮骄闆r:假通定n個ke敵ys所形房誠成的n!種排謠列是乒等概取率的獵,則松可證犁明由詠這n!個序偵列產(chǎn)蘿生的n!棵BS槽T(其奴中有蝦的形洪態(tài)相葬同)韻的平帽均高箭度為O(l刻gn),故碎查找躁時間穩(wěn)仍為O(l踩gn)537294162、BS型T的插上入和巡壽生成插入算法臂思想保證幅新結(jié)養(yǎng)點插勉入后沸滿足BS晝T性質(zhì)子,基患本思紅想如壩下:若T為空局,則辰為待稍插入泰的Ke浙y申請碑一個運新結(jié)賓點,疑并令明其為猾根;否則斷,從員根開桐始向常下查渣找插皮入位惜置,歪直到膠發(fā)現(xiàn)培樹中喇已有Ke孕y,或共找到靠一個旦空指蘆針為聞止;將新敢結(jié)點駐作為豪葉子撤插入宇空指斷針的瘡位置珍。查找妥過程氧是一麥個關(guān)玩鍵字冤的比邁較過鹿程,使易于框?qū)懗鲋e遞歸紋或非設(shè)遞歸丸算法愈,也鐘可以下調(diào)用畝查找賠操作駐。算法脹實現(xiàn)172、BS夢T的插決入和陜生成vo榆idIn和se占rt貸BS怠T(BS衛(wèi)Tr克ee*T茂,Ke肅yT寧yp僚eke急y株)族{//厘*T是根BS餡TN律od傲e*f武,癢*知p=站*T屢;//于p指向抬根結(jié)拘點wh后il站e(窄p自)裁{//當(dāng)樹惡非空伐時,絡(luò)查找涉插入招位置if委(利p芹->董ke街y=投=ke叮y)膜re誘tu墳rn更;//樹中蹄已有ke餅y,不幟允許譯重復(fù)嫂插入f=p;//丑f和p為父查子關(guān)虧系p=(墓ke巴y烘<私p-熟>k刪ey斑)桌?臭p輪->lc東hi宿ld;振p-弄>rc博hi酬ld;}//注意服:樹轟為空襖時,張無須秀查找p術(shù)=陳(BS貌TN口od杜e*)ma拌ll舟oc臘(s伍iz艘eo思f(壁BS構(gòu)TN如od送e))樓;p-玻>k杏ey睡=ke穗y;倚p鼻->lc鮮hi城ld=p赴->rc慶hi顆ld=N艱UL水L;//生成梯新結(jié)揭點if手(縮慧*執(zhí)T唐==藝NU洪LL奇)推*禿T=綢p;//原樹豈為空,新結(jié)驕點為格根el溉se//原樹寫非空,新結(jié)逆點作嫌為*f的左斥或右亮孩子魚插入if獸(敏k趙ey將<箏f駝->絕ke計y莊)茄f拐->lc質(zhì)hi聲ld=p濤;el烤se另f-刷>rc吧hi襖ld=p侵;}//時間彩為O(h)182、BS盤T的插息入和園生成生成算法軌:從空碼樹開怨始,照每輸閥入一撥個數(shù)狐據(jù)就脆調(diào)用色一次晚插入鐮算法凱。BS振Tr號eeCr腔ea憲te科BS孝T(晌vo急id重)觸{BS買Tr扣eeT=NU師LL鑄;//初始作時T為空Ke茄yT謠yp械eke碑y;sc昂an績f(地“%陣d”柱,根&k秒ey儉)底;wh榜il邊e(幸k皮ey樸)娛{//假設(shè)ke號y=0表示街輸入駕結(jié)束In接se灰rt肥BS闊T(外&T疾,氏ke該y蒙)賣;//將ke曉y插入型樹T中sc辟an饑f(法“%匯d”鞋,日&k粗ey仍);//讀入前下一腿個關(guān)憤鍵字}re準(zhǔn)tu姓rn泰T;//返回匆根指繳針}192、BS巨T的插惜入和檔生成舉例1010181018310183810183812101838122101838122710183812273輸入敲實例{1格0,18,3,8,12,2,7,3}202、BS羽T的插殿入和搬生成一般為情況不同榨的輸瓦入實鉆例(守數(shù)據(jù)龍集不房誠同、功或排寧列不鵲同)核,生棚成的鹽樹的喉形態(tài)軍一般儀不同碑。對n個結(jié)聰點的碼同一溫數(shù)據(jù)逃集,硬可生活成n!棵BS踩T。例外轉(zhuǎn)情況但有變時不寺同的宵實例鋸可能融生成怨相同遵的BS擋T,例舒如:椒(2,3,7,8,5,4)和丙(2,3,7,5,8,4)可司構(gòu)造咐同一碎棵BS閉T。排序搭樹名傅稱的將由來因為BS著T的中相序序孕列有棗序,剩所以蓬對任紐奉意關(guān)稍鍵字慢序列削,構(gòu)恰造BS井T的過逐程,充實際催上是宇對其紫排序州。生成n個結(jié)茫點的BS掌T的平個均時廚間是O(社nl勵gn),但它奧約為盲堆排影序的2-3倍,次因此胃它并患不適致合排素序。213、BS道T的刪駐除保證令刪一著結(jié)點斗不能中將以梅該結(jié)仁點為乞根的阿子樹冊刪去片,且秀仍須棵滿足BS進(jìn)T性質(zhì)飲。即朗:刪餃一結(jié)熄點相孤當(dāng)于霞刪有晨序序鳳列中繡的一恐個結(jié)奇點?;竞退枷氩檎业┐齽h銹結(jié)點尊*p,令pa涂re絹nt指向芽其雙茅親(坑初值NU抵LL);員若找巾不到僚則返妙回,央否則堤進(jìn)入曬下一孤步。在刪挨除*p時處愿理其吹子樹草的連榆接問賞題,患同時尊保持BS輔T性質(zhì)肥不變僅。ca葵se承1:*p是葉安子,鮮無須務(wù)連接勢子樹確,只度需將營*pa回re船nt中指負(fù)向*p的指筋針置莫空ca氣se響2:*p只有1個孩援子,佛只須忍連接涼唯一擠的1棵子令樹,吉故可拾令此劉孩子稿取代敢*p與其雙迎親連鹽接(4種狀艇態(tài))parentpchildchildparentpparentpchildparentpchild*p只有臥左孩累子膊*p只有盜右孩糕子223、BS共T的刪動除基本碌思想ca伯se助3:*p有2個孩刪子,膽有2種處雅理方生式:①找到走*p的中序腿后繼(或前坊驅(qū))*s,用陶*p的右(或左)子樹委取代炭*p與其托雙親王*pa擔(dān)re虜nt連接慮;而洽*p的左(或右)子樹PL則作億為*s的左(或右)子樹與*s連接網(wǎng)。缺點旨:樹衛(wèi)高可卡能增謹(jǐn)大。PLsRsprparentPLsRpparentspr233、BS堵T的刪屋除基本刻思想②令q=馬p,找棕*q的中序后矛繼*p,并令pa贊re渠nt指向杰*p的雙妥親,疤將*p的右闊子樹勝取代區(qū)*p與其售雙親那*pa董re谷nt連接仙。將心*p的內(nèi)具容co峰py到*q中,級相當(dāng)鐮于刪我去了*q,將繳刪*q的操燈作轉(zhuǎn)柜換為談刪*p的操勺作。對非稱地擴(kuò),也肥可找借*q的中先序前蹄驅(qū)因為*p最多督只有1棵非騾空的縣子樹濤,屬伍于ca造se蒼2。實越際上ca任se大1也是ca話se妖2的特疤例。因此輔,ca引se容3采用棟該方般式時叔,3種情樹況可使以統(tǒng)乎一處虜理為ca適se春2。q=pparentpchildq=ppchild*q的中序后繼就是其右孩子243、BS距T的刪今除算法vo私idDe哭lB番ST欠No恰de(BS赤Tr炭ee*T貿(mào),Ke悶yT捐yp劍eke共y)彈{//訪*T是根BS示Tr私ee*q猾,盡*c匹hi戒ld越,苗*p款ar蚊en雄t=帆NU質(zhì)LL汪,仰*p衛(wèi)=*茫T;wh穩(wěn)il柄e朋(廈p貸)拜{//找待將刪結(jié)囑點if奮(港p-兔>k免ey鬧=撲=ke漏y)繳br宵ea崇k;//已找壓到pa釣re逢nt用=p溝;//循環(huán)染不變專式是翠*pa蛛re科nt為*p的雙壓親p=(爆ke普y衰<省p-閱>k雹ey廢)易?弦p既->lc弱hi直ld;桃p-惕>rc累hi險ld;}if伶(筆!涼p枯)劍re壘tu鵝rn把;//找不硬到被尺刪結(jié)恢點,機(jī)返回q=煩p;//傷q記住千被刪聲結(jié)點鼻*pif笛(他q-怠>lc喘h(huán)i象ld&&惠q狂->rc凝hi污ld)//姑ca姓se欣3,找洽*q的中栗序后科繼fo球r(因pa躍re墾nt=q,畢p=q測->rc梨hi務(wù)ld;冰p-臣>lc萌hi貧ld;蕉pa勉re嗽nt秀=p卡,口p=努p-病>lc霜hi站ld);253、BS纖T的刪霧除//現(xiàn)在3種情視況已冤統(tǒng)一泰到情坐況2,被秀刪結(jié)轎點*p最多愿只有1個非售空的凳孩子ch匯il庭d=受(
溫馨提示
- 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024-2025學(xué)年年八年級數(shù)學(xué)人教版下冊專題整合復(fù)習(xí)卷第21章 二次根式綜合復(fù)習(xí)測試題(一)及答案
- 《俄羅斯農(nóng)業(yè)》課件
- 《設(shè)計審美批評論》課件
- 《使用與管理》課件
- 《認(rèn)證學(xué)習(xí)資料》課件
- 《保險公司風(fēng)險管理》課件
- 《數(shù)學(xué)正數(shù)和負(fù)數(shù)》課件
- 食堂承包業(yè)績報告范文
- 向上級請示報告范文
- 語言領(lǐng)域調(diào)研報告范文
- JJG 475-2008電子式萬能試驗機(jī)
- 2024年電動自行車行業(yè)商業(yè)計劃書
- (2024年)反壟斷法及反不正當(dāng)競爭法課件
- 2024年醫(yī)學(xué)實驗室行業(yè)發(fā)展趨勢及前景展望分析報告
- 2023年6月國開(中央電大)行管本科《西方行政學(xué)說》期末考試試題及答案
- 【取水構(gòu)筑物計算2500字】
- 《銷售人員培訓(xùn)完整》課件
- 水電安裝施工方案
- 中國網(wǎng)民權(quán)益保護(hù)調(diào)查報告
- 高一上學(xué)期期中考試語文試題(含答案)
- 心內(nèi)科入科教育培訓(xùn)
評論
0/150
提交評論