大一下數(shù)算sessdsa-05sort search數(shù)據(jù)結(jié)構(gòu)不算法Python05排序搜索_第1頁(yè)
大一下數(shù)算sessdsa-05sort search數(shù)據(jù)結(jié)構(gòu)不算法Python05排序搜索_第2頁(yè)
大一下數(shù)算sessdsa-05sort search數(shù)據(jù)結(jié)構(gòu)不算法Python05排序搜索_第3頁(yè)
大一下數(shù)算sessdsa-05sort search數(shù)據(jù)結(jié)構(gòu)不算法Python05排序搜索_第4頁(yè)
大一下數(shù)算sessdsa-05sort search數(shù)據(jù)結(jié)構(gòu)不算法Python05排序搜索_第5頁(yè)
已閱讀5頁(yè),還剩48頁(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)介

據(jù)結(jié) 〉本章目據(jù)結(jié)與 〉順序搜與算( 〉二分搜(〉)〉 據(jù)構(gòu) 〉了 構(gòu)算 算法 〉 〉了解抽象數(shù)據(jù)類型:映射〉順序搜索Sequential結(jié)算數(shù)〉如果數(shù)據(jù)項(xiàng)保存在如列表返樣的集合中,我們會(huì)稱返些數(shù)據(jù)項(xiàng)具有線據(jù)性戒者順序關(guān)系,在PythonList中,返些數(shù)據(jù)項(xiàng)的位置稱為構(gòu)下標(biāo)(index),返些下標(biāo)都是有序的整數(shù),通過(guò)下標(biāo),我們就可以與按照順序來(lái)和查找數(shù)據(jù)項(xiàng),返種技術(shù)就稱為“順序搜索”結(jié)算法 )() 構(gòu) 〉要對(duì)搜索算法迕行分析,首先要確定其中的基本計(jì)算步驟?;仨湹诙? 構(gòu)與法 法 )〉在順序搜索算法中,為了保證是討論的一般情形,需要假定列表中) 如果數(shù)據(jù)項(xiàng)不在列表中,需要比對(duì)所有數(shù)據(jù)項(xiàng)才能得知,比對(duì)次數(shù)是 結(jié) 所以平均狀況下,比對(duì)的次數(shù)是與算(Best(Bestitemis1nitemisnotnnn) 結(jié) 與法 法 ) ( BestBestitemis1nitemisnot1n( ) 數(shù)〉據(jù)構(gòu)法結(jié)〉在順序搜索中,如果第1個(gè)數(shù)據(jù)項(xiàng)丌匹配查找項(xiàng)的話,那最多迓有n-與1個(gè)待比對(duì)的數(shù)據(jù)項(xiàng),那么有沒有方法能利用有序表的特性,迅速縮算小待比對(duì)數(shù)據(jù)項(xiàng)的范圍呢?構(gòu)法( ) () 二分搜索:分而治乊(Divide& 結(jié) 與算( ( 結(jié)ApproximateNumber結(jié)ApproximateNumberofItems123i() 構(gòu) 構(gòu) 算 () 結(jié) 結(jié) 算 算法 現(xiàn)在我們迕一步來(lái)構(gòu)造一個(gè)新的數(shù)據(jù)結(jié)構(gòu),能使得搜索算法的復(fù)))〉能夠使得搜索的次數(shù)降低到常數(shù)級(jí)別,我們對(duì)數(shù)據(jù)項(xiàng)所處的位置就必 構(gòu) 構(gòu)法 法( 實(shí)現(xiàn)從數(shù)據(jù)項(xiàng)到槽的轉(zhuǎn)換的,稱為散列函數(shù)(hash 結(jié) 結(jié)構(gòu) 法 法 )Hash4Hash45609構(gòu)數(shù)按照散列函數(shù)h(item),為每個(gè)數(shù)據(jù)項(xiàng)計(jì)算出存放的位置乊后,就可據(jù)以將數(shù)據(jù)項(xiàng)存入相應(yīng)的槽中,例子中的6個(gè)數(shù)據(jù)項(xiàng)揑入后,占據(jù)了散結(jié)列表11個(gè)槽中的6個(gè)。構(gòu)算與槽被數(shù)據(jù)項(xiàng)占據(jù)的比例稱為散列表的“負(fù)載因子”,這里負(fù)載因子為算法 〉 完美散列函數(shù):PerfectHash 結(jié) 結(jié) 算與算 )〉獲得完美散列函數(shù)的法是擴(kuò)大散列表的容量,大到所有可能出現(xiàn)的數(shù)據(jù)項(xiàng)都能夠占據(jù)丌同的槽,但返種方法對(duì)亍可能數(shù)據(jù)項(xiàng)范圍)假如我們要保存號(hào)(11位數(shù)字),完美散列函數(shù)得要求散列表具有 數(shù)〉據(jù)結(jié)與上算作數(shù)據(jù)的“”戒者“”,返種特性被廣泛應(yīng)用在數(shù)據(jù)的一致性校驗(yàn)與上() 作為一致性校驗(yàn)的數(shù)據(jù)“”函數(shù)需要具備如下的特?cái)?shù)〉最著名的近似完美散列函數(shù)是MD5和SHA系列函數(shù):MD5(Message據(jù)Digest)將任何長(zhǎng)度的數(shù)據(jù)變換為固定長(zhǎng)為128位(16字節(jié))的結(jié)“”構(gòu) 算 位二進(jìn)制相當(dāng)于的次方,地球上水分子數(shù)量估計(jì)是47位二進(jìn)制相當(dāng)于的方,已知宇宙所有基本粒子大約是72~87 結(jié) 結(jié)( 結(jié) 與 法( 散列函數(shù)設(shè)計(jì):折疊法Folding 結(jié) 結(jié)構(gòu) 例如,對(duì),可以兩位兩位分為4段(62、76、72法 法 55)隔數(shù)反轉(zhuǎn)為(62、67、72、55),再累加(62677255256)11求余(256113) 結(jié) 結(jié)構(gòu) 構(gòu)法 法(34759)6 我們也可以對(duì)非數(shù)字的數(shù)據(jù)項(xiàng)(如字符串)迕行散列,把字符串結(jié) 結(jié) 如cat,ord('c')==99,ord('a')==96, () 結(jié) 結(jié)構(gòu) 〉我們迓可以設(shè)計(jì) 構(gòu)法 法 ) 結(jié) 結(jié)構(gòu) 構(gòu)法 法 〉解決散列 返種尋找空槽的技術(shù)稱為“開放定址openaddressing”,向后逐的方法則是開放定址技術(shù)中的“性探測(cè)linearprobing” 結(jié) h(44)==0,發(fā)現(xiàn)0#槽已經(jīng)被77占據(jù)了,向后找到第一個(gè)空槽1#,保結(jié) h(55)==0,同樣0#槽已經(jīng)被占據(jù),向后找到第一個(gè)空槽2#,保與 h(20)==9,發(fā)現(xiàn)9#槽已經(jīng)被31占據(jù)了,向后,再?gòu)念^開始找到3#槽保法( 找項(xiàng),或者碰到空槽(搜索失敗)大構(gòu) 的數(shù)據(jù)項(xiàng)較多的話,返些數(shù)據(jù)項(xiàng)就會(huì)在槽附近 起來(lái), 構(gòu)與算法( 法就是將線性探測(cè)擴(kuò)展,從逐個(gè)探測(cè)改為跳躍式 結(jié) 結(jié) 對(duì)于線性探測(cè)來(lái)說(shuō),rehash(pos)=(pos+1)%與 “+3”的跳躍式探測(cè)則是:rehash(pos)=(pos+3)%法 跳躍式探測(cè)的再散列通式是:rehash(pospos+skip)% 一個(gè)技巧是,把散列表的大小設(shè)為素?cái)?shù),如例子的 就會(huì)是原散列值以平方數(shù)增加:h,h+1,h+4,h+9,h+16... )結(jié))構(gòu)算 算 ( )構(gòu)數(shù)Python最有用的內(nèi)置數(shù)據(jù)類型乊一是“字典Dictionary”,字典是據(jù)一種可以保存key-data鍵值對(duì)的數(shù)據(jù)類型,關(guān)鍵碼可用亍查詢關(guān)聯(lián)結(jié)的數(shù)據(jù)值,返種鍵值關(guān)聯(lián)的方法通常稱為“映射map”構(gòu)與法算法 put(key,val):將key-val關(guān)聯(lián)對(duì)加入映射中,如果key已經(jīng)存在,則將 in:通過(guò)keyinmap的語(yǔ)句形式,返回key 實(shí)現(xiàn)ADT 結(jié) 結(jié) 算 算法 下面,我們用一個(gè)HashTable類來(lái)實(shí)現(xiàn)ADTMap,該類包含了兩)其中一個(gè)slot列表用于保存key,另一個(gè)平行的data列表用于保存數(shù)據(jù)項(xiàng) 結(jié) 結(jié) 實(shí)現(xiàn)ADTMap:get 結(jié) 結(jié)(找 實(shí)現(xiàn)ADTMap () 結(jié) 結(jié)構(gòu) 法 法 ) 排序:冒泡排序Bubble構(gòu) 〉冒泡排序的算法思路在亍對(duì)無(wú)序表迕行多趟比較交換,每趟包括了多 構(gòu)與 法 ) ()學(xué)學(xué)數(shù)結(jié) 結(jié) ) 構(gòu) 隨著趟數(shù)的增加,比對(duì)次數(shù)逐步從n-1減少到1,幵包括可能發(fā)生的數(shù)據(jù)項(xiàng) 構(gòu)與 ( ( 結(jié) 結(jié) () 選擇排序Selection 結(jié) 結(jié)構(gòu) 但選擇排序?qū)粨Q迕行了削減,相比起冒泡排序迕行多次交換,構(gòu)法 法 )

溫馨提示

  • 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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 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)論