欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

如何解決hash沖突

 更新時(shí)間:2016年06月16日 14:44:18   作者:Robin  
上篇文章 為什么哈希存取比較快?使用它需要付出什么代價(jià) 只是簡單介紹了使用hash所帶來的利與弊。并未涉及hash的技術(shù)細(xì)節(jié),本文則著重學(xué)習(xí)一下如何解決哈希編址的沖突問題。

1)沖突是如何產(chǎn)生的?

  上文中談到,哈希函數(shù)是指如何對關(guān)鍵字進(jìn)行編址的規(guī)則,這里的關(guān)鍵字的范圍很廣,可視為無限集,如何保證無限集的原數(shù)據(jù)在編址的時(shí)候不會出現(xiàn)重復(fù)呢?規(guī)則本身無法實(shí)現(xiàn)這個(gè)目的。舉一個(gè)例子,仍然用班級同學(xué)做比喻,現(xiàn)有如下同學(xué)數(shù)據(jù)
張三,李四,王五,趙剛,吳露.....
假如我們編址規(guī)則為取姓氏中姓的開頭字母在字母表的相對位置作為地址,則會產(chǎn)生如下的哈希表

位置 字母 姓名
0 a
1 b
2 c

...

10    L     李四

...

22 W 王五,吳露
..
25  張三,趙剛

我們注意到,灰色背景標(biāo)示的兩行里面,關(guān)鍵字王五,吳露被編到了同一個(gè)位置,關(guān)鍵字張三,趙剛也被編到了同一個(gè)位置。老師再拿號來找張三,座位上有兩個(gè)人,"你們倆誰是張三?"

2)如何解決沖突問題

既然不能避免沖突,那么如何解決沖突呢,顯然需要附加的步驟。通過這些步驟,以制定更多的規(guī)則來管理關(guān)鍵字集合,通常的辦法有:

a)開放地址法

開放地執(zhí)法有一個(gè)公式:Hi=(H(key)+di) MOD m i=1,2,...,k(k<=m-1)
其中,m為哈希表的表長。di 是產(chǎn)生沖突的時(shí)候的增量序列。如果di值可能為1,2,3,...m-1,稱線性探測再散列。
如果di取1,則每次沖突之后,向后移動1個(gè)位置.如果di取值可能為1,-1,2,-2,4,-4,9,-9,16,-16,...k*k,-k*k(k<=m/2)
稱二次探測再散列。如果di取值可能為偽隨機(jī)數(shù)列。稱偽隨機(jī)探測再散列。仍然以學(xué)生排號作為例子,
現(xiàn)有兩名同學(xué),李四,吳用。李四與吳用事先已排好序,現(xiàn)新來一名同學(xué),名字叫王五,對它進(jìn)行編制

10.. .... 22 .. .. 25
李四.. .... 吳用 .. .. 25

  趙剛未來之前
10.. .. 22 23 25
李四.. 吳用 王五
 
  (a)線性探測再散列對趙剛進(jìn)行編址,且di=1
10... 20 22 .. 25
李四.. 王五 吳用

  (b)二次探測再散列,且di=-2
1... 10... 22 .. 25
王五.. 李四.. 吳用

  (c)偽隨機(jī)探測再散列,偽隨機(jī)序列為:5,3,2

b)再哈希法

當(dāng)發(fā)生沖突時(shí),使用第二個(gè)、第三個(gè)、哈希函數(shù)計(jì)算地址,直到無沖突時(shí)。缺點(diǎn):計(jì)算時(shí)間增加。
比如上面第一次按照姓首字母進(jìn)行哈希,如果產(chǎn)生沖突可以按照姓字母首字母第二位進(jìn)行哈希,再沖突,第三位,直到不沖突為止

c)鏈地址法

將所有關(guān)鍵字為同義詞的記錄存儲在同一線性鏈表中。如下:

http://img.jbzj.com/file_images/article/201606/2016616144625001.jpg

因此這種方法,可以近似的認(rèn)為是筒子里面套筒子

d)建立一個(gè)公共溢出區(qū)

假設(shè)哈希函數(shù)的值域?yàn)閇0,m-1],則設(shè)向量HashTable[0..m-1]為基本表,另外設(shè)立存儲空間向量OverTable[0..v]用以存儲發(fā)生沖突的記錄。
經(jīng)過以上方法,基本可以解決掉hash算法沖突的問題。

注:之所以會簡單得介紹了hash,是為了更好的學(xué)習(xí)lzw算法,學(xué)習(xí)lzw算法是為了更好的研究gif文件結(jié)構(gòu),最后,我將詳細(xì)的闡述一下gif文件是如何構(gòu)成的,如何高效操作此種類型文件。

以上就是本文的全部內(nèi)容,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • C#.Net ArrayList的使用方法

    C#.Net ArrayList的使用方法

    這篇文章主要介紹了C#.Net ArrayList的使用方法,使用動態(tài)數(shù)組的優(yōu)點(diǎn)是可以根據(jù)用戶需要,有效利用存儲空間,需要的朋友可以參考下
    2015-10-10
  • C#自定義控件VS用戶控件

    C#自定義控件VS用戶控件

    這篇文章主要為大家詳細(xì)介紹了C#中自定義控件VS用戶控件的區(qū)別,介紹了開發(fā)自己的控件的幾種方法、自定義控件與用戶控件區(qū)別,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-12-12
  • Unity?UGUI的StandaloneInputModule標(biāo)準(zhǔn)輸入模塊組件使用示例

    Unity?UGUI的StandaloneInputModule標(biāo)準(zhǔn)輸入模塊組件使用示例

    這篇文章主要為大家介紹了Unity?UGUI的StandaloneInputModule標(biāo)準(zhǔn)輸入模塊組件使用示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-08-08
  • C# partial關(guān)鍵字說明

    C# partial關(guān)鍵字說明

    C# 中可以將類、結(jié)構(gòu)或接口的定義拆分到兩個(gè)或多個(gè)源文件中,在類聲明前添加partial關(guān)鍵字即可,通過本文給大家介紹C# partial關(guān)鍵字說明,需要的朋友參考下
    2016-02-02
  • C# 類庫打包dll文件的操作流程

    C# 類庫打包dll文件的操作流程

    在C#中,有多種方式可以對代碼進(jìn)行加密,以保護(hù)源代碼不被輕易查看或修改,這篇文章主要介紹將C# cs類文件加密為dll文件的方式進(jìn)行保護(hù),感興趣的朋友一起看看吧
    2025-03-03
  • 如何用WindowsForm給窗口添加一些簡單的動畫效果

    如何用WindowsForm給窗口添加一些簡單的動畫效果

    這篇文章主要介紹了如何用WindowsForm給窗口添加一些簡單的動畫效果,文中講解非常細(xì)致,代碼幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下
    2020-07-07
  • 一文帶你了解WPF中的附加事件

    一文帶你了解WPF中的附加事件

    附加事件可用于在非元素類中定義新的 路由事件 ,并在樹中的任何元素上引發(fā)該事件。本文通過簡單的示例為大家講解一下WPF附加事件的用法,需要的可以參考一下
    2022-12-12
  • C#實(shí)現(xiàn)簡易的計(jì)算器

    C#實(shí)現(xiàn)簡易的計(jì)算器

    這篇文章主要為大家詳細(xì)介紹了C#實(shí)現(xiàn)簡易的計(jì)算器,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-04-04
  • C#實(shí)現(xiàn)兩個(gè)時(shí)間相減的方法

    C#實(shí)現(xiàn)兩個(gè)時(shí)間相減的方法

    這篇文章主要介紹了C#實(shí)現(xiàn)兩個(gè)時(shí)間相減的方法,實(shí)例分析了C#針對時(shí)間操作的技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-01-01
  • C#實(shí)現(xiàn)設(shè)置電腦顯示器參數(shù)

    C#實(shí)現(xiàn)設(shè)置電腦顯示器參數(shù)

    這篇文章主要為大家詳細(xì)介紹了如何利用C#實(shí)現(xiàn)設(shè)置電腦顯示器參數(shù),文中的示例代碼講解詳細(xì),對我們學(xué)習(xí)C#有一定的幫助,感興趣的小伙伴可以跟隨小編一起了解一下
    2022-12-12

最新評論