• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            posts - 297,  comments - 15,  trackbacks - 0
                基于比較的的查找方法,查找效率依賴比較次數(shù),其實(shí)理想的查找是希望不經(jīng)比較,一次存取便能得到所查記錄。這樣就必須在記錄的存儲(chǔ)位置和它的關(guān)鍵字之間建立一個(gè)確定 的對(duì)應(yīng)關(guān)系f,查找k時(shí),只要根據(jù)這個(gè)對(duì)應(yīng)關(guān)系f找到給定值k的像f(k)。這種對(duì)應(yīng)關(guān)系f叫哈希(hash)函數(shù)。按這種思想建立的表叫哈希表(也叫散 列表)。

                哈希表存取方便但存儲(chǔ)時(shí)容易沖突(collision):即不同的關(guān)鍵字可以對(duì)應(yīng)同一哈希地址。如何確定哈希函數(shù)和解決沖突是哈希表查找的關(guān)鍵。

                1.哈希函數(shù)的構(gòu)造方法

                構(gòu)造哈希函數(shù)的方法有很多,這里介紹幾種常用的。

            直接定址法:H(k)=k 或H(k)=a*k+b(線形函數(shù))

            如:人口數(shù)字統(tǒng)計(jì)表

            地址 1 2 3 ... 100
            年齡 1 2 3 ... 100
            人數(shù) 67 3533 244 ... 4

            數(shù)字分析法:取關(guān)鍵字的若干數(shù)位組成哈希地址

            如:關(guān)鍵字如下:若哈希表長(zhǎng)為100則可取中間兩位10進(jìn)制數(shù)作為哈希地址。  

            81346532 81372242 81387422 81301367 81322817 81338967 81354157 81368537

            平方取中法:關(guān)鍵字平方后取中間幾位數(shù)組成哈希地址

            折疊法:將關(guān)鍵數(shù)字分割成位數(shù)相同的幾部分(最后一部分的位數(shù)可以不同)然后取幾部分的疊加和(舍去進(jìn)位)作為哈希地址。

            除留余數(shù)法:取關(guān)鍵字被某個(gè)不大于表長(zhǎng)m的數(shù)p除后所得的余數(shù)為哈希地址。

                       H(k)=k mod p  p<=m

            隨機(jī)數(shù)法:H(k)=rondom(k)。

             

                2.處理沖突的方法

                假設(shè)地址集為0..n-1,由關(guān)鍵字得到的哈希地址為j(0<=j<=n-1)的位置已存有記錄,處理沖突就是為該關(guān)鍵字的記錄找到另一個(gè)" 空"的哈希地址。在處理中可能得到一個(gè)地址序列Hi i=1,2,...k 0<=Hi<=n-1),即在處理沖突時(shí)若得到的另一個(gè)哈希地址H1仍發(fā)生沖突,再求下一地址H2,若仍沖突,再求H3...。怎樣得到Hi 呢?

            開(kāi)放定址法:Hi=(H(k)+di) mod m  (H(k)為哈希函數(shù);m為哈希表長(zhǎng);di為增量序列)

            當(dāng)di=1,2,3,... m-1 時(shí)叫線性探測(cè)再散列。

            當(dāng)di=12,-12,22,-22,32,-32,...,k2,-k2時(shí)叫二次探測(cè)再散列。

            當(dāng)di=random(m)時(shí)叫偽隨機(jī)探測(cè)序列。

            例:長(zhǎng)度為11的哈希表關(guān)鍵字分別為17,60,29,哈希函數(shù)為H(k)=k mod 11,第四個(gè)記錄的關(guān)鍵字為38,分別按上述方法添入哈希表的地址為8,4,3(隨機(jī)數(shù)=9)。---為什么不是6,5,7呢

            再哈希法:Hi=RHi(key) i=1,2,...,k,其中RHi均為不同的哈希函數(shù)。

            鏈地址法:這種方法很象基數(shù)排序,相同的地址的關(guān)鍵字值均鏈入對(duì)應(yīng)的鏈表中。

            建立公益區(qū)法:另設(shè)一個(gè)溢出表,不管得到的哈希地址如何,一旦發(fā)生沖突,都填入溢出表。

             

                3.哈希表的查找

            例:如下一組關(guān)鍵字按哈希函數(shù)H(k)=k mod 13和線性探測(cè)處理沖突所得的哈希表a[0..15]:

             0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
              14 01 68 27 55 19 20 84 79 23 11 10      

            當(dāng)給定值k=84,則首先和a[6]比,再依次和a[7],a[8]比,結(jié)果a[8]=84查找成功。

            當(dāng)給定值k=38,則首先和a[12]比,再和a[13]比,由于a[13]沒(méi)有,查找不成功,表中不存在關(guān)鍵字等于38的記錄。


            from:
            http://www.coood.com/postfile/2006-12-31/20061231174649.shtml
            others will be appended later
            posted on 2010-03-07 23:24 chatler 閱讀(306) 評(píng)論(0)  編輯 收藏 引用 所屬分類: Algorithm
            <2010年1月>
            272829303112
            3456789
            10111213141516
            17181920212223
            24252627282930
            31123456

            常用鏈接

            留言簿(10)

            隨筆分類(307)

            隨筆檔案(297)

            algorithm

            Books_Free_Online

            C++

            database

            Linux

            Linux shell

            linux socket

            misce

            • cloudward
            • 感覺(jué)這個(gè)博客還是不錯(cuò),雖然做的東西和我不大相關(guān),覺(jué)得看看還是有好處的

            network

            OSS

            • Google Android
            • Android is a software stack for mobile devices that includes an operating system, middleware and key applications. This early look at the Android SDK provides the tools and APIs necessary to begin developing applications on the Android platform using the Java programming language.
            • os161 file list

            overall

            搜索

            •  

            最新評(píng)論

            閱讀排行榜

            評(píng)論排行榜

            久久精品人妻中文系列| 香蕉99久久国产综合精品宅男自| 精品久久久无码人妻中文字幕| 狠狠色丁香婷婷久久综合| 久久精品国产2020| 国产精品久久国产精品99盘| 国产精品无码久久久久| 偷窥少妇久久久久久久久| www.久久热.com| 亚洲婷婷国产精品电影人久久| 久久人人爽人人爽人人片AV不| 国产精品成人久久久久久久| 亚洲色大成网站WWW久久九九| 久久91亚洲人成电影网站| 久久大香萑太香蕉av| 国产成人久久777777| 99久久精品国产一区二区| 2020最新久久久视精品爱| 亚洲国产精品18久久久久久| 久久国产福利免费| 久久精品国产久精国产| 无遮挡粉嫩小泬久久久久久久| 合区精品久久久中文字幕一区 | 久久久久久久亚洲精品| 欧美午夜精品久久久久免费视| 亚洲国产成人久久综合碰| 国产精品九九久久免费视频 | 欧美精品丝袜久久久中文字幕| 高清免费久久午夜精品| 久久综合九色综合网站 | 日韩人妻无码一区二区三区久久 | 亚洲va久久久噜噜噜久久| 亚洲国产成人久久一区WWW| 久久中文精品无码中文字幕| 一本久久久久久久| 久久99精品久久久久久噜噜| 精品久久久久久久| 大蕉久久伊人中文字幕| 精品国产综合区久久久久久 | 久久97久久97精品免视看秋霞| 狠狠久久亚洲欧美专区|