• <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
                基于比較的的查找方法,查找效率依賴比較次數,其實理想的查找是希望不經比較,一次存取便能得到所查記錄。這樣就必須在記錄的存儲位置和它的關鍵字之間建立一個確定 的對應關系f,查找k時,只要根據這個對應關系f找到給定值k的像f(k)。這種對應關系f叫哈希(hash)函數。按這種思想建立的表叫哈希表(也叫散 列表)。

                哈希表存取方便但存儲時容易沖突(collision):即不同的關鍵字可以對應同一哈希地址。如何確定哈希函數和解決沖突是哈希表查找的關鍵。

                1.哈希函數的構造方法

                構造哈希函數的方法有很多,這里介紹幾種常用的。

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

            如:人口數字統計表

            地址 1 2 3 ... 100
            年齡 1 2 3 ... 100
            人數 67 3533 244 ... 4

            數字分析法:取關鍵字的若干數位組成哈希地址

            如:關鍵字如下:若哈希表長為100則可取中間兩位10進制數作為哈希地址。  

            81346532 81372242 81387422 81301367 81322817 81338967 81354157 81368537

            平方取中法:關鍵字平方后取中間幾位數組成哈希地址

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

            除留余數法:取關鍵字被某個不大于表長m的數p除后所得的余數為哈希地址。

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

            隨機數法:H(k)=rondom(k)。

             

                2.處理沖突的方法

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

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

            當di=1,2,3,... m-1 時叫線性探測再散列。

            當di=12,-12,22,-22,32,-32,...,k2,-k2時叫二次探測再散列。

            當di=random(m)時叫偽隨機探測序列。

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

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

            鏈地址法:這種方法很象基數排序,相同的地址的關鍵字值均鏈入對應的鏈表中。

            建立公益區法:另設一個溢出表,不管得到的哈希地址如何,一旦發生沖突,都填入溢出表。

             

                3.哈希表的查找

            例:如下一組關鍵字按哈希函數H(k)=k mod 13和線性探測處理沖突所得的哈希表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      

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

            當給定值k=38,則首先和a[12]比,再和a[13]比,由于a[13]沒有,查找不成功,表中不存在關鍵字等于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 閱讀(295) 評論(0)  編輯 收藏 引用 所屬分類: Algorithm
            <2025年5月>
            27282930123
            45678910
            11121314151617
            18192021222324
            25262728293031
            1234567

            常用鏈接

            留言簿(10)

            隨筆分類(307)

            隨筆檔案(297)

            algorithm

            Books_Free_Online

            C++

            database

            Linux

            Linux shell

            linux socket

            misce

            • cloudward
            • 感覺這個博客還是不錯,雖然做的東西和我不大相關,覺得看看還是有好處的

            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

            搜索

            •  

            最新評論

            閱讀排行榜

            評論排行榜

            91精品国产91热久久久久福利 | 国内精品九九久久精品| 久久w5ww成w人免费| 97精品伊人久久大香线蕉| 精品无码人妻久久久久久| 久久精品一区二区三区不卡| 无码国内精品久久人妻蜜桃| 久久久久久久波多野结衣高潮 | 伊人久久精品线影院| 91精品国产综合久久久久久| 亚洲AV无码久久精品色欲| 婷婷五月深深久久精品| 久久久噜噜噜久久中文福利| 国产高潮国产高潮久久久| 久久香蕉超碰97国产精品 | 无码国产69精品久久久久网站| 亚洲欧美伊人久久综合一区二区| 日韩精品久久无码中文字幕| 国内精品伊人久久久久av一坑| 国产精品美女久久久久| 久久福利青草精品资源站| 国産精品久久久久久久| 一本久久a久久精品综合香蕉| 亚洲午夜无码久久久久| 久久成人精品视频| 久久久这里只有精品加勒比| 国内精品久久久久影院一蜜桃| 97精品国产97久久久久久免费 | 久久婷婷五月综合成人D啪| 亚洲乱码中文字幕久久孕妇黑人| 99热成人精品热久久669| 国产激情久久久久影院老熟女| 日产精品久久久久久久| 精品久久久久久综合日本| 久久亚洲电影| A狠狠久久蜜臀婷色中文网| 色婷婷久久综合中文久久一本| 久久久精品人妻一区二区三区蜜桃 | 亚洲精品乱码久久久久66| 久久亚洲精品中文字幕三区| 欧美亚洲国产精品久久|